建立网络、加入网络流程分析
协调器节点:在1-10 实验8 网络通信实验2 组播通信中
- while(MSGpkt)
- {
- switch(MSGpkt->hdr.event)
- {
- case ZDO_STATE_CHANGE:
- GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);
- if(GenericApp_NwkState==DEV_ZB_COORD)
- {
- HalLedBlink(HAL_LED_2,0,50,500);
- aps_AddGroup(GENERICAPP_ENDPOINT,&GenericApp_Group);
- osal_start_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,5000);
- }
路由器节点: 在1-10 实验8 网络通信实验2 组播通信中
- while(MSGpkt)
- {
- switch(MSGpkt->hdr.event)
- {
- case ZDO_STATE_CHANGE:
- GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);
- if(GenericApp_NwkState==DEV_ROUTER)
- {
- aps_AddGroup(GENERICAPP_ENDPOINT,&GenericApp_Group);
- }
- break;
终端节点:1-5 实验4 串口通信2
- while(MSGpkt)
- {
- switch(MSGpkt->hdr.event)
- {
- case ZDO_STATE_CHANGE:
- GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);
- if(GenericApp_NwkState==DEV_END_DEVICE)
- {
-
- osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);
- }
- break;
而上面的 GenericApp_NwkState是devStates_t GenericApp_NwkState;这样定义的,用于
- typedef enum
- {
- DEV_HOLD,
- DEV_INIT,
- DEV_NWK_DISC,
- DEV_NWK_JOINING,
- DEV_NWK_REJOIN,
- DEV_END_DEVICE_UNAUTH,
- DEV_END_DEVICE,
- DEV_ROUTER,
- DEV_COORD_STARTING,
- DEV_ZB_COORD,
- DEV_NWK_ORPHAN
- } devStates_t;
刚开始时,都是在GenericApp_Init()函数中将GenericApp_NwkState=DEV_INIT。然后再通过哪几步转到为上面三种情况DEV_ZB_COORD、DEV_ROUTER、DEV_END_DEVICE中的一种。
TI协议栈是半开源的,网络层代码并不开源。运行于端口0的ZDO负责应用层用户程序和网络层之间的通信。
网络层的建立过程是由ZDO来实现的。网络建立后应用层会接受到ZDO_STATE_CHANGE消息。使用下面语句就可以读取当前网络的状态。
GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);
读取cc2530节点的设备类型、协调器、路由器、终端。
原文:http://www.cnblogs.com/yihujiu/p/5690390.html