hh_nwk.c

来自「zigbee子节点源代码」· C语言 代码 · 共 101 行

C
101
字号

#include "include.h"

UINT8 NLDEDATA_request(WORD nwkFrameControlField, WORD destAddr, WORD srcAddr, BYTE radiusCounter, BYTE dataSeqNumber, UINT8 nsduLength, BYTE *nsdu, BYTE txOption)              
{
      while(gMACTxFrameInfo.msduStatus); 
          
      gMACTxFrameInfo.msdu[0] = nwkFrameControlField;
      gMACTxFrameInfo.msdu[1] = nwkFrameControlField >> 8;
      gMACTxFrameInfo.msdu[2] = destAddr;
      gMACTxFrameInfo.msdu[3] = destAddr >> 8;
      gMACTxFrameInfo.msdu[4] = srcAddr;
      gMACTxFrameInfo.msdu[5] = srcAddr >> 8;
      gMACTxFrameInfo.msdu[6] = radiusCounter;
      gMACTxFrameInfo.msdu[7] = dataSeqNumber;      
      for(int i=0;i<nsduLength;i++)
      {
            gMACTxFrameInfo.msdu[i+8] = *(nsdu+i);            
      }
      gMACTxFrameInfo.msduLength = nsduLength + NWK_aDataFrameOverheadSize;//93+8=101
      gMACTxFrameInfo.msduStatus = TRUE;
      
      BYTE frameType=MAC_FCF_DATA;
      BOOL securityEnabled=FALSE, framePending=FALSE, ackRequest, intraPan=TRUE;
      if(txOption == MAC_TXOPTION_ACKTRANSMISSION)
      {
            ackRequest = TRUE;
      }
      else
      {
            ackRequest = FALSE;
      }
      WORD addrMode=MAC_FCF_SHORTADDR;
      WORD macFrameControlField;
      macFrameControlField = frameType;   
      if(securityEnabled)
      {
            macFrameControlField |= BM(MAC_FCF_SECURITYENABLED);
      }
      if(framePending)
      {
            macFrameControlField |= BM(MAC_FCF_FRAMEPENDING);
      }
      if(ackRequest)
      {
            macFrameControlField |= BM(MAC_FCF_ACKREQUEST); 
      }
       if(intraPan)
      {
            macFrameControlField |= BM(MAC_FCF_INTRAPAN); 
      }
      macFrameControlField |= addrMode;
      WORD panId=PANID;

      return MCPSDATA_request(macFrameControlField, dataSeqNumber, panId, destAddr, srcAddr, gMACTxFrameInfo.msduLength, gMACTxFrameInfo.msdu, txOption);      
}

/*
void NLDEDATA_indication()
{
      BOOL ackReceived;
      WORD framecontrolfield;
      UINT8 dsicoverRoute;
      BOOL security;
      UINT16 destAddr, srcAddr;
      UINT8 radiusCounter;
      UINT8 dataSeqNumber;
      UINT8 nsduLength;
      BYTE *nsdu;
      BOOL nsduStatus;      
      
      if(gMACRxFrameInfo.msduStatus)
      {      
            while(pNWKRxFrameInfo->nsduStatus);
      
            if(gMACRxFrameInfo.ackReceived)
            {
                  ackReceived = TRUE;
                  gMACRxFrameInfo.ackReceived = FALSE;
            }
            else
            {           
                  framecontrolfield = (gMACRxFrameInfo.msdu[0] << 8) | gMACRxFrameInfo.msdu[1];
                  destAddr = (gMACRxFrameInfo.msdu[2] << 8) | gMACRxFrameInfo.msdu[3];
                  srcAddr = (gMACRxFrameInfo.msdu[4] << 8) | gMACRxFrameInfo.msdu[5];
                  radiusCounter = gMACRxFrameInfo.msdu[6];
                  dataSeqNumber = gMACRxFrameInfo.msdu[7];            
                  nsduLength = gMACRxFrameInfo.msduLength - NWK_aFrameOverheadSize;
                  for(int i=0;i<nsduLength;i++)
                  {
                        nsdu[i] = gMACRxFrameInfo.msdu[i+8];            
                  }
                  nsduStatus = TRUE;
                  gMACRxFrameInfo.msduStatus = FALSE;            
            }      
      }
}
*/

                

⌨️ 快捷键说明

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