1. //串口发送接收流程
  2.  
  3. main: //主函数
  4. ->osal_init_system(); //操作系统初始化
  5. ->osalInitTasks(); //任务初始化
  6. -->ZDApp_Init(taskID++); //该函数初始化后,协调器建立网络、终端将加入网络
  7. -->ZDOInitDevice(); //设备初始化
  8. -->ZDAPP_NetworkInit(extendedDelay); //网络初始化
  9. -->osal_start_timeEx(....,ZDO_NETWORK_INIT,..) //发送消息
  10. -->ZDApp_event_loop() //事件
  11. -->ZDO_StartDevice((uint8)ZDO_Config.............) //开始设备
  12. -->NLME_NetworkDiscoveryRequest() 建立网络
  13. -->ZDO_NetworkFormationConfirmCB() //给予ZDO层发聩信息
  14.  
  15. -->osal_set_event(..,ZDO_NETWORK_START)启动网络事件 协调器
  16. -->ZDApp_NetworkStartEvt(); //处理网络启动事件
  17. -->osal_set_event(....,ZDO_STATE_CHANGE_EVT); //设置网络状态改变事件
  18. -->ZDAPP_event_loop(); //网络改变事件函数
  19.  
  20. -->ZDApp_SendMsg(....,ZDO_NWK_DISC_CNF,...); //终端、路由器,
  21. -->ZDApp_ProcessOSALMsg() //请求加入
  22. -->ZDO_JoinConfirmCB() //终端设备加入网络
  23. -->ZDApp_SendMsg(...,ZDO_NWK_JOIN_IND,..); ZDO_NWK_JOIN_IND事件发生给ZDO
  24. -->ZDApp_ProcessOSALMsg()
  25. -->ZDApp_ProcessNetworkJoin(); //设备加入网络
  26. -->osal_set_event(...,ZDO_STATE_CHANGE_EVT); //终端设备
  27. -->NLME_StartRouteRequest(,,false); //路由器
  28. -->osal_set_event(...,ZDO_ROUTER_START);
  29.  
  30. ->osal_start_system(); //此时开始执行操作系统,不断检测操作系统是否有事件发生,有则跳去执行
  31.  
  32. zigbeeafIncomingMSGPacket_t结构体描述的是什么?
  33. typedef struct
  34. {
  35. osal_event_hdr_t hdr; /* OSAL Message header *///OSAL消息头
  36. uint16 groupId; /* Message's group ID - 0 if not set *///消息组ID
  37. uint16 clusterId; /* Message's cluster ID *///消息族ID
  38. afAddrType_t srcAddr; /* Source Address, if endpoint is STUBAPS_INTER_PAN_EP,
  39. it's an InterPAN message *///源地址类型
  40. uint16 macDestAddr; /* MAC header destination short address *///MAC物理地址
  41. uint8 endPoint; /* destination endpoint */ //目的端点
  42. uint8 wasBroadcast; /* TRUE if network destination was a broadcast address *///广播地址
  43. uint8 LinkQuality; /* The link quality of the received data frame */ //接收数据帧的链路质量
  44. uint8 correlation; /* The raw correlation value of the received data frame *///接收数据帧的未加工相关值。
  45. int8 rssi; /* The received RF power in units dBm *///接收的射频功率。
  46. uint8 SecurityUse; /* deprecated *///弃用
  47. uint32 timestamp; /* receipt timestamp from MAC *///收到时间标记。
  48. afMSGCommandFormat_t cmd; /* Application Data */应用程序数据
  49. } afIncomingMSGPacket_t; //无线数据包格式结构体
  50.  
  51. typedef struct
  52. {
  53. uint8 event;
  54. uint8 status;
  55. } osal_event_hdr_t;
  56.  
  57. // Generalized MSG Command Format
  58. typedef struct
  59. {
  60. uint8 TransSeqNumber;
  61. uint16 DataLength; // Number of bytes in TransData
  62. uint8 *Data;
  63. } afMSGCommandFormat_t;
  64.  
  65. HalLedBlink(HAL_LED_1, , , ); //0是闪烁次数,但是0表示的是一直闪,不是不闪,50是百分之五十,就是亮灭各一半。500是周期,就是0.5s。
  66.  
  67. 建立网络、加入网络流程分析
  68.  
  69. 协调器节点:在1- 实验8 网络通信实验2 组播通信中
  70.  
  71. while(MSGpkt)
  72. {
  73. switch(MSGpkt->hdr.event)
  74. {
  75. case ZDO_STATE_CHANGE: //建立网络后,设置事件
  76. GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);//???????
  77. if(GenericApp_NwkState==DEV_ZB_COORD)//把该节点已初始化为协调器,则执行下面的
  78. {
  79. HalLedBlink(HAL_LED_2,,,); //LED2 闪烁
  80. aps_AddGroup(GENERICAPP_ENDPOINT,&GenericApp_Group); //建立网路后,加入组。
  81. osal_start_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,);
  82. }
  83. 路由器节点: 1- 实验8 网络通信实验2 组播通信中
  84. while(MSGpkt)
  85. {
  86. switch(MSGpkt->hdr.event)
  87. {
  88. case ZDO_STATE_CHANGE: //加入网络后,加入族中
  89. GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);//读取节点的设备类型
  90. if(GenericApp_NwkState==DEV_ROUTER)
  91. {
  92. aps_AddGroup(GENERICAPP_ENDPOINT,&GenericApp_Group); //加入组中
  93. }
  94. break;
  95. 终端节点:- 实验4 串口通信2
  96. while(MSGpkt)
  97. {
  98. switch(MSGpkt->hdr.event)
  99. {
  100. case ZDO_STATE_CHANGE:
  101. GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);//读取节点的设备类型
  102. if(GenericApp_NwkState==DEV_END_DEVICE)
  103. {
  104. //当中断节点加入网络后使用osal_set_envent()函数设置SEND_DATA_EVENT事件,当事件发生时,执行事件处理函数
  105. osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);//??????????????????????????
  106. }
  107. break;
  108.  
  109. 而上面的 GenericApp_NwkStatedevStates_t GenericApp_NwkState;这样定义的,用于//保存节点状态
  110.  
  111. [cpp] view plain copy
  112. typedef enum
  113. {
  114. DEV_HOLD, // Initialized - not started automatically
  115. DEV_INIT, // Initialized - not connected to anything
  116. DEV_NWK_DISC, // Discovering PAN's to join
  117. DEV_NWK_JOINING, // Joining a PAN
  118. DEV_NWK_REJOIN, // ReJoining a PAN, only for end devices
  119. DEV_END_DEVICE_UNAUTH, // Joined but not yet authenticated by trust center
  120. DEV_END_DEVICE, // Started as device after authentication
  121. DEV_ROUTER, // Device joined, authenticated and is a router
  122. DEV_COORD_STARTING, // Started as Zigbee Coordinator
  123. DEV_ZB_COORD, // Started as Zigbee Coordinator
  124. DEV_NWK_ORPHAN // Device has lost information about its parent..
  125. } devStates_t;
  126. 刚开始时,都是在GenericApp_Init()函数中将GenericApp_NwkState=DEV_INIT。然后再通过哪几步转到为上面三种情况DEV_ZB_COORDDEV_ROUTERDEV_END_DEVICE中的一种。
  127. TI协议栈是半开源的,网络层代码并不开源。运行于端口0ZDO负责应用层用户程序和网络层之间的通信。
  128.  
  129. 网络层的建立过程是由ZDO来实现的。网络建立后应用层会接受到ZDO_STATE_CHANGE消息。使用下面语句就可以读取当前网络的状态。
  130.  
  131. GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);//读取节点的设备类型

