123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- /**************************************************************************************************
- Filename: BindingTable.h
- Revised: $Date: 2007-10-28 18:41:49 -0700 (Sun, 28 Oct 2007) $
- Revision: $Revision: 15799 $
- Description: Device binding table.
- Copyright 2004-2007 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 “AS IS” 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 BINDINGTABLE_H
- #define BINDINGTABLE_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*********************************************************************
- * INCLUDES
- */
- #include "ZComdef.h"
- #include "osal.h"
- #include "nwk.h"
- #include "AssocList.h"
- /*********************************************************************
- * MACROS
- */
- /*********************************************************************
- * CONSTANTS
- */
- #define MAX_DEVICE_PAIRS 255 // temp value
- #define DSTGROUPMODE_ADDR 0
- #define DSTGROUPMODE_GROUP 1
- /*********************************************************************
- * TYPEDEFS
- */
- typedef struct
- {
- uint16 numRecs;
- } nvBindingHdr_t;
- // Don't use sizeof( BindingEntry_t ) use gBIND_REC_SIZE when calculating
- // the size of each binding table entry. gBIND_REC_SIZE is defined in nwk_global.c.
- typedef struct
- {
- // No src address since the src is always the local device
- uint8 srcEP;
- uint8 dstGroupMode; // Destination address type; 0 - Normal address index, 1 - Group address
- uint16 dstIdx; // This field is used in both modes (group and non-group) to save NV and RAM space
- // dstGroupMode = 0 - Address Manager index
- // dstGroupMode = 1 - Group Address
- uint8 dstEP;
- uint8 numClusterIds;
- uint16 clusterIdList[MAX_BINDING_CLUSTER_IDS];
- // Don't use MAX_BINDING_CLUSTERS_ID when
- // using the clusterIdList field. Use
- // gMAX_BINDING_CLUSTER_IDS
- } BindingEntry_t;
- /*********************************************************************
- * GLOBAL VARIABLES
- */
- // BindingTable is defined in nwk_globals.c and NWK_MAX_BINDING_ENTRIES
- // is defined in f8wConfig.cfg. Don't use NWK_MAX_BINDING_ENTRIES as the
- // number of records - use gNWK_MAX_BINDING_ENTRIES.
- extern BindingEntry_t BindingTable[];
- /*********************************************************************
- * FUNCTIONS
- */
- /*
- * This function is used to initialise the binding table
- */
- extern void InitBindingTable( void );
- /*
- * Removes a binding table entry.
- */
- extern byte bindRemoveEntry( BindingEntry_t *pBind );
- /*
- * Is the clusterID in the clusterID list?
- */
- extern byte bindIsClusterIDinList( BindingEntry_t *entry, uint16 clusterId );
- /*
- * Removes a ClusterID from a list of ClusterIDs.
- */
- extern byte bindRemoveClusterIdFromList( BindingEntry_t *entry, uint16 clusterId );
- /*
- * Adds a ClusterID to a list of ClusterIDs.
- */
- extern byte bindAddClusterIdToList( BindingEntry_t *entry, uint16 clusterId );
- /*
- * Finds an existing src/epint to dst/epint bind record
- */
- extern BindingEntry_t *bindFindExisting( byte srcEpInt,
- zAddrType_t *dstShortAddr, byte dstEpInt );
- /*
- * Remove binds(s) associated to Source address, endpoint and cluster.
- */
- extern void nwk_remove_bindSrc( zAddrType_t *srcAddr, byte epInt,
- byte numClusterIds, uint16 *clusterIds );
- /*
- * Remove bind(s) associated to a address (source or destination)
- */
- extern void bindRemoveDev( zAddrType_t *shortAddr);
- /*
- * Remove bind(s) associated to a address (source)
- */
- extern void bindRemoveSrcDev( uint8 ep );
- /*
- * Calculate the number items this device is bound to.
- */
- extern byte bindNumBoundTo( zAddrType_t *devAddr, byte devEpInt, byte srcMode );
- /*
- * Count the number of reflections.
- */
- extern uint16 bindNumReflections( uint8 ep, uint16 clusterID );
- /*
- * Finds the binding entry for the source address,
- * endpoint and clusterID passed in as a parameter.
- */
- extern BindingEntry_t *bindFind( uint8 ep, uint16 clusterID, uint8 skipping );
- /*
- * Processes the Hand Binding Timeout.
- */
- extern void nwk_HandBindingTimeout( void );
- /*
- * Initialize Binding Table NV Item
- */
- extern byte BindInitNV( void );
- /*
- * Initialize Binding Table NV Item
- */
- extern void BindSetDefaultNV( void );
- /*
- * Restore Binding Table from NV
- */
- extern uint16 BindRestoreFromNV( void );
- /*
- * Write Binding Table out to NV
- */
- extern void BindWriteNV( void );
- /*
- * Update network address in binding table
- */
- extern void bindUpdateAddr( uint16 oldAddr, uint16 newAddr );
- /*
- * This function is used to Add an entry to the binding table
- */
- extern BindingEntry_t *bindAddEntry( byte srcEpInt,
- zAddrType_t *dstAddr, byte dstEpInt,
- byte numClusterIds, uint16 *clusterIds );
- /*
- * This function returns the number of binding table entries
- */
- extern uint16 bindNumOfEntries( void );
- /*
- * This function returns the number of binding entries
- * possible and used.
- */
- extern void bindCapacity( uint16 *maxEntries, uint16 *usedEntries );
- /*********************************************************************
- * FUNCTION POINTERS
- */
- /*
- * This function is used to Add an entry to the binding table
- */
- extern BindingEntry_t *(*pbindAddEntry)( byte srcEpInt,
- zAddrType_t *dstAddr, byte dstEpInt,
- byte numClusterIds, uint16 *clusterIds );
- /*
- * This function returns the number of binding table entries
- */
- extern uint16 (*pbindNumOfEntries)( void );
- /*
- * Remove bind(s) associated to a address (source or destination)
- */
- extern void (*pbindRemoveDev)( zAddrType_t *Addr );
- /*
- * Initialize Binding Table NV Item
- */
- extern byte (*pBindInitNV)( void );
- /*
- * Initialize Binding Table NV Item
- */
- extern void (*pBindSetDefaultNV)( void );
- /*
- * Restore binding table from NV
- */
- extern uint16 (*pBindRestoreFromNV)( void );
- /*
- * Write binding table to NV
- */
- extern void (*pBindWriteNV)( void );
- /*
- * Convert address manager index to zAddrType_t for an extended address
- */
- extern uint8 bindingAddrMgsHelperConvert( uint16 idx, zAddrType_t *addr );
- /*
- * Convert address manager index to short address
- */
- extern uint16 bindingAddrMgsHelperConvertShort( uint16 idx );
- /*
- * Get a pointer to the Nth valid binding table entry.
- */
- extern BindingEntry_t *GetBindingTableEntry( uint16 Nth );
- /*********************************************************************
- *********************************************************************/
- #ifdef __cplusplus
- }
- #endif
- #endif /* BINDINGTABLE_H */
|