MSA_AssociateRsp((macCbackEvent_t*)pMsg);

来源:互联网 发布:soda上海开放大数据 编辑:程序博客网 时间:2024/06/05 11:20
/************************************************************************************************** * * @fn      MSA_AssociateRsp() * * @brief   This routine is called by Associate_Ind inorder to return the response to the device * * @param   pMsg - pointer to the structure recieved by MAC_MLME_ASSOCIATE_IND * * @return  None     msa_NumOfDevices   * **************************************************************************************************/uint8 MSA_AssociateRsp(macCbackEvent_t* pMsg){  uint8 i, addrFlag = 0, rt = 0, curFlag = 0;  bool  isNeedNewAddr = TRUE;  uint16 assocShortAddress = 0xffff;   for(i = 0; i < MSA_MAX_DEVICE_NUM; i++) //限定数量   {         if(msa_DeviceRecord[i].devShortAddr != 0)  //存储这一层给下一层分配的地址          {              /* compare the two mac address to avoid the waste of short address */              if(sAddrExtCmp(msa_DeviceRecord[i].devMacAddr, pMsg->associateInd.deviceAddress))               {                   /* Assign the short address  for the Device, from pool */                   assocShortAddress = msa_DevShortAddrList[i];                   break;               }               curFlag++;           }             /* record the first free address */            else             {               /* save the first free space */               if(isNeedNewAddr)               {                   addrFlag = i;                   isNeedNewAddr = FALSE;                }                      /* if we reach the current number of device and still can't find duplicate device, then break the loop */                if(curFlag >= msa_NumOfDevices)                {                     break;                }             }   }/* end for */  /* assign a new short address to the device */   if(!isNeedNewAddr)   {        /* Assign the short address  for the Device, from pool */        assocShortAddress = msa_DevShortAddrList[addrFlag];        /* Build the record for this device */        msa_DeviceRecord[addrFlag].devShortAddr = msa_DevShortAddrList[addrFlag];        sAddrExtCpy(msa_DeviceRecord[addrFlag].devMacAddr, pMsg->associateInd.deviceAddress);        msa_DeviceRecord[addrFlag].dsn = 0;        msa_DeviceRecord[addrFlag].checkCount = 0;         rt = addrFlag;         msa_NumOfDevices++;   }       /* If the number of devices are more than MAX_DEVICE_NUM, turn off the association permit */  if (msa_NumOfDevices == MSA_MAX_DEVICE_NUM)  {       MAC_MlmeSetReq(MAC_ASSOCIATION_PERMIT, &msa_MACFalse);  }  /* Fill in association respond message */  sAddrExtCpy(msa_AssociateRsp.deviceAddress, pMsg->associateInd.deviceAddress);  msa_AssociateRsp.assocShortAddress =  assocShortAddress;  msa_AssociateRsp.status = MAC_SUCCESS;  msa_AssociateRsp.sec.securityLevel = MAC_SEC_LEVEL_NONE;  /* Call Associate Response */  MAC_MlmeAssociateRsp(&msa_AssociateRsp);  return rt;}
0 0