123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670 |
- #include "ZComDef.h"
- #include "OSAL_Nv.h"
- #include "ZDObject.h"
- #include "ZGlobals.h"
- #include "ZDNwkMgr.h"
- #include "OnBoard.h"
- #include "ZDSecMgr.h"
- typedef struct zgItem
- {
- uint16 id;
- uint16 len;
- void *buf;
- } zgItem_t;
- uint16 zgPollRate = POLL_RATE;
- uint16 zgQueuedPollRate = QUEUED_POLL_RATE;
- uint16 zgResponsePollRate = RESPONSE_POLL_RATE;
- uint16 zgRejoinPollRate = REJOIN_POLL_RATE;
- uint8 zgMaxDataRetries = NWK_MAX_DATA_RETRIES;
- uint8 zgMaxPollFailureRetries = MAX_POLL_FAILURE_RETRIES;
- uint32 zgDefaultChannelList = DEFAULT_CHANLIST;
- uint8 zgDefaultStartingScanDuration = STARTING_SCAN_DURATION;
- uint8 zgStackProfile = STACK_PROFILE_ID;
- uint8 zgIndirectMsgTimeout = NWK_INDIRECT_MSG_TIMEOUT;
- uint8 zgSecurityMode = ZG_SECURITY_MODE;
- uint8 zgSecurePermitJoin = true;
- uint16 zgTrustCenterAddr = ZG_TRUSTCENTER_ADDR;
- uint8 zgRouteDiscoveryTime = ROUTE_DISCOVERY_TIME;
- uint8 zgRouteExpiryTime = ROUTE_EXPIRY_TIME;
- uint8 zgExtendedPANID[Z_EXTADDR_LEN];
- uint8 zgMaxBcastRetires = MAX_BCAST_RETRIES;
- uint8 zgPassiveAckTimeout = PASSIVE_ACK_TIMEOUT;
- uint8 zgBcastDeliveryTime = BCAST_DELIVERY_TIME;
- uint8 zgNwkMode = NWK_MODE;
- uint8 zgConcentratorEnable = CONCENTRATOR_ENABLE;
- uint8 zgConcentratorDiscoveryTime = CONCENTRATOR_DISCOVERY_TIME;
- uint8 zgConcentratorRadius = CONCENTRATOR_RADIUS;
- uint8 zgConcentratorRC = CONCENTRATOR_ROUTE_CACHE;
- uint8 zgNwkSrcRtgExpiryTime = SRC_RTG_EXPIRY_TIME;
- uint8 zgRouterOffAssocCleanup = FALSE;
- uint8 zgApscMaxFrameRetries = APSC_MAX_FRAME_RETRIES;
- uint16 zgApscAckWaitDurationPolled = APSC_ACK_WAIT_DURATION_POLLED;
- uint8 zgApsAckWaitMultiplier = 2;
- uint16 zgApsDefaultMaxBindingTime = APS_DEFAULT_MAXBINDING_TIME;
- uint8 zgApsUseExtendedPANID[Z_EXTADDR_LEN] = {00,00,00,00,00,00,00,00};
- uint8 zgApsUseInsecureJoin = TRUE;
- uint8 zgApsNonMemberRadius = APS_DEFAULT_NONMEMBER_RADIUS;
- uint8 zgPreConfigKeys = FALSE;
- uint8 zgUseDefaultTCLK = TRUE;
- uint16 zgConfigPANID = ZDAPP_CONFIG_PAN_ID;
- uint8 zgDeviceLogicalType = DEVICE_LOGICAL_TYPE;
- uint8 zgStartDelay = START_DELAY;
- #if !defined MT_TASK
- uint8 zgZdoDirectCB = FALSE;
- #endif
- uint8 zgNwkMgrMinTransmissions = ZDNWKMGR_MIN_TRANSMISSIONS;
- uint8 zgNwkMgrMode = ZDNWKMGR_ENABLE;
- uint8 zgSapiEndpoint = SAPI_ENDPOINT;
- static CONST zgItem_t zgItemTable[] =
- {
- #if defined ( NV_INIT )
- #if !defined MT_TASK
- {
- ZCD_NV_ZDO_DIRECT_CB, sizeof(zgZdoDirectCB), &zgZdoDirectCB
- },
- #endif
- {
- ZCD_NV_LOGICAL_TYPE, sizeof(zgDeviceLogicalType), &zgDeviceLogicalType
- },
- {
- ZCD_NV_POLL_RATE, sizeof(zgPollRate), &zgPollRate
- },
- {
- ZCD_NV_QUEUED_POLL_RATE, sizeof(zgQueuedPollRate), &zgQueuedPollRate
- },
- {
- ZCD_NV_RESPONSE_POLL_RATE, sizeof(zgResponsePollRate), &zgResponsePollRate
- },
- {
- ZCD_NV_REJOIN_POLL_RATE, sizeof(zgRejoinPollRate), &zgRejoinPollRate
- },
- {
- ZCD_NV_DATA_RETRIES, sizeof(zgMaxDataRetries), &zgMaxDataRetries
- },
- {
- ZCD_NV_POLL_FAILURE_RETRIES, sizeof(zgMaxPollFailureRetries), &zgMaxPollFailureRetries
- },
- {
- ZCD_NV_CHANLIST, sizeof(zgDefaultChannelList), &zgDefaultChannelList
- },
- {
- ZCD_NV_SCAN_DURATION, sizeof(zgDefaultStartingScanDuration), &zgDefaultStartingScanDuration
- },
- {
- ZCD_NV_STACK_PROFILE, sizeof(zgStackProfile), &zgStackProfile
- },
- {
- ZCD_NV_INDIRECT_MSG_TIMEOUT, sizeof(zgIndirectMsgTimeout), &zgIndirectMsgTimeout
- },
- {
- ZCD_NV_ROUTE_EXPIRY_TIME, sizeof(zgRouteExpiryTime), &zgRouteExpiryTime
- },
- {
- ZCD_NV_EXTENDED_PAN_ID, Z_EXTADDR_LEN, zgExtendedPANID
- },
- {
- ZCD_NV_BCAST_RETRIES, sizeof(zgMaxBcastRetires), &zgMaxBcastRetires
- },
- {
- ZCD_NV_PASSIVE_ACK_TIMEOUT, sizeof(zgPassiveAckTimeout), &zgPassiveAckTimeout
- },
- {
- ZCD_NV_BCAST_DELIVERY_TIME, sizeof(zgBcastDeliveryTime), &zgBcastDeliveryTime
- },
- {
- ZCD_NV_NWK_MODE, sizeof(zgNwkMode), &zgNwkMode
- },
- {
- ZCD_NV_CONCENTRATOR_ENABLE, sizeof(zgConcentratorEnable), &zgConcentratorEnable
- },
- {
- ZCD_NV_CONCENTRATOR_DISCOVERY, sizeof(zgConcentratorDiscoveryTime), &zgConcentratorDiscoveryTime
- },
- {
- ZCD_NV_CONCENTRATOR_RADIUS, sizeof(zgConcentratorRadius), &zgConcentratorRadius
- },
- {
- ZCD_NV_CONCENTRATOR_RC, sizeof(zgConcentratorRC), &zgConcentratorRC
- },
- {
- ZCD_NV_SRC_RTG_EXPIRY_TIME, sizeof(zgNwkSrcRtgExpiryTime), &zgNwkSrcRtgExpiryTime
- },
- {
- ZCD_NV_ROUTE_DISCOVERY_TIME, sizeof(zgRouteDiscoveryTime), &zgRouteDiscoveryTime
- },
- #ifndef NONWK
- {
- ZCD_NV_PANID, sizeof(zgConfigPANID), &zgConfigPANID
- },
- {
- ZCD_NV_PRECFGKEYS_ENABLE, sizeof(zgPreConfigKeys), &zgPreConfigKeys
- },
- {
- ZCD_NV_SECURITY_MODE, sizeof(zgSecurityMode), &zgSecurityMode
- },
- {
- ZCD_NV_SECURE_PERMIT_JOIN, sizeof(zgSecurePermitJoin), &zgSecurePermitJoin
- },
- {
- ZCD_NV_USE_DEFAULT_TCLK, sizeof(zgUseDefaultTCLK), &zgUseDefaultTCLK
- },
- {
- ZCD_NV_TRUSTCENTER_ADDR, sizeof(zgTrustCenterAddr), &zgTrustCenterAddr
- },
- #endif
- {
- ZCD_NV_APS_FRAME_RETRIES, sizeof(zgApscMaxFrameRetries), &zgApscMaxFrameRetries
- },
- {
- ZCD_NV_APS_ACK_WAIT_DURATION, sizeof(zgApscAckWaitDurationPolled), &zgApscAckWaitDurationPolled
- },
- {
- ZCD_NV_APS_ACK_WAIT_MULTIPLIER, sizeof(zgApsAckWaitMultiplier), &zgApsAckWaitMultiplier
- },
- {
- ZCD_NV_BINDING_TIME, sizeof(zgApsDefaultMaxBindingTime), &zgApsDefaultMaxBindingTime
- },
- {
- ZCD_NV_APS_USE_EXT_PANID, Z_EXTADDR_LEN, zgApsUseExtendedPANID
- },
- {
- ZCD_NV_APS_USE_INSECURE_JOIN, sizeof(zgApsUseInsecureJoin), &zgApsUseInsecureJoin
- },
- {
- ZCD_NV_APS_NONMEMBER_RADIUS, sizeof(zgApsNonMemberRadius), &zgApsNonMemberRadius
- },
- {
- ZCD_NV_START_DELAY, sizeof(zgStartDelay), &zgStartDelay
- },
- {
- ZCD_NV_SAPI_ENDPOINT, sizeof(zgSapiEndpoint), &zgSapiEndpoint
- },
- {
- ZCD_NV_NWK_MGR_MODE, sizeof(zgNwkMgrMode), &zgNwkMgrMode
- },
- {
- ZCD_NV_NWKMGR_MIN_TX, sizeof(zgNwkMgrMinTransmissions), &zgNwkMgrMinTransmissions
- },
- {
- ZCD_NV_ROUTER_OFF_ASSOC_CLEANUP, sizeof(zgRouterOffAssocCleanup), &zgRouterOffAssocCleanup
- },
- #endif
-
- {
- 0x00, 0, NULL
- }
- };
- static uint8 zgItemInit( uint16 id, uint16 len, void *buf, uint8 setDefault );
- #ifndef NONWK
- static uint8 zgPreconfigKeyInit( uint8 setDefault );
- #endif
- static uint8 zgItemInit( uint16 id, uint16 len, void *buf, uint8 setDefault )
- {
- uint8 status;
-
-
- status = osal_nv_item_init( id, len, buf );
- if ( status == ZSUCCESS )
- {
- if ( setDefault )
- {
-
- status = osal_nv_write( id, 0, len, buf );
- }
- else
- {
-
- status = osal_nv_read( id, 0, len, buf );
- }
- }
- return (status);
- }
- uint8 zgInit( void )
- {
- uint8 setDefault = FALSE;
-
- if ( zgReadStartupOptions() & ZCD_STARTOPT_DEFAULT_CONFIG_STATE )
- {
- setDefault = TRUE;
- }
- #if 0
-
-
- uint16 bootCnt = 0;
-
- if ( osal_nv_item_init( ZCD_NV_BOOTCOUNTER, sizeof(bootCnt), &bootCnt ) == ZSUCCESS )
- {
-
- osal_nv_read( ZCD_NV_BOOTCOUNTER, 0, sizeof(bootCnt), &bootCnt );
- }
-
- if ( setDefault )
- bootCnt = 0;
- else
- bootCnt++;
- osal_nv_write( ZCD_NV_BOOTCOUNTER, 0, sizeof(bootCnt), &bootCnt );
- #endif
-
- ZMacGetReq( ZMacExtAddr, zgExtendedPANID );
-
- zgInitItems( setDefault );
- #ifndef NONWK
- if ( ZG_SECURE_ENABLED )
- {
-
- zgPreconfigKeyInit( setDefault );
-
- ZDSecMgrInitNVKeyTables( setDefault );
- }
- #endif
-
- if ( setDefault )
- {
- zgWriteStartupOptions( ZG_STARTUP_CLEAR, ZCD_STARTOPT_DEFAULT_CONFIG_STATE );
- }
- return ( ZSUCCESS );
- }
- void zgInitItems( uint8 setDefault )
- {
- uint8 i = 0;
- while ( zgItemTable[i].id != 0x00 )
- {
-
- zgItemInit( zgItemTable[i].id, zgItemTable[i].len, zgItemTable[i].buf, setDefault );
-
- i++;
- }
- }
- uint8 zgReadStartupOptions( void )
- {
-
- uint8 startupOption = 0;
-
- if ( osal_nv_item_init( ZCD_NV_STARTUP_OPTION,
- sizeof(startupOption),
- &startupOption ) == ZSUCCESS )
- {
-
- osal_nv_read( ZCD_NV_STARTUP_OPTION,
- 0,
- sizeof( startupOption ),
- &startupOption);
- }
- return ( startupOption );
- }
- uint8 zgWriteStartupOptions( uint8 action, uint8 bitOptions )
- {
- uint8 status;
- uint8 startupOptions = 0;
- status = osal_nv_read( ZCD_NV_STARTUP_OPTION,
- 0,
- sizeof( startupOptions ),
- &startupOptions );
- if ( status == ZSUCCESS )
- {
- if ( action == ZG_STARTUP_SET )
- {
-
- startupOptions |= bitOptions;
- }
- else
- {
-
- startupOptions &= (bitOptions ^ 0xFF);
- }
-
- status = osal_nv_write( ZCD_NV_STARTUP_OPTION,
- 0,
- sizeof( startupOptions ),
- &startupOptions );
- }
- return ( status );
- }
- void zgSetItem( uint16 id, uint16 len, void *buf )
- {
- uint8 i = 0;
-
- while ( zgItemTable[i].id != 0x00 )
- {
- if( zgItemTable[i].id == id )
- {
- if ( zgItemTable[i].len == len )
- {
- osal_memcpy( zgItemTable[i].buf, buf, len );
- }
- break;
- }
-
- i++;
- }
- }
- #ifndef NONWK
- static uint8 zgPreconfigKeyInit( uint8 setDefault )
- {
- uint8 zgPreConfigKey[SEC_KEY_LEN];
- uint8 status;
-
- osal_memcpy( zgPreConfigKey, defaultKey, SEC_KEY_LEN );
-
- status = osal_nv_item_init( ZCD_NV_PRECFGKEY, SEC_KEY_LEN, zgPreConfigKey );
- if ( status == ZSUCCESS )
- {
- if ( setDefault )
- {
-
- status = osal_nv_write( ZCD_NV_PRECFGKEY, 0, SEC_KEY_LEN, zgPreConfigKey );
- }
- }
-
- osal_memset(zgPreConfigKey, 0x00, SEC_KEY_LEN);
- return (status);
- }
- #endif
|