/*************************************************************************************************** * @fn MT_UtilAddrMgrEntryLookupExt * * @brief Proxy the AddrMgrEntryLookupExt() function. * * @param pBuf - pointer to the received buffer * * @return void ***************************************************************************************************/ static void MT_UtilAddrMgrEntryLookupExt(uint8 *pBuf) { uint8 nwkAddr[2]; AddrMgrEntry_t entry; uint8 cmdId = pBuf[MT_RPC_POS_CMD1]; pBuf += MT_RPC_FRAME_HDR_SZ; osal_memcpy(entry.extAddr, pBuf, Z_EXTADDR_LEN); (void)AddrMgrEntryLookupExt(&entry); nwkAddr[0] = LO_UINT16(entry.nwkAddr); nwkAddr[1] = HI_UINT16(entry.nwkAddr); MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_UTIL), cmdId, sizeof(uint16), nwkAddr); }
/********************************************************************* * @fn bindAddrIndexGet * * @brief Get bind address index. * * @param addr - <zAddrType_t> * * @return (uint16) address index */ uint16 bindAddrIndexGet( zAddrType_t* addr ) { AddrMgrEntry_t entry; uint8 update; update = FALSE; // sync binding addresses with the address manager entry.user = ADDRMGR_USER_BINDING; if ( addr->addrMode == Addr16Bit ) { entry.nwkAddr = addr->addr.shortAddr; if ( AddrMgrEntryLookupNwk( &entry ) == FALSE ) { update = TRUE; } } else if ( addr->addrMode == Addr64Bit ) { AddrMgrExtAddrSet( entry.extAddr, addr->addr.extAddr ); if ( AddrMgrEntryLookupExt( &entry ) == FALSE ) { update = TRUE; } } else if ( addr->addrMode == AddrGroup ) { entry.index = addr->addr.shortAddr; } else { entry.index = INVALID_NODE_ADDR; } if ( update ) { AddrMgrEntryUpdate( &entry ); } return entry.index; }
/********************************************************************* * @fn bindingAddrMgsHelperFind * * @brief Turns an zAddrType_t to an Addr Manager index * * @param addr - zAddrType_t * * @return INVALID_NODE_ADDR if not found, otherwise an index */ uint16 bindingAddrMgsHelperFind( zAddrType_t *addr ) { AddrMgrEntry_t entry; // Resolve addresses with the address manager entry.user = ADDRMGR_USER_BINDING; if ( addr->addrMode == Addr16Bit ) { entry.nwkAddr = addr->addr.shortAddr; AddrMgrEntryLookupNwk( &entry ); } else { AddrMgrExtAddrSet( entry.extAddr, addr->addr.extAddr ); AddrMgrEntryLookupExt( &entry ); } return ( entry.index ); }