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

📄 hdlc.lst

📁 在大型通信系统(机架插板式)中多块单板通过TDM总线
💻 LST
📖 第 1 页 / 共 5 页
字号:
 442   3                  default:        
 443   3      
 444   3                          break;
 445   3              }       
 446   2      
 447   2              /* 调整L2接收指针 */
 448   2              m_sL2Que.ucRxDealIndex++;
 449   2              m_sL2Que.ucRxDealIndex = m_sL2Que.ucRxDealIndex%L2RXBUFNUM;
 450   2              m_sL2Que.ucRxPendNum--;
 451   2          }
 452   1                 
 453   1          return;
 454   1      }
 455          
 456          /********************************************************************************/
 457          /*  函数名称:void CheckTxL2Layer(void)                                          */
 458          /*  简要描述:监测链路层L2发送通讯函数                                           */
 459          /*                                                                              */
 460          /*  时    间:2002年02月21日                                                     */
 461          /********************************************************************************/
 462          void CheckTxL2Layer(void)                   
 463          {     
 464   1          uchar data i;
 465   1          
 466   1          /* 看门狗 */   
 467   1          WATCHDOG = ~WATCHDOG;
 468   1      
 469   1          /* 发送部分L3-->L2,I帧 */
 470   1          if( (m_sL2Que.ucLinkState == DL_ESTABLISH) && (m_sL3Que.ucTxPendNum > 0) )
 471   1          {   
 472   2              /* 链路已建立且L3尚有发送帧需处理        */
 473   2              if(m_sL2Que.ucTxPendNum <= L2TXBUFNUM)
 474   2              {
 475   3                  /* 链路已建立且链路层发送队列未满   */  
C51 COMPILER V3.20,  SN-0  HDLC                                                            09/29/02  18:24:18  PAGE 9   

 476   3                  if(m_sL2Que.ucTxIFrameStatus == IDLE)       /* 可发送且             */
 477   3                  {
 478   4                      /* 当前没有I帧在发送    */
 479   4                      if(m_sL2Que.ucRSendFlag == FALSE)       /* 首次发送部分         */
 480   4                      {                                   
 481   5                          /* 数据包从L3缓冲区移至L2缓冲区 */
 482   5                          L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucLength  = L3TxBuf[m_sL3Que.ucTxDealIndex].ucLength+
             -4;
 483   5                      
 484   5                          L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv1[0] = 0;                                       
             -                                                              
 485   5                          L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv1[1] = 0;                                       
             -                                                              
 486   5                          L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucCRID    = IFRAME_CONTROL;                          
             -                                                                              
 487   5                          L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv2    = 0;                                       
             -                                                              
 488   5                  
 489   5                          L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucData[0] = L3TxBuf[m_sL3Que.ucTxDealIndex].ucPID;
 490   5                          L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucData[1] = L3TxBuf[m_sL3Que.ucTxDealIndex].ucLength;
 491   5                          L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucData[2] = (L3TxBuf[m_sL3Que.ucTxDealIndex].uiType>>
             -8)&0xff;
 492   5                          L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucData[3] = (L3TxBuf[m_sL3Que.ucTxDealIndex].uiType)&
             -0xff;
 493   5                              
 494   5                          for(i=4;i<L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucLength-4;i++)   
 495   5                          {
 496   6                              L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucData[i] = L3TxBuf[m_sL3Que.ucTxDealIndex].ucDat
             -a[i-4];
 497   6                          }
 498   5                                      
 499   5                          /* 剩余部分填充0 */
 500   5                          for(i=L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucLength-4;i<BUFSIZE-4;i++)   
 501   5                          {
 502   6                              L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucData[i] = 0;
 503   6                          }
 504   5                  
 505   5                          /* 调整L2指针 */
 506   5                          m_sL2Que.ucTxPlaceIndex++;
 507   5                          m_sL2Que.ucTxPlaceIndex = m_sL2Que.ucTxPlaceIndex%L2TXBUFNUM;
 508   5                          m_sL2Que.ucTxPendNum++;
 509   5              
 510   5                          /* 首次发送,置相关参数 */
 511   5                          m_sL2Que.ucTxIFrameStatus = BUSY;
 512   5                          m_sL2Que.ucRSendFlag = TRUE;
 513   5                          m_sL2Que.ucT201Control = ON;
 514   5                          m_sL2Que.ucT201 = 0;
 515   5                          m_sL2Que.ucN200 = 0;
 516   5                      }    
 517   4                  }
 518   3                  else
 519   3                  {
 520   4                      /* 有I帧在发送  */
 521   4                      if(m_sL2Que.ucRSendFlag == TRUE)       /* 重发部分                  */
 522   4                      {                                   
 523   5                          /* 需重发,不调整L3指针 */
 524   5                          if(m_sL2Que.ucN200 < (N200-1))
 525   5                          {
 526   6                              if(m_sL2Que.ucT201 > T201)      
 527   6                              {
 528   7                                  /* 定时到,重发 */
 529   7                                  m_sL2Que.ucN200++;          /* 重发计数 */
C51 COMPILER V3.20,  SN-0  HDLC                                                            09/29/02  18:24:18  PAGE 10  

 530   7                                  m_sL2Que.ucT201 = 0;        /* 重发定时器清零 */
 531   7                  
 532   7              
 533   7                                  /* 数据包从L3缓冲区移至L2缓冲区 */
 534   7                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucLength  = L3RxBuf[m_sL3Que.ucTxDealIndex].u
             -cLength+4;
 535   7                              
 536   7                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv1[0] = 0;                               
             -                                                                      
 537   7                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv1[1] = 0;                               
             -                                                                      
 538   7                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucCRID    = IFRAME_CONTROL;                  
             -                                                                                      
 539   7                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv2    = 0;                               
             -                                                                      
 540   7                          
 541   7                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucData[0] = L3TxBuf[m_sL3Que.ucTxDealIndex].u
             -cPID;
 542   7                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucData[1] = L3TxBuf[m_sL3Que.ucTxDealIndex].u
             -cLength;
 543   7                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucData[2] = (L3TxBuf[m_sL3Que.ucTxDealIndex].
             -uiType>>8)&0xff;
 544   7                                  L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucData[3] = (L3TxBuf[m_sL3Que.ucTxDealIndex].
             -uiType)&0xff;
 545   7                                      
 546   7                                  for(i=4;i<L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucLength-4;i++)   
 547   7                                  {
 548   8                                      L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucData[i] = L3TxBuf[m_sL3Que.ucTxDealInde
             -x].ucData[i-4];
 549   8                                  }
 550   7                                              
 551   7                                  /* 剩余部分填充0 */
 552   7                                  for(i=L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucLength-4;i<BUFSIZE-4;i++)   
 553   7                                  {
 554   8                                      L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucData[i] = 0;
 555   8                                  }
 556   7                          
 557   7                                  /* 调整L2指针 */
 558   7                                  m_sL2Que.ucTxPlaceIndex++;
 559   7                                  m_sL2Que.ucTxPlaceIndex = m_sL2Que.ucTxPlaceIndex%L2TXBUFNUM;
 560   7                                  m_sL2Que.ucTxPendNum++;
 561   7                              }   
 562   6                          }
 563   5                          else                                    
 564   5                          {
 565   6                              /* 重发次数超出规定值 */
 566   6                              m_sL2Que.ucLinkState = DL_RELEASE;
 567   6                              m_sL2Que.ucTxIFrameStatus = IDLE;   /* 弃掉当前处理的I帧 */
 568   6                              m_sL2Que.ucRSendFlag = FALSE;       
 569   6                              m_sL2Que.ucT201Control = OFF;
 570   6              
 571   6                              /* 不再需要重发,调整L3指针 */
 572   6                              m_sL3Que.ucTxDealIndex++;
 573   6                              m_sL3Que.ucTxDealIndex = m_sL3Que.ucTxDealIndex%L3TXBUFNUM;
 574   6                              m_sL3Que.ucTxPendNum--;
 575   6              
 576   6                          }
 577   5                      }
 578   4                      else
 579   4                      {
 580   5                          /* 结束重发部分 */
 581   5                          m_sL2Que.ucTxIFrameStatus = IDLE;       /* 弃掉当前处理的I帧 */
C51 COMPILER V3.20,  SN-0  HDLC                                                            09/29/02  18:24:18  PAGE 11  

 582   5                          m_sL2Que.ucT201Control = OFF;
 583   5              
 584   5                          /* 不再需要重发,调整L3指针 */
 585   5                          m_sL3Que.ucTxDealIndex++;
 586   5                          m_sL3Que.ucTxDealIndex = m_sL3Que.ucTxDealIndex%L3TXBUFNUM;
 587   5                          m_sL3Que.ucTxPendNum--;
 588   5                      }
 589   4                  }
 590   3              }
 591   2              else
 592   2              {
 593   3                  /* 链路层发送队列满 */  
 594   3                  m_bL2TxErrorFlag = WRONG;
 595   3              }
 596   2          }       
 597   1      
 598   1          /* 发送部分L2,SABME帧 */
 599   1          if(m_sL2Que.ucLinkState == DL_RELEASE)      /* 尚未建立链路 */
 600   1          {
 601   2              if(m_sL2Que.ucRSendFlag == FALSE)       /* 首次发送      */
 602   2              {                                   
 603   3                  m_sL2Que.ucRSendFlag = TRUE;
 604   3                  m_sL2Que.ucT201Control = ON;
 605   3                  m_sL2Que.ucT201 = 0;
 606   3                  m_sL2Que.ucN200 = 0;
 607   3              }
 608   2              else
 609   2              {
 610   3                  /* 定时到发送SABME帧 */
 611   3                  if(m_sL2Que.ucT201 > T201)
 612   3                  {
 613   4                      m_sL2Que.ucT201 = 0;                /* 重发定时器清零 */
 614   4          
 615   4                      L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucLength  = 4;
 616   4                      L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv1[0] = 0;                                           
             -                                                          
 617   4                      L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv1[1] = 0;                                           
             -                                                          
 618   4                      L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucCRID    = SABME_CONTROL;                               
             -                                                                      
 619   4                      L2TxBuf[m_sL2Que.ucTxPlaceIndex].ucRsv2    = 0;                                           
             -                                                          
 620   4                          
 621   4                      /* 调整L2发送指针 */
 622   4                      m_sL2Que.ucTxPlaceIndex++;
 623   4                      m_sL2Que.ucTxPlaceIndex = m_sL2Que.ucTxPlaceIndex%L2TXBUFNUM;
 624   4                      m_sL2Que.ucTxPendNum++;
 625   4                  }
 626   3              }                       
 627   2          }       
 628   1      
 629   1      
 630   1          /* 发送部分L2-->L1 */
 631   1          if(m_sL2Que.ucTxPendNum>0)      /* L2尚有发送帧需处理        */
 632   1          {
 633   2              /* 数据包从L2缓冲区移至L1缓冲区 */
 634   2              L1TxBuf[m_sL1Que.ucTxPlaceIndex].ucLength  = L2TxBuf[m_sL2Que.ucTxDealIndex].ucLength;
 635   2              L1TxBuf[m_sL1Que.ucTxPlaceIndex].ucData[0] = L2TxBuf[m_sL2Que.ucTxDealIndex].ucRsv1[0];     
 636   2              L1TxBuf[m_sL1Que.ucTxPlaceIndex].ucData[1] = L2TxBuf[m_sL2Que.ucTxDealIndex].ucRsv1[1];     
 637   2              L1TxBuf[m_sL1Que.ucTxPlaceIndex].ucData[2] = L2TxBuf[m_sL2Que.ucTxDealIndex].ucCRID;        
 638   2              L1TxBuf[m_sL1Que.ucTxPlaceIndex].ucData[3] = L2TxBuf[m_sL2Que.ucTxDealIndex].ucRsv2;        
 639   2      
C51 COMPILER V3.20,  SN-0  HDLC                                                            09/29/02  18:24:18  PAGE 12  

 640   2              for(i=4;i<L1TxBuf[m_sL1Que.ucTxPlaceIndex].ucLength;i++)   
 641   2              {
 642   3                  L1TxBuf[m_sL1Que.ucTxPlaceIndex].ucData[i] = L2TxBuf[m_sL2Que.ucTxDealIndex].ucData[i-4];
 643   3              }
 644   2              /* 剩余部分填充0 */
 645   2              for(i=L1TxBuf[m_sL1Que.ucTxDealIndex].ucLength;i<BUFSIZE;i++)   
 646   2              {
 647   3                  L1TxBuf[m_sL1Que.ucTxPlaceIndex].ucData[i] = 0;
 648   3              }
 649   2      
 650   2              /* 调整指针 */

⌨️ 快捷键说明

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