⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 这是TCP/IP协议组播的实现代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 222   2                      {
 223   3                              temp = ((*rd_fifo_ef) & 0x01);
 224   3                              if(temp == 1)//检测视频FIFO是否为空
 225   3                              {
 226   4                                      dp_read_video();
 227   4                                      if(trans_num < 50000)
 228   4                                      {
 229   5                                              if(syn_sendto(video_sendhandle, 1472, send_addr_video) == 0)//UDP发送视频数据
 230   5                                              {
 231   6                                                      trans_num++;
 232   6                                              }
 233   5                                              else
 234   5                                              {
 235   6                                                      puts("send error!\r\n");        
 236   6                                              }
 237   5                                      }
 238   4                              }
 239   3      
 240   3                              temp = ((*rd_fifo_hf) & 0x01);
C51 COMPILER V7.07   MAIN                                                                  04/07/2006 09:01:49 PAGE 5   

 241   3                              if(temp == 0)//检测音频FIFO是否半满
 242   3                              {
 243   4                                      dp_read_audio();//读取音频数据
 244   4                                      syn_sendto(g711_sendhandle, 1024, send_addr_audio);//UDP发送音频数据
 245   4                              }
 246   3      
 247   3                              temp = ((*dual_rev) & 0x01);
 248   3                              if(temp == 0x01)//判断是否有命令字需要发送
 249   3                              {                                       
 250   4                                      command_length = *(dual_rev + 1);
 251   4                                      for(i = 0; i < command_length;i++)
 252   4                                      {
 253   5                                              *(send_addr_command + i + 5) = (*(dual_rev + 2 + i) & 0xff);
 254   5                                      }
 255   4                                      *dual_rev = 0;
 256   4                                      command_length = command_length + 5;
 257   4                                      *(send_addr_command) = command_length;//将从双口RAM中取出的命令字打包
 258   4                                      syn_sendto(command_sendhandle,command_length,send_addr_command);//UDP发送命令字
 259   4                              }
 260   3                              task_wait(0, 0, 16);//线程挂起,进入等待
 261   3                      }
 262   2          }
 263   1          else 
 264   1          {
 265   2                      command_result = task_fork(NORM_PRIORITY, ROM_SAVESIZE);//创建两个任务线程
 266   2                      if(command_result == 0xffff)
 267   2                      {
 268   3                              puts("Attempt to fork failed\r\n");
 269   3                      return;
 270   3                      }
 271   2                      else if(command_result == 0)//接收视频数据线程
 272   2                      {
 273   3                              while (1)
 274   3                              {
 275   4                              rev_length_video = syn_recvfrom(video_revhandle,1472,rev_addr_video);//UDP接收视频数据
 276   4                                      if(rev_length_video == 1472)
 277   4                                      {
 278   5                                              dp_write_video();
 279   5                                      }
 280   4                              }
 281   3                      }
 282   2                      else
 283   2                      {
 284   3                              audio_result = task_fork(NORM_PRIORITY, ROM_SAVESIZE);//创建两个任务线程
 285   3                              if(audio_result == 0xffff)
 286   3                              {
 287   4                                      puts("Attempt to fork failed\r\n");
 288   4                              return;
 289   4                              }
 290   3                              else if(audio_result == 0)//接收音频线程
 291   3                              {
 292   4                                      while(1)
 293   4                                      {
 294   5                                              rev_length_audio = syn_recvfrom(g711_revhandle,1024,rev_addr_audio);//UDP音频接收
 295   5                                              //rev_length_audio = recvfrom(g711_revhandle,rev_addr_audio,1024,0,&temp_addr,sizeof(struct sockaddr)
             -);//UDP音频接收
 296   5                                              if(rev_length_audio == 1024)
 297   5                                              {
 298   6                                                      dp_write_audio();
 299   6                                                      //printf("IP : %bu \r\n", temp_addr.sin_addr[15]);
 300   6                                                      //temp_addr.sin_addr[15] = 0;
 301   6                                              }
C51 COMPILER V7.07   MAIN                                                                  04/07/2006 09:01:49 PAGE 6   

 302   5                                      }
 303   4                              }
 304   3                              else//接收命令字线程
 305   3                              {
 306   4                                      task_leavecritsection();
 307   4                                      while (1)
 308   4                                      {
 309   5                                              rev_length_command = syn_recvfrom(command_revhandle,210, rev_addr_command);//UDP接收
 310   5                                              if((rev_length_command < 210) && (rev_length_command > 0))
 311   5                                              {
 312   6                                                      moveto_buf();//将网络接收到的命令字放入接收缓冲区
 313   6                                                      rev_length_command = 0;
 314   6                                                      while(head_r != tail_r)
 315   6                                                      {
 316   7                                                              send_command();
 317   7                                                      }
 318   6                                              }
 319   5                                      }
 320   4                              }
 321   3                      }
 322   2              }
 323   1          while(1)
 324   1              {
 325   2              }
 326   1      }
 327          
 328          void start_leave()
 329          {
 330   1              for (i=0;i<18;i++)
 331   1              {
 332   2              rev_multi_video.sin_addr[i] = 0;
 333   2              }
 334   1              rev_multi_video.sin_addr[12] = rev_para_video[0][0];
 335   1          rev_multi_video.sin_addr[13] = rev_para_video[0][1];
 336   1          rev_multi_video.sin_addr[14] = rev_para_video[0][2];
 337   1              rev_multi_video.sin_addr[15] = rev_para_video[0][3];
 338   1              rev_multi_video.sin_port = REV_VIDEO_PORT;
 339   1              if(leave(video_revhandle,&rev_multi_video,sizeof(struct sockaddr)) == 0)
 340   1              {
 341   2                      puts("leave from rev_multi_video success! - 0");
 342   2              }
 343   1              else
 344   1              {
 345   2                      puts("leave from rev_multi_video failure! - 0");
 346   2              }
 347   1      
 348   1              for (i=0;i<18;i++)
 349   1              {
 350   2              rev_multi_video.sin_addr[i] = 0;
 351   2              }
 352   1              rev_multi_video.sin_addr[12] = rev_para_video[1][0];
 353   1          rev_multi_video.sin_addr[13] = rev_para_video[1][1];
 354   1          rev_multi_video.sin_addr[14] = rev_para_video[1][2];
 355   1              rev_multi_video.sin_addr[15] = rev_para_video[1][3];
 356   1              rev_multi_video.sin_port = REV_VIDEO_PORT;
 357   1              if(leave(video_revhandle,&rev_multi_video,sizeof(struct sockaddr)) == 0)
 358   1              {
 359   2                      puts("leave from rev_multi_video success! - 1");
 360   2              }
 361   1              else
 362   1              {
 363   2                      puts("leave from rev_multi_video failure! - 1");
C51 COMPILER V7.07   MAIN                                                                  04/07/2006 09:01:49 PAGE 7   

 364   2              }
 365   1      
 366   1              for (i=0;i<18;i++)
 367   1              {
 368   2              rev_multi_audio.sin_addr[i] = 0;
 369   2              }
 370   1              rev_multi_audio.sin_addr[12] = rev_para_audio[0][0];
 371   1          rev_multi_audio.sin_addr[13] = rev_para_audio[0][1];
 372   1          rev_multi_audio.sin_addr[14] = rev_para_audio[0][2];
 373   1              rev_multi_audio.sin_addr[15] = rev_para_audio[0][3];
 374   1              rev_multi_audio.sin_port = REV_G711_PORT;
 375   1              if(leave(g711_revhandle,&rev_multi_audio,sizeof(struct sockaddr)) == 0)
 376   1              {
 377   2                      puts("leave from rev_multi_audio success! - 0");
 378   2              }
 379   1              else
 380   1              {
 381   2                      puts("leave from rev_multi_audio failure! - 0");
 382   2              }
 383   1      
 384   1              for (i=0;i<18;i++)
 385   1              {
 386   2              rev_multi_audio.sin_addr[i] = 0;
 387   2              }
 388   1              rev_multi_audio.sin_addr[12] = rev_para_audio[1][0];
 389   1          rev_multi_audio.sin_addr[13] = rev_para_audio[1][1];
 390   1          rev_multi_audio.sin_addr[14] = rev_para_audio[1][2];
 391   1              rev_multi_audio.sin_addr[15] = rev_para_audio[1][3];
 392   1              rev_multi_audio.sin_port = REV_G711_PORT;
 393   1              if(leave(g711_revhandle,&rev_multi_audio,sizeof(struct sockaddr)) == 0)
 394   1              {
 395   2                      puts("leave from rev_multi_audio success! - 1");
 396   2              }
 397   1              else
 398   1              {
 399   2                      puts("leave from rev_multi_audio failure! - 1");
 400   2              }
 401   1      
 402   1      
 403   1              for (i=0;i<18;i++)
 404   1              {
 405   2              rev_multi_audio.sin_addr[i] = 0;
 406   2              }
 407   1              rev_multi_audio.sin_addr[12] = rev_para_audio[2][0];
 408   1          rev_multi_audio.sin_addr[13] = rev_para_audio[2][1];
 409   1          rev_multi_audio.sin_addr[14] = rev_para_audio[2][2];
 410   1              rev_multi_audio.sin_addr[15] = rev_para_audio[2][3];
 411   1              rev_multi_audio.sin_port = REV_G711_PORT;
 412   1              if(leave(g711_revhandle,&rev_multi_audio,sizeof(struct sockaddr)) == 0)
 413   1              {
 414   2                      puts("leave from rev_multi_audio success! - 2");
 415   2              }
 416   1              else
 417   1              {
 418   2                      puts("leave from rev_multi_audio failure! - 2");
 419   2              }
 420   1      }
 421          
 422          void wait_millis(unsigned int waitTime)//延时等待函数
 423          {
 424   1          unsigned int result;
 425   1          struct TIME time1;
C51 COMPILER V7.07   MAIN                                                                  04/07/2006 09:01:49 PAGE 8   

 426   1          struct TIME time2;
 427   1      
 428   1          task_entercritsection();
 429   1      
 430   1          task_gettimemillis(&time1);
 431   1          result = 0;
 432   1          while (result < waitTime)
 433   1          {
 434   2              task_gettimemillis(&time2);
 435   2              result = time2.millis - time1.millis;
 436   2          }
 437   1      
 438   1          task_leavecritsection();
 439   1          printf("Waited for %ld msec\r\n", (time2.millis - time1.millis));
 440   1      }
 441          
 442          void do_static()//配置本端网络属性
 443          {
 444   1          unsigned int result;
 445   1          unsigned char xdata config[56];
 446   1          unsigned int i;
 447   1          for (i=0;i<56;i++)
 448   1              config[i] = 0;
 449   1      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -