zigbee设备启动分析_第1页
zigbee设备启动分析_第2页
zigbee设备启动分析_第3页
zigbee设备启动分析_第4页
zigbee设备启动分析_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、设备启动准备一、设备类型选择:通过Workspace下拉框选择设备的类型:图1:协调器图2:路由器图3:终端节点协议栈设备类型:#define ZG_DEVICETYPE_COORDINATOR 0x00#define ZG_DEVICETYPE_ROUTER 0x01#define ZG_DEVICETYPE_ENDDEVICE 0x02#define ZG_DEVICETYPE_SOFT 0x03ZG_DEVICETYPE_SOFT说明:可选设备类型。可以成为路由器、也可以成为协调器,由后面的程序决定。初始化:对于DEVICE_LOGICAL_TYPE的值各逻辑类型设备初始化如下:/ De

2、vice Logical Type/zgDeviceLogicalType = DEVICE_LOGICAL_TYPE在ZGlobals.h文件中设备逻辑类型进行了初始化:#if defined ( SOFT_START )#define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_SOFT /可选择类型#elif defined( ZDO_COORDINATOR )#define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_COORDINATOR /协调器#elif defined (RTR_NWK)#define DEVICE_LOGICAL

3、_TYPE ZG_DEVICETYPE_ROUTER /路由器#else#define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_ENDDEVICE /终端#endif说明:如果编译了SOFT_START,则初始化设备逻辑类型(DEVICE_LOGICAL_TYPE)为可选择类型(ZG_DEVICETYPE_SOFT)即设备可以作为协调器启动创建一个网络或者作为路由器加入一个已经存在的网络。如果没有编译SOFT_START但编译了ZDO_COORDINATOR,则初始化设备逻辑类型(DEVICE_LOGICAL_TYPE)为协调器(ZG_DEVICETYPE_COOR

4、DINATOR),即设备作为路由器启动并创建一个网络。如果没有编译SOFT_START和ZDO_COORDINATOR,但编译了 RTR_NWK,则初始化设备的逻辑类型为路由器,即设备作为路由器启动并加入网络。其他情况则初始化为终端节点并加入网络。SOFT-START说明:SOFT_START is a compile option that allows the device to start as a coordinator if one isn't found.设备启动模式(devStartMode)、设备状态(devState)启动模式:表示了设备是以何种方式启动typedef

5、 enumMODE_JOIN, /加入MODE_RESUME, /恢复/MODE_SOFT, /暂不支持MODE_HARD, /创建网络MODE_REJOIN /重新加入 devStartModes_t;说明:MODE_JOIN和MODE_REJOIN 是路由器和终端使用的选项,用来加入或者重新加入网络。而MODE_HARD是协调器使用的选项。用来创建一个网络。而MODE_RESUME是恢复设备原来的状态。设备状态标识了设备此时的状态:typedef enumDEV_HOLD, / Initialized - not started automaticallyDEV_INIT, / Initi

6、alized - not connected to anythingDEV_NWK_DISC, / Discovering PAN's to joinDEV_NWK_JOINING, / Joining a PANDEV_NWK_REJOIN, / ReJoining a PAN, only for end devicesDEV_END_DEVICE_UNAUTH, / Joined but not yet authenticated by trust centerDEV_END_DEVICE, / Started as device after authenticationDEV_R

7、OUTER, / Device joined, authenticated and is a routerDEV_COORD_STARTING, / Started as Zigbee CoordinatorDEV_ZB_COORD, / Started as Zigbee CoordinatorDEV_NWK_ORPHAN / Device has lost information about its parent. devStates_t;初始化(以协调器为例)devStartMode和devState的初始化,ZDApp.c中启动模式(devStartModes_t)#if define

8、d( ZDO_COORDINATOR ) && !defined( SOFT_START )/ Set the default to coodinatordevStartModes_t devStartMode = MODE_HARD;#else/ Assume joiningdevStartModes_t devStartMode = MODE_JOIN;#endif说明:如果编译了ZDO_COORDINATOR并且没有编译SOFT_START,则初始化设备启动模式(devStartMode)为MODE_HARD,即协调器创建网络。其他情况初始化设备启动模式(devStart

