📄 zdsecmgr.c
字号:
entry.user = ADDRMGR_USER_SECURITY;
entry.nwkAddr = INVALID_NODE_ADDR;
AddrMgrExtAddrSet( entry.extAddr, extAddr );
if ( AddrMgrEntryUpdate( &entry ) == TRUE )
{
// return successful results
*ami = entry.index;
status = ZSuccess;
}
else
{
// return failed results
*ami = entry.index;
status = ZNwkUnknownDevice;
}
return status;
}
#endif // defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDSECMGR_COMMERCIAL )
/******************************************************************************
* @fn ZDSecMgrMasterKeyLookup
*
* @brief Lookup MASTER key for specified address index.
*
* @param ami - [in] Address Manager index
* @param key - [out] valid MASTER key
*
* @return ZStatus_t
*/
ZStatus_t ZDSecMgrMasterKeyLookup( uint16 ami, uint8** key )
{
ZStatus_t status;
uint16 index;
// initialize results
*key = NULL;
status = ZNwkUnknownDevice;
// verify data is available
if ( ZDSecMgrMasterKeyData != NULL )
{
for ( index = 0; index < ZDSECMGR_MASTERKEY_MAX ; index++ )
{
if ( ZDSecMgrMasterKeyData[index].ami == ami )
{
// return successful results
*key = ZDSecMgrMasterKeyData[index].key;
status = ZSuccess;
// break from loop
index = ZDSECMGR_MASTERKEY_MAX;
}
}
}
return status;
}
#endif // defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDSECMGR_COMMERCIAL )
/******************************************************************************
* @fn ZDSecMgrMasterKeyStore
*
* @brief Store MASTER key for specified address index.
*
* @param ami - [in] Address Manager index
* @param key - [in] valid key to store
*
* @return ZStatus_t
*/
ZStatus_t ZDSecMgrMasterKeyStore( uint16 ami, uint8* key )
{
ZStatus_t status;
uint16 index;
uint8* entry;
// initialize results
status = ZNwkUnknownDevice;
// verify data is available
if ( ZDSecMgrMasterKeyData != NULL )
{
for ( index = 0; index < ZDSECMGR_MASTERKEY_MAX ; index++ )
{
if ( ZDSecMgrMasterKeyData[index].ami == INVALID_NODE_ADDR )
{
// store EXT address index
ZDSecMgrMasterKeyData[index].ami = ami;
entry = ZDSecMgrMasterKeyData[index].key;
if ( key != NULL )
{
osal_cpyExtAddr( entry, key );
}
else
{
osal_memset( entry, 0, SEC_KEY_LEN );
}
// return successful results
status = ZSuccess;
// break from loop
index = ZDSECMGR_MASTERKEY_MAX;
}
}
}
return status;
}
#endif // !defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDSECMGR_COMMERCIAL )
/******************************************************************************
* @fn ZDSecMgrEntryInit
*
* @brief Initialize entry sub module
*
* @param none
*
* @return none
*/
void ZDSecMgrEntryInit( void )
{
uint16 size;
uint16 index;
// allocate entry data
size = (short)( sizeof(ZDSecMgrEntry_t) * ZDSECMGR_ENTRY_MAX );
ZDSecMgrEntries = osal_mem_alloc( size );
// initialize data
if ( ZDSecMgrEntries != NULL )
{
for( index = 0; index < ZDSECMGR_ENTRY_MAX; index++ )
{
ZDSecMgrEntries[index].ami = INVALID_NODE_ADDR;
}
}
}
#endif // defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDSECMGR_COMMERCIAL )
/******************************************************************************
* @fn ZDSecMgrEntryLookup
*
* @brief Lookup entry index using specified NWK address.
*
* @param nwkAddr - [in] NWK address
* @param entry - [out] valid entry
*
* @return ZStatus_t
*/
ZStatus_t ZDSecMgrEntryLookup( uint16 nwkAddr, ZDSecMgrEntry_t** entry )
{
ZStatus_t status;
uint16 index;
AddrMgrEntry_t addrMgrEntry;
// initialize results
*entry = NULL;
status = ZNwkUnknownDevice;
// verify data is available
if ( ZDSecMgrEntries != NULL )
{
addrMgrEntry.user = ADDRMGR_USER_SECURITY;
addrMgrEntry.nwkAddr = nwkAddr;
if ( AddrMgrEntryLookupNwk( &addrMgrEntry ) == TRUE )
{
for ( index = 0; index < ZDSECMGR_ENTRY_MAX ; index++ )
{
if ( addrMgrEntry.index == ZDSecMgrEntries[index].ami )
{
// return successful results
*entry = &ZDSecMgrEntries[index];
status = ZSuccess;
// break from loop
index = ZDSECMGR_ENTRY_MAX;
}
}
}
}
return status;
}
#endif // defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDSECMGR_COMMERCIAL )
/******************************************************************************
* @fn ZDSecMgrEntryLookupAMI
*
* @brief Lookup entry using specified address index
*
* @param ami - [in] Address Manager index
* @param entry - [out] valid entry
*
* @return ZStatus_t
*/
ZStatus_t ZDSecMgrEntryLookupAMI( uint16 ami, ZDSecMgrEntry_t** entry )
{
ZStatus_t status;
uint16 index;
// initialize results
*entry = NULL;
status = ZNwkUnknownDevice;
// verify data is available
if ( ZDSecMgrEntries != NULL )
{
for ( index = 0; index < ZDSECMGR_ENTRY_MAX ; index++ )
{
if ( ZDSecMgrEntries[index].ami == ami )
{
// return successful results
*entry = &ZDSecMgrEntries[index];
status = ZSuccess;
// break from loop
index = ZDSECMGR_ENTRY_MAX;
}
}
}
return status;
}
#endif // defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDSECMGR_COMMERCIAL )
/******************************************************************************
* @fn ZDSecMgrEntryLookupExt
*
* @brief Lookup entry index using specified EXT address.
*
* @param extAddr - [in] EXT address
* @param entry - [out] valid entry
*
* @return ZStatus_t
*/
ZStatus_t ZDSecMgrEntryLookupExt( uint8* extAddr, ZDSecMgrEntry_t** entry )
{
ZStatus_t status;
uint16 ami;
// initialize results
*entry = NULL;
status = ZNwkUnknownDevice;
// lookup address index
if ( ZDSecMgrExtAddrLookup( extAddr, &ami ) == ZSuccess )
{
status = ZDSecMgrEntryLookupAMI( ami, entry );
}
return status;
}
#endif // defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDSECMGR_COMMERCIAL )
/******************************************************************************
* @fn ZDSecMgrEntryFree
*
* @brief Free entry.
*
* @param entry - [in] valid entry
*
* @return ZStatus_t
*/
void ZDSecMgrEntryFree( ZDSecMgrEntry_t* entry )
{
entry->ami = INVALID_NODE_ADDR;
}
#endif // defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDSECMGR_COMMERCIAL )
/******************************************************************************
* @fn ZDSecMgrEntryNew
*
* @brief Get a new entry.
*
* @param entry - [out] valid entry
*
* @return ZStatus_t
*/
ZStatus_t ZDSecMgrEntryNew( ZDSecMgrEntry_t** entry )
{
ZStatus_t status;
uint16 index;
// initialize results
*entry = NULL;
status = ZNwkUnknownDevice;
// verify data is available
if ( ZDSecMgrEntries != NULL )
{
// find available entry
for ( index = 0; index < ZDSECMGR_ENTRY_MAX ; index++ )
{
if ( ZDSecMgrEntries[index].ami == INVALID_NODE_ADDR )
{
// return successful result
*entry = &ZDSecMgrEntries[index];
status = ZSuccess;
// break from loop
index = ZDSECMGR_ENTRY_MAX;
}
}
}
return status;
}
#endif // defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDSECMGR_COMMERCIAL )
/******************************************************************************
* @fn ZDSecMgrCtrlInit
*
* @brief Initialize control sub module
*
* @param none
*
* @return none
*/
void ZDSecMgrCtrlInit( void )
{
//---------------------------------------------------------------------------
#if defined ( ZDO_COORDINATOR )
//---------------------------------------------------------------------------
uint16 size;
uint16 index;
// allocate entry data
size = (short)( sizeof(ZDSecMgrCtrl_t) * ZDSECMGR_CTRL_MAX );
ZDSecMgrCtrlData = osal_mem_alloc( size );
// initialize data
if ( ZDSecMgrCtrlData != NULL )
{
for( index = 0; index < ZDSECMGR_CTRL_MAX; index++ )
{
ZDSecMgrCtrlData[index].state = ZDSECMGR_CTRL_NONE;
}
}
//---------------------------------------------------------------------------
#endif // defined ( ZDO_COORDINATOR )
//---------------------------------------------------------------------------
}
#endif // defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDO_COORDINATOR )
/******************************************************************************
* @fn ZDSecMgrCtrlRelease
*
* @brief Release control data.
*
* @param ctrl - [in] valid control data
*
* @return none
*/
void ZDSecMgrCtrlRelease( ZDSecMgrCtrl_t* ctrl )
{
// should always be enough entry control data
ctrl->state = ZDSECMGR_CTRL_NONE;
}
#endif // defined ( ZDO_COORDINATOR )
#endif // defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDO_COORDINATOR )
/******************************************************************************
* @fn ZDSecMgrCtrlLookup
*
* @brief Lookup control data.
*
* @param entry - [in] valid entry data
* @param ctrl - [out] control data - NULL if not found
*
* @return none
*/
void ZDSecMgrCtrlLookup( ZDSecMgrEntry_t* entry, ZDSecMgrCtrl_t** ctrl )
{
uint16 index;
// initialize search results
*ctrl = NULL;
// verify data is available
if ( ZDSecMgrCtrlData != NULL )
{
for ( index = 0; index < ZDSECMGR_CTRL_MAX; index++ )
{
// make sure control data is in use
if ( ZDSecMgrCtrlData[index].state != ZDSECMGR_CTRL_NONE )
{
// check for entry match
if ( ZDSecMgrCtrlData[index].entry == entry )
{
// return this control data
*ctrl = &ZDSecMgrCtrlData[index];
// break from loop
index = ZDSECMGR_CTRL_MAX;
}
}
}
}
}
#endif // defined ( ZDO_COORDINATOR )
#endif // defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDSECMGR_COMMERCIAL )
#if defined ( ZDO_COORDINATOR )
/******************************************************************************
* @fn ZDSecMgrCtrlSet
*
* @brief Set control data.
*
* @param device - [in] valid device data
* @param entry - [in] valid entry data
* @param ctrl - [in] valid control data
*
* @return none
*/
void ZDSecMgrCtrlSet( ZDSecMgrDevice_t* device,
ZDSecMgrEntry_t* entry,
ZDSecMgrCtrl_t* ctrl )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -