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

📄 mt_af.lst

📁 用IAR开发的ZIGBEE网络路由例子
💻 LST
📖 第 1 页 / 共 2 页
字号:
    122                    epDesc->simpleDesc->Reserved = (*pData++) & AF_APP_FLAGS_MASK ;
    123          
    124                    epDesc->simpleDesc->AppNumInClusters = *pData++;
    125          
    126                    if (epDesc->simpleDesc->AppNumInClusters)
    127                    {
    128                      epDesc->simpleDesc->pAppInClusterList = (uint16 *)
    129                      osal_mem_alloc(ZTEST_DEFAULT_PARAM_LEN*sizeof(uint16));
    130          
    131                      for (i=0; i<ZTEST_DEFAULT_PARAM_LEN; i++)  {
    132                        epDesc->simpleDesc->pAppInClusterList[i] = BUILD_UINT16(*pData, 0);
    133                        pData++;
    134                      }
    135                    }
    136                    else
    137                    {
    138                      pData += ZTEST_DEFAULT_PARAM_LEN;
    139                    }
    140          
    141                    epDesc->simpleDesc->AppNumOutClusters = *pData++;
    142          
    143                    if (epDesc->simpleDesc->AppNumOutClusters)
    144                    {
    145                      epDesc->simpleDesc->pAppOutClusterList = (uint16 *)
    146                      osal_mem_alloc(ZTEST_DEFAULT_PARAM_LEN*sizeof(uint16));
    147          
    148                      for (i=0; i<ZTEST_DEFAULT_PARAM_LEN; i++)  {
    149                        epDesc->simpleDesc->pAppOutClusterList[i] = BUILD_UINT16(*pData, 0);
    150                        pData++;
    151                      }
    152                    }
    153                    else
    154                    {
    155                      pData += ZTEST_DEFAULT_PARAM_LEN;
    156                    }
    157          
    158                    epDesc->latencyReq = (afNetworkLatencyReq_t)*pData;
    159          
    160                    if ( afFindEndPointDesc( epDesc->endPoint ) == NULL )
    161                    {
    162                      af_stat = afRegister( epDesc );
    163                    }
    164                  }
    165                  else
    166                  {
    167                    osal_mem_free( epDesc );
    168                    af_stat = afStatus_MEM_FAIL;
    169                  }
    170                }
    171          
    172                len = SPI_0DATA_MSG_LEN + SPI_RESP_LEN_AF_DEFAULT;
    173                MT_SendSPIRespMsg( af_stat, SPI_CMD_AF_REGISTER, len, SPI_RESP_LEN_AF_DEFAULT );
    174          
    175                break;
    176          
    177              case SPI_CMD_AF_SENDMSG:
    178              {
    179          #if ( AF_KVP_SUPPORT )
    180                afKVPCommandFormat_t kvp;
    181                afAddOrSend_t addOrSend;
    182                byte frameType;
    183          #else
    184                endPointDesc_t *epDesc;
    185                byte transId;
    186          #endif
    187                afAddrType_t dstAddr;
    188                cId_t cId;
    189                byte txOpts, radius, srcEP;
    190          
    191          #if ( AF_KVP_SUPPORT )
    192                frameType = *pData;
    193          #endif
    194                pData++;
    195                txOpts = *pData++;
    196                radius = *pData++;
    197          
    198                // Fill the AF structures with the data received.
    199                dstAddr.addrMode = afAddr16Bit;
    200                dstAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
    201                pData += 2;
    202                dstAddr.endPoint = *pData++;
    203          
    204                srcEP = *pData++;
    205                cId = BUILD_UINT16( pData[1], pData[0] );
    206                pData += 2;
    207          #if ( AF_KVP_SUPPORT )
    208                addOrSend = (afAddOrSend_t)(*pData++);
    209                kvp.TransSeqNumber = *pData++;
    210                kvp.CommandType = *pData++;
    211                kvp.AttribDataType = *pData++;
    212                kvp.AttribId = BUILD_UINT16( pData[1], pData[0] );
    213                pData += 2;
    214                kvp.ErrorCode = *pData++;
    215                kvp.DataLength = *pData++;
    216                kvp.Data = pData;
    217          
    218                af_stat = afAddOrSendMessage( &dstAddr, srcEP, cId,
    219                    addOrSend, frameType, &kvp.TransSeqNumber,
    220                    kvp.CommandType, kvp.AttribDataType, kvp.AttribId, kvp.ErrorCode,
    221                    kvp.DataLength, kvp.Data, (txOpts & ~AF_DISCV_ROUTE),
    222                                              (txOpts &  AF_DISCV_ROUTE), radius );
    223          #else
    224                pData++;
    225                transId = *pData++;
    226                pData += 5;
    227                len = *pData++;
    228                epDesc = afFindEndPointDesc( srcEP );
    229                if ( epDesc == NULL )
    230                {
    231                  af_stat = afStatus_INVALID_PARAMETER;
    232                }
    233                else
    234                {
    235                  af_stat = AF_DataRequest( &dstAddr, epDesc, cId, len, pData,
    236                                            &transId, txOpts, radius );
    237                }
    238          #endif
    239          
    240                len = SPI_0DATA_MSG_LEN + SPI_RESP_LEN_AF_DEFAULT;
    241                MT_SendSPIRespMsg( af_stat, SPI_CMD_AF_SENDMSG,
    242                                       len, SPI_RESP_LEN_AF_DEFAULT );
    243              }
    244              break;
    245            }
    246          }
    247          #endif  // #if defined ( MT_AF_FUNC )
    248          
    249          #if defined ( MT_AF_CB_FUNC )
    250          /*********************************************************************
    251           * @fn          af_MTCB_IncomingData
    252           *
    253           * @brief       Process the callback subscription for AF Incoming data.
    254           *
    255           * @param       pkt - Incoming AF data.
    256           *
    257           * @return      none
    258           */
    259          void af_MTCB_IncomingData( void *pkt )
    260          {
    261            afIncomingMSGPacket_t *MSGpkt = (afIncomingMSGPacket_t *)pkt;
    262          #if ( AF_KVP_SUPPORT )
    263            afIncomingKVPPacket_t *KVPpkt = (afIncomingKVPPacket_t *)pkt;
    264          #endif
    265            byte *memPtr, *ptr;
    266            /* Frametype, WasBroadcast, LinkQuality, SecurityUse, SrcAddr,
    267             * SrcEndpoint, DestEndpoint, ClusterId, TransCnt, TransId, CmdType,
    268             * AttribDataType, AttribId, ErrorCode, TransDataLen =
    269             * 1+1+1+1+2+1+1+2+1+1+1+2+1+1+1.
    270             */
    271            const byte len = 18 + ZTEST_DEFAULT_AF_DATA_LEN;
    272            byte dataLen;
    273          
    274            if ( MSGpkt->hdr.event != AF_INCOMING_MSG_CMD )
    275            {
    276          #if ( AF_KVP_SUPPORT )
    277              dataLen = KVPpkt->cmd.DataLength;
    278          #else
    279              return;
    280          #endif
    281            }
    282            else
    283            {
    284              dataLen = MSGpkt->cmd.DataLength;
    285            }
    286          
    287            if ( dataLen > ZTEST_DEFAULT_AF_DATA_LEN )
    288            {
    289              dataLen = ZTEST_DEFAULT_AF_DATA_LEN;
    290            }
    291          
    292            memPtr = osal_mem_alloc( len );
    293            if ( !memPtr )
    294            {
    295              return;
    296            }
    297            ptr = memPtr;
    298          
    299          #if ( AF_KVP_SUPPORT )
    300            if ( MSGpkt->hdr.event != AF_INCOMING_MSG_CMD )
    301            {
    302              *ptr++ = KVPpkt->hdr.event;
    303              *ptr++ = KVPpkt->wasBroadcast;
    304              *ptr++ = KVPpkt->LinkQuality;
    305              *ptr++ = KVPpkt->SecurityUse;
    306              *ptr++ = HI_UINT16( KVPpkt->srcAddr.addr.shortAddr );
    307              *ptr++ = LO_UINT16( KVPpkt->srcAddr.addr.shortAddr );
    308              *ptr++ = KVPpkt->srcAddr.endPoint;
    309              *ptr++ = KVPpkt->endPoint;
    310              *ptr++ = HI_UINT16( KVPpkt->clusterId );
    311              *ptr++ = LO_UINT16( KVPpkt->clusterId );
    312              *ptr++ = KVPpkt->totalTrans;
    313              *ptr++ = KVPpkt->cmd.TransSeqNumber;
    314              *ptr++ = KVPpkt->cmd.CommandType;
    315              *ptr++ = KVPpkt->cmd.AttribDataType;
    316              *ptr++ = HI_UINT16( KVPpkt->cmd.AttribId );
    317              *ptr++ = LO_UINT16( KVPpkt->cmd.AttribId );
    318              *ptr++ = KVPpkt->cmd.ErrorCode;
    319              *ptr++ = KVPpkt->cmd.DataLength;
    320              osal_memcpy( ptr, KVPpkt->cmd.Data, dataLen );
    321            }
    322            else
    323          #endif
    324            {
    325              *ptr++ = MSGpkt->hdr.event;
    326              *ptr++ = MSGpkt->wasBroadcast;
    327              *ptr++ = MSGpkt->LinkQuality;
    328              *ptr++ = MSGpkt->SecurityUse;
    329              *ptr++ = HI_UINT16( MSGpkt->srcAddr.addr.shortAddr );
    330              *ptr++ = LO_UINT16( MSGpkt->srcAddr.addr.shortAddr );
    331              *ptr++ = MSGpkt->srcAddr.endPoint;
    332              *ptr++ = MSGpkt->endPoint;
    333              *ptr++ = HI_UINT16( MSGpkt->clusterId );
    334              *ptr++ = LO_UINT16( MSGpkt->clusterId );
    335              osal_memset( ptr, 0, 7 );
    336              ptr += 7;
    337              osal_memcpy( ptr, MSGpkt->cmd.Data, dataLen );
    338            }
    339          
    340            if ( dataLen < ZTEST_DEFAULT_AF_DATA_LEN )
    341            {
    342              osal_memset( (ptr + dataLen), 0, (ZTEST_DEFAULT_AF_DATA_LEN - dataLen) );
    343            }
    344          
    345          #if defined (ZTOOL_P1) || defined (ZTOOL_P2)
    346            MT_BuildAndSendZToolCB( SPI_CB_AF_DATA_IND, len, memPtr );
    347          #endif
    348            osal_mem_free( memPtr );
    349          }
    350          #endif  // #if defined ( MT_AF_CB_FUNC )
    351          
    352          /*********************************************************************
    353          *********************************************************************/


   Segment part sizes:

     Function/Label Bytes
     -------------- -----

 
 
 0 bytes of memory

Errors: none
Warnings: none

⌨️ 快捷键说明

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