9、Mode)为MODE_JOIN,即设备加入网络。.以上可以看出,如果编译了 SOFT_START。首先并不是创建网络,而是先加入网络。如果网络加入失败,则考虑创建一个网络。设备状态(devState):#if defined( HOLD_AUTO_START )devStates_t devState = DEV_HOLD;/ Initialized - not started automatically#elsedevStates_t devState = DEV_INIT;/ Initialized - not connected to anything#endif说明:如果编译了HOLD

10、_AUTO_START,则设备状态(devState)为 DEV_HOLD;否则设备状态(devState)为 DEV_INIT。Hold Auto Start说明:A device will automatically start trying to form or join a network . If the device should wait on a timer or other external event before joining, then HOLD_AUTO_START must be defined. In order to manually start the jo

11、in process at a later time.3、有两种方式来设置非自动启动模式:Hold Auto Start(1)、手工方式:在ZDApp_Init()函数中有个ZDAppCheckForHoldKey();(/ Check for manual(手工的) "Hold Auto Start").void ZDAppCheckForHoldKey( void )/如果检测到按键 SW_BYPASS_START被按下,则将设备的状态置为 DEV_HOLD#if (defined HAL_KEY) && (HAL_KEY = TRUE)if ( Hal

12、KeyRead () = SW_BYPASS_START) devState = DEV_HOLD;#endif(2)、预编译方式:project->options->c/c+compiler->preprocessor->defined symbols下编译选项:HOLD_AUTO_START在ZDApp.c中:#if defined( HOLD_AUTO_START )devStates_t devState = DEV_HOLD;#elsedevStates_t devState = DEV_INIT;#endif把devState初始化为DEV_HOLD.以上两

13、种方式最终都会设置devState = DEV_HOLD / Initialized - not started automatically预编译选项:什么是预编译选项:Compile options are used to select between features that are provided in the source files. Most compile options act as on/off switches for specific sections within source programs. Some options are used to provide a

14、 user-defined 编译选项是将源程序里提供的特性选择应用。大多数编译选项是充当“开关”作用。直接通过编译选项来决定是否应用某一特性。编译选项配置的两种方式:A:TOOL文件夹下的三个配置文件在Tools文件夹下查看f8wCoord.cfg、f8wRouter.cfg、f8wEdev.cfg三个配置文件信息。协调器:f8wCoord.cfg配置文件中同时编译了路由功能RTR_NWK和协调器功能ZDO_COORDINATOR/* Coordinator Settings */-DZDO_COORDINATOR / Coordinator Functions-DRTR_NWK / Rout

15、er Functions路由器:f8wRouter.cfg配置文件中编译了路由功能RTR_NWK/* Router Settings */-DRTR_NWK / Router Functions终端:f8wEdev.cfg配置文件中没有编译这两个功能./* */通过配置文件我们也可以看出协调器不仅具有协调器的作用还可以充当路由器,这就是我们所说的如果当协调器创建完网络后就可以认为协调器就变成了路由器了。路由器只有路由的功能,而终端设备没有路由的功能,更没有协调器的功能。B: 通过Option选项下的配置条目进行配置常用配置选项:NV_RESTORESOFT_STARTLCD_SUPPORTED

16、=DEBUGPOWER_SAVINGREFLECTORRTR_NWKZDO_COORDINATORHOLD_AUTO_START网络状态/ ZDOInitDevice return values#define ZDO_INITDEV_RESTORED_NETWORK_STATE 0x00#define ZDO_INITDEV_NEW_NETWORK_STATE0x01#define ZDO_INITDEV_LEAVE_NOT_STARTED 0x02说明:ZDO_INITDEV_RESTORED_NETWORK_STATE 网络状态为恢复状态,即如果编译了NV-RESTORE,则设备将恢复为上

17、次的状态。ZDO_INITDEV_RESTORED_NETWORK_STATE 网络状态为新状态或者没有可以恢复的状态,此时设备将直接创建或者加入一个网络。 ZDO_INITDEV_LEAVE_NOT_STARTED为离开下次启动网络恢复 NV_RESTOREDevices that have successfully joined a network can “restore the network” (instead of reforming by OTA messages) even after losing power or battery. This automatic restor

18、ation can be enabled by defining NV_RESTORE and/or NV_INIT. 地址结构体说明:typedef structunionuint16 shortAddr; ZLongAddr_t extAddr; addr;byte addrMode; zAddrType_t;包括有地址模式和地址。地址模式有:typedef enum afAddrNotPresent = AddrNotPresent, afAddr16Bit = Addr16Bit, afAddrGroup = AddrGroup, afAddrBroadcast = AddrBroad

