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

📄 mt_zdo.lst

📁 用IAR开发的ZIGBEE网络路由例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
    410                }      
    411                pData += Z_EXTADDR_LEN;
    412          
    413                attr1 = *pData++;  // DstEPInt
    414          
    415                x = *pData;        // SecuritySuite
    416          
    417          #if defined ( REFLECTOR )
    418                if ( devAddr.addr.shortAddr == _NIB.nwkDevAddress )
    419                {
    420                  ZDApp_UnbindReqCB( 0, &devAddr, ptr, attr, cID, &dstAddr, attr1, x );
    421                  ret = ZSuccess;
    422                }
    423                else
    424          #endif
    425                {
    426                  ret = (byte)ZDP_UnbindReq( &devAddr, ptr, attr, cID, &dstAddr, attr1, x );
    427                }
    428                break;
    429          #endif
    430          
    431          #if defined ( ZDO_MGMT_NWKDISC_REQUEST )
    432              case SPI_CMD_ZDO_MGMT_NWKDISC_REQ:
    433                devAddr.addrMode = Addr16Bit;
    434                devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
    435                pData += 2;
    436                scanChans = BUILD_UINT32( pData[3], pData[2], pData[1], pData[0] );
    437                ret = (byte)ZDP_MgmtNwkDiscReq( &devAddr, scanChans, pData[4], pData[5], false );
    438                break;
    439          #endif
    440          
    441          #if defined ( ZDO_MGMT_LQI_REQUEST )
    442              case SPI_CMD_ZDO_MGMT_LQI_REQ:
    443                devAddr.addrMode = Addr16Bit;
    444                devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
    445                ret = (byte)ZDP_MgmtLqiReq( &devAddr, pData[2], false );
    446                break;
    447          #endif
    448          
    449          #if defined ( ZDO_MGMT_RTG_REQUEST )
    450              case SPI_CMD_ZDO_MGMT_RTG_REQ:
    451                devAddr.addrMode = Addr16Bit;
    452                devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
    453                ret = (byte)ZDP_MgmtRtgReq( &devAddr, pData[2], false );
    454                break;
    455          #endif
    456          
    457          #if defined ( ZDO_MGMT_BIND_REQUEST )
    458              case SPI_CMD_ZDO_MGMT_BIND_REQ:
    459                devAddr.addrMode = Addr16Bit;
    460                devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
    461                ret = (byte)ZDP_MgmtBindReq( &devAddr, pData[2], false );
    462                break;
    463          #endif
    464          
    465          #if defined ( ZDO_MGMT_JOINDIRECT_REQUEST )
    466              case SPI_CMD_ZDO_MGMT_DIRECT_JOIN_REQ:
    467                devAddr.addrMode = Addr16Bit;
    468                devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
    469                MT_ReverseBytes( &pData[2], Z_EXTADDR_LEN );
    470                ret = (byte)ZDP_MgmtDirectJoinReq( &devAddr,
    471                                         &pData[2],
    472                                         pData[2 + Z_EXTADDR_LEN],
    473                                         false );
    474                break;
    475          #endif
    476          
    477          #if defined ( ZDO_MGMT_LEAVE_REQUEST )
    478              case SPI_CMD_ZDO_MGMT_LEAVE_REQ:
    479                devAddr.addrMode = Addr16Bit;
    480                devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
    481                MT_ReverseBytes( &pData[2], Z_EXTADDR_LEN );
    482                ret = (byte)ZDP_MgmtLeaveReq( &devAddr, &pData[2], false );
    483                break;
    484          #endif
    485          
    486          #if defined ( ZDO_MGMT_PERMIT_JOIN_REQUEST )
    487              case SPI_CMD_ZDO_MGMT_PERMIT_JOIN_REQ:
    488                devAddr.addrMode = Addr16Bit;
    489                devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
    490                ret = (byte)ZDP_MgmtPermitJoinReq( &devAddr, pData[2], pData[3], false );
    491                break;
    492          #endif
    493          
    494          
    495          #if defined ( ZDO_USERDESCSET_REQUEST )
    496              case SPI_CMD_ZDO_USER_DESC_SET:
    497                // destination address
    498                devAddr.addrMode = Addr16Bit;
    499                devAddr.addr.shortAddr = BUILD_UINT16( pData[1], pData[0] );
    500                pData += 2;
    501          
    502                // Network address of interest
    503                shortAddr = BUILD_UINT16( pData[1], pData[0] );
    504                pData += 2;
    505          
    506                // User descriptor
    507                userDesc.len = *pData++;
    508                osal_memcpy( userDesc.desc, pData, userDesc.len );
    509                pData += 16;  // len of user desc
    510          
    511                ret =(byte)ZDP_UserDescSet( &devAddr, shortAddr, &userDesc, pData[0] );
    512                break;
    513          #endif
    514          
    515          #if defined ( ZDO_ENDDEVICE_ANNCE_REQUEST )
    516              case SPI_CMD_ZDO_END_DEV_ANNCE:
    517                // network address
    518                shortAddr = BUILD_UINT16( pData[1], pData[0] );
    519                pData += 2;
    520          
    521                // extended address
    522                ptr = pData;
    523                MT_ReverseBytes( ptr, Z_EXTADDR_LEN );
    524                pData += Z_EXTADDR_LEN;
    525          
    526                // security
    527                attr = *pData++;
    528          
    529                ret = (byte)ZDP_EndDeviceAnnce( shortAddr, ptr, *pData, attr );
    530                break;
    531          #endif
    532          
    533          #if defined (ZDO_SERVERDISC_REQUEST )
    534              case SPI_CMD_ZDO_SERVERDISC_REQ:
    535                
    536                // Service Mask
    537                uAttr = BUILD_UINT16( pData[1], pData[0] );
    538                pData += 2;
    539                attr = *pData++; // Security suite
    540                
    541                ret = (byte) ZDP_ServerDiscReq( uAttr, attr );
    542                break;
    543          #endif
    544                
    545          #if defined (ZDO_NETWORKSTART_REQUEST )
    546              case SPI_CMD_ZDO_NETWORK_START_REQ:
    547                ret = ZDApp_StartUpFromApp( ZDAPP_STARTUP_AUTO );
    548                break;
    549              
    550          #endif
    551              
    552              default:
    553                break;
    554            }
    555          
    556            MT_SendSPIRespMsg( ret, cmd_id, len, respLen );
    557          }
    558          
    559          /*********************************************************************
    560           * Utility FUNCTIONS
    561           */
    562          
    563          /*********************************************************************
    564           * @fn      zdo_MT_CopyRevExtAddr
    565           *
    566           */
    567          byte *zdo_MT_CopyRevExtAddr( byte *dstMsg, byte *addr )
    568          {
    569            // Copy the 64-bit address
    570            osal_cpyExtAddr( dstMsg, addr );
    571            // Reverse byte order
    572            MT_ReverseBytes( dstMsg, Z_EXTADDR_LEN );
    573            // Return ptr to next destination location
    574            return ( dstMsg + Z_EXTADDR_LEN );
    575          }
    576          
    577          /*********************************************************************
    578           * @fn      zdo_MT_MakeExtAddr
    579           *
    580           */
    581          byte *zdo_MT_MakeExtAddr( zAddrType_t *devAddr, byte *pData )
    582          {
    583            // Define a 64-bit address
    584            devAddr->addrMode = Addr64Bit;
    585            // Copy and reverse the 64-bit address
    586            zdo_MT_CopyRevExtAddr( devAddr->addr.extAddr, pData );
    587            // Return ptr to next destination location
    588            return ( pData + Z_EXTADDR_LEN );
    589          }
    590          
    591          /*********************************************************************
    592           * CALLBACK FUNCTIONS
    593           */
    594          
    595          #if defined ( ZDO_NWKADDR_REQUEST ) || defined ( ZDO_IEEEADDR_REQUEST )
    596          /*********************************************************************
    597           * @fn      zdo_MTCB_NwkIEEEAddrRspCB
    598           *
    599           * @brief
    600           *
    601           *   Called by ZDO when a NWK_addr_rsp message is received.
    602           *
    603           * @param  SrcAddr  - Source address
    604           * @param  Status - response status
    605           * @param  IEEEAddr - 64 bit IEEE address of device
    606           * @param  nwkAddr - 16 bit network address of device
    607           * @param  NumAssocDev - number of associated devices to reporting device
    608           * @param  AssocDevList - array short addresses of associated devices
    609           *
    610           * @return  none
    611           */
    612          void zdo_MTCB_NwkIEEEAddrRspCB( uint16 type, zAddrType_t *SrcAddr, byte Status,
    613                                         byte *IEEEAddr, uint16 nwkAddr, byte NumAssocDev,
    614                                         byte StartIndex, uint16 *AssocDevList )
    615          {
    616            byte *pBuf;
    617            byte *msg;
    618            byte len;
    619            byte x;
    620          
    621            /*Allocate a message of size equivalent to the corresponding SPI message
    622            (plus a couple of bytes for MT use)so that the same buffer can be sent by
    623            MT to the test tool by simply setting the header bytes.*/
    624          
    625            /*In order to allocate the message , we need to know the length and this
    626            has to be calculated before we allocate the message*/
    627          
    628            if ( type == SPI_CB_ZDO_NWK_ADDR_RSP )
    629            {
    630              len = 1 + Z_EXTADDR_LEN +  1 + Z_EXTADDR_LEN + 2 + 1 + 1 + (2*8);
    631                // Addrmode + SrcAddr + Status + IEEEAddr + nwkAddr + NumAssocDev + StartIndex
    632            }
    633            else
    634            {
    635              len = 1 + Z_EXTADDR_LEN +  1 + Z_EXTADDR_LEN + 1 + 1 + (2*8);
    636                // Addrmode + SrcAddr + Status + IEEEAddr + NumAssocDev + StartIndex
    637            }
    638          
    639            pBuf = osal_mem_alloc( len );
    640          
    641            if ( pBuf )
    642            {
    643              msg = pBuf;
    644          
    645              //First fill in details
    646              if ( SrcAddr->addrMode == Addr16Bit )
    647              {
    648                *msg++ = Addr16Bit;
    649                for ( x = 0; x < (Z_EXTADDR_LEN - 2); x++ )
    650                  *msg++ = 0;
    651                *msg++ = HI_UINT16( SrcAddr->addr.shortAddr );
    652                *msg++ = LO_UINT16( SrcAddr->addr.shortAddr );
    653              }
    654              else
    655              {
    656                *msg++ = Addr64Bit;
    657                msg = zdo_MT_CopyRevExtAddr( msg, SrcAddr->addr.extAddr );
    658              }
    659          
    660              *msg++ = Status;
    661              msg = zdo_MT_CopyRevExtAddr( msg, IEEEAddr );
    662          
    663              if ( type == SPI_CB_ZDO_NWK_ADDR_RSP )
    664              {
    665                *msg++ = HI_UINT16( nwkAddr );
    666                *msg++ = LO_UINT16( nwkAddr );
    667              }
    668          
    669              *msg++ = NumAssocDev;
    670              *msg++ = StartIndex;
    671              byte cnt = NumAssocDev - StartIndex;
    672          
    673              for ( x = 0; x < 8; x++ )
    674              {
    675                if ( x < cnt )
    676                {

⌨️ 快捷键说明

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