123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583 |
- /**************************************************************************************************
- Filename: nwk_globals.c
- Revised: $Date: 2012-03-07 01:04:58 -0800 (Wed, 07 Mar 2012) $
- Revision: $Revision: 29656 $
- Description: User definable Network Parameters.
- Copyright 2004-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 “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.
- **************************************************************************************************/
- /*********************************************************************
- * INCLUDES
- */
- #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
- /* HAL */
- #include "hal_lcd.h"
- /*********************************************************************
- * MACROS
- */
- /*********************************************************************
- * CONSTANTS
- */
- // Maximums for the data buffer queue
- #define NWK_MAX_DATABUFS_WAITING 8 // Waiting to be sent to MAC
- #define NWK_MAX_DATABUFS_SCHEDULED 5 // Timed messages to be sent
- #define NWK_MAX_DATABUFS_CONFIRMED 5 // Held after MAC confirms
- #define NWK_MAX_DATABUFS_TOTAL 12 // Total number of buffers
- // 1-255 (0 -> 256) X RTG_TIMER_INTERVAL
- // A known shortcoming is that when a message is enqueued as "hold" for a
- // sleeping device, the timer tick may have counted down to 1, so that msg
- // will not be held as long as expected. If NWK_INDIRECT_MSG_TIMEOUT is set to 1
- // the hold time will vary randomly from 0 - CNT_RTG_TIMER ticks.
- // So the hold time will vary within this interval:
- // { (NWK_INDIRECT_MSG_TIMEOUT-1)*CNT_RTG_TIMER,
- // NWK_INDIRECT_MSG_TIMEOUT*CNT_RTG_TIMER }
- #define NWK_INDIRECT_CNT_RTG_TMR 1
- // To hold msg for sleeping end devices for 30 secs:
- // #define CNT_RTG_TIMER 1
- // #define NWK_INDIRECT_MSG_TIMEOUT 30
- // To hold msg for sleeping end devices for 30 mins:
- // #define CNT_RTG_TIMER 60
- // #define NWK_INDIRECT_MSG_TIMEOUT 30
- // To hold msg for sleeping end devices for 30 days:
- // #define CNT_RTG_TIMER 60
- // #define NWK_INDIRECT_MSG_TIMEOUT (30 * 24 * 60)
- // Maximum msgs to hold per associated device.
- #define NWK_INDIRECT_MSG_MAX_PER 3
- // Maximum total msgs to hold for all associated devices.
- #define NWK_INDIRECT_MSG_MAX_ALL \
- (NWK_MAX_DATABUFS_TOTAL - NWK_INDIRECT_MSG_MAX_PER)
- /*********************************************************************
- * TYPEDEFS
- */
- /*********************************************************************
- * NWK GLOBAL VARIABLES
- */
- // Variables for MAX list size
- CONST uint16 gNWK_MAX_DEVICE_LIST = NWK_MAX_DEVICES;
- // Variables for MAX Sleeping End Devices
- CONST uint8 gNWK_MAX_SLEEPING_END_DEVICES = NWK_MAX_DEVICES - NWK_MAX_ROUTERS;
- // Variables for MAX data buffer levels
- 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;
- // change this if using a different stack profile...
- // Cskip array
- 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 // STACK_PROFILE_ID
- // Minimum lqi value that is required for association
- uint8 gMIN_TREE_LINK_COST = MIN_LQI_COST_3;
- // Statically defined Associated Device List
- 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;
- // Table of neighboring nodes (not including child nodes)
- 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;
- // Routing table
- rtgEntry_t rtgTable[MAX_RTG_ENTRIES];
- #if defined ( ZIGBEE_SOURCE_ROUTING )
- rtgSrcEntry_t rtgSrcTable[MAX_RTG_SRC_ENTRIES];
- uint16 rtgSrcRelayList[MAX_SOURCE_ROUTE];
- #endif
- // Table of current RREQ packets in the network
- rtDiscEntry_t rtDiscTable[MAX_RREQ_ENTRIES];
- // Table of data broadcast packets currently in circulation.
- bcastEntry_t bcastTable[MAX_BCAST];
- // These 2 arrays are to be used as an array of struct { uint8, uint32 }.
- uint8 bcastHoldHandle[MAX_BCAST];
- uint32 bcastHoldAckMask[MAX_BCAST];
- CONST uint8 gMAX_BCAST = MAX_BCAST;
- // For tree addressing, this switch allows the allocation of a
- // router address to an end device when end device address are
- // all used up. If this option is enabled, address space
- // could be limited.
- CONST uint8 gNWK_TREE_ALLOCATE_ROUTERADDR_FOR_ENDDEVICE = FALSE;
- #if defined ( ZIGBEE_STOCHASTIC_ADDRESSING )
- // number of link status periods after the last received address conflict report
- // (network status command)
- 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
- // The time limited to one MTO RReq (Concentrator Announce) in milliseconds.
- CONST uint16 gMTO_RREQ_LIMIT_TIME = MTO_RREQ_LIMIT_TIME;
- // The number of seconds a MTO routing entry will last.
- CONST uint8 gMTO_ROUTE_EXPIRY_TIME = MTO_ROUTE_EXPIRY_TIME;
- // Route Discovery Request Default Radius
- CONST uint8 gDEFAULT_ROUTE_REQUEST_RADIUS = DEFAULT_ROUTE_REQUEST_RADIUS;
- // Network message radius
- CONST uint8 gDEF_NWK_RADIUS = DEF_NWK_RADIUS;
- #if ( ZSTACK_ROUTER_BUILD )
- CONST uint16 gLINK_STATUS_JITTER_MASK = LINK_STATUS_JITTER_MASK;
- #endif
- /*********************************************************************
- * APS GLOBAL VARIABLES
- */
- // The Maximum number of binding records
- // This number is defined in f8wConfig.cfg - change it there.
- CONST uint16 gNWK_MAX_BINDING_ENTRIES = NWK_MAX_BINDING_ENTRIES;
- #if defined ( REFLECTOR )
- // The Maximum number of cluster IDs in a binding record
- // This number is defined in f8wConfig.cfg - change it there.
- CONST uint8 gMAX_BINDING_CLUSTER_IDS = MAX_BINDING_CLUSTER_IDS;
- CONST uint16 gBIND_REC_SIZE = sizeof( BindingEntry_t );
- // Binding Table
- BindingEntry_t BindingTable[NWK_MAX_BINDING_ENTRIES];
- #endif
- // Maximum number allowed in the groups table.
- CONST uint8 gAPS_MAX_GROUPS = APS_MAX_GROUPS;
- // APS End Device Broadcast Table
- #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
- /*********************************************************************
- * SECURITY GLOBAL VARIABLES
- */
- // This is the default pre-configured key,
- // change this to make a unique key
- // SEC_KEY_LEN is defined in ssp.h.
- #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 )
- // Key for ZigBee Conformance Testing
- 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
- #else
- // Key for In-House Testing
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
- #endif
- };
- #endif
- // This is the default pre-configured Trust Center Link key,
- // change this to make a unique key, SEC_KEY_LEN is defined in ssp.h.
- CONST uint8 defaultTCLinkKey[SEC_KEY_LEN] = DEFAULT_TC_LINK_KEY;
- /*********************************************************************
- * GLOBAL VARIABLES - Statistics
- */
- #if defined ( PACKET_FILTER_STATS )
- uint32 apsInvalidPackets = 0;
- uint32 apsSecurityFailures = 0;
- uint32 nwkInvalidPackets = 0;
- uint32 nwkSecurityFailures = 0;
- #endif
- /*********************************************************************
- * STATUS STRINGS
- */
- #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
- /*********************************************************************
- * @fn nwk_globals_init()
- *
- * @brief
- *
- * Initialize nwk layer globals. These are the system defaults and
- * should be changed by the user here. The default definitions are
- * defined in nwk.h or NLMEDE.h.
- *
- * @param none
- *
- * @return none
- */
- void nwk_globals_init( void )
- {
- AddrMgrInit( NWK_MAX_ADDRESSES );
- #if !defined ( ZIGBEE_STOCHASTIC_ADDRESSING )
- if ( ZSTACK_ROUTER_BUILD )
- {
- // Initialize the Cskip Table
- Cskip = osal_mem_alloc(sizeof(uint16) *(MAX_NODE_DEPTH+1));
- RTG_FillCSkipTable(CskipChldrn, CskipRtrs, MAX_NODE_DEPTH, Cskip);
- }
- #endif
- // To compile out the Link Status Feature, set NWK_LINK_STATUS_PERIOD
- // to 0 (compiler flag).
- if ( ZSTACK_ROUTER_BUILD && NWK_LINK_STATUS_PERIOD )
- {
- NLME_InitLinkStatus();
- }
- #if defined ( ZIGBEE_FREQ_AGILITY )
- NwkFreqAgilityInit();
- #endif
- }
- /*********************************************************************
- * @fn NIB_init()
- *
- * @brief
- *
- * Initialize attribute values in NIB
- *
- * @param none
- *
- * @return none
- */
- 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
- // BROADCAST SETTINGS:
- // *******************
- // Broadcast Delivery Time
- // - set to multiples of 100ms
- // - should be 500ms more than the retry time
- // - "retry time" = PassiveAckTimeout * (MaxBroadcastRetries + 1)
- // Passive Ack Timeout
- // - set to multiples of 100ms
- _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;
- //MTO and source routing
- _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
- }
- }
- /*********************************************************************
- * @fn nwk_Status()
- *
- * @brief
- *
- * Status report.
- *
- * @param statusCode
- * @param statusValue
- *
- * @return none
- */
- void nwk_Status( uint16 statusCode, uint16 statusValue )
- {
- #if defined ( LCD_SUPPORTED )
- switch ( statusCode )
- {
- case NWK_STATUS_COORD_ADDR:
- if ( ZSTACK_ROUTER_BUILD )
- {
- //HalLcdWriteString( (char*)ZigbeeCoordStr, HAL_LCD_LINE_1 );
- // HalLcdWriteStringValue( (char*)NetworkIDStr, statusValue, 16, HAL_LCD_LINE_2 );
- BuzzerControl( BUZZER_BLIP );
- }
- break;
- case NWK_STATUS_ROUTER_ADDR:
- if ( ZSTACK_ROUTER_BUILD )
- {
- // HalLcdWriteStringValue( (char*)RouterStr, statusValue, 16, HAL_LCD_LINE_1 );
- }
- break;
- case NWK_STATUS_ORPHAN_RSP:
- if ( ZSTACK_ROUTER_BUILD )
- {
- // if ( statusValue == ZSuccess )
- // HalLcdWriteScreen( (char*)OrphanRspStr, (char*)SentStr );
- // else
- // HalLcdWriteScreen( (char*)OrphanRspStr, (char*)FailedStr );
- }
- break;
- case NWK_ERROR_ASSOC_RSP:
- if ( ZSTACK_ROUTER_BUILD )
- {
- // HalLcdWriteString( (char*)AssocRspFailStr, HAL_LCD_LINE_1 );
- // HalLcdWriteValue( (uint32)(statusValue), 16, HAL_LCD_LINE_2 );
- }
- break;
- case NWK_STATUS_ED_ADDR:
- if ( ZSTACK_END_DEVICE_BUILD )
- {
- // HalLcdWriteStringValue( (char*)EndDeviceStr, statusValue, 16, HAL_LCD_LINE_1 );
- }
- break;
- case NWK_STATUS_PARENT_ADDR:
- // HalLcdWriteStringValue( (char*)ParentStr, statusValue, 16, HAL_LCD_LINE_2 );
- break;
- case NWK_STATUS_ASSOC_CNF:
- // HalLcdWriteScreen( (char*)AssocCnfStr, (char*)SuccessStr );
- break;
- case NWK_ERROR_ASSOC_CNF_DENIED:
- // HalLcdWriteString((char*)AssocCnfFailStr, HAL_LCD_LINE_1 );
- // HalLcdWriteValue( (uint32)(statusValue), 16, HAL_LCD_LINE_2 );
- break;
- case NWK_ERROR_ENERGY_SCAN_FAILED:
- // HalLcdWriteScreen( (char*)EnergyLevelStr, (char*)ScanFailedStr );
- break;
- }
- #endif
- }
- /*********************************************************************
- * @fn nwk_UpdateStatistics()
- *
- * @brief Update network layer statistic counters
- *
- * @param statisticCode
- *
- * @return none
- */
- 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
- }
- /*********************************************************************
- *********************************************************************/
|