19、cast afAddrMode_t特殊地址:0xFFFF-向所有设备广播信息0xFFFE-绑定时使用该地址0xFFFD-向所有非睡眠的节点广播0xFFFC-向所有路由器广播(包括协调器)实例:ZDAppNwkAddr.addrMode = Addr16Bit;ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;注册机制说明:为什么要注册?协议栈三大注册机制:端点endpoint的注册、按键KEY的注册和ZDOMsg消息注册。这里我们看endpoint的注册。Endpoint的注册最终调用了函数*afRegisterExtended();epList_

20、t *afRegisterExtended( endPointDesc_t *epDesc, pDescCB descFn )if ( ep )/成功分配空间/ Fill in the new list entryep->epDesc = epDesc;ep->flags = eEP_AllowMatch;ep->pfnDescCB = descFn;ep->nextDesc = NULL;if ( epList = NULL )epList = ep; / Make this the first entryelseepSearch = epList;while( ep

21、Search->nextDesc != NULL )epSearch = epSearch->nextDesc;/循环到最后,就是依次“下一个”,直到最后一个,在最后把新的加上epSearch->nextDesc = ep;协调器创建网络规范说明在一个zigbee网络中,只有协调器(coordinator)才可以建立网络,建立网络的过程是通过原语实现的。首先协调器的应用层调用NLME_NETWORK_FORMATION.request原语发出建立网络请求,网络层(NWK)收到这个原语,向MAC层发送MLME_SCAN.request原语执行信道能量扫描(energy scan

22、)和活动情况扫描(active scan),(在IEEEE802.15.4协议中规定,在2.4G频段,共有16个信道,每个信道的带宽为5M)。信道能量(energy scan)扫描是为了找到规定信道中那一个最安静,并标注为可用信道 。每扫描一个信道持续约半秒,如果配置为16个信道全部扫描共需约八秒。当MAC层执行完信道能量扫描(energy scan)后,由MAC层向NWK层发送MLME_SCAN.confirm确认原语。当信道能量扫描(energy scan)完成后下一步就在可用信道中执行活动情况扫描(active scan),活动情况扫描(active scan)是MAC层通过发送MAC帧

23、,检测是否有回应判断信道是否有其他网络存在,活动情况扫描(active scan)的目的在于防止在同一个信道上建立两个具有相同PANID的网络。当MAC层执行活动情况扫描(active scan)后,由MAC层向NWK层发送MLME_SCAN.confirm确认原语。并将可用的可用的PANID和信道发送给上层。当执行完上述扫描后,如果获得了可用的信道和PANID,则网络层(NWK)向MAC发送MLME_START.request原语请求启动创建网络,当网络创建成功MAC层向网络层(NWK)发送MLME_START.confirm原语告知结果。网络层(NWK)向应用层(APS)发送NLME_NE

24、TWORK_FORMATION.confirm原语告知结果。协调器启动协议栈代码说明1、协调器预编译信息在Tools文件夹下查看f8wCoord.cfg编译ZDO_COORDINATOR和RTR_NWK.在Option选项卡编译:CC2430EB;ZTOOL_P1;MT_TASK;MANAGED_SCAN2、具体流程首先协议栈以主函数为入口点启动协议栈。在主函数中调用了osal_init_system()进行了OS的初始化ZSEG int main( void ) osal_int_disable( INTS_ALL ); HAL_BOARD_INIT(); zmain_vdd_check()

25、; osal_init_system() OS 初始化系统,初始化了内存、定时器、电源管理以及系统任务等。byte osal_init_system( void ) osal_mem_init(); osal_qHead = NULL; osalTimerInit(); osal_pwrmgr_init(); / Initialize the system tasks.初始化任务系统 osalInitTasks();在任务初始化osalInitTasks()函数中,OS为每一层分配一个任务ID,使得协议栈成为一个多任务的系统void osalInitTasks( void ) uint8 ta

26、skID = 0; tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt); osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt); macTaskInit( taskID+ ); nwk_init( taskID+ ); Hal_Init( taskID+ );#if defined( MT_TASK ) MT_TaskInit( taskID+ );#endif APS_Init( taskID+ ); ZDApp_Init( taskID+ )

