123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583 |
- #include "ZComdef.h"
- #include "OSAL.h"
- #include "OSAL_Nv.h"
- #include "AddrMgr.h"
- #include "AssocList.h"
- #include "BindingTable.h"
- #include "nwk_util.h"
- #include "nwk_globals.h"
- #include "APS.h"
- #include "ssp.h"
- #include "rtg.h"
- #include "ZDConfig.h"
- #include "ZGlobals.h"
- #if defined ( LCD_SUPPORTED )
- #include "OnBoard.h"
- #endif
- #include "hal_lcd.h"
- #define NWK_MAX_DATABUFS_WAITING 8
- #define NWK_MAX_DATABUFS_SCHEDULED 5
- #define NWK_MAX_DATABUFS_CONFIRMED 5
- #define NWK_MAX_DATABUFS_TOTAL 12
- #define NWK_INDIRECT_CNT_RTG_TMR 1
- #define NWK_INDIRECT_MSG_MAX_PER 3
- #define NWK_INDIRECT_MSG_MAX_ALL \
- (NWK_MAX_DATABUFS_TOTAL - NWK_INDIRECT_MSG_MAX_PER)
- CONST uint16 gNWK_MAX_DEVICE_LIST = NWK_MAX_DEVICES;
- CONST uint8 gNWK_MAX_SLEEPING_END_DEVICES = NWK_MAX_DEVICES - NWK_MAX_ROUTERS;
- CONST uint8 gNWK_MAX_DATABUFS_WAITING = NWK_MAX_DATABUFS_WAITING;
- CONST uint8 gNWK_MAX_DATABUFS_SCHEDULED = NWK_MAX_DATABUFS_SCHEDULED;
- CONST uint8 gNWK_MAX_DATABUFS_CONFIRMED = NWK_MAX_DATABUFS_CONFIRMED;
- CONST uint8 gNWK_MAX_DATABUFS_TOTAL = NWK_MAX_DATABUFS_TOTAL;
- CONST uint8 gNWK_INDIRECT_CNT_RTG_TMR = NWK_INDIRECT_CNT_RTG_TMR;
- CONST uint8 gNWK_INDIRECT_MSG_MAX_PER = NWK_INDIRECT_MSG_MAX_PER;
- CONST uint8 gNWK_INDIRECT_MSG_MAX_ALL = NWK_INDIRECT_MSG_MAX_ALL;
- uint16 *Cskip;
- #if ( STACK_PROFILE_ID == ZIGBEEPRO_PROFILE )
- uint8 CskipRtrs[1] = {0};
- uint8 CskipChldrn[1] = {0};
- #elif ( STACK_PROFILE_ID == HOME_CONTROLS )
- uint8 CskipRtrs[MAX_NODE_DEPTH+1] = {6,6,6,6,6,0};
- uint8 CskipChldrn[MAX_NODE_DEPTH+1] = {20,20,20,20,20,0};
- #elif ( STACK_PROFILE_ID == GENERIC_STAR )
- uint8 CskipRtrs[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
- uint8 CskipChldrn[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
- #elif ( STACK_PROFILE_ID == NETWORK_SPECIFIC )
- uint8 CskipRtrs[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
- uint8 CskipChldrn[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
- #endif
- uint8 gMIN_TREE_LINK_COST = MIN_LQI_COST_3;
- associated_devices_t AssociatedDevList[NWK_MAX_DEVICES];
- #if defined ( ZIGBEE_STOCHASTIC_ADDRESSING )
- CONST uint16 gNWK_MIN_ROUTER_CHILDREN = NWK_MIN_ROUTER_CHILDREN;
- CONST uint16 gNWK_MIN_ENDDEVICE_CHILDREN = NWK_MIN_ENDDEVICE_CHILDREN;
- #else
- CONST uint16 gNWK_MIN_ROUTER_CHILDREN = 0;
- CONST uint16 gNWK_MIN_ENDDEVICE_CHILDREN = 0;
- #endif
- CONST uint16 gMAX_RTG_ENTRIES = MAX_RTG_ENTRIES;
- CONST uint16 gMAX_RTG_SRC_ENTRIES = MAX_RTG_SRC_ENTRIES;
- CONST uint8 gMAX_RREQ_ENTRIES = MAX_RREQ_ENTRIES;
- CONST uint8 gMAX_NEIGHBOR_ENTRIES = MAX_NEIGHBOR_ENTRIES;
-
- neighborEntry_t neighborTable[MAX_NEIGHBOR_ENTRIES];
- CONST uint8 gMAX_SOURCE_ROUTE = MAX_SOURCE_ROUTE;
- CONST uint8 gMAX_BROADCAST_QUEUED = MAX_BROADCAST_QUEUED;
- CONST uint8 gLINK_DOWN_TRIGGER = LINK_DOWN_TRIGGER;
- CONST uint8 gMAX_PASSIVE_ACK_CNT = MAX_PASSIVE_ACK_CNT;
- rtgEntry_t rtgTable[MAX_RTG_ENTRIES];
- #if defined ( ZIGBEE_SOURCE_ROUTING )
- rtgSrcEntry_t rtgSrcTable[MAX_RTG_SRC_ENTRIES];
- uint16 rtgSrcRelayList[MAX_SOURCE_ROUTE];
- #endif
- rtDiscEntry_t rtDiscTable[MAX_RREQ_ENTRIES];
- bcastEntry_t bcastTable[MAX_BCAST];
- uint8 bcastHoldHandle[MAX_BCAST];
- uint32 bcastHoldAckMask[MAX_BCAST];
- CONST uint8 gMAX_BCAST = MAX_BCAST;
- CONST uint8 gNWK_TREE_ALLOCATE_ROUTERADDR_FOR_ENDDEVICE = FALSE;
- #if defined ( ZIGBEE_STOCHASTIC_ADDRESSING )
- CONST uint8 gNWK_CONFLICTED_ADDR_EXPIRY_TIME = NWK_CONFLICTED_ADDR_EXPIRY_TIME;
- #endif
- #if defined ( ZIGBEE_FREQ_AGILITY )
- CONST uint8 gNWK_FREQ_AGILITY_ALL_MAC_ERRS = NWK_FREQ_AGILITY_ALL_MAC_ERRS;
- #endif
- CONST uint16 gMTO_RREQ_LIMIT_TIME = MTO_RREQ_LIMIT_TIME;
- CONST uint8 gMTO_ROUTE_EXPIRY_TIME = MTO_ROUTE_EXPIRY_TIME;
- CONST uint8 gDEFAULT_ROUTE_REQUEST_RADIUS = DEFAULT_ROUTE_REQUEST_RADIUS;
- CONST uint8 gDEF_NWK_RADIUS = DEF_NWK_RADIUS;
- #if ( ZSTACK_ROUTER_BUILD )
- CONST uint16 gLINK_STATUS_JITTER_MASK = LINK_STATUS_JITTER_MASK;
- #endif
- CONST uint16 gNWK_MAX_BINDING_ENTRIES = NWK_MAX_BINDING_ENTRIES;
- #if defined ( REFLECTOR )
-
-
- CONST uint8 gMAX_BINDING_CLUSTER_IDS = MAX_BINDING_CLUSTER_IDS;
- CONST uint16 gBIND_REC_SIZE = sizeof( BindingEntry_t );
-
- BindingEntry_t BindingTable[NWK_MAX_BINDING_ENTRIES];
- #endif
- CONST uint8 gAPS_MAX_GROUPS = APS_MAX_GROUPS;
- #if ( ZG_BUILD_ENDDEVICE_TYPE )
- apsEndDeviceBroadcast_t apsEndDeviceBroadcastTable[APS_MAX_ENDDEVICE_BROADCAST_ENTRIES];
- uint8 gAPS_MAX_ENDDEVICE_BROADCAST_ENTRIES = APS_MAX_ENDDEVICE_BROADCAST_ENTRIES;
- #endif
- #if defined ( DEFAULT_KEY )
- CONST uint8 defaultKey[SEC_KEY_LEN] = DEFAULT_KEY;
- #else
- CONST uint8 defaultKey[SEC_KEY_LEN] =
- {
- #if defined ( APP_TP ) || defined ( APP_TP2 )
-
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
- #else
-
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
- #endif
- };
- #endif
- CONST uint8 defaultTCLinkKey[SEC_KEY_LEN] = DEFAULT_TC_LINK_KEY;
- #if defined ( PACKET_FILTER_STATS )
- uint32 apsInvalidPackets = 0;
- uint32 apsSecurityFailures = 0;
- uint32 nwkInvalidPackets = 0;
- uint32 nwkSecurityFailures = 0;
- #endif
- #if defined ( LCD_SUPPORTED )
- const char PingStr[] = "Ping Rcvd from";
- const char AssocCnfStr[] = "Assoc Cnf";
- const char SuccessStr[] = "Success";
- const char EndDeviceStr[] = "EndDevice:";
- const char ParentStr[] = "Parent:";
- const char ZigbeeCoordStr[] = "ZigBee Coord";
- const char NetworkIDStr[] = "Network ID:";
- const char RouterStr[] = "Router:";
- const char OrphanRspStr[] = "Orphan Response";
- const char SentStr[] = "Sent";
- const char FailedStr[] = "Failed";
- const char AssocRspFailStr[] = "Assoc Rsp fail";
- const char AssocIndStr[] = "Assoc Ind";
- const char AssocCnfFailStr[] = "Assoc Cnf fail";
- const char EnergyLevelStr[] = "Energy Level";
- const char ScanFailedStr[] = "Scan Failed";
- #endif
- void nwk_globals_init( void )
- {
- AddrMgrInit( NWK_MAX_ADDRESSES );
- #if !defined ( ZIGBEE_STOCHASTIC_ADDRESSING )
- if ( ZSTACK_ROUTER_BUILD )
- {
-
- Cskip = osal_mem_alloc(sizeof(uint16) *(MAX_NODE_DEPTH+1));
- RTG_FillCSkipTable(CskipChldrn, CskipRtrs, MAX_NODE_DEPTH, Cskip);
- }
- #endif
-
-
- if ( ZSTACK_ROUTER_BUILD && NWK_LINK_STATUS_PERIOD )
- {
- NLME_InitLinkStatus();
- }
- #if defined ( ZIGBEE_FREQ_AGILITY )
- NwkFreqAgilityInit();
- #endif
- }
- void NIB_init()
- {
- _NIB.SequenceNum = LO_UINT16(osal_rand());
- _NIB.nwkProtocolVersion = ZB_PROT_VERS;
- _NIB.MaxDepth = MAX_NODE_DEPTH;
- #if ( NWK_MODE == NWK_MODE_MESH )
- _NIB.beaconOrder = BEACON_ORDER_NO_BEACONS;
- _NIB.superFrameOrder = BEACON_ORDER_NO_BEACONS;
- #endif
-
-
-
-
-
-
-
-
- _NIB.BroadcastDeliveryTime = zgBcastDeliveryTime;
- _NIB.PassiveAckTimeout = zgPassiveAckTimeout;
- _NIB.MaxBroadcastRetries = zgMaxBcastRetires;
- _NIB.ReportConstantCost = 0;
- _NIB.RouteDiscRetries = 0;
- _NIB.SecureAllFrames = USE_NWK_SECURITY;
- _NIB.nwkAllFresh = NWK_ALL_FRESH;
- if ( ZG_SECURE_ENABLED )
- {
- _NIB.SecurityLevel = SECURITY_LEVEL;
- }
- else
- {
- _NIB.SecurityLevel = 0;
- }
- #if defined ( ZIGBEEPRO )
- _NIB.SymLink = FALSE;
- #else
- _NIB.SymLink = TRUE;
- #endif
- _NIB.CapabilityFlags = ZDO_Config_Node_Descriptor.CapabilityFlags;
- _NIB.TransactionPersistenceTime = zgIndirectMsgTimeout;
- _NIB.RouteDiscoveryTime = zgRouteDiscoveryTime;
- _NIB.RouteExpiryTime = zgRouteExpiryTime;
- _NIB.nwkDevAddress = INVALID_NODE_ADDR;
- _NIB.nwkLogicalChannel = 0;
- _NIB.nwkCoordAddress = INVALID_NODE_ADDR;
- osal_memset( _NIB.nwkCoordExtAddress, 0, Z_EXTADDR_LEN );
- _NIB.nwkPanId = INVALID_NODE_ADDR;
- osal_cpyExtAddr( _NIB.extendedPANID, zgExtendedPANID );
- _NIB.nwkKeyLoaded = FALSE;
- #if defined ( ZIGBEE_STOCHASTIC_ADDRESSING )
- _NIB.nwkAddrAlloc = NWK_ADDRESSING_STOCHASTIC;
- _NIB.nwkUniqueAddr = FALSE;
- #else
- _NIB.nwkAddrAlloc = NWK_ADDRESSING_DISTRIBUTED;
- _NIB.nwkUniqueAddr = TRUE;
- #endif
- _NIB.nwkLinkStatusPeriod = NWK_LINK_STATUS_PERIOD;
- _NIB.nwkRouterAgeLimit = NWK_ROUTE_AGE_LIMIT;
-
- _NIB.nwkConcentratorDiscoveryTime = zgConcentratorDiscoveryTime;
- _NIB.nwkIsConcentrator = zgConcentratorEnable;
- _NIB.nwkConcentratorRadius = zgConcentratorRadius;
- #if defined ( ZIGBEE_MULTICAST )
- _NIB.nwkUseMultiCast = TRUE;
- #else
- _NIB.nwkUseMultiCast = FALSE;
- #endif
- #if defined ( NV_RESTORE )
- if ( osal_nv_read( ZCD_NV_NWKMGR_ADDR, 0, sizeof( _NIB.nwkManagerAddr ),
- &_NIB.nwkManagerAddr ) != SUCCESS )
- #endif
- {
- _NIB.nwkManagerAddr = 0x0000;
- }
- _NIB.nwkUpdateId = 0;
- _NIB.nwkTotalTransmissions = 0;
- if ( ZSTACK_ROUTER_BUILD )
- {
- #if defined ( ZIGBEE_STOCHASTIC_ADDRESSING )
- NLME_InitStochasticAddressing();
- #else
- NLME_InitTreeAddressing();
- #endif
- }
- }
- void nwk_Status( uint16 statusCode, uint16 statusValue )
- {
- #if defined ( LCD_SUPPORTED )
- switch ( statusCode )
- {
- case NWK_STATUS_COORD_ADDR:
- if ( ZSTACK_ROUTER_BUILD )
- {
-
-
- BuzzerControl( BUZZER_BLIP );
- }
- break;
- case NWK_STATUS_ROUTER_ADDR:
- if ( ZSTACK_ROUTER_BUILD )
- {
-
- }
- break;
- case NWK_STATUS_ORPHAN_RSP:
- if ( ZSTACK_ROUTER_BUILD )
- {
- }
- break;
- case NWK_ERROR_ASSOC_RSP:
- if ( ZSTACK_ROUTER_BUILD )
- {
-
-
- }
- break;
- case NWK_STATUS_ED_ADDR:
- if ( ZSTACK_END_DEVICE_BUILD )
- {
-
- }
- break;
- case NWK_STATUS_PARENT_ADDR:
-
- break;
- case NWK_STATUS_ASSOC_CNF:
-
- break;
- case NWK_ERROR_ASSOC_CNF_DENIED:
-
-
- break;
- case NWK_ERROR_ENERGY_SCAN_FAILED:
-
- break;
- }
- #endif
- }
- void nwk_UpdateStatistics( uint8 statisticCode )
- {
- #if defined ( PACKET_FILTER_STATS )
- switch ( statisticCode )
- {
- case STAT_NWK_INVALID_PACKET:
- nwkInvalidPackets++;
- break;
- case STAT_NWK_SECURITY_FAILURE:
- nwkInvalidPackets++;
- nwkSecurityFailures++;
- break;
- case STAT_APS_INVALID_PACKET:
- apsInvalidPackets++;
- break;
- case STAT_APS_SECURITY_FAILURE:
- apsSecurityFailures++;
- break;
- }
- #endif
- }
|