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

📄 mt_nwk.lst

📁 用IAR开发的ZIGBEE网络路由例子
💻 LST
📖 第 1 页 / 共 3 页
字号:
    139          	uint16 panId;
    140          #else
    141            byte i,j;
    142          #endif
    143          #endif // MT_NWK_FUNC
    144          
    145            len = SPI_0DATA_MSG_LEN + SPI_RESP_LEN_NWK_DEFAULT;
    146          	ret = (byte)ZSuccess;
    147          
    148            switch (cmd_id)
   \   000005   8A..         MOV     ?V0 + 0,R2
   \   000007   8B..         MOV     ?V0 + 1,R3
   \   000009   78..         MOV     R0,#?V0 + 0
   \   00000B   12....       LCALL   ?US_SWITCH_DENSE
   \                     `?<Jumptable for MT_NwkCommandProcessing>_0`:
   \   00000E   0301         DW        259
   \   000010   00           DB        0
   \   000011   ....         DW        ??MT_NwkCommandProcessing_0
   \   000013   ....         DW        ??MT_NwkCommandProcessing_1
    149            {
    150          #if defined( RTR_NWK )
    151              case SPI_CMD_NLME_PERMIT_JOINING_REQ:
    152                //The only information is PermitDuration
    153                ret = (byte)NLME_PermitJoiningRequest( *pData );
   \                     ??MT_NwkCommandProcessing_1:
   \   000015                ; Setup parameters for call to function NLME_PermitJoiningRequest
   \   000015   8C82         MOV     DPL,R4
   \   000017   8D83         MOV     DPH,R5
   \   000019   E0           MOVX    A,@DPTR
   \   00001A   F9           MOV     R1,A
   \   00001B   90....       MOV     DPTR,#(NLME_PermitJoiningRequest & 0xffff)
   \   00001E   74..         MOV     A,#((NLME_PermitJoiningRequest >> 16) & 0xff)
   \   000020   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    154                break;
    155          #endif
    156          
    157          #if defined ( MT_NWK_FUNC )  //NWK commands
    158              case SPI_CMD_NWK_INIT:
    159                nwk_init( NWK_TaskID );
    160                break;
    161          
    162              case SPI_CMD_NLDE_DATA_REQ:
    163                //First read the DstAddr
    164                dstAddr = BUILD_UINT16( pData[1], pData[0] );
    165                pData += sizeof( dstAddr );
    166          
    167                //Get the NSDU details
    168                dataLen = *pData++;
    169                dataPtr = pData;
    170          
    171                /* For now, skip a length of ZTEST_DEFAULT_DATA_LEN, instead of dataLen.
    172                   In future ZTOOL releases the data buffer will be only as long as dataLen */
    173          
    174                //pData += dataLen;
    175                pData += ZTEST_DEFAULT_DATA_LEN;
    176          
    177                /* pData[0] = NSDUHandlde
    178                   pData[1] = NSDUHandleOptions
    179                   pData[3] = SecurityEnable
    180                   pData[4] = DiscoverRoute
    181                   pData[5] = RadiusCounter */
    182          
    183                ret = (byte)MT_Nwk_DataRequest( dstAddr, dataLen, dataPtr, pData[0],
    184                                                BUILD_UINT16( pData[2], pData[1] ),
    185                                                pData[3], pData[4], pData[5]);
    186                break;
    187          
    188          #if defined( ZDO_COORDINATOR )
    189              case SPI_CMD_NLME_INIT_COORD_REQ:
    190          			panId = BUILD_UINT16( pData[1], pData[0] );
    191          			
    192          			MT_ReverseBytes( &pData[2], 4 );
    193          			channelList = osal_build_uint32( &pData[2], 4 );
    194          
    195          			ret = (byte)NLME_NetworkFormationRequest( panId, channelList, pData[6], pData[7],
    196                                                                pData[8], pData[9] );
    197                break;
    198          #endif  // ZDO
    199          
    200          #if defined( RTR_NWK )
    201              case SPI_CMD_NLME_START_ROUTER_REQ:
    202                // NOTE: first two parameters are not used, see NLMEDE.h for details
    203                ret = (byte)NLME_StartRouterRequest( pData[0], pData[1], pData[2] );
    204              break;
    205          #endif  // RTR
    206          
    207              case SPI_CMD_NLME_JOIN_REQ:
    208          		  ret = (byte)NLME_JoinRequest( dummyExPANID, BUILD_UINT16( pData[1], pData[0] ), pData[2], pData[3] );
    209                if ( pData[3] & CAPINFO_RCVR_ON_IDLE )
    210                {
    211                  // The receiver is on, turn network layer polling off.
    212                  NLME_SetPollRate( 0 );
    213                  NLME_SetQueuedPollRate( 0 );
    214                  NLME_SetResponseRate( 0 );
    215                }
    216                break;
    217          
    218              case SPI_CMD_NLME_LEAVE_REQ:
    219                {
    220                  NLME_LeaveReq_t req;
    221                  // if extAddr is all zeros, it means null pointer..
    222                  for( index = 0; ( ( index < Z_EXTADDR_LEN ) &&
    223                                  ( pData[index] == 0 ) ) ; index++ );
    224                  if ( index == Z_EXTADDR_LEN )
    225                  {
    226                    req.extAddr = NULL;
    227                  }
    228                  else
    229                  {
    230                    MT_ReverseBytes( pData, Z_EXTADDR_LEN );
    231                    req.extAddr = pData;
    232                  }
    233                  pData += Z_EXTADDR_LEN;
    234          
    235                  req.removeChildren = FALSE;
    236                  req.rejoin         = FALSE;
    237                  req.silent         = FALSE;
    238                  ret = (byte)NLME_LeaveReq( &req );
    239                }
    240                break;
    241          
    242              case SPI_CMD_NLME_RESET_REQ:
    243                //Its a direct call to reset NWK
    244                ret = (byte)NLME_ResetRequest();
    245                break;
    246          
    247              case SPI_CMD_NLME_GET_REQ:
    248                attr = *pData++;
    249                index = *pData;
    250          			databuf[0] = (byte)NLME_GetRequest( (ZNwkAttributes_t )attr, index, &databuf[1] );
    251                len = SPI_0DATA_MSG_LEN + SPI_RESP_LEN_NWK_DEFAULT + NWK_DEFAULT_GET_RESPONSE_LEN;
    252                MT_BuildAndSendZToolResponse( len, (SPI_RESPONSE_BIT | SPI_CMD_NLME_GET_REQ),
    253                      (SPI_RESP_LEN_NWK_DEFAULT + NWK_DEFAULT_GET_RESPONSE_LEN), databuf );
    254                return;   // Don't return to this function
    255          
    256              case SPI_CMD_NLME_SET_REQ:
    257                ret = (byte)NLME_SetRequest( (ZNwkAttributes_t)pData[0], pData[1], &pData[2] );
    258                osal_start_timerEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV, 1000 );
    259                break;
    260          
    261              case SPI_CMD_NLME_NWK_DISC_REQ:
    262                MT_ReverseBytes( pData, 4 );
    263                ret = (byte)NLME_NetworkDiscoveryRequest( osal_build_uint32( pData, 4 ), pData[4] );
    264                break;
    265          
    266          #if !defined( ZDO_COORDINATOR )
    267              case SPI_CMD_NLME_ORPHAN_JOIN_REQ:
    268                // Channel list bit mask
    269                MT_ReverseBytes( pData, 4 );
    270                channelList = osal_build_uint32( pData, 4 );
    271          
    272                // Count number of channels
    273                j = attr = 0;
    274                for ( i = 0; i < ED_SCAN_MAXCHANNELS; i++ )
    275                {
    276                  if ( channelList & (1 << i) )
    277                  {
    278                     j++;
    279                     attr = i;
    280                  }
    281                }
    282          
    283                // If only one channel specified...
    284                if ( j == 1 )
    285                {
    286                  _NIB.scanDuration = pData[4];
    287                  _NIB.nwkLogicalChannel = attr;
    288                  _NIB.channelList = channelList;
    289                  if ( !_NIB.CapabilityInfo )
    290                    _NIB.CapabilityInfo = ZDO_Config_Node_Descriptor.CapabilityFlags;
    291          
    292                  devState = DEV_NWK_ORPHAN;
    293                  ret = (byte)NLME_OrphanJoinRequest( channelList, pData[4] );
    294                }
    295                else
    296                  ret = ZNwkInvalidParam;
    297                break;
    298          #endif  // !ZDO
    299          	
    300          #if defined (RTR_NWK)
    301              case SPI_CMD_NLME_ROUTE_DISC_REQ:
    302                ret = (byte)NLME_RouteDiscoveryRequest( BUILD_UINT16( pData[1], pData[0] ), pData[2] );
    303                break;
    304          			
    305              case SPI_CMD_NLME_DIRECT_JOIN_REQ:
    306                MT_ReverseBytes( pData, 8 );
    307                ret = (byte)NLME_DirectJoinRequest( pData, pData[8] );
    308              break;
    309          #endif	// RTR
    310          
    311          #endif // MT_NWK_FUNC
    312          
    313              default:
    314                ret = (byte)ZUnsupportedMode;
    315                break;
    316            }
    317          
    318          #if defined ( MT_NWK_FUNC )
    319          	MT_SendSPIRespMsg( ret, cmd_id, len, SPI_RESP_LEN_NWK_DEFAULT );
    320          #endif	
    321            (void)len;
    322            (void)ret;
    323          }
   \                     ??MT_NwkCommandProcessing_0:
   \   000023   7F02         MOV     R7,#0x2
   \   000025   02....       LJMP    ?BANKED_LEAVE_XDATA
    324          
    325          #if defined ( MT_NWK_CB_FUNC )             //NWK callback commands
    326          /*********************************************************************
    327           * @fn          nwk_MTCallbackSubDataConfirm
    328           *
    329           * @brief       Process the callback subscription for NLDE-DATA.confirm
    330           *
    331           * @param       nsduHandle  - APS handle
    332           * @param       Status      - result of data request
    333           *
    334           * @return      none
    335           */
    336          void nwk_MTCallbackSubDataConfirm(byte nsduHandle, ZStatus_t status )
    337          {
    338            byte buf[2];
    339          
    340            buf[0] = nsduHandle;
    341            buf[1] = (byte)status;
    342          
    343            MT_BuildAndSendZToolCB( SPI_CB_NLDE_DATA_CNF, 2, buf );
    344          }
    345          
    346          /*********************************************************************
    347           * @fn          nwk_MTCallbackSubDataIndication
    348           *
    349           * @brief       Process the callback subscription for NLDE-DATA.indication
    350           *
    351           * @param       SrcAddress      - 16 bit address
    352           * @param       nsduLength      - Length of incoming data
    353           * @param       nsdu            - Pointer to incoming data
    354           * @param       LinkQuality     - Link quality measured during
    355           *                                reception.
    356           * @param       SecuritySuite   - Security Suite Applied
    357           * @param       SecurityStatus  - MLDE_SUCCESS if security process
    358           *                                successfull, MLDE_FAILURE if not.
    359           *
    360           * @return      none
    361           */
    362          void nwk_MTCallbackSubDataIndication( uint16 SrcAddress, int16 nsduLength,
    363                                                byte *nsdu, byte LinkQuality )
    364          {
    365            byte *msgPtr;
    366            byte *msg;
    367            byte msgLen;
    368          
    369            msgLen = sizeof( uint16 ) + sizeof( uint8 ) + ZTEST_DEFAULT_DATA_LEN
    370                      + sizeof( byte);
    371          
    372            msgPtr = osal_mem_alloc( msgLen );
    373            if ( msgPtr )
    374            {
    375              //Fill up the data bytes
    376              msg = msgPtr;
    377          
    378              //First fill in details
    379              *msg++ = HI_UINT16( SrcAddress );
    380              *msg++ = LO_UINT16( SrcAddress );
    381          
    382              //Since the max packet size is less than 255 bytes, a byte is enough
    383              //to represent nsdu length
    384              *msg++ = ( uint8 ) nsduLength;
    385          
    386              osal_memset( msg, NULL, ZTEST_DEFAULT_DATA_LEN ); // Clear the mem
    387              osal_memcpy( msg, nsdu, nsduLength );
    388              msg += ZTEST_DEFAULT_DATA_LEN;
    389          
    390              *msg++ = LinkQuality;
    391          
    392              MT_BuildAndSendZToolCB( SPI_CB_NLDE_DATA_IND, msgLen, msgPtr );

⌨️ 快捷键说明

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