27、; SampleApp_Init( taskID );函数说明:1、 void *osal_mem_alloc( uint16 size )说明:该函数在内存中开辟了size大小的一块内存参数说明:size-要开辟内存的大小返回值:指针2、void *osal_memset( void *dest, byte value, int len )说明:该函数将起始地址为dest,长度为len的一块内存的值设置为value参数说明:*dest-起始地址 value-要设置成的值 len-设置内存块的大小返回值:指针其他说明:由编译选项可知MT_TASK编译了,可以知道函数中#if defined(

28、MT_TASK ) MT_TaskInit( taskID+ );#endif将被执行。即最后ZDApp_Init(byte task_id) 传递的任务id的值为5,而SampleApp_Init( taskID )传递的任务id为6.void ZDApp_Init(byte task_id) uint8 capabilities;/保存下了OS分配的任务id。即ZDAppTaskID=5ZDAppTaskID=task_id;/如果程序运行到这里正好SW_1被按下,则会设置设备的状态(devState)为DEV_HOLD,从而避开网络初始化ZDAppCheckForHoldKey();/I

29、nitialize ZDO items and setup the device type of device to create.ZDO_Init(); AfRegister( (endPointDesc_t *)&ZDApp_epDesc );/ Start the deviceif ( devState != DEV_HOLD )     ZDOInitDevice( 0 );else    /

30、0;Blink LED to indicate HOLD_START    HalLedBlink ( HAL_LED_4, 0, 50, 500 );ZDApp_RegisterCBs();函数说明:1、 void ZDAppCheckForHoldKey( void )说明:如果在设备启动的时候手动将SW_1按下,则将设备状体置为DEV_HOLD,从而避开网络初始化。参数说明:无返回值:无2、void ZDO_Init( void )说明:该函数是ZD

31、Object 和 ZDProfile 初始化函数,在该函数中调用了ZDODeviceSetup()根据编译选项的不同进行了相关的初始化。参数说明:无返回值:无3、afStatus_t afRegister( endPointDesc_t *epDesc )说明:该函数为zigbee设备注册一个新的端口。应用程序的每一个端口都必须使用该函数进行注册。参数说明:epDesc -指向端口描述符的指针返回值:afStatus_t-在ZcomDef.h的Zstatus_t结构体中定义的状态值4、uint8 ZDOInitDevice(uint16 startDelay)说明:该函数为ZDO设备初始化函数

32、,该函数会检查系统是否需要恢复,如果需要恢复则恢复,否则启动设备。参数说明:startDelay-设备启动延时返回值:ZDO_INITDEV_RESTORED_NETWORK_STATE-设备恢复成功ZDO_INITDEV_NEW_NETWORK_STATE-设备为新状态ZDO_INITDEV_LEAVE_NOT_STARTED-离开下次启动uint8 ZDOInitDevice( uint16 startDelay )  /初始化设备网络状态为ZDO_INITDEV_NEW_NETWORK_STATE:新的网络状态. &#

33、160;uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;  uint16 extendedDelay = 0;  devState = DEV_INIT;    / Remove the Hold state/设备的状态为:设备初始化  #if defined ( NV_RESTORE )&

34、#160; if ( HalKeyRead() = SW_BYPASS_NV )  /如果SW_BYPASS_NV按键此时被按下则会避开NV-RSTORE,将网络状态置为新状态  networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;   else/决定NV是否需要恢复      /函数返回的设备网络状态是新的网络状态或者是恢复的网络状态;以此  /来确定要

35、不要读取NV里相应条目来恢复网络先前状态    networkStateNV = ZDApp_ReadNetworkRestoreState(); /通过函数ZDApp_ReadNetworkRestoreState的返回值决定NV是否需要恢复。  /函数ZDApp_ReadNetworkRestoreState()用来检测是否需要恢复,如果返回值为/ZDO_INITDEV_RESTORED_NETWORK_STATE则恢复网络先前的状态if ( networkStateNV =

36、60;ZDO_INITDEV_RESTORED_NETWORK_STATE )/恢复设备先前的网络状态参数并且  /设置devStartMode = MODE_RESUME  networkStateNV = ZDApp_RestoreNetworkState(); /通过函数ZDApp_RestoreNetworkState()恢复网络先前的状态    else  /如果没有可以恢复的则执行下面代码     