cc2530串口通信流程的更多相关文章

  1. CC2530串口通信

    任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX). RX:接收数据串行输入.通过采样技术来区别数据和噪音,从而恢复数据. TX :发送数据输出.当发送器被禁止时,输出引 ...

  2. Qt编写串口通信程序全程图文解说

    (说明:我们的编程环境是windows xp下,在Qt Creator中进行,假设在Linux下或直接用源代码编写,程序稍有不同,请自己修改.) 在Qt中并没有特定的串口控制类,如今大部分人使用的是第 ...

  3. 转:Qt编写串口通信程序全程图文讲解

    转载:http://blog.csdn.net/yafeilinux/article/details/4717706  作者:yafeilinux (说明:我们的编程环境是windows xp下,在Q ...

  4. Qt串口通信

    1. Qt串口通信类QSerialPort 在Qt5的的更新中,新增了串口通信的相关接口类QSerialPort,这使得在开发者在使用Qt进行UI开发时,可以更加简单有效地实现串口通信的相关功能. 开 ...

  5. 基于FPGA的红外遥控解码与PC串口通信

    基于FPGA的红外遥控解码与PC串口通信 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<电子设计EDA>的课程设计作业(呵呵,这个月都拿 ...

  6. ROS串口通信

    身处机器人行业,不想一直只做低端的单片机控制,老是待在舒适区,所以一直都想学一下ROS系统,但看了几个月资料后,感觉还是云里雾里,似懂非懂,感念似乎都很清楚,但要实际去做,却又感觉无从下手. 于是想先 ...

  7. [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)

    星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...

  8. ZStack串口通信

    要使用ZStack就不得不先了解ZStack的OSAL工作原理 http://blog.csdn.net/qinpeng_zbdx/article/details/20990797 http://we ...

  9. 【嵌入式】——arm裸机开发 step by step 之 串口通信

    一.在使用S5PV210的串口发送和接收的时候,首先要对S5PV210的串口进行配置,我们使用轮询方式时的配置有哪些? 1.配置GPIO,使对应管脚作为串口的发送和接收管脚 GPA0 0 1 管脚 2 ...

随机推荐

  1. 解决ORA-00904: invalid identifier标识符无效

    方法/步骤 1 大部分情况下,此错误是由于引用了不存在的列名导致的.比如select name from Studtent 当studeng表中无name列时,系统就会报此错误. 2 解决思路是,确定 ...

  2. 17 个 tar 命令实用示例【转】

    Tar(Tape ARchive,磁带归档的缩写,LCTT 译注:最初设计用于将文件打包到磁带上,现在我们大都使用它来实现备份某个分区或者某些重要的目录)是类 Unix 系统中使用最广泛的命令,用于归 ...

  3. 拓扑序+dp Codeforces Round #374 (Div. 2) C

    http://codeforces.com/contest/721/problem/C 题目大意:给你有向路,每条路都有一个权值t,你从1走到n,最多花费不能超过T,问在T时间内最多能访问多少城市? ...

  4. NSTimer定时器

    NSTimer的避免内存泄露与控制器的正确引用和释放:

  5. .NET Framework不同组件区别及安装注意事项

      发布时间:  2012/7/14 11:52:37 严格细分起来,.NET Framework又有两个不同的组件,.NET Framework可再发行组件包(23MB左右)和.NET Framew ...

  6. eclipse配置tomcat及修改tomcat默认根目录

    1.安装eclipse for j2ee和tomcat: 2.下载tomcat对eclipse的插件:http://www.eclipsetotale.com/tomcatPlugin.html 下载 ...

  7. apicloud教程2 (转载)

    本帖最后由 中山赢友网络科技有限公司 于 2015-10-17 15:38 编辑 继<APICloud之小白图解教程系列(一):认识APICloud>之后的第二篇教程. 本篇教程有以下知识 ...

  8. [Python]网络爬虫(四):Opener与Handler的介绍和实例应用

    在开始后面的内容之前,先来解释一下urllib2中的两个个方法:info and geturl urlopen返回的应答对象response(或者HTTPError实例)有两个很有用的方法info() ...

  9. php 弹窗插件

    index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  10. POJ 3468<线段树,区间add>

    题目连接 //位运算 k<<1 相当于 k*2 k<<1|1 相当于 k*2+1 /* 修改区间内的值,并且维护区间和. 详见代码 */ #include<cstdio& ...