smart-green-house/project_ZigBee/Components/stack/nwk/AddrMgr.h

361 lines
12 KiB
C
Raw Permalink Normal View History

2023-10-28 18:00:47 +08:00
/**************************************************************************************************
Filename: AddrMgr.h
Revised: $Date: 2011-05-05 13:52:19 -0700 (Thu, 05 May 2011) $
Revision: $Revision: 25878 $
Description: This file contains the interface to the Address Manager.
Copyright 2005-2011 Texas Instruments Incorporated. All rights reserved.
IMPORTANT: Your use of this Software is limited to those specific rights
granted under the terms of a software license agreement between the user
who downloaded the software, his/her employer (which must be your employer)
and Texas Instruments Incorporated (the "License"). You may not use this
Software unless you agree to abide by the terms of the License. The License
limits your use, and you acknowledge, that the Software may not be modified,
copied or distributed unless embedded on a Texas Instruments microcontroller
or used solely and exclusively in conjunction with a Texas Instruments radio
frequency transceiver, which is integrated into your product. Other than for
the foregoing purpose, you may not use, reproduce, copy, prepare derivative
works of, modify, distribute, perform, display or sell this Software and/or
its documentation for any purpose.
YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
PROVIDED <EFBFBD>AS IS<EFBFBD> WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
Should you have any questions regarding your right to use this Software,
contact Texas Instruments Incorporated at www.TI.com.
**************************************************************************************************/
#ifndef ADDRMGR_H
#define ADDRMGR_H
#ifdef __cplusplus
extern "C"
{
#endif
/******************************************************************************
* INCLUDES
*/
#include "ZComDef.h"
/******************************************************************************
* CONSTANTS
*/
// registration IDs - use with <AddrMgrRegister>
#define ADDRMGR_REG_ASSOC 0x00
#define ADDRMGR_REG_SECURITY 0x01
#define ADDRMGR_REG_BINDING 0x02
#define ADDRMGR_REG_PRIVATE1 0x03
// user IDs - use with <AddrMgrEntry_t>
#define ADDRMGR_USER_DEFAULT 0x00
#define ADDRMGR_USER_ASSOC 0x01
#define ADDRMGR_USER_SECURITY 0x02
#define ADDRMGR_USER_BINDING 0x04
#define ADDRMGR_USER_PRIVATE1 0x08
// update types - use with registered callback <AddrMgrUserCB_t>
#define ADDRMGR_ENTRY_NWKADDR_SET 1
#define ADDRMGR_ENTRY_NWKADDR_DUP 2
#define ADDRMGR_ENTRY_EXTADDR_SET 3
// address manager callback feature enable/disable
#define ADDRMGR_CALLBACK_ENABLED 0
/******************************************************************************
* TYPEDEFS
*/
// entry data
typedef struct
{
uint8 user;
uint16 nwkAddr;
uint8 extAddr[Z_EXTADDR_LEN];
uint16 index;
} AddrMgrEntry_t;
// user callback set during registration
typedef void (*AddrMgrUserCB_t)( uint8 update,
AddrMgrEntry_t* newEntry,
AddrMgrEntry_t* oldEntry );
/******************************************************************************
* PUBLIC FUNCTIONS
*/
/******************************************************************************
* @fn AddrMgrInit
*
* @brief Initialize Address Manager.
*
* @param entryTotal - [in] total number of address entries
*
* @return none
*/
extern void AddrMgrInit( uint16 entryTotal );
/******************************************************************************
* @fn AddrMgrReset
*
* @brief Reset Address Manager.
*
* @param none
*
* @return none
*/
extern void AddrMgrReset( void );
/******************************************************************************
* @fn AddrMgrInitNV
*
* @brief Initialize the address entry data in NV.
*
* @param none
*
* @return uint8 - <osal_nv_item_init> return codes
*/
extern uint8 AddrMgrInitNV( void );
/******************************************************************************
* @fn AddrMgrSetDefaultNV
*
* @brief Set default address entry data in NV.
*
* @param none
*
* @return none
*/
extern void AddrMgrSetDefaultNV( void );
/******************************************************************************
* @fn AddrMgrRestoreFromNV
*
* @brief Restore the address entry data from NV.
*
* @param none
*
* @return none
*/
extern void AddrMgrRestoreFromNV( void );
/******************************************************************************
* @fn AddrMgrWriteNV
*
* @brief Save the address entry data to NV.
*
* @param none
*
* @return none
*/
extern void AddrMgrWriteNV( void );
/******************************************************************************
* @fn AddrMgrWriteNVRequest
*
* @brief Stub routine implemented by NHLE. NHLE should call
* <AddrMgrWriteNV> when appropriate.
*
* @param none
*
* @return none
*/
extern void AddrMgrWriteNVRequest( void );
#if ( ADDRMGR_CALLBACK_ENABLED == 1 )
/******************************************************************************
* @fn AddrMgrRegister
*
* @brief Register as a user of the Address Manager.
*
* @param reg - [in] register ID
* @param cb - [in] user callback
*
* @return uint8 - success(TRUE:FALSE)
*/
extern uint8 AddrMgrRegister( uint8 reg, AddrMgrUserCB_t cb );
#endif //ADDRMGR_CALLBACK_ENABLED
/******************************************************************************
* @fn AddrMgrExtAddrSet
*
* @brief Set destination address to source address or empty{0x00}.
*
* @param dstExtAddr - [in] destination EXT address
* srcExtAddr - [in] source EXT address
*
* @return none
*/
extern void AddrMgrExtAddrSet( uint8* dstExtAddr, uint8* srcExtAddr );
/******************************************************************************
* @fn AddrMgrExtAddrValid
*
* @brief Check if EXT address is valid - not NULL, not empty{0x00}.
*
* @param extAddr - [in] EXT address
*
* @return uint8 - success(TRUE:FALSE)
*/
extern uint8 AddrMgrExtAddrValid( uint8* extAddr );
/******************************************************************************
* @fn AddrMgrExtAddrEqual
*
* @brief Compare two EXT addresses.
*
* @param extAddr1 - [in] EXT address 1
* extAddr2 - [in] EXT address 2
*
* @return uint8 - success(TRUE:FALSE)
*/
extern uint8 AddrMgrExtAddrEqual( uint8* extAddr1, uint8* extAddr2 );
/******************************************************************************
* @fn AddrMgrExtAddrLookup
*
* @brief Lookup EXT address using the NWK address.
*
* @param nwkAddr - [in] NWK address
* extAddr - [out] EXT address
*
* @return uint8 - success(TRUE:FALSE)
*/
extern uint8 AddrMgrExtAddrLookup( uint16 nwkAddr, uint8* extAddr );
/******************************************************************************
* @fn AddrMgrNwkAddrLookup
*
* @brief Lookup NWK address using the EXT address.
*
* @param extAddr - [in] EXT address
* nwkAddr - [out] NWK address
*
* @return uint8 - success(TRUE:FALSE)
*/
extern uint8 AddrMgrNwkAddrLookup( uint8* extAddr, uint16* nwkAddr );
/******************************************************************************
* @fn AddrMgrEntryRelease
*
* @brief Release a user reference from an entry in the Address Manager.
*
* @param entry
* ::user - [in] user ID
* ::index - [in] index of data
* ::nwkAddr - not used
* ::extAddr - not used
*
* @return uint8 - success(TRUE:FALSE)
*/
extern uint8 AddrMgrEntryRelease( AddrMgrEntry_t* entry );
/******************************************************************************
* @fn AddrMgrEntryAddRef
*
* @brief Add a user reference to an entry in the Address Manager.
*
* @param entry
* ::user - [in] user ID
* ::index - [in] index of data
* ::nwkAddr - not used
* ::extAddr - not used
*
* @return uint8 - success(TRUE:FALSE)
*/
extern uint8 AddrMgrEntryAddRef( AddrMgrEntry_t* entry );
/******************************************************************************
* @fn AddrMgrEntryLookupNwk
*
* @brief Lookup entry based on NWK address.
*
* @param entry
* ::user - [in] user ID
* ::nwkAddr - [in] NWK address
* ::extAddr - [out] EXT address
* ::index - [out] index of data
*
* @return uint8 - success(TRUE:FALSE)
*/
extern uint8 AddrMgrEntryLookupNwk( AddrMgrEntry_t* entry );
/******************************************************************************
* @fn AddrMgrEntryLookupExt
*
* @brief Lookup entry based on EXT address.
*
* @param entry
* ::user - [in] user ID
* ::extAddr - [in] EXT address
* ::nwkAddr - [out] NWK address
* ::index - [out] index of data
*
* @return uint8 - success(TRUE:FALSE)
*/
extern uint8 AddrMgrEntryLookupExt( AddrMgrEntry_t* entry );
/******************************************************************************
* @fn AddrMgrEntryGet
*
* @brief Get NWK address and EXT address based on index.
*
* @param entry
* ::user - [in] user ID
* ::index - [in] index of data
* ::nwkAddr - [out] NWK address
* ::extAddr - [out] EXT address
*
* @return uint8 - success(TRUE:FALSE)
*/
extern uint8 AddrMgrEntryGet( AddrMgrEntry_t* entry );
/******************************************************************************
* @fn AddrMgrEntryUpdate
*
* @brief Update an entry into the Address Manager.
*
* @param entry
* ::user - [in] user ID
* ::nwkAddr - [in] NWK address
* ::extAddr - [in] EXT address
* ::index - [out] index of data
*
* @return uint8 - success(TRUE:FALSE)
*/
uint8 AddrMgrEntryUpdate( AddrMgrEntry_t* entry );
/******************************************************************************
* @fn AddrMgrIsFull
*
* @brief Checks to see if the address manager is full.
*
* @param none
*
* @return uint8 - success(TRUE:FALSE)
* TRUE if there are no more empty slots,
* FALSE if available slot
*/
extern uint8 AddrMgrIsFull( void );
/******************************************************************************
******************************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* ADDRMGR_H */