37、60;/ Wipe out the network state in NV    NLME_InitNV();    NLME_SetDefaultNV();  /设置默认NV条目  #endif /以下为没有定义NV_RESTORE,即不恢复网路状态或者恢复失败。如果网络状态为/ZDO_INITDEV_NEW_NETWORK_STATE则执行以下代码if ( networkS

38、tateNV = ZDO_INITDEV_NEW_NETWORK_STATE )   /根据编译选项决定设备的类型,但仅在编译了SOFT_START 才起作用    ZDAppDetermineDeviceType();     / Only delay if joining network - not restoring network state

39、0;   extendedDelay = (uint16)(NWK_START_DELAY + startDelay)              + (osal_rand() & EXTENDED_JOINING_RANDOM_MASK);    / Initialize device

40、60;security  ZDApp_SecInit( networkStateNV );  / Trigger the network start  ZDApp_NetworkInit( extendedDelay );  return ( networkStateNV );函数说明:1 、uint8 ZDApp_ReadNetworkRestoreState( void )说明:通过该函数读取NV 中Z

41、CD_NV_STARTUP_OPTION的值决定是否需要恢复先前的网络状态。参数说明:无返回值: ZDO_INITDEV_NEW_NETWORK_STATE-新网络状态,无需恢复 ZDO_INITDEV_RESTORED_NETWORK_STATE-恢复先前网络状态2、  uint8 ZDApp_RestoreNetworkState( void )说明:通过该函数可以恢复先前的网络状态参数说明:无返回值: ZDO_INITDEV_RESTORED_NETWORK_STATE-网络状态恢复成功 ZDO_INITDEV_NEW_NETWORK_STATE-网络状态恢复失败3、 void

42、 ZDAppDetermineDeviceType( void )说明:通过该函数决定启动时设备的逻辑类型及启动模式,但仅在编译了SOFT_START 才起作用参数说明:无返回值:无4、 void ZDApp_NetworkInit( uint16 delay )说明:通过该函数触发设备启动函数,该函数触发了ZDO_NETWORK_INIT事件。参数说明:delay- 触发ZDO_NETWORK_INIT的延时返回值:无其他说明:在函数ZDApp_NetworkInit()的参数值的大小,这里extendedDelay的大小足够协议栈初始化其它层。因为该参数在传递给函数后定时触发事件ZDO_N

43、ETWORK_INIT,而溢出时间正是extendedDelay。在协议栈提供的SampleApp实例中,编译了SOFT_START,当执行到这里的时候,设备类型为可选类型(ZG_DEVICETYPE_SOFT)。延时extendedDelay确保了当设备开始创建网络的时候已经初始化了SampleApp的应用层,在应用层通过跳线决定了设备的类型是协调器或是路由器。通过上面函数的分析我们可以看出设备在启动的时候可以利用NV恢复上次的网络状态,也可以不恢复直接开始创建或加入网络,恢复与否取决于是否编译了NV_RESTORE。ZDOInitDevice( uint16 start

44、Delay )函数的最后触发了事件ZDO层的ZDO_NETWORK_INIT。ZDO层事件处理函数为ZDApp_event_loop()。UINT16 ZDApp_event_loop( byte task_id, UINT16 events ) if ( events & ZDO_NETWORK_INIT ) / Initialize apps and start the network devState = DEV_INIT; /此时设备状态为“初始化” ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalT

45、ype, devStartMode, DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER ); return (events ZDO_NETWORK_INIT); 函数说明:1 、void ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder )说明:通过该函数根据设备类型及设备启动方式的不同启动设备。参数说明:logicalType-设备的逻辑类型 startMode-设备的启动模式 beaconOrde

46、r-信标时间 superframeOrder-超帧长度返回值:无在ZDApp_event_loop()中处理ZDO_NETWORK_INIT前,即设备启动之前设备的状态设置为设备初始化(DEV_INIT)。然后调用了ZDO_StartDevice()启动设备。下面仔细分析设备的启动函数ZDO_StartDevice()void ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder ) #if defined(ZDO_COORDINATOR) /如果

47、定义了协调器 if ( logicalType = NODETYPE_COORDINATOR ) /node type coordinator /协调器的两种启动方式: if ( startMode = MODE_HARD )/普通的启动,直接创建网络 devState = DEV_COORD_STARTING;/设备状态为协调器正在启动 / NLME_NetworkFormationRequest为系统函数,用于协调器创建网络 ret = NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList, gDefaultSt

