1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040 |
- #include "ZComDef.h"
- #include "ZMac.h"
- #include "OSAL.h"
- #include "OSAL_Tasks.h"
- #include "OSAL_PwrMgr.h"
- #include "OSAL_Nv.h"
- #include "AF.h"
- #include "APSMEDE.h"
- #include "NLMEDE.h"
- #include "AddrMgr.h"
- #include "ZDProfile.h"
- #include "ZDObject.h"
- #include "ZDConfig.h"
- #include "ZDSecMgr.h"
- #include "ZDApp.h"
- #include "DebugTrace.h"
- #include "nwk_util.h"
- #include "OnBoard.h"
- #include "ZGlobals.h"
- #include "ZDNwkMgr.h"
- #include "rtg.h"
- #include "ssp.h"
- #include "hal_led.h"
- #include "hal_lcd.h"
- #include "hal_key.h"
- #if defined( MT_MAC_FUNC ) || defined( MT_MAC_CB_FUNC )
- #error "ERROR! MT_MAC functionalities should be disabled on ZDO devices"
- #endif
- #if !defined( NWK_START_DELAY )
- #define NWK_START_DELAY 100
- #endif
- #if !defined( LEAVE_RESET_DELAY )
- #define LEAVE_RESET_DELAY 5000
- #endif
- #define ZDO_INIT_HOLD_NWK_START 0xFFFF
- #if !defined( EXTENDED_JOINING_RANDOM_MASK )
- #define EXTENDED_JOINING_RANDOM_MASK 0x007F
- #endif
- #if !defined( BEACON_REQUEST_DELAY )
- #define BEACON_REQUEST_DELAY 100
- #endif
- #if !defined( BEACON_REQ_DELAY_MASK )
- #define BEACON_REQ_DELAY_MASK 0x007F
- #endif
- #define MAX_RESUME_RETRY 3
- #define MAX_DEVICE_UNAUTH_TIMEOUT 5000
- #define DEFAULT_BEACON_ORDER BEACON_ORDER_NO_BEACONS
- #define DEFAULT_SUPERFRAME_ORDER DEFAULT_BEACON_ORDER
- #if !defined( MAX_NWK_FRAMECOUNTER_CHANGES )
-
-
- #define MAX_NWK_FRAMECOUNTER_CHANGES 1000
- #endif
- #define ZDAPP_LEAVE_CTRL_INIT 0
- #define ZDAPP_LEAVE_CTRL_SET 1
- #define ZDAPP_LEAVE_CTRL_RA 2
- #define ZDApp_NwkWriteNVRequest AddrMgrWriteNVRequest
- #if !defined ZDO_NV_SAVE_RFDs
- #define ZDO_NV_SAVE_RFDs TRUE
- #endif
- #if ZDO_NV_SAVE_RFDs
- #define ZDAPP_UPDATE_NWK_NV_TIME 700
- #else
- #define ZDAPP_UPDATE_NWK_NV_TIME 65000
- #endif
- #if defined( LCD_SUPPORTED )
- uint8 MatchRsps = 0;
- #endif
- uint8 zdoDiscCounter = 1;
- zAddrType_t ZDAppNwkAddr;
- uint8 zdappMgmtNwkDiscRspTransSeq;
- uint8 zdappMgmtNwkDiscReqInProgress = FALSE;
- zAddrType_t zdappMgmtNwkDiscRspAddr;
- uint8 zdappMgmtNwkDiscStartIndex;
- uint8 zdappMgmtSavedNwkState;
- uint16 nwkFrameCounterChanges = 0;
- uint8 continueJoining = TRUE;
- uint8 _tmpRejoinState;
- uint8 ZDO_UseExtendedPANID[Z_EXTADDR_LEN];
- pfnZdoCb zdoCBFunc[MAX_ZDO_CB_FUNC];
- void ZDApp_NetworkStartEvt( void );
- void ZDApp_DeviceAuthEvt( void );
- void ZDApp_SaveNetworkStateEvt( void );
- uint8 ZDApp_ReadNetworkRestoreState( void );
- uint8 ZDApp_RestoreNetworkState( void );
- void ZDAppDetermineDeviceType( void );
- void ZDApp_InitUserDesc( void );
- void ZDAppCheckForHoldKey( void );
- void ZDApp_ProcessOSALMsg( osal_event_hdr_t *msgPtr );
- void ZDApp_ProcessNetworkJoin( void );
- void ZDApp_SetCoordAddress( uint8 endPoint, uint8 dstEP );
- uint8 ZDApp_RestoreNwkKey( void );
- networkDesc_t* ZDApp_NwkDescListProcessing(void);
- void ZDApp_SecInit( uint8 state );
- UINT16 ZDApp_ProcessSecEvent( uint8 task_id, UINT16 events );
- void ZDApp_ProcessSecMsg( osal_event_hdr_t *msgPtr );
- void ZDApp_SendMsg( uint8 taskID, uint8 cmd, uint8 len, uint8 *buf );
- void ZDApp_ResetTimerStart( uint16 delay );
- void ZDApp_ResetTimerCancel( void );
- void ZDApp_LeaveCtrlInit( void );
- void ZDApp_LeaveCtrlSet( uint8 ra );
- uint8 ZDApp_LeaveCtrlBypass( void );
- void ZDApp_LeaveCtrlStartup( devStates_t* state, uint16* startDelay );
- void ZDApp_LeaveUpdate( uint16 nwkAddr, uint8* extAddr,
- uint8 removeChildren );
- void ZDApp_NodeProfileSync( uint8 stackProfile );
- void ZDApp_ProcessMsgCBs( zdoIncomingMsg_t *inMsg );
- void ZDApp_RegisterCBs( void );
- void ZDApp_InitZdoCBFunc(void);
- uint8 ZDAppTaskID;
- uint8 nwkStatus;
- endPointDesc_t *ZDApp_AutoFindMode_epDesc = (endPointDesc_t *)NULL;
- uint8 ZDApp_LeaveCtrl;
- #if defined( HOLD_AUTO_START )
- devStates_t devState = DEV_HOLD;
- #else
- devStates_t devState = DEV_INIT;
- #endif
- #if ( ZG_BUILD_RTRONLY_TYPE ) || ( ZG_BUILD_ENDDEVICE_TYPE )
- devStartModes_t devStartMode = MODE_JOIN;
-
-
- #else
-
- devStartModes_t devStartMode = MODE_HARD;
- #endif
- uint8 retryCnt;
- endPointDesc_t ZDApp_epDesc =
- {
- ZDO_EP,
- &ZDAppTaskID,
- (SimpleDescriptionFormat_t *)NULL,
- (afNetworkLatencyReq_t)0
- };
- uint16 ZDApp_SavedPollRate = POLL_RATE;
- void ZDApp_Init( uint8 task_id )
- {
-
- ZDAppTaskID = task_id;
-
- ZDAppNwkAddr.addrMode = Addr16Bit;
- ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;
- (void)NLME_GetExtAddr();
-
- ZDAppCheckForHoldKey();
-
- ZDO_Init();
-
-
-
- afRegister( (endPointDesc_t *)&ZDApp_epDesc );
- #if defined( ZDO_USERDESC_RESPONSE )
- ZDApp_InitUserDesc();
- #endif
-
- if ( devState != DEV_HOLD )
- {
- ZDOInitDevice( 0 );
- }
- else
- {
- ZDOInitDevice( ZDO_INIT_HOLD_NWK_START );
-
-
- }
-
- ZDApp_InitZdoCBFunc();
- ZDApp_RegisterCBs();
- }
- void ZDApp_SecInit( uint8 state )
- {
- uint8 zgPreConfigKey[SEC_KEY_LEN];
- if ( ZG_SECURE_ENABLED && ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE )
- {
-
- ZDO_Config_Node_Descriptor.ServerMask |= PRIM_TRUST_CENTER;
- }
- if ( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH )
- {
- ZDO_Config_Node_Descriptor.CapabilityFlags |= CAPINFO_SECURITY_CAPABLE;
- }
-
- ZDSecMgrInit(state);
- if ( ZG_SECURE_ENABLED )
- {
- if ( state != ZDO_INITDEV_RESTORED_NETWORK_STATE )
- {
- nwkFrameCounter = 0;
- if( _NIB.nwkKeyLoaded == FALSE )
- {
- if ( ( ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE ) ||
- ( ( zgSecurityMode == ZG_SECURITY_RESIDENTIAL ) && zgPreConfigKeys ) )
- {
- ZDSecMgrReadKeyFromNv(ZCD_NV_PRECFGKEY, zgPreConfigKey);
- SSP_UpdateNwkKey( zgPreConfigKey, 0);
- SSP_SwitchNwkKey( 0 );
-
- osal_memset(zgPreConfigKey, 0x00, SEC_KEY_LEN);
- }
- }
- }
- }
- }
- UINT16 ZDApp_event_loop( uint8 task_id, UINT16 events )
- {
- uint8 *msg_ptr;
- if ( events & SYS_EVENT_MSG )
- {
- while ( (msg_ptr = osal_msg_receive( ZDAppTaskID )) )
- {
- ZDApp_ProcessOSALMsg( (osal_event_hdr_t *)msg_ptr );
-
- osal_msg_deallocate( msg_ptr );
- }
-
- return (events ^ SYS_EVENT_MSG);
- }
- if ( events & ZDO_NETWORK_INIT )
- {
-
- devState = DEV_INIT;
- osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
- ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,
- DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );
-
- return (events ^ ZDO_NETWORK_INIT);
- }
- if ( ZSTACK_ROUTER_BUILD )
- {
- if ( events & ZDO_NETWORK_START )
- {
- ZDApp_NetworkStartEvt();
-
- return (events ^ ZDO_NETWORK_START);
- }
- if ( events & ZDO_ROUTER_START )
- {
- if ( nwkStatus == ZSuccess )
- {
- if ( devState == DEV_END_DEVICE )
- devState = DEV_ROUTER;
- osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
- }
- else
- {
-
- }
- osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
-
- return (events ^ ZDO_ROUTER_START);
- }
- }
- if ( events & ZDO_STATE_CHANGE_EVT )
- {
- ZDO_UpdateNwkStatus( devState );
-
- if ( zgConcentratorEnable == TRUE )
- {
-
- osal_start_timerEx( NWK_TaskID, NWK_MTO_RTG_REQ_EVT, 100 );
- }
-
- return (events ^ ZDO_STATE_CHANGE_EVT);
- }
- if ( events & ZDO_COMMAND_CNF )
- {
-
-
- return (events ^ ZDO_COMMAND_CNF);
- }
- if ( events & ZDO_NWK_UPDATE_NV )
- {
- ZDApp_SaveNetworkStateEvt();
-
- return (events ^ ZDO_NWK_UPDATE_NV);
- }
- if ( events & ZDO_DEVICE_RESET )
- {
- #ifdef ZBA_FALLBACK_NWKKEY
- if ( devState == DEV_END_DEVICE_UNAUTH )
- {
- ZDSecMgrFallbackNwkKey();
- }
- else
- #endif
- {
-
- zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
-
-
- SystemResetSoft();
- }
- }
- if ( ZG_SECURE_ENABLED )
- {
- return ( ZDApp_ProcessSecEvent( task_id, events ) );
- }
- else
- {
-
- return 0;
- }
- }
- UINT16 ZDApp_ProcessSecEvent( uint8 task_id, UINT16 events )
- {
- (void)task_id;
- if ( ZSTACK_ROUTER_BUILD )
- {
- if ( events & ZDO_NEW_DEVICE )
- {
-
- if ( ZDSecMgrNewDeviceEvent() == TRUE )
- {
- osal_start_timerEx( ZDAppTaskID, ZDO_NEW_DEVICE, 1000 );
- }
-
- return (events ^ ZDO_NEW_DEVICE);
- }
- }
- if ( (ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH)
- || (ZG_CHECK_SECURITY_MODE == ZG_SECURITY_SE_STANDARD) )
- {
- if ( ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE )
- {
- if ( events & ZDO_SECMGR_EVENT )
- {
- ZDSecMgrEvent();
-
- return (events ^ ZDO_SECMGR_EVENT);
- }
- }
- }
- if ( events & ZDO_DEVICE_AUTH )
- {
- ZDApp_DeviceAuthEvt();
-
- return (events ^ ZDO_DEVICE_AUTH);
- }
- if ( events & ZDO_FRAMECOUNTER_CHANGE )
- {
- if ( nwkFrameCounterChanges++ > MAX_NWK_FRAMECOUNTER_CHANGES )
- {
- ZDApp_SaveNwkKey();
- }
-
- return (events ^ ZDO_FRAMECOUNTER_CHANGE);
- }
- if ( events & ZDO_APS_FRAMECOUNTER_CHANGE )
- {
- #if defined (NV_RESTORE)
- ZDSecMgrSaveApsLinkKey();
- #endif
-
- return (events ^ ZDO_APS_FRAMECOUNTER_CHANGE);
- }
- if ( events & ZDO_TCLK_FRAMECOUNTER_CHANGE )
- {
- ZDSecMgrSaveTCLinkKey();
-
- return (events ^ ZDO_TCLK_FRAMECOUNTER_CHANGE);
- }
-
- return 0;
- }
- uint8 ZDOInitDevice( uint16 startDelay )
- {
- uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;
- uint16 extendedDelay = 0;
- if ( devState == DEV_HOLD )
- {
-
- zgInitItems( FALSE );
- }
- ZDConfig_InitDescriptors();
-
- _NIB.CapabilityFlags = ZDO_Config_Node_Descriptor.CapabilityFlags;
- #if defined ( NV_RESTORE )
-
-
-
- if ( HalKeyRead() == SW_BYPASS_NV )
- networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;
- else
- {
-
- networkStateNV = ZDApp_ReadNetworkRestoreState();
- }
- if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE )
- {
- networkStateNV = ZDApp_RestoreNetworkState();
- }
- else
- {
-
- NLME_InitNV();
- NLME_SetDefaultNV();
-
- ZDSecMgrClearNVKeyValues();
- }
- #endif
- if ( networkStateNV == ZDO_INITDEV_NEW_NETWORK_STATE )
- {
- ZDAppDetermineDeviceType();
-
- extendedDelay = (uint16)((NWK_START_DELAY + startDelay)
- + (osal_rand() & EXTENDED_JOINING_RANDOM_MASK));
- }
-
- ZDApp_SecInit( networkStateNV );
- if( ZDO_INIT_HOLD_NWK_START != startDelay )
- {
- devState = DEV_INIT;
-
- ZDApp_LeaveCtrlInit();
-
- ZDApp_LeaveCtrlStartup( &devState, &startDelay );
-
- if ( devState == DEV_HOLD )
- {
-
- zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
-
- osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
- return ( ZDO_INITDEV_LEAVE_NOT_STARTED );
- }
-
- ZDApp_NetworkInit( extendedDelay );
- }
-
- NLME_SetBroadcastFilter( ZDO_Config_Node_Descriptor.CapabilityFlags );
- return ( networkStateNV );
- }
- uint8 ZDApp_ReadNetworkRestoreState( void )
- {
- uint8 networkStateNV = ZDO_INITDEV_RESTORED_NETWORK_STATE;
-
- if ( zgReadStartupOptions() & ZCD_STARTOPT_DEFAULT_NETWORK_STATE )
- {
- networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;
- }
- return ( networkStateNV );
- }
- void ZDAppDetermineDeviceType( void )
- {
- if ( zgDeviceLogicalType == ZG_DEVICETYPE_COORDINATOR )
- {
- devStartMode = MODE_HARD;
- ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR;
- }
- else
- {
- if ( zgDeviceLogicalType == ZG_DEVICETYPE_ROUTER )
- ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_ROUTER;
- else if ( zgDeviceLogicalType == ZG_DEVICETYPE_ENDDEVICE )
- ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_DEVICE;
-
-
- if ( nwk_ExtPANIDValid( AIB_apsUseExtendedPANID ) == false )
- {
- devStartMode = MODE_JOIN;
- }
- else
- {
- devStartMode = MODE_REJOIN;
- }
- }
- }
- void ZDApp_NetworkStartEvt( void )
- {
- if ( nwkStatus == ZSuccess )
- {
-
- if ( devState == DEV_COORD_STARTING )
- {
- devState = DEV_ZB_COORD;
- }
- osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
- osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
- }
- else
- {
-
- if ( ( NLME_GetEnergyThreshold() + ENERGY_SCAN_INCREMENT ) < 0xff )
- {
- NLME_SetEnergyThreshold( (uint8)(NLME_GetEnergyThreshold() + ENERGY_SCAN_INCREMENT) );
- osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT );
- }
- else
- {
-
- devState = DEV_INIT;
- osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
- }
- }
- }
- void ZDApp_DeviceAuthEvt( void )
- {
-
- if ( devState == DEV_END_DEVICE_UNAUTH )
- {
-
- ZDApp_ResetTimerCancel();
- devState = DEV_END_DEVICE;
- osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
-
- #if defined ( POWER_SAVING )
- osal_pwrmgr_device( PWRMGR_BATTERY );
- #endif
- if ( ZSTACK_ROUTER_BUILD )
- {
- if ( ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE )
- {
-
- NLME_StartRouterRequest( 0, 0, false );
- }
- }
-
- ZDApp_NVUpdate();
-
- ZDApp_SaveNwkKey();
- ZDApp_AnnounceNewAddress();
- if ( (ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE) == 0 )
- {
- NLME_SetPollRate( ZDApp_SavedPollRate );
- }
- }
- else
- {
- ZDApp_NVUpdate();
- }
- }
- void ZDApp_SaveNetworkStateEvt( void )
- {
- #if defined ( NV_RESTORE )
- #if defined ( NV_TURN_OFF_RADIO )
-
- uint8 RxOnIdle;
- uint8 x = false;
- ZMacGetReq( ZMacRxOnIdle, &RxOnIdle );
- ZMacSetReq( ZMacRxOnIdle, &x );
- #endif
-
- NLME_UpdateNV( NWK_NV_NIB_ENABLE |
- NWK_NV_DEVICELIST_ENABLE |
- NWK_NV_BINDING_ENABLE |
- NWK_NV_ADDRMGR_ENABLE );
-
-
- zgWriteStartupOptions( FALSE, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
- #if defined ( NV_TURN_OFF_RADIO )
- ZMacSetReq( ZMacRxOnIdle, &RxOnIdle );
- #endif
- #endif
- }
- uint8 ZDApp_RestoreNetworkState( void )
- {
- uint8 nvStat;
-
- nvStat = NLME_InitNV();
- if ( nvStat != NV_OPER_FAILED )
- {
- if ( NLME_RestoreFromNV() )
- {
-
- ZDAppNwkAddr.addr.shortAddr = NLME_GetShortAddr();
- if ( ZDAppNwkAddr.addr.shortAddr == 0 )
- ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR;
- devStartMode = MODE_RESUME;
- osal_cpyExtAddr( ZDO_UseExtendedPANID, _NIB.extendedPANID );
- }
- else
- nvStat = NV_ITEM_UNINIT;
- if ( ZG_SECURE_ENABLED )
- {
- nwkFrameCounterChanges = 0;
- if ( ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE )
- {
- ZDApp_RestoreNwkKey();
- }
- }
-
-
-
- }
- if ( nvStat == ZSUCCESS )
- return ( ZDO_INITDEV_RESTORED_NETWORK_STATE );
- else
- return ( ZDO_INITDEV_NEW_NETWORK_STATE );
- }
- void ZDApp_InitUserDesc( void )
- {
- UserDescriptorFormat_t ZDO_DefaultUserDescriptor;
-
-
-
- osal_memset( &ZDO_DefaultUserDescriptor, 0, sizeof( UserDescriptorFormat_t ) );
- if ( ZSUCCESS == osal_nv_item_init( ZCD_NV_USERDESC,
- sizeof(UserDescriptorFormat_t), (void*)&ZDO_DefaultUserDescriptor ) )
- {
- if ( ZSUCCESS == osal_nv_read( ZCD_NV_USERDESC, 0,
- sizeof(UserDescriptorFormat_t), (void*)&ZDO_DefaultUserDescriptor ) )
- {
- if ( ZDO_DefaultUserDescriptor.len != 0 )
- {
- ZDO_Config_Node_Descriptor.UserDescAvail = TRUE;
- }
- }
- }
- }
- void ZDAppCheckForHoldKey( void )
- {
- #if (defined HAL_KEY) && (HAL_KEY == TRUE)
-
-
-
- #endif
- }
- void ZDApp_ProcessOSALMsg( osal_event_hdr_t *msgPtr )
- {
-
- uint8 sentEP;
- uint8 sentStatus;
- afDataConfirm_t *afDataConfirm;
- uint8 tmp;
- switch ( msgPtr->event )
- {
-
- case AF_INCOMING_MSG_CMD:
- ZDP_IncomingData( (afIncomingMSGPacket_t *)msgPtr );
- break;
- case ZDO_CB_MSG:
- ZDApp_ProcessMsgCBs( (zdoIncomingMsg_t *)msgPtr );
- break;
- case AF_DATA_CONFIRM_CMD:
-
-
-
- afDataConfirm = (afDataConfirm_t *)msgPtr;
- sentEP = afDataConfirm->endpoint;
- sentStatus = afDataConfirm->hdr.status;
-
- #if defined ( ZIGBEE_FREQ_AGILITY )
- if ( pZDNwkMgr_ProcessDataConfirm )
- pZDNwkMgr_ProcessDataConfirm( afDataConfirm );
- #endif
- (void)sentEP;
- (void)sentStatus;
- break;
- case ZDO_NWK_DISC_CNF:
- if (devState != DEV_NWK_DISC)
- break;
- if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
- {
-
-
- networkDesc_t *pChosenNwk;
- if ( ( (pChosenNwk = ZDApp_NwkDescListProcessing()) != NULL ) && (zdoDiscCounter > NUM_DISC_ATTEMPTS) )
- {
- if ( devStartMode == MODE_JOIN )
- {
- devState = DEV_NWK_JOINING;
- ZDApp_NodeProfileSync( pChosenNwk->stackProfile);
- if ( NLME_JoinRequest( pChosenNwk->extendedPANID, pChosenNwk->panId,
- pChosenNwk->logicalChannel,
- ZDO_Config_Node_Descriptor.CapabilityFlags,
- pChosenNwk->chosenRouter, pChosenNwk->chosenRouterDepth ) != ZSuccess )
- {
- ZDApp_NetworkInit( (uint16)(NWK_START_DELAY
- + ((uint16)(osal_rand()& EXTENDED_JOINING_RANDOM_MASK))) );
- }
- }
- else if ( devStartMode == MODE_REJOIN )
- {
- devState = DEV_NWK_REJOIN;
-
-
- if ( _NIB.nwkDevAddress == INVALID_NODE_ADDR )
- {
- _NIB.nwkDevAddress = osal_rand();
- ZMacSetReq( ZMacShortAddress, (byte*)&_NIB.nwkDevAddress );
- }
- if ( ZG_SECURE_ENABLED )
- {
- ZDApp_RestoreNwkKey();
- }
-
- if ( _NIB.nwkPanId == INVALID_PAN_ID )
- {
- _NIB.nwkPanId = pChosenNwk->panId;
- ZMacSetReq( ZMacPanId, (byte*)&(_NIB.nwkPanId) );
- }
- tmp = true;
- ZMacSetReq( ZMacRxOnIdle, &tmp );
- if ( NLME_ReJoinRequest( ZDO_UseExtendedPANID, pChosenNwk->logicalChannel) != ZSuccess )
- {
- ZDApp_NetworkInit( (uint16)(NWK_START_DELAY
- + ((uint16)(osal_rand()& EXTENDED_JOINING_RANDOM_MASK))) );
- }
- }
- if ( ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE )
- {
-
- NLME_SetPollRate( 0 );
- NLME_SetQueuedPollRate( 0 );
- NLME_SetResponseRate( 0 );
- }
- else
- {
- if ( (ZG_SECURE_ENABLED) && (devStartMode == MODE_JOIN) )
- {
- ZDApp_SavedPollRate = zgPollRate;
- NLME_SetPollRate( zgRejoinPollRate );
- }
- }
- }
- else
- {
- if ( continueJoining )
- {
- #if defined ( MANAGED_SCAN )
- ZDApp_NetworkInit( MANAGEDSCAN_DELAY_BETWEEN_SCANS );
- #else
- zdoDiscCounter++;
- ZDApp_NetworkInit( (uint16)(BEACON_REQUEST_DELAY
- + ((uint16)(osal_rand()& BEACON_REQ_DELAY_MASK))) );
- #endif
- }
- }
- }
- break;
- case ZDO_NWK_JOIN_IND:
- if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
- {
- ZDApp_ProcessNetworkJoin();
- }
- break;
- case ZDO_NWK_JOIN_REQ:
- if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
- {
- retryCnt = 0;
- devStartMode = MODE_RESUME;
- _tmpRejoinState = true;
- osal_cpyExtAddr( ZDO_UseExtendedPANID, _NIB.extendedPANID );
- zgDefaultStartingScanDuration = BEACON_ORDER_60_MSEC;
- ZDApp_NetworkInit( 0 );
- }
- break;
- default:
- if ( ZG_SECURE_ENABLED )
- ZDApp_ProcessSecMsg( msgPtr );
- break;
- }
- }
- void ZDApp_ProcessMsgCBs( zdoIncomingMsg_t *inMsg )
- {
- switch ( inMsg->clusterID )
- {
- #if defined ( ZDO_NWKADDR_REQUEST ) || defined ( ZDO_IEEEADDR_REQUEST ) || defined ( REFLECTOR )
- case NWK_addr_rsp:
- case IEEE_addr_rsp:
- {
- ZDO_NwkIEEEAddrResp_t *pAddrRsp;
- pAddrRsp = ZDO_ParseAddrRsp( inMsg );
- if ( pAddrRsp )
- {
- if ( pAddrRsp->status == ZSuccess )
- {
- ZDO_UpdateAddrManager( pAddrRsp->nwkAddr, pAddrRsp->extAddr );
- }
- osal_mem_free( pAddrRsp );
- }
- }
- break;
- #endif
- #if defined ( REFLECTOR )
- case Bind_req:
- case Unbind_req:
- {
- ZDO_BindUnbindReq_t bindReq;
- ZDO_ParseBindUnbindReq( inMsg, &bindReq );
- ZDO_ProcessBindUnbindReq( inMsg, &bindReq );
- }
- break;
- #endif
- #if ( ZG_BUILD_COORDINATOR_TYPE )
- case Bind_rsp:
- case Unbind_rsp:
- if (ZG_DEVICE_COORDINATOR_TYPE && matchED)
- {
- ZDMatchSendState(
- (uint8)((inMsg->clusterID == Bind_rsp) ? ZDMATCH_REASON_BIND_RSP : ZDMATCH_REASON_UNBIND_RSP),
- ZDO_ParseBindRsp(inMsg), inMsg->TransSeq );
- }
- break;
- case End_Device_Bind_req:
- if (ZG_DEVICE_COORDINATOR_TYPE)
- {
- ZDEndDeviceBind_t bindReq;
- ZDO_ParseEndDeviceBindReq( inMsg, &bindReq );
- ZDO_MatchEndDeviceBind( &bindReq );
-
- if ( bindReq.numInClusters )
- osal_mem_free( bindReq.inClusters );
- if ( bindReq.numOutClusters )
- osal_mem_free( bindReq.outClusters );
- }
- break;
- #endif
- }
- }
- void ZDApp_RegisterCBs( void )
- {
- #if defined ( ZDO_IEEEADDR_REQUEST ) || defined ( REFLECTOR )
- ZDO_RegisterForZDOMsg( ZDAppTaskID, IEEE_addr_rsp );
- #endif
- #if defined ( ZDO_NWKADDR_REQUEST ) || defined ( REFLECTOR )
- ZDO_RegisterForZDOMsg( ZDAppTaskID, NWK_addr_rsp );
- #endif
- #if ZG_BUILD_COORDINATOR_TYPE
- ZDO_RegisterForZDOMsg( ZDAppTaskID, Bind_rsp );
- ZDO_RegisterForZDOMsg( ZDAppTaskID, Unbind_rsp );
- ZDO_RegisterForZDOMsg( ZDAppTaskID, End_Device_Bind_req );
- #endif
- #if defined ( REFLECTOR )
- ZDO_RegisterForZDOMsg( ZDAppTaskID, Bind_req );
- ZDO_RegisterForZDOMsg( ZDAppTaskID, Unbind_req );
- #endif
- }
- void ZDApp_ProcessSecMsg( osal_event_hdr_t *msgPtr )
- {
- switch ( msgPtr->event )
- {
- case ZDO_ESTABLISH_KEY_CFM:
- if ( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH )
- {
- ZDSecMgrEstablishKeyCfm( (ZDO_EstablishKeyCfm_t*)msgPtr );
- }
- break;
- case ZDO_ESTABLISH_KEY_IND:
- if ( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH )
- {
- if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
- {
- ZDSecMgrEstablishKeyInd( (ZDO_EstablishKeyInd_t*)msgPtr );
- }
- }
- break;
- case ZDO_TRANSPORT_KEY_IND:
- if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
- {
- ZDSecMgrTransportKeyInd( (ZDO_TransportKeyInd_t*)msgPtr );
- }
- break;
- case ZDO_UPDATE_DEVICE_IND:
- if ( ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE )
- {
- ZDSecMgrUpdateDeviceInd( (ZDO_UpdateDeviceInd_t*)msgPtr );
- }
- break;
- case ZDO_REMOVE_DEVICE_IND:
- if ( ZG_BUILD_RTRONLY_TYPE && ( zgDeviceLogicalType == ZG_DEVICETYPE_ROUTER ) )
- {
- ZDSecMgrRemoveDeviceInd( (ZDO_RemoveDeviceInd_t*)msgPtr );
- }
- break;
- case ZDO_REQUEST_KEY_IND:
- if (( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH ) ||
- ( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_SE_STANDARD ))
- {
- if ( ZG_BUILD_COORDINATOR_TYPE && ZG_DEVICE_COORDINATOR_TYPE )
- {
- ZDSecMgrRequestKeyInd( (ZDO_RequestKeyInd_t*)msgPtr );
- }
- }
- break;
- case ZDO_SWITCH_KEY_IND:
- if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
- {
- ZDSecMgrSwitchKeyInd( (ZDO_SwitchKeyInd_t*)msgPtr );
- }
- break;
- case ZDO_AUTHENTICATE_IND:
- if ( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH )
- {
- ZDSecMgrAuthenticateInd( (ZDO_AuthenticateInd_t*)msgPtr );
- }
- break;
- case ZDO_AUTHENTICATE_CFM:
- if ( ZG_CHECK_SECURITY_MODE == ZG_SECURITY_PRO_HIGH )
- {
- ZDSecMgrAuthenticateCfm( (ZDO_AuthenticateCfm_t*)msgPtr );
- }
- break;
- default:
-
- break;
- }
- }
- void ZDApp_ProcessNetworkJoin( void )
- {
- if ( (devState == DEV_NWK_JOINING) ||
- ((devState == DEV_NWK_ORPHAN) &&
- (ZDO_Config_Node_Descriptor.LogicalType == NODETYPE_ROUTER)) )
- {
-
- if ( nwkStatus == ZSuccess )
- {
- osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
- #if defined ( POWER_SAVING )
- osal_pwrmgr_device( PWRMGR_BATTERY );
- #endif
- if ( ZG_SECURE_ENABLED && ( ZDApp_RestoreNwkKey() == false ) )
- {
-
- devState = DEV_END_DEVICE_UNAUTH;
-
- ZDApp_ResetTimerStart( 10000 );
- }
- else
- {
- if ( ZSTACK_ROUTER_BUILD )
- {
- if ( devState == DEV_NWK_ORPHAN
- && ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE )
- {
-
- _NIB.nwkState = NWK_ROUTER;
- }
- }
- if ( devState == DEV_NWK_JOINING )
- {
- ZDApp_AnnounceNewAddress();
- }
- devState = DEV_END_DEVICE;
- if ( ZSTACK_ROUTER_BUILD )
- {
-
- if ( ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE )
- {
- NLME_StartRouterRequest( 0, 0, false );
- }
- }
- }
- }
- else
- {
- if ( (devStartMode == MODE_RESUME) && (++retryCnt >= MAX_RESUME_RETRY) )
- {
- if ( _NIB.nwkPanId == 0xFFFF || _NIB.nwkPanId == INVALID_PAN_ID )
- devStartMode = MODE_JOIN;
- else
- {
- devStartMode = MODE_REJOIN;
- _tmpRejoinState = true;
- }
- }
- if ( (NLME_GetShortAddr() != INVALID_NODE_ADDR) ||
- (_NIB.nwkDevAddress != INVALID_NODE_ADDR) )
- {
- uint16 addr = INVALID_NODE_ADDR;
-
- _NIB.nwkDevAddress = INVALID_NODE_ADDR;
- ZMacSetReq( ZMacShortAddress, (uint8 *)&addr );
- }
-
- nwkNeighborInitTable();
- NLME_NwkDiscTerm();
- zdoDiscCounter = 1;
- ZDApp_NetworkInit( (uint16)(NWK_START_DELAY
- + ((uint16)(osal_rand()& EXTENDED_JOINING_RANDOM_MASK))) );
- }
- }
- else if ( devState == DEV_NWK_ORPHAN || devState == DEV_NWK_REJOIN )
- {
-
- if (nwkStatus == ZSuccess)
- {
- if ( ZG_SECURE_ENABLED )
- {
- ZDApp_RestoreNwkKey();
- }
- devState = DEV_END_DEVICE;
- osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
-
- #if defined ( POWER_SAVING )
- osal_pwrmgr_device( PWRMGR_BATTERY );
- #endif
- if ( ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE )
- {
-
- NLME_SetPollRate( 0 );
- NLME_SetQueuedPollRate( 0 );
- NLME_SetResponseRate( 0 );
- }
- if ( ZSTACK_ROUTER_BUILD )
- {
-
- if ( ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE )
- {
- NLME_StartRouterRequest( 0, 0, false );
- }
- }
- ZDApp_AnnounceNewAddress();
- }
- else
- {
- if ( devStartMode == MODE_RESUME )
- {
- if ( ++retryCnt <= MAX_RESUME_RETRY )
- {
- if ( _NIB.nwkPanId == 0xFFFF || _NIB.nwkPanId == INVALID_PAN_ID )
- devStartMode = MODE_JOIN;
- else
- {
- devStartMode = MODE_REJOIN;
- _tmpRejoinState = true;
- }
- }
-
- else if( AIB_apsUseInsecureJoin == true )
- {
- devStartMode = MODE_JOIN;
- }
- }
-
- nwkNeighborInitTable();
- NLME_NwkDiscTerm();
-
- ZDApp_NetworkInit( (uint16)(NWK_START_DELAY
- + (osal_rand()& EXTENDED_JOINING_RANDOM_MASK)) );
- }
- }
- #if defined ( ZIGBEE_STOCHASTIC_ADDRESSING )
- else
- {
-
- if ( _NIB.nwkAddrAlloc == NWK_ADDRESSING_STOCHASTIC )
- {
-
- ZDApp_AnnounceNewAddress();
-
- osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
- }
- }
- #endif
- }
- void ZDApp_SaveNwkKey( void )
- {
- nwkActiveKeyItems keyItems;
- SSP_ReadNwkActiveKey( &keyItems );
- keyItems.frameCounter++;
- osal_nv_write( ZCD_NV_NWKKEY, 0, sizeof( nwkActiveKeyItems ),
- (void *)&keyItems );
- nwkFrameCounterChanges = 0;
-
- osal_memset( &keyItems, 0x00, sizeof(keyItems) );
- }
- void ZDApp_ResetNwkKey( void )
- {
- nwkActiveKeyItems keyItems;
- osal_memset( &keyItems, 0, sizeof( nwkActiveKeyItems ) );
- osal_nv_write( ZCD_NV_NWKKEY, 0, sizeof( nwkActiveKeyItems ),
- (void *)&keyItems );
- }
- uint8 ZDApp_RestoreNwkKey( void )
- {
- nwkActiveKeyItems keyItems;
- uint8 ret = false;
- if ( osal_nv_read( ZCD_NV_NWKKEY, 0, sizeof(nwkActiveKeyItems), (void*)&keyItems )
- == ZSUCCESS )
- {
- if ( keyItems.frameCounter > 0 )
- {
-
- keyItems.frameCounter += MAX_NWK_FRAMECOUNTER_CHANGES;
- nwkFrameCounter = keyItems.frameCounter;
- ret = true;
- }
-
- nwkFrameCounterChanges = MAX_NWK_FRAMECOUNTER_CHANGES + 1;
- }
-
- osal_memset( &keyItems, 0x00, sizeof(keyItems) );
- return ( ret );
- }
- void ZDApp_ResetTimerStart( uint16 delay )
- {
-
- osal_start_timerEx( ZDAppTaskID, ZDO_DEVICE_RESET, delay );
- }
- void ZDApp_ResetTimerCancel( void )
- {
-
- osal_stop_timerEx( ZDAppTaskID, ZDO_DEVICE_RESET );
- }
- void ZDApp_LeaveCtrlInit( void )
- {
- uint8 status;
-
- ZDApp_LeaveCtrl = ZDAPP_LEAVE_CTRL_INIT;
- status = osal_nv_item_init( ZCD_NV_LEAVE_CTRL,
- sizeof(ZDApp_LeaveCtrl),
- &ZDApp_LeaveCtrl );
- if ( status == ZSUCCESS )
- {
-
- osal_nv_read( ZCD_NV_LEAVE_CTRL,
- 0,
- sizeof( uint8 ),
- &ZDApp_LeaveCtrl);
- }
- }
- void ZDApp_LeaveCtrlSet( uint8 ra )
- {
- ZDApp_LeaveCtrl = ZDAPP_LEAVE_CTRL_SET;
- if ( ra == TRUE )
- {
- ZDApp_LeaveCtrl |= ZDAPP_LEAVE_CTRL_RA;
- }
-
- osal_nv_write( ZCD_NV_LEAVE_CTRL,
- 0,
- sizeof( uint8 ),
- &ZDApp_LeaveCtrl);
- }
- void ZDApp_LeaveCtrlReset( void )
- {
-
- ZDApp_LeaveCtrl = ZDAPP_LEAVE_CTRL_INIT;
-
- osal_nv_write( ZCD_NV_LEAVE_CTRL,
- 0,
- sizeof( uint8 ),
- &ZDApp_LeaveCtrl);
- }
- uint8 ZDApp_LeaveCtrlBypass( void )
- {
- uint8 bypass;
- if ( ZDApp_LeaveCtrl & ZDAPP_LEAVE_CTRL_SET )
- {
- bypass = TRUE;
- }
- else
- {
- bypass = FALSE;
- }
- return bypass;
- }
- void ZDApp_LeaveCtrlStartup( devStates_t* state, uint16* startDelay )
- {
- *startDelay = 0;
- if ( ZDApp_LeaveCtrl & ZDAPP_LEAVE_CTRL_SET )
- {
- if ( ZDApp_LeaveCtrl & ZDAPP_LEAVE_CTRL_RA )
- {
- *startDelay = LEAVE_RESET_DELAY;
- }
- else
- {
- *state = DEV_HOLD;
- }
-
- ZDApp_LeaveCtrlReset();
- }
- }
- void ZDApp_LeaveReset( uint8 ra )
- {
- ZDApp_LeaveCtrlSet( ra );
- ZDApp_ResetTimerStart( LEAVE_RESET_DELAY );
- }
- void ZDApp_LeaveUpdate( uint16 nwkAddr, uint8* extAddr,
- uint8 removeChildren )
- {
-
- ZDSecMgrDeviceRemoveByExtAddr(extAddr);
-
- ZDSecMgrAddrClear( extAddr );
- if ( pbindRemoveDev )
- {
- zAddrType_t devAddr;
-
- devAddr.addrMode = Addr64Bit;
- osal_memcpy(devAddr.addr.extAddr, extAddr, Z_EXTADDR_LEN);
- pbindRemoveDev(&devAddr);
- }
-
- if ( ZSTACK_ROUTER_BUILD )
- {
- NLME_RemoveChild( extAddr, removeChildren );
- }
-
- RTG_RemoveRtgEntry( nwkAddr, 0 );
-
- nwkNeighborRemove( nwkAddr, _NIB.nwkPanId );
-
- ZDApp_NwkWriteNVRequest();
- }
- ZStatus_t ZDApp_NetworkDiscoveryReq( uint32 scanChannels, uint8 scanDuration)
- {
-
-
- return NLME_NetworkDiscoveryRequest(scanChannels, scanDuration);
- }
- ZStatus_t ZDApp_JoinReq( uint8 channel, uint16 panID, uint8 *extendedPanID,
- uint16 chosenParent, uint8 parentDepth, uint8 stackProfile )
- {
-
-
- ZDApp_NodeProfileSync( stackProfile);
-
- return NLME_JoinRequest(extendedPanID, panID,channel,
- ZDO_Config_Node_Descriptor.CapabilityFlags,
- chosenParent, parentDepth);
- }
- uint8 ZDApp_DeviceConfigured( void )
- {
- uint16 nwkAddr = INVALID_NODE_ADDR;
- osal_nv_read( ZCD_NV_NIB, osal_offsetof( nwkIB_t, nwkDevAddress ),
- sizeof( uint16), &nwkAddr );
-
- return ( nwkAddr == INVALID_NODE_ADDR ? FALSE : TRUE );
- }
- void ZDApp_SendEventMsg( uint8 cmd, uint8 len, uint8 *buf )
- {
- ZDApp_SendMsg( ZDAppTaskID, cmd, len, buf );
- }
- void ZDApp_SendMsg( uint8 taskID, uint8 cmd, uint8 len, uint8 *buf )
- {
- osal_event_hdr_t *msgPtr;
-
- msgPtr = (osal_event_hdr_t *)osal_msg_allocate( len );
- if ( msgPtr )
- {
- if ( (len > 0) && (buf != NULL) )
- osal_memcpy( msgPtr, buf, len );
- msgPtr->event = cmd;
- osal_msg_send( taskID, (uint8 *)msgPtr );
- }
- }
- ZStatus_t ZDO_NetworkDiscoveryConfirmCB(uint8 status)
- {
- osal_event_hdr_t msg;
-
-
- #if defined ( ZDO_MGMT_NWKDISC_RESPONSE )
- if ( zdappMgmtNwkDiscReqInProgress )
- {
- zdappMgmtNwkDiscReqInProgress = false;
- ZDO_FinishProcessingMgmtNwkDiscReq();
- }
- else
- #endif
- {
-
-
- if (zdoCBFunc[ZDO_NWK_DISCOVERY_CNF_CBID] != NULL )
- {
- zdoCBFunc[ZDO_NWK_DISCOVERY_CNF_CBID]( (void*)&status );
- }
- else
- {
-
- msg.status = ZDO_SUCCESS;
- ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_DISC_CNF, sizeof(osal_event_hdr_t), (uint8 *)&msg );
- }
- }
- return (ZSuccess);
- }
- #define STACK_PROFILE_MAX 2
- networkDesc_t* ZDApp_NwkDescListProcessing(void)
- {
- networkDesc_t *pNwkDesc;
- uint8 i, ResultCount = 0;
- uint8 stackProfile;
- uint8 stackProfilePro;
- uint8 selected;
-
- pNwkDesc = nwk_getNwkDescList();
- while (pNwkDesc)
- {
- ResultCount++;
- pNwkDesc = pNwkDesc->nextDesc;
- }
-
- stackProfilePro = FALSE;
- selected = FALSE;
- for ( stackProfile = 0; stackProfile < STACK_PROFILE_MAX; stackProfile++ )
- {
- pNwkDesc = nwk_getNwkDescList();
- for ( i = 0; i < ResultCount; i++, pNwkDesc = pNwkDesc->nextDesc )
- {
- if ( zgConfigPANID != 0xFFFF )
- {
-
- if ( pNwkDesc->panId != zgConfigPANID )
- continue;
- }
- if ( nwk_ExtPANIDValid( ZDO_UseExtendedPANID) == true )
- {
-
-
- if ( osal_ExtAddrEqual( ZDO_UseExtendedPANID, pNwkDesc->extendedPANID) == false )
- continue;
- }
-
- if ( ZSTACK_ROUTER_BUILD )
- {
- if ( stackProfilePro == FALSE )
- {
- if ( !pNwkDesc->routerCapacity )
- {
- continue;
- }
- }
- else
- {
- if ( !pNwkDesc->deviceCapacity )
- {
- continue;
- }
- }
- }
- else if ( ZSTACK_END_DEVICE_BUILD )
- {
- if ( !pNwkDesc->deviceCapacity )
- {
- continue;
- }
- }
-
- if ( pNwkDesc->version != _NIB.nwkProtocolVersion )
- continue;
-
- if ( pNwkDesc->stackProfile != zgStackProfile )
- {
- if ( ((zgStackProfile == HOME_CONTROLS) && (pNwkDesc->stackProfile == ZIGBEEPRO_PROFILE))
- || ((zgStackProfile == ZIGBEEPRO_PROFILE) && (pNwkDesc->stackProfile == HOME_CONTROLS)) )
- {
- stackProfilePro = TRUE;
- }
- if ( stackProfile == 0 )
- {
- continue;
- }
- }
- break;
- }
- if (i < ResultCount)
- {
- selected = TRUE;
- break;
- }
-
- if ( (selected == TRUE) || (stackProfilePro == FALSE) )
- {
- break;
- }
- }
- if ( i == ResultCount )
- {
- return (NULL);
- }
- else
- {
- return (pNwkDesc);
- }
- }
- void ZDO_NetworkFormationConfirmCB( ZStatus_t Status )
- {
- nwkStatus = (byte)Status;
- if ( Status == ZSUCCESS )
- {
-
-
-
-
- #if defined ( ZBIT )
- SIM_SetColor(0xd0ffd0);
- #endif
- if ( devState == DEV_HOLD )
- {
-
- devState = DEV_COORD_STARTING;
- }
- }
- #if defined(BLINK_LEDS)
- else
- {
-
- }
- #endif
- osal_set_event( ZDAppTaskID, ZDO_NETWORK_START );
- }
- void ZDO_beaconNotifyIndCB( NLME_beaconInd_t *pBeacon )
- {
-
-
- if (zdoCBFunc[ZDO_BEACON_NOTIFY_IND_CBID] != NULL )
- {
- zdoCBFunc[ZDO_BEACON_NOTIFY_IND_CBID]( (void*)pBeacon );
- }
- else
- {
- networkDesc_t *pNwkDesc;
- networkDesc_t *pLastNwkDesc;
- uint8 found = false;
-
- pNwkDesc = NwkDescList;
- pLastNwkDesc = NwkDescList;
- while (pNwkDesc)
- {
- if ((pNwkDesc->panId == pBeacon->panID) &&
- (pNwkDesc->logicalChannel == pBeacon->logicalChannel))
- {
- found = true;
- break;
- }
- pLastNwkDesc = pNwkDesc;
- pNwkDesc = pNwkDesc->nextDesc;
- }
-
- if (found == false)
- {
- pNwkDesc = osal_mem_alloc( sizeof(networkDesc_t) );
- if ( !pNwkDesc )
- {
-
- return;
- }
-
- osal_memset( pNwkDesc, 0, sizeof(networkDesc_t) );
-
- pNwkDesc->chosenRouter = INVALID_NODE_ADDR;
- pNwkDesc->chosenRouterDepth = 0xFF;
-
- if ( !NwkDescList )
- {
- NwkDescList = pNwkDesc;
- }
- else
- {
- pLastNwkDesc->nextDesc = pNwkDesc;
- }
- }
-
- pNwkDesc->stackProfile = pBeacon->stackProfile;
- pNwkDesc->version = pBeacon->protocolVersion;
- pNwkDesc->logicalChannel = pBeacon->logicalChannel;
- pNwkDesc->panId = pBeacon->panID;
- pNwkDesc->updateId = pBeacon->updateID;
-
- if ( pBeacon->protocolVersion != ZB_PROT_V1_0 )
- {
- osal_cpyExtAddr( pNwkDesc->extendedPANID, pBeacon->extendedPanID );
- }
- else
- {
- osal_memset( pNwkDesc->extendedPANID, 0xFF, Z_EXTADDR_LEN );
- }
-
-
- if ( ( pBeacon->LQI > gMIN_TREE_LINK_COST ) &&
- ( ( pBeacon->permitJoining == TRUE ) || ( _tmpRejoinState ) ) )
- {
- uint8 selected = FALSE;
- uint8 capacity = FALSE;
- if ( _NIB.nwkAddrAlloc == NWK_ADDRESSING_STOCHASTIC )
- {
- if ( ((pBeacon->LQI > pNwkDesc->chosenRouterLinkQuality) &&
- (pBeacon->depth < MAX_NODE_DEPTH)) ||
- ((pBeacon->LQI == pNwkDesc->chosenRouterLinkQuality) &&
- (pBeacon->depth < pNwkDesc->chosenRouterDepth)) )
- {
- selected = TRUE;
- }
- }
- else
- {
- if ( pBeacon->depth < pNwkDesc->chosenRouterDepth )
- {
- selected = TRUE;
- }
- }
- if ( ZSTACK_ROUTER_BUILD )
- {
- capacity = pBeacon->routerCapacity;
- }
- else if ( ZSTACK_END_DEVICE_BUILD )
- {
- capacity = pBeacon->deviceCapacity;
- }
- if ( (capacity) && (selected) )
- {
-
- pNwkDesc->chosenRouter = pBeacon->sourceAddr;
- pNwkDesc->chosenRouterLinkQuality = pBeacon->LQI;
- pNwkDesc->chosenRouterDepth = pBeacon->depth;
- }
- if ( pBeacon->deviceCapacity )
- pNwkDesc->deviceCapacity = 1;
- if ( pBeacon->routerCapacity )
- pNwkDesc->routerCapacity = 1;
- }
- }
- }
- void ZDO_StartRouterConfirmCB( ZStatus_t Status )
- {
- nwkStatus = (byte)Status;
- if ( Status == ZSUCCESS )
- {
-
-
-
-
- if ( devState == DEV_HOLD )
- {
-
- devState = DEV_END_DEVICE;
- }
- }
- #if defined(BLINK_LEDS)
- else
- {
-
- }
- #endif
- osal_set_event( ZDAppTaskID, ZDO_ROUTER_START );
- }
- void ZDO_JoinConfirmCB( uint16 PanId, ZStatus_t Status )
- {
- (void)PanId;
- nwkStatus = (byte)Status;
- if ( Status == ZSUCCESS )
- {
-
-
-
-
- if ( (devState == DEV_HOLD) )
- {
-
- devState = DEV_NWK_JOINING;
- }
- if ( !ZG_SECURE_ENABLED )
- {
-
- ZDApp_NVUpdate();
- }
- }
- else
- {
- #if defined(BLINK_LEDS)
-
- #endif
- }
-
- if (zdoCBFunc[ZDO_JOIN_CNF_CBID] != NULL )
- {
- zdoJoinCnf_t joinCnf;
- joinCnf.status = Status;
- joinCnf.deviceAddr = _NIB.nwkDevAddress;
- joinCnf.parentAddr = _NIB.nwkCoordAddress;
- zdoCBFunc[ZDO_JOIN_CNF_CBID]( (void*)&joinCnf );
- }
-
- ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_JOIN_IND, sizeof(osal_event_hdr_t), (byte*)NULL );
- }
- void ZDO_AddrChangeIndicationCB( uint16 newAddr )
- {
- ZDO_AddrChangeInd_t *pZDOAddrChangeMsg;
- epList_t *pItem = epList;
-
- ZDApp_NVUpdate();
-
- osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
- while (pItem != NULL)
- {
- if (pItem->epDesc->endPoint != ZDO_EP)
- {
- pZDOAddrChangeMsg = (ZDO_AddrChangeInd_t *)osal_msg_allocate( sizeof( ZDO_AddrChangeInd_t ) );
- if (pZDOAddrChangeMsg != NULL)
- {
- pZDOAddrChangeMsg->hdr.event = ZDO_ADDR_CHANGE_IND;
- pZDOAddrChangeMsg->shortAddr = newAddr;
- osal_msg_send( *(pItem->epDesc->task_id), (uint8 *)pZDOAddrChangeMsg );
- }
- }
- pItem = pItem->nextDesc;
- }
-
- ZDApp_AnnounceNewAddress();
- }
- ZStatus_t ZDO_JoinIndicationCB(uint16 ShortAddress, uint8 *ExtendedAddress,
- uint8 CapabilityFlags, uint8 type)
- {
- (void)ShortAddress;
- (void)ExtendedAddress;
- #if ZDO_NV_SAVE_RFDs
- (void)CapabilityFlags;
- #else
- if (CapabilityFlags & CAPINFO_DEVICETYPE_FFD)
- #endif
- {
- ZDApp_NVUpdate();
- }
- if (ZG_SECURE_ENABLED)
- {
- if (type == NWK_ASSOC_JOIN || type == NWK_ASSOC_REJOIN_UNSECURE)
- {
- osal_start_timerEx( ZDAppTaskID, ZDO_NEW_DEVICE, 600 );
- }
- }
- return ZSuccess;
- }
- void ZDO_ConcentratorIndicationCB( uint16 nwkAddr, uint8 *extAddr, uint8 pktCost )
- {
- zdoConcentratorInd_t conInd;
- conInd.nwkAddr = nwkAddr;
- conInd.extAddr = extAddr;
- conInd.pktCost = pktCost;
- if( zdoCBFunc[ZDO_CONCENTRATOR_IND_CBID] != NULL )
- {
- zdoCBFunc[ZDO_CONCENTRATOR_IND_CBID]( (void*)&conInd );
- }
- }
- void ZDO_LeaveCnf( NLME_LeaveCnf_t* cnf )
- {
-
- if ( osal_ExtAddrEqual( cnf->extAddr,
- NLME_GetExtAddr() ) == TRUE )
- {
-
- if ( ( zdoCBFunc[ZDO_LEAVE_CNF_CBID] == NULL ) ||
- ( (*zdoCBFunc[ZDO_LEAVE_CNF_CBID])( cnf ) == NULL ) )
- {
-
- ZDApp_LeaveReset( cnf->rejoin );
- }
- }
- else if ( ZSTACK_ROUTER_BUILD )
- {
-
- ZDApp_LeaveUpdate( cnf->dstAddr,
- cnf->extAddr,
- cnf->removeChildren );
- }
- }
- void ZDO_LeaveInd( NLME_LeaveInd_t* ind )
- {
- uint8 leave;
-
-
- if ( ind->request == TRUE )
- {
-
- if ( ZSTACK_ROUTER_BUILD )
- {
- NLME_LeaveRsp_t rsp;
- rsp.rejoin = ind->rejoin;
- rsp.removeChildren = ind->removeChildren;
- NLME_LeaveRsp( &rsp );
- }
-
- ZDApp_LeaveReset( ind->rejoin );
- }
- else
- {
- leave = FALSE;
-
- if ( ind->srcAddr == NLME_GetCoordShortAddr() )
- {
- if ( ( ind->removeChildren == TRUE ) ||
- ( ZDO_Config_Node_Descriptor.LogicalType ==
- NODETYPE_DEVICE ) )
- {
- leave = TRUE;
- }
- }
- else if ( ind->removeChildren == TRUE )
- {
-
-
- }
- if ( leave == TRUE )
- {
-
- ZDApp_LeaveReset( ind->rejoin );
- }
- else
- {
-
- ZDApp_LeaveUpdate( ind->srcAddr,
- ind->extAddr,
- ind->removeChildren );
- }
- }
-
- if (zdoCBFunc[ZDO_LEAVE_IND_CBID] != NULL)
- {
- (void)zdoCBFunc[ZDO_LEAVE_IND_CBID](ind);
- }
- }
- void ZDO_SyncIndicationCB( uint8 type, uint16 shortAddr )
- {
- (void)shortAddr;
- if ( ZSTACK_END_DEVICE_BUILD
- || (ZSTACK_ROUTER_BUILD && ((_NIB.CapabilityFlags & ZMAC_ASSOC_CAPINFO_FFD_TYPE) == 0)))
- {
- if ( type == 1 )
- {
-
- nwkNeighborInitTable();
-
- ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_JOIN_REQ, sizeof(osal_event_hdr_t), NULL );
- }
- }
- }
- void ZDO_ManytoOneFailureIndicationCB()
- {
-
-
-
-
- RTG_MTORouteReq();
- }
- void ZDO_PollConfirmCB( uint8 status )
- {
- (void)status;
- return;
- }
- void ZDApp_NwkWriteNVRequest( void )
- {
- #if defined ( NV_RESTORE )
- if ( !osal_get_timeoutEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV ) )
- {
-
- ZDApp_NVUpdate();
- }
- #endif
- }
-
- ZStatus_t ZDO_UpdateDeviceIndication( uint8 *extAddr, uint8 status )
- {
-
-
- (void)extAddr;
- (void)status;
- return ZSuccess;
- }
- void ZDApp_InMsgCB( zdoIncomingMsg_t *inMsg )
- {
- if ( inMsg->clusterID & ZDO_RESPONSE_BIT )
- {
-
- }
- else
- {
-
-
- if ( !(inMsg->wasBroadcast) && inMsg->clusterID != Device_annce )
- {
- ZDP_GenericRsp( inMsg->TransSeq, &(inMsg->srcAddr), ZDP_NOT_SUPPORTED, 0,
- (uint16)(inMsg->clusterID | ZDO_RESPONSE_BIT), inMsg->SecurityUse );
- }
- }
- }
- void ZDApp_ChangeMatchDescRespPermission( uint8 endpoint, uint8 action )
- {
-
- afSetMatch( endpoint, action );
- }
- void ZDApp_NetworkInit( uint16 delay )
- {
- if ( delay )
- {
-
- osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, delay );
- }
- else
- {
- osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT );
- }
- }
- void ZDApp_NwkStateUpdateCB( void )
- {
-
- if ( !osal_get_timeoutEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV ) )
- {
-
- ZDApp_NVUpdate();
- }
- }
- void ZDApp_NodeProfileSync( uint8 stackProfile )
- {
- if ( ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_DEVICETYPE_FFD )
- {
- if ( stackProfile != zgStackProfile )
- {
- ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_DEVICE;
- ZDO_Config_Node_Descriptor.CapabilityFlags = CAPINFO_DEVICETYPE_RFD | CAPINFO_POWER_AC | CAPINFO_RCVR_ON_IDLE;
- NLME_SetBroadcastFilter( ZDO_Config_Node_Descriptor.CapabilityFlags );
- }
- }
- }
- uint8 ZDApp_StartJoiningCycle( void )
- {
- if ( devState == DEV_INIT || devState == DEV_NWK_DISC )
- {
- continueJoining = TRUE;
- ZDApp_NetworkInit( 0 );
- return ( TRUE );
- }
- else
- return ( FALSE );
- }
- uint8 ZDApp_StopJoiningCycle( void )
- {
- if ( devState == DEV_INIT || devState == DEV_NWK_DISC )
- {
- continueJoining = FALSE;
- return ( TRUE );
- }
- else
- return ( FALSE );
- }
- void ZDApp_AnnounceNewAddress( void )
- {
- #if defined ( ZIGBEE_NWK_UNIQUE_ADDR_CHECK )
-
- APSME_HoldDataRequests( 0 );
- #endif
- ZDP_DeviceAnnce( NLME_GetShortAddr(), NLME_GetExtAddr(),
- ZDO_Config_Node_Descriptor.CapabilityFlags, 0 );
- #if defined ( ZIGBEE_NWK_UNIQUE_ADDR_CHECK )
-
- APSME_HoldDataRequests( ZDAPP_HOLD_DATA_REQUESTS_TIMEOUT );
- #endif
- }
- void ZDApp_NVUpdate( void )
- {
- #if defined ( NV_RESTORE )
- osal_start_timerEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV, ZDAPP_UPDATE_NWK_NV_TIME );
- #endif
- }
- uint16 ZDApp_CoordStartPANIDConflictCB( uint16 panid )
- {
- return ( panid + 1 );
- }
- void ZDO_SrcRtgIndCB (uint16 srcAddr, uint8 relayCnt, uint16* pRelayList )
- {
- zdoSrcRtg_t srcRtg;
- srcRtg.srcAddr = srcAddr;
- srcRtg.relayCnt = relayCnt;
- srcRtg.pRelayList = pRelayList;
- if( zdoCBFunc[ZDO_SRC_RTG_IND_CBID] != NULL )
- {
- zdoCBFunc[ZDO_SRC_RTG_IND_CBID]( (void*)&srcRtg );
- }
- }
- void ZDApp_InitZdoCBFunc( void )
- {
- uint8 i;
- for ( i=0; i< MAX_ZDO_CB_FUNC; i++ )
- {
- zdoCBFunc[i] = NULL;
- }
- }
- ZStatus_t ZDO_RegisterForZdoCB( uint8 indID, pfnZdoCb pFn )
- {
-
- if ( indID < MAX_ZDO_CB_FUNC )
- {
- zdoCBFunc[indID] = pFn;
- return ZSuccess;
- }
- return ZInvalidParameter;
- }
- ZStatus_t ZDO_DeregisterForZdoCB( uint8 indID )
- {
-
- if ( indID < MAX_ZDO_CB_FUNC )
- {
- zdoCBFunc[indID] = NULL;
- return ZSuccess;
- }
- return ZInvalidParameter;
- }
|