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

📄 main.lst

📁 这是TCP/IP协议组播的实现代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 506   1      
 507   1              for (i=0;i<18;i++)
 508   1              {
 509   2              rev_multi_audio.sin_addr[i] = 0;
 510   2              }
 511   1              rev_multi_audio.sin_addr[12] = rev_para_audio[1][0];
 512   1          rev_multi_audio.sin_addr[13] = rev_para_audio[1][1];
 513   1          rev_multi_audio.sin_addr[14] = rev_para_audio[1][2];
 514   1              rev_multi_audio.sin_addr[15] = rev_para_audio[1][3];
 515   1              rev_multi_audio.sin_port = REV_G711_PORT;
 516   1              if(leave(g711_revhandle,&rev_multi_audio,sizeof(struct sockaddr)) == 0)
 517   1              {
 518   2                      puts("leave from rev_multi_audio success! - 1");
 519   2              }
 520   1              else
 521   1              {
 522   2                      puts("leave from rev_multi_audio failure! - 1");
 523   2              }
 524   1      
 525   1      
 526   1              for (i=0;i<18;i++)
 527   1              {
 528   2              rev_multi_audio.sin_addr[i] = 0;
 529   2              }
 530   1              rev_multi_audio.sin_addr[12] = rev_para_audio[2][0];
 531   1          rev_multi_audio.sin_addr[13] = rev_para_audio[2][1];
 532   1          rev_multi_audio.sin_addr[14] = rev_para_audio[2][2];
 533   1              rev_multi_audio.sin_addr[15] = rev_para_audio[2][3];
 534   1              rev_multi_audio.sin_port = REV_G711_PORT;
 535   1              if(leave(g711_revhandle,&rev_multi_audio,sizeof(struct sockaddr)) == 0)
 536   1              {
 537   2                      puts("leave from rev_multi_audio success! - 2");
 538   2              }
 539   1              else