48、artingScanDuration,beaconOrder, superframeOrder, false ); else if ( startMode = MODE_RESUME )/网络恢复 / Just start the coordinator devState = DEV_COORD_STARTING; /设备状态为协调器正在启动 /如果是协调器恢复则会以路由器启动 ret = NLME_StartRouterRequest( beaconOrder, beaconOrder, false ); #endif / !ZDO_COORDINATOR/路由器和终端加入网络的过程是一样的

49、,但是两个设备在恢复时是不一样的#if !defined ( ZDO_COORDINATOR ) | defined( SOFT_START ) if ( logicalType = NODETYPE_ROUTER | logicalType = NODETYPE_DEVICE ) if ( (startMode = MODE_JOIN) | (startMode = MODE_REJOIN) )/要加入网络 devState = DEV_NWK_DISC; /此时设备状态为“发现网络” #if defined( MANAGED_SCAN ) /如果编译了MANAGED_SCAN将会会扫描所有

50、信道 ZDOManagedScan_Next(); /进行信道扫描 /选择扫描到的网络加入 ret=NLME_NetworkDiscoveryRequest(managedScanChannelMask, BEACON_ORDER_15_MSEC ); #else /加入到默认信道上的网络 ret=NLME_NetworkDiscoveryRequest(zgDefaultChannelList, zgDefaultStartingScanDuration ); #endif else if ( startMode = MODE_RESUME )/下面是设备恢复代码 if ( logicalT

51、ype = NODETYPE_ROUTER )/路由器的恢复 nwk_ScanJoiningOrphan(&scanCnf);/路由器以孤点方式加入网络 ret = ZSuccess; else/终端节点的恢复 devState = DEV_NWK_ORPHAN; ret = NLME_OrphanJoinRequest( zgDefaultChannelList, zgDefaultStartingScanDuration ); #endif /!ZDO COORDINATOR | SOFT_START if ( ret != ZSuccess )/如果没有启动,则重新再来一次! o

52、sal_start_timerEx(ZDAppTaskID,ZDO_NETWORK_INIT, NWK_RETRY_DELAY );函数说明:1 、ZStatus_t NLME_NetworkFormationRequest( uint16 PanId, uint32 ScanChannels, byte ScanDuration, byte BeaconOrder, byte SuperframeOrder, byte BatteryLifeExtension )说明:通过该函数协调器可以创建一个网络。该函数会触发其对应的回调函数void ZDO_NetworkFormationConfir

53、mCB( ZStatus_t Status )。2、ZStatus_t NLME_StartRouterRequest( byte BeaconOrder, byte SuperframeOrder, byte BatteryLifeExtension )说明:通过该函数可以启动一个路由器或者完成协调器的恢复。该函数会触发其对应的回调函数void ZDO_StartRouterConfirmCB( ZStatus_t Status )。3、ZStatus_t NLME_NetworkDiscoveryRequest( uint32 ScanChannels, byte scanDuration

54、)说明:通过该函数请求网络层发现邻居路由器节点。该函数会触发其对应的回调函数ZStatus_t ZDO_NetworkDiscoveryConfirmCB( byte ResultCount, networkDesc_t *NetworkList )4、void nwk_ScanJoiningOrphan( ZMacScanCnf_t *param )说明:通过该函数路由器会以孤点的方式加入网络。该函数会触发其回调函数void ZDO_JoinConfirmCB( uint16 PanId, ZStatus_t Status )5、 ZStatus_t NLME_OrphanJoinReque

55、st( uint32 ScanChannels, byte ScanDuration )说明:通过该函数终端节点以孤点的方式加入网络。该函数会触发其回调函数void ZDO_JoinConfirmCB( uint16 PanId, ZStatus_t Status )我们这里是协调器的启动,并且没有用到网络恢复,所以在该函数中会调用NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,         

56、60;                                zgDefaultStartingScanDuration, beaconOrder, superframeOrder, false )来创建一个新的网络。调用NLME_NetworkFormationRequest()触发了其对应的回调函数ZDO_NetworkFormationConfirmCB()。void ZDO_NetworkFormationConfirmCB( ZStatus_t Status )#if defined(ZDO_COORDINATOR) nwkStatus = (byte)Status; /将状态保存到nwkStatus中 if ( Status = Z

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论