C51 COMPILER V7.07   MAIN                                                                  04/11/2006 11:07:35 PAGE 10  

 540   1              {
 541   2                      puts("leave from rev_multi_audio failure! - 2");
 542   2              }
 543   1      }
 544          
 545          void wait_millis(unsigned int waitTime)//延时等待函数
 546          {
 547   1          unsigned int result;
 548   1          struct TIME time1;
 549   1          struct TIME time2;
 550   1      
 551   1          task_entercritsection();
 552   1      
 553   1          task_gettimemillis(&time1);
 554   1          result = 0;
 555   1          while (result < waitTime)
 556   1          {
 557   2              task_gettimemillis(&time2);
 558   2              result = time2.millis - time1.millis;
 559   2          }
 560   1      
 561   1          task_leavecritsection();
 562   1          printf("Waited for %ld msec\r\n", (time2.millis - time1.millis));
 563   1      }
 564          
 565          void do_static()//配置本端网络属性
 566          {
 567   1          unsigned int result;
 568   1          unsigned char xdata config[56];
 569   1          unsigned int i;
 570   1          for (i=0;i<56;i++)
 571   1              config[i] = 0;
 572   1      
 573   1          //set the ip address
 574   1          config[12] = static_ip[0];
 575   1          config[13] = static_ip[1];
 576   1          config[14] = static_ip[2];
 577   1          config[15] = static_ip[3];
 578   1      
 579   1          //set the subnet mask
 580   1          config[16] = yan_ma[0];
 581   1          config[17] = yan_ma[1];
 582   1          config[18] = yan_ma[2];
 583   1          config[19] = yan_ma[3];
 584   1      
 585   1          //set the iP4 prefix
 586   1          config[20] = STATIC_IPV4_PREFIX;
 587   1      
 588   1          //set the gateway
 589   1          config[33] = gate_ip[0];
 590   1          config[34] = gate_ip[1];
 591   1          config[35] = gate_ip[2];
 592   1          config[36] = gate_ip[3];
 593   1      
 594   1          result = setnetworkparams(config);
 595   1          printf("Set network parameters result: %u\r\n", result);
 596   1              
 597   1      }
 598          
 599          void network_config()//读取本端网络属性
 600          {
 601   1          unsigned char result;
C51 COMPILER V7.07   MAIN                                                                  04/11/2006 11:07:35 PAGE 11  

 602   1          unsigned char xdata config[56];
 603   1          unsigned int i;
 604   1          for (i=0;i<56;i++)
 605   1              config[i] = 0;
 606   1      
 607   1          result = getnetworkparams(config);
 608   1          printf("Network params result: %d\r\n", result);
 609   1      
 610   1          printf("IP    : %bu %bu %bu %bu\r\n", config[12], config[13], config[14], config[15]);
 611   1          printf("Subnet: %bu %bu %bu %bu\r\n", config[16], config[17], config[18], config[19]);
 612   1          printf("Prefix: %bu\r\n", config[20]);
 613   1          printf("Gate  : %bu %bu %bu %bu\r\n", config[33], config[34], config[35], config[36]);
 614   1      }
 615          
 616          void init()//初始化自己定义的量
 617          {
 618   1              send_addr_video         = 0x050000;//视频发送地址指针
 619   1              rev_addr_video          = 0x051000;//视频接收地址指针
 620   1              send_addr_audio         = 0x052000;//音频发送地址指针
 621   1              rev_addr_audio          = 0x053000;//音频接收地址指针
 622   1              send_addr_command       = 0x054000;//命令字发送地址指针
 623   1              rev_addr_command        = 0x055000;//命令字接收地址指针
 624   1              rd_fifo_hf                      = 0x280000;//读取音频发送FIFO半满地址指针
 625   1              rd_fifo_ef                      = 0x2a0000;//读取视频发送FIFO空地址指针
 626   1              dual_send                       = 0x240200;//双口RAM写地址指针
 627   1              dual_rev                        = 0x240000;//双口RAM读地址指针
 628   1              dual_ip                         = 0x240400;//网络参数配置地址指针
 629   1              command_length  = 0;
 630   1              head_r                  = 0;
 631   1              tail_r                  = 0;
 632   1              for(i = 0;i < 2048;i++)
 633   1              {
 634   2                      rev_buf[i] = 0;
 635   2              }
 636   1              
 637   1              for(i = 0; i < 4;i++)
 638   1              {
 639   2                      for(j = 0; j < 4;j++)
 640   2                      {
 641   3                              send_para[i][j] = 0;
 642   3                      }
 643   2              }
 644   1      
 645   1              for(i = 0; i < 3;i++)
 646   1              {
 647   2                      for(j = 0; j < 4;j++)
 648   2                      {
 649   3                              rev_para_video[i][j] = 0;
 650   3                              rev_para_audio[i][j] = 0;
 651   3                      }
 652   2              }
 653   1      
 654   1              send_video_flag = 0xff;
 655   1              rev_video_flag = 0xff;
 656   1              send_audio_flag = 0xff;
 657   1              rev_audio_flag = 0xff;
 658   1      
 659   1              static_ip[0]    = 192;
 660   1              static_ip[1]    = 168;
 661   1              static_ip[2]    = 128;
 662   1              static_ip[3]    = 47;
 663   1              
C51 COMPILER V7.07   MAIN                                                                  04/11/2006 11:07:35 PAGE 12  

 664   1              gate_ip[0]              = 192;
 665   1              gate_ip[1]              = 168;
 666   1              gate_ip[2]              = 128;
 667   1              gate_ip[3]              = 1;
 668   1      
 669   1              yan_ma[0]               = 255;
 670   1              yan_ma[1]               = 255;
 671   1              yan_ma[2]               = 255;
 672   1              yan_ma[3]               = 0;
 673   1      
 674   1              SEND_VIDEO_PORT         = 10026;
 675   1              REV_VIDEO_PORT          = 10025;
 676   1              SEND_G711_PORT          = 10028;
 677   1              REV_G711_PORT           = 10027;
 678   1          SEND_COMMAND_PORT   = 10030;
 679   1              REV_COMMAND_PORT        = 10029;
 680   1      }
 681          
 682          void moveto_buf()//将收到的命令字转移到接收缓冲区
 683          {
 684   1              unsigned char tem,length;
 685   1              length = rev_length_command - 1;
 686   1      
 687   1              for(tem = 0;tem < length;tem++)
 688   1              {
 689   2                      rev_buf[head_r] = *(rev_addr_command + tem + 1);
 690   2                      head_r = (head_r + 1) & 0x7ff;  
 691   2              }
 692   1      }
 693          
 694          
 695          void send_command()//通过双口RAM发送命令字
 696          {
 697   1              unsigned char flag,length,total;
 698   1      
 699   1              flag = (*dual_send) & 0x01;     
 700   1      
 701   1              if(flag == 0)//文景顺已经读走了命令字,可以写
 702   1              {
 703   2                      total = 0;
 704   2                      length = rev_buf[tail_r];
 705   2      
 706   2                      if((length < 2) || (length > 30))
 707   2                      {
 708   3                              head_r = 0;
 709   3                              tail_r = 0;
 710   3                              for(i = 0;i < 2048;i++)
 711   3                              {
 712   4                                      rev_buf[i] = 0;
 713   4                              }
 714   3                              total = 0;
 715   3                      }
 716   2                      while((head_r != tail_r) && ((total + length) < 120))
 717   2                      {
 718   3                              for(i = 0;i < length;i++)
 719   3                              {
 720   4                                      temp = rev_buf[tail_r];
 721   4                                      *(dual_send + total + 2) = temp;
 722   4                                      tail_r = (tail_r + 1) & 0x7ff;
 723   4                                      total++;
 724   4                              }
 725   3                              length = rev_buf[tail_r];
C51 COMPILER V7.07   MAIN                                                                  04/11/2006 11:07:35 PAGE 13  

 726   3                              if(head_r != tail_r)
 727   3                              {
 728   4                                      if((length < 2) || (length > 30))
 729   4                                      {
 730   5                                              head_r = 0;
 731   5                                              tail_r = 0;
 732   5                                              for(i = 0;i < 2048;i++)
 733   5                                              {
 734   6                                                      rev_buf[i] = 0;
 735   6                                              }
 736   5                                              total = 0;
 737   5                                      }
 738   4                              }                       
 739   3                      }
 740   2                      if((total > 0) && (total < 128))
 741   2                      {
 742   3                              *(dual_send + 1) = total;
 743   3                              *dual_send = 0x01;
 744   3                      }
 745   2              }
 746   1      }
 747          
 748          void analyse_current_state(unsigned char state,unsigned num)
 749          //根据8031提供的情况调整视频、音频的收发
 750          {
 751   1              unsigned char connect_state,connect_num;
 752   1              connect_state = state & 0x03;
 753   1              connect_num = num & 0x03;
 754   1              if(connect_state != 0x01)
 755   1              {
 756   2                      adjust_rev_video(connect_num,connect_state);
 757   2              }
 758   1      
 759   1              connect_state = (state >> 2) & 0x03;
 760   1              connect_num = (num >> 2) & 0x03;
 761   1              if(connect_state != 0x01)
 762   1              {
 763   2                      adjust_send_video(connect_num,connect_state);
 764   2              }
 765   1      
 766   1              connect_state = (state >> 4) & 0x03;
 767   1              connect_num = (num >> 4) & 0x03;
 768   1              if(connect_state != 0x01)

⌨️ 快捷键说明

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