




已阅读5页,还剩166页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 zstack协议栈 2 本章目标 理解zstack软件架构掌握操作系统的运行机制掌握zstack各层作用 3 本章目标 理解zstack软件架构掌握操作系统的运行机制掌握zstack各层作用 4 zstack协议栈是德州仪器 英文简称ti 公司为zigbee提供的一个解决方案 结合cc2530f256芯片可以实现zigbee完整的解决方案 本章将对zstack协议栈进行分层剖析 以了解其运作原理 这是进行zstack应用开发的基础 6 1概述 5 zstack文件结构 6 1概述 双击此文件安装协议栈相关文件 安装完成后生成此文件 协议栈各目录文件 说明文档 工程文档 工具文件 6 zstack协议栈符合zigbee协议结构 由物理层 mac层 网络层和应用层组成 物理层和mac层由ieee802 15 4定义 网络层和应用层由zigbee联盟来定义 zigbee联盟将应用层又详细划分为应用支持子层 应用设备框架以及zigbee设备对象等 6 2zstack软件架构 7 zigbee协议栈结构可参考本书的第2章讲解 包括物理层 mac层 nwk 网络层 apl 应用层 应用支持子层aps 应用程序框架af 设备对象zdo层 6 2 1zigbee协议栈 8 zigbee协议栈结构可参考本书的第2章讲解 包括物理层 mac层 nwk 网络层 apl 应用层 应用支持子层aps 应用程序框架af 设备对象zdo层 6 2 1zigbee协议栈 物理层内容 物理层定义了物理无线信道和mac子层之间的接口 提供物理层数据服务单元 pd sap 和物理层管理服务 mlme sap mac 介质接入控制子层 mac层负责处理所有物理无线信道的访问 并产生网络信号 同步信号 支持pan连接和分离 提供两个对等的mac实体之间可靠链路 nwk 网络层 网络层是zigbee协议栈的核心部分 网络层主要实现节点加入或者离开网络 接收或抛弃其它节点 路由查找及维护等功能 9 zigbee协议栈结构可参考本书的第2章讲解 包括物理层 mac层 nwk 网络层 apl 应用层 应用支持子层aps 应用程序框架af 设备对象zdo层 6 2 1zigbee协议栈 apl 应用层 zigbee应用层包括应用支持子层aps 应用程序框架af zigbee设备对象zdo等 应用支持子层aps aps层在nwk层和apl层之间 提供apsde sap和apsme sap两个接口 两个接口的主要功能如下 apsde sap提供在同一个网络中的两个或者更多的应用实体之间 即端点 的数据通信 apsme sap提供多种服务给应用对象zdo 这些服务包括安全服务和绑定设备服务 并维护管理对象的数据库 即aib 10 zigbee协议栈结构可参考本书的第2章讲解 包括物理层 mac层 nwk 网络层 apl 应用层 应用支持子层aps 应用程序框架af 设备对象zdo层 6 2 1zigbee协议栈 应用程序框架af 运行在zigbee协议栈上的应用程序实际是厂商自定义的应用对象 并且遵循规范 profile 运行在端点1 240上 设备对象层zdo 远程设备通过zdo请求描述信息 接收到这些请求时 zdo会调用配置对象获取相应的描述符值 zdo通过apsme sap接口提供绑定服务 11 zstack协议栈可以从ti的官方网站下载 截止本书出版时 zstack协议栈的最新版本为zstack cc2530 2 5 1a 其下载网址为 下载完成后 双击可执行程序即可安装 使用iar8 10版本打开zstack cc2530 2 5 1a中的sampleapp工程 其协议栈代码文件夹 6 2 2zstack协议栈 12 6 2 2zstack协议栈 app 为应用层目录 用户可以根据需求添加自己的任务 这个目录中包含了应用层和这个项目的主要内容 在协议栈里面一般是以操作任务实现的 hal 硬件驱动层 包括硬件相关的配置 驱动以及操作函数 osal 协议栈的操作系统 profile af层目录 包含af层处理函数 security services 安全服务层目录 安全层和服务层处理函数 比如加密 tools 工程配置目录 包括空间划分及zstack相关配置信息 13 6 2 2zstack协议栈 zdo zdo设备对象目录 zmac mac层目录 包括mac层参数及mac层的lib库函数回调处理函数 zmain 主函数目录 包括入口函数及硬件配置文件 output 输出文件目录 由iar自动生成 14 6 2 3zigbee协议栈与zstack对比 zstack协议栈是一个半开源的协议栈 其中mac层和zmac层的源码没有全部开源 关于他们的具体内容 在实际的工程开发中也不需要详细了解 15 6 3hal层分析 zigbee的hal层提供了开发板所有硬件设备 例如led lcd key uart等 的驱动函数及接口 hal文件夹为硬件平台的抽象层 包含common include和target三个文件夹 16 6 3 1common文件夹 common目录下包含有hal assert c和hal dirvers c两个文件 其中hal assert c是声明文件 用于调试 hal dirvers c是驱动文件 一般不需要修改 了解即可 一些底层驱动文件 需要用户掌握的 17 6 3 1common文件夹 hal assert c halasserthandler halasserthazardlights 18 6 3 1common文件夹 halasserthandler 这个函数为硬件系统检测函数 如果定义了assert reset宏定义 系统将调用hal system reset复位 否则将调用halaaaerthazardlights 执行闪烁led命令 voidhalasserthandler void 如果定义了assert reset宏定义 ifdefassert reset 系统复位hal system reset else definedassert while 当检测到错误时 led灯闪烁命令函数halasserthazardlights elsewhile 1 endif 19 6 3 1common文件夹 halasserthazardlights 此函数控制led灯闪烁 但是根据不同的硬件平台定义的led的个数不同来决定闪烁不同的led 例如cc2430和cc2530所使用的硬件平台不同决定闪烁的led不同 如果硬件平台定义的led的个数为1 if hal num leds 1 led1闪烁hal toggle led1 如果硬件平台定义的led的个数为2 if hal num leds 2 led2闪烁hal toggle led2 如果硬件平台定义的led的个数为3 if hal num leds 3 led3闪烁hal toggle led3 如果硬件平台定义的led的个数为4 if hal num leds 4 led4闪烁hal toggle led4 endif endif endif endif 20 6 3 1common文件夹 hal drivers c hal drivers c文件中包含了与硬件相关初始化和事件处理函数 此文件中有4个比较重要的函数 硬件初始化函数hal init 硬件驱动初始化函数haldriverinit 硬件事件处理函数hal processevent 询检函数hal processpoll 21 6 3 1common文件夹 硬件初始化函数hal init hal init 函数是硬件初始化函数 其功能是通过 注册任务id号 以实现在osal层注册 从而允许硬件驱动的消息和事件由osal处理 voidhal init uint8task id 注册任务idhal taskid task id zstack协议栈操作系统任务id 在后续章节中详细讲解 22 6 3 1common文件夹 硬件驱动初始化函数haldriverinit haldriverinit 函数被main 函数调用 用于初始化与硬件设备有关的驱动 voidhaldriverinit void 如果定义了定时器则初始化定时器 if definedhal timer endif 23 6 3 1common文件夹 硬件驱动初始化函数haldriverinit haldriverinit 函数被main 函数调用 用于初始化与硬件设备有关的驱动 如果定义了lcd 初始化lcd if definedhal lcd endif 24 6 3 1common文件夹 硬件事件处理函数hal processevent hal processevent 函数在app层中的任务事件处理中调用 用于对相应的硬件事件作出处理 具体包括系统消息事件 led闪烁事件 按键处理事件和睡眠模式等 uint16hal processevent uint8task id uint16events uint8 msgptr void task id 系统消息事件if events 协议栈固有的函数 在使用的时候可以直接调用 不需要大幅度的修改 25 6 3 1common文件夹 硬件事件处理函数hal processevent hal processevent 函数在app层中的任务事件处理中调用 用于对相应的硬件事件作出处理 具体包括系统消息事件 led闪烁事件 按键处理事件和睡眠模式等 按键处理事件if events 26 6 3 1common文件夹 询检函数hal processpoll hal processpoll 函数在main 函数中被osal start system 调用 用来对可能产生的硬件事件进行询检 voidhal processpoll 定时器询检 if definedhal timer endif 协议栈固有的函数 在使用的时候可以直接调用 不需要大幅度的修改 27 6 3 1common文件夹 询检函数hal processpoll hal processpoll 函数在main 函数中被osal start system 调用 用来对可能产生的硬件事件进行询检 spi询检 if definedhal spi endif 28 6 3 2include文件夹 include目录主要包含各个硬件模块的头文件 主要内容是与硬件相关的常量定义以及函数声明 在移植过程中可能需要修改 需要用户掌握 29 6 3 2include文件夹 include目录主要包含各个硬件模块的头文件 主要内容是与硬件相关的常量定义以及函数声明 30 6 3 3target文件夹 target目录下包含了某个设备类型下的硬件驱动文件 硬件开发板上的配置文件 mcu信息和数据类型 本书采用的硬件平台为cc2530 因此本节以硬件设备类型cc2530eb eb是版本号 表示是评估版 为例进行讲解 31 6 3 3target文件夹 在cc2530eb文件夹下包含三个子文件夹 分别是config drivers includes 需要用户重点掌握 32 6 3 3target文件夹 config文件夹 config文件夹中包含了hal board cfg h 在hal board cfg h中定义了硬件cc2530硬件资源的配置 比如gpio dma adc等 在hal board cfg h文件中可以定义开发板的硬件资源 以led为例来讲解 ti官方的cc2530eb版本定义了两个led led1和led2 有关led1宏定义 defineled1 bvbv 0 defineled1 sbitp1 0 defineled1 ddrp1dir defineled1 polarityactive high 如果定义了hal board cc2530eb rev17 则定义led2和led3 ifdefined hal board cc2530eb rev17 有关led2的宏定义 defineled2 bvbv 1 defineled2 sbitp1 1 defineled2 ddrp1dir defineled2 polarityactive high 有关led3的宏定义 defineled3 bvbv 4 defineled3 sbitp1 4 defineled3 ddrp1dir defineled3 polarityactive high endif 33 6 3 3target文件夹 config文件夹 led宏定义完成之后 设置led的打开和关闭 其代码在hal board cfg h文件中 如果定义了hal board cc2530eb rev17且没有定义hal pa lna和hal pa lna cc2590 则定义led的状态 ifdefined hal board cc2530eb rev17 definehal toggle led4 hal toggle led1 34 6 3 3target文件夹 drivers文件夹 在drivers文件中定义了硬件资源的驱动文件 35 6 3 3target文件夹 drivers文件夹 以最常用的led为例 在hal led c文件中提供了2个封装好的函数 在应用层可以直接调用他们来控制led 具体有以下函数 halledset uint8leds uint8mode halledblink uint8leds uint8numblinks uint8percent uint16period 36 6 3 3target文件夹 drivers文件夹 halledset 函数是用来控制led的亮灭 该函数的原型如下 halledset uint8leds uint8mode 参数leds 指led的名称hal led 1 hal led 2 hal led 3 hal led 4 参数mode led状态打开led hal led mode on 关闭led hal led mode off 改变led状态 hal led mode toggle halledset hal led 1 hal led mode on 37 6 3 3target文件夹 drivers文件夹 halledblink 函数是用来控制led闪烁的 函数原型如下 halledblink uint8leds uint8numblinks uint8percent uint16period 参数leds 指led的名称hal led 1 hal led 2 hal led 3 hal led 4 参数numblinks 闪烁次数 参数percent led亮和灭的所用事件占空比 例如亮和灭所用的事件比例为1 1 则占空比为100 2 50 参数period led闪烁一个周期所需要的时间 以毫秒为单位 halledblink hal led 1 4 50 500 led1在500ms的时间内闪烁4次 其亮灭时间间隔是一样的 38 6 4nwk层 zstack的nwk层负责的功能有 节点地址类型的分配 协议栈模板 网络拓扑结构 网络地址的分配的选择等 39 6 4 1节点地址类型的选择 zstack中地址类型有两种 64位ieee地址和16位网络地址 zstack中也称短地址或网络短地址 64位ieee地址 即mac地址 也称 长地址 或 扩展地址 是一个全球唯一的地址 一经分配将跟随设备一生 通常由制造商在设备出厂或被安装时设置 这些地址由ieee组织来维护和分配 16位网络地址 是设备加入网络后 由网络中的协调器分配给设备的地址 也称 短地址 它在网络中是唯一的 用来在网络中鉴别设备和发送数据 对于协调器 网络地址固定为0 x0000 40 6 4 1节点地址类型的选择 在zstack协议栈声明了读取ieee地址和网络地址的函数 函数的声明可以在nlmede h文件中看到 但是具体的实现函数是非开源的 在使用的时候直接调用即可 读取父节点的网络地址uint16nlme getcoordshortaddr void 读取父节点的物理地址voidnlme getcoordextaddr byte 读取节点本身的网络地址uint16nlme getshortaddr void 读取自己的物理地址byte nlme getextaddr void uint16shortaddrshortaddr mlme getshortaddr 41 6 4 2协议栈模板 zstack协议栈模板由zigbee联盟定义 在同一个网络中的设备必须符合同一个协议栈模板 zstack协议栈使用了zigbee联盟定义的三种模板 zigbee协议栈模板zigbeepro协议栈模板特定网络模板 42 6 4 2协议栈模板 另外 开发者为了开发具有特殊性的产品 可以向zigbee联盟申请自定义的模板 在zstack协议栈中 开发者申请了两种自定义模板 协议栈模板由一个id标识符区分 此id标识符可以通过查询设备发送的信标帧获得 在设备加入网络之前 首先需要确认协议栈模板id标识符 在zstack协议栈中 各种模板的id标识符的定义如下 特定网络 模板的id标识符被定义为 network specific 且模板id标识符为0 zigbee协议栈 模板的id标识符被定义为 home specific 且模板id标识符为1 其中 zigbee协议栈 模板常用在智能家居的控制 zigbeepro协议栈 模板的id标识符被定义为 zigbeepro specific 且模板id标识符为2 43 6 4 2协议栈模板 另外 开发者为了开发具有特殊性的产品 可以向zigbee联盟申请自定义的模板 在zstack协议栈中 开发者申请了两种自定义模板 协议栈模板由一个id标识符区分 此id标识符可以通过查询设备发送的信标帧获得 在设备加入网络之前 首先需要确认协议栈模板id标识符 在zstack协议栈中 各种模板的id标识符的定义如下 自定义模板的id标识符被定义为 generic star 和 generic tree 且模板id标识符被分别定义为3和4 从模板id标识符的定义来看 这两个自定义模板分别是为星型网络和树型网络专门定义的 44 6 4 2协议栈模板 另外 开发者为了开发具有特殊性的产品 可以向zigbee联盟申请自定义的模板 在zstack协议栈中 开发者申请了两种自定义模板 协议栈模板由一个id标识符区分 此id标识符可以通过查询设备发送的信标帧获得 在设备加入网络之前 首先需要确认协议栈模板id标识符 在zstack协议栈中 各种模板的id标识符的定义如下 自定义模板的id标识符被定义为 generic star 和 generic tree 且模板id标识符被分别定义为3和4 从模板id标识符的定义来看 这两个自定义模板分别是为星型网络和树型网络专门定义的 45 6 4 2协议栈模板 其三种模板的配置在nwk globals h文件中 特定网络 模板id definenetwork specific0 zigbee协议模板id definehome controls1 zigbeepro模板id definezigbeepro profile2 自定义模板id definegeneric star3 自定义模板id definegeneric tree4 如果定义了zigbeepro 那么协议栈为zigbeepro模板 ifdefined zigbeepro definestack profile idzigbeepro profile else 如果没有定义zigbeepro 那么协议栈为zigbee模板 definestack profile idhome controls endif zstack cc2530 2 5 1a zstack cc2530 2 2 0 1 3 0 46 6 4 3网络参数配置 网络类型参数和网络深度的设置 在zstack协议栈中星型网络 树型网络和网状型网络三种网络类型的定义在nwk globals h文件中 定义网络类型 星型网 definenwk mode star0 树型网 definenwk mode tree1 网状网 definenwk mode mesh2 47 6 4 3网络参数配置 网络类型参数和网络深度的设置 在zstack协议栈中定义的三种网络拓扑结构分别在不同的模板下定义 且每一种模板下都定义了该网络的网络深度 具体定义在nwk globals h文件中 如果协议栈模板为zigbeepro模板 if stack profile id zigbeepro profile 网络的最大深度为20 definemax node depth20 定义网络类型为网状网络 definenwk modenwk mode mesh definesecurity modesecurity commercial if secure 0 defineuse nwk security1 trueorfalse definesecurity level5 else defineuse nwk security0 trueorfalse definesecurity level0 endif 48 6 4 3网络参数配置 网络类型参数和网络深度的设置 在zstack协议栈中定义的三种网络拓扑结构分别在不同的模板下定义 且每一种模板下都定义了该网络的网络深度 具体定义在nwk globals h文件中 如果协议栈模板定义为zigbee协议栈模板 elif stack profile id home controls 网络的最大深度为5 definemax node depth5 定义网络类型为网络网络 definenwk modenwk mode mesh definesecurity modesecurity commercial if secure 0 defineuse nwk security1 trueorfalse definesecurity level5 else defineuse nwk security0 trueorfalse definesecurity level0 endif 49 6 4 3网络参数配置 网络类型参数和网络深度的设置 在zstack协议栈中定义的三种网络拓扑结构分别在不同的模板下定义 且每一种模板下都定义了该网络的网络深度 具体定义在nwk globals h文件中 如果模板为星型网络的自定义模板 elif stack profile id generic star 网络的最大深度为5 definemax node depth5 定义网络类型为星型网络 definenwk modenwk mode star definesecurity modesecurity residential if secure 0 defineuse nwk security1 trueorfalse definesecurity level5 else defineuse nwk security0 trueorfalse definesecurity level0 endif 50 6 4 3网络参数配置 网络类型参数和网络深度的设置 在zstack协议栈中定义的三种网络拓扑结构分别在不同的模板下定义 且每一种模板下都定义了该网络的网络深度 具体定义在nwk globals h文件中 如果网络模板为特定网络模板 elif stack profile id network specific 网络的最大深度为5 definemax node depth5 定义网络类型为网状型网络 definenwk modenwk mode mesh definesecurity modesecurity residential if secure 0 defineuse nwk security1 trueorfalse definesecurity level5 else defineuse nwk security0 trueorfalse definesecurity level0 endif endif 51 6 4 3网络参数配置 每一级可以容纳的节点个数的配置 在zstack协议栈中 每一级路由可以容纳的节点的个数的配置分为两种情况 一个路由器或者一个协调器可以连接的子节点的最大个数 一个路由器或者一个协调器可以连接的具有路由功能的节点的最大个数 52 6 4 3网络参数配置 每一级可以容纳的节点个数的配置 如果前者用c来表示 后者用r来表示 那么r为c的一个子集 另外这两个参数的设置与协议栈模板有关系 具体配置在nwk globals c文件中 其代码如下 如果协议规范为zigbeepro模板 if stack profile id zigbeepro profile 定义max routers为默认值bytecskiprtrs 1 0 定义max routers为默认值bytecskipchldrn 1 0 如果协议规范为zigbee模板 elif stack profile id home controls 定义协调器和每级路由器下携带的路由器节点个数为6bytecskiprtrs max node depth 1 6 6 6 6 6 0 定义协调器和每级路由器可以携带的节点个数为20个bytecskipchldrn max node depth 1 20 20 20 20 20 0 如果协议模板为自定义generic star模板 elif stack profile id generic star 定义协调器和每级路由器下携带的路由器节点个数为5bytecskiprtrs max node depth 1 5 5 5 5 5 0 定义协调器和每级路由器下携带的节点个数为56bytecskipchldrn max node depth 1 5 5 5 5 5 0 如果协议规范为自定义generic star规范 elif stack profile id network specific 定义协调器和每级路由器下携带的路由器节点个数为5bytecskiprtrs max node depth 1 5 5 5 5 5 0 定义协调器和每级路由器下携带的路由器节点个数为5bytecskipchldrn max node depth 1 5 5 5 5 5 0 53 6 4 3网络参数配置 每一级可以容纳的节点个数的配置 在zigbeepro协议栈模板中定义的cskipchldrn和cskiprtrs数组为默认值 即定义代码如下 如果协议规范为zigbeepro模板 if stack profile id zigbeepro profile 定义max routers为默认值bytecskiprtrs 1 0 定义max routers为默认值bytecskipchldrn 1 0 54 6 4 3网络参数配置 树型网络中网络地址分配的算法 在zigbee的树型网络中 网络地址分配算法需要三个参数 网络的最大深度 在zstack协议中被定义为max node depth 在此算法中用l表示 路由器或协调器可以连接的子节点的最大个数 在zstack协议栈中被定义为cskipchldrn数组中元素的值 在此算法中用c表示 路由器或协调器可以连接的具有路由功能的子节点的最大个数 在zstack协议栈中被定义为cskiprtrs数组中的元素的值 在此算法中用r表示 55 6 4 3网络参数配置 树型网络中网络地址分配的算法 以上3个参数设置完成后 如果需要计算深度为d的网络地址偏移量cskip d 则有如下计算公式 若l 6 c 20 r 6 那么计算深度d 1的网络地址偏移量cskip 1 为5181 十六进制为143d 协调器网络地址为0 x0000 那么协调器下第一个路由器的网络地址为0 x0001 第二个路由器的网络地址为0 x0001 0 x143d 0 x143e 56 6 5tool配置及分析 tools文件为工程设置文件目录 比如信道 panid 设备类型的设置 57 6 5tool配置及分析 f8wconfig cfg文件 f8wconfig cfg文件为zstack协议栈的配置文件 在此文件中设置zigbee使用的信道和zigbee网络panid 信道设置 0 868mhz0 x00000001 1 10 915mhz0 x000007fe 11 26 2 4ghz0 x07fff800 dmax channels 868mhz0 x00000001 dmax channels 915mhz0 x000007fe dmax channels 24ghz0 x07fff800 以下为信道11 26的设置 ddefault chanlist 0 x04000000 26 0 x1a ddefault chanlist 0 x02000000 25 0 x19 ddefault chanlist 0 x01000000 24 0 x18 ddefault chanlist 0 x00800000 23 0 x17 ddefault chanlist 0 x00400000 22 0 x16 ddefault chanlist 0 x00200000 21 0 x15 ddefault chanlist 0 x00100000 20 0 x14 ddefault chanlist 0 x00080000 19 0 x13 ddefault chanlist 0 x00040000 18 0 x12 ddefault chanlist 0 x00020000 17 0 x11 ddefault chanlist 0 x00010000 16 0 x10 ddefault chanlist 0 x00008000 15 0 x0f ddefault chanlist 0 x00004000 14 0 x0e ddefault chanlist 0 x00002000 13 0 x0d ddefault chanlist 0 x00001000 12 0 x0c ddefault chanlist 0 x00000800 11 0 x0b 网络panid的设置 dzdapp config pan id 0 xffff 58 6 5tool配置及分析 f8wconfig cfg文件 当网络panid设置为0 xffff时 即协调器建立网络时将在0 x0000 0 xffff之间随机选择一个数作为网络的panid 如果网络的panid为0 x0000 0 xffff之间指定的一个数 则协调器建立网络时将会以选定的panid作为网络panid建立网络 网络panid的设置 dzdapp config pan id 0 x1234 59 6 5tool配置及分析 f8wcoord cfg文件 f8wcoord cfg文件是zstack协议栈协调器设备类型配置文件 其功能是将程序编译成具有协调器和路由器的双重功能 这是因为协调器需要同时具有网络建立和路由器功能 协调器设置 协调器功能 dzdo coordinator 路由器功能 drtr nwk 60 6 5tool配置及分析 f8wrouter cfg文件 f8wrouter cfg文件为路由器配置文件 此文件将程序编译成具有路由器功能 路由器功能 drtr nwk 61 6 5tool配置及分析 f8wendev cfg文件 此文件为终端节点的配置文件 在此文件中既没有编译协调器功能也没有编译路由器功能 因此 此文件一般不需要配置 62 6 6profile层分析 profile对应zigbee软件架构中的应用程序框架af层 profile文件夹下面包含两个文件 af c和af h af层提供应用支持子层aps到应用层的接口 af层主要提供两种功能 端点的管理和数据的发送和接收 63 6 6 1端点的管理 在zigbee协议中每个设备都被看作一个节点 每个节点都有物理地址 长地址 和网络地址 短地址 长地址或短地址用来作为其他节点发送数据的目的地址 另外每一个节点都有241个端点 其中端点0预留 端点1 240被应用层分配 每个端点是可寻址的 端点的主要作用可以总结为以下两个方面 数据的发送和接收 当一个设备发送数据时 必须指定发送目的节点的长地址或短地址以及端点来进行数据的发送和接收 并且发送方和接收方所使用的端点号必须一致 绑定 如果设备之间需要绑定 那么在zigbee的网络层必须注册一个或者多个端点来进行数据的发送和接收以及绑定表的建立 64 6 6 1端点的管理 端点的实现由端点描述符来完成 每一个端点描述符由一个结构体来实现 在端点描述符中又包含了一个简单描述符 端点描述符简单描述符端点的注册 65 6 6 1端点的管理 端点描述符 节点中每一个端点都需要一个端点描述符 此端点描述符结构体定义在af h文件中 typedefstruct byteendpoint byte task id simpledescriptionformat t simpledesc afnetworklatencyreq tlatencyreq endpointdesc t 端点号1 40 由用户定义 任务id的指针 指向消息的传递地址 指向端点简单描述符的指针 必须用nolatencyreqs来填充 66 6 6 1端点的管理 简单描述符 每一个端点必有一个zigbee简单描述符 其他设备通过查询这个端点的简单描述符来获得设备的一些信息 端点的简单描述符结构体在af h文件中定义 typedefstruct byteendpoint uint16appprofid uint16appdeviceid byteappdevver 4 bytereserved 4 byteappnuminclusters cid t pappinclusterlist byteappnumoutclusters cid t pappoutclusterlist simpledescriptionformat t 端点号1 40 由用户定义 支持了端点定义的簇id其值为0 0 xffff 端点支持的设备id其值为0 0 xffff 端点上设备执行的设备描述版本 端点支持的输入簇个数 端点支持的输出簇个数 67 6 6 1端点的管理 端点描述符 在端点配置成功后需要在af层注册端点 用到的函数是afregister 此函数在af c文件中定义 应用层将调用此函数注册一个新的端点到af层 afstatus tafregister endpointdesc t epdesc 参数描述 epdesc 指向端点描述符的指针 返回值 afstatus t 如果注册成功则返回zsuccess 否则返回zcomdef h中定义的错误 endpointdesc tsampleapp epdesc afregister 68 6 6 2数据的发送和接收 zstack协议栈数据的发送和接收是通过数据发送和接收api来实现的 数据发送和接收的api在af层定义 69 6 6 2数据的发送和接收 数据的发送 数据的发送只要通过调用数据发送函数即可实现 数据发送函数为af datarequest 此函数在af c文件中定义 数据发送函数原型 afstatus taf datarequest afaddrtype t dstaddr endpointdesc t srcep uint16cid uint16len uint8 buf uint8 transid uint8options uint8radius 70 6 6 2数据的发送和接收 数据的发送 发送代码示例 voidmysendtest sendperiodicmessage void 发送的数据charthemessagedata led1 if af datarequest 发送目的地址 mysendtest periodic dstaddr 发送的端点描述符 mysendtest epdesc 簇id号mysendtest periodic clusterid 发送的字节长度 uint16 osal strlen themessagedata 1 发送的数据 uint8 themessagedata 发送的数据id序号 myfirstappcoordmanage transid 设置路由发现af discv route 设置路由域af default radius zsuccess else 71 6 6 2数据的发送和接收 发送数据目的地址 在发送函数af datarequest 中第一个参数是发送目的地址的信息 目的地址信息为一个结构体 此结构体在af h中定义 typedefstruct union uint16shortaddr zlongaddr textaddr addr afaddrmode taddrmode byteendpoint uint16panid afaddrtype t 发送的目的地址 16为短地址或64位长地址 地址模式 4种 端点 panid 72 6 6 2数据的发送和接收 发送数据目的地址 其中addrmode被定义为枚举类型afaddrmode t afaddrmode t成员定义了发送信息的四种地址模式 afaddrmode t在af h中定义 typedefenum 间接寻址afaddrnotpresent addrnotpresent 单点寻址 指定短地址afaddr16bit addr16bit 单点寻址 指定长地址afaddr64bit addr64bit 组寻址afaddrgroup addrgroup 广播寻址afaddrbroadcast addrbroadcast afaddrmode t 73 6 6 2数据的发送和接收 发送数据目的地址 间接寻址 间接寻址多用于绑定 当应用程序不知道数据包的目标地址时 将寻址模式设定为addrnotpresent zstack底层将自动从堆栈的绑定表中查找目标设备的具体网络地址 这称为源绑定 如果在绑定表中找到多个设备 则向每个设备都发送一个数据包的拷贝 74 6 6 2数据的发送和接收 发送数据目的地址 单点寻址 单点寻址是标准的寻址模式 是点对点的通信 它将数据包发送给一个已知网络地址的网络设备 单点寻址由两种设置方式 addr16bit和addr64bit 当寻址方式设置为addr16bit时 afaddrtype t中的目标地址addr应设置为shortaddr 当寻址方式设置为addr64bit时 afaddrtype t中的目标地址addr应设置为extaddr afaddrtype tmysendtest single dstaddr 寻址方式为addr16bitmysendtest single dstaddr addrmode afaddr16bit 设置端点号mysendtest single dstaddr endpoint mysendtest endpoint 目标地址addr为协调器的短地址mysendtest single dstaddr addr shortaddr 0 x0000 75 6 6 2数据的发送和接收 发送数据目的地址 组寻址 当应用程序需要将数据包发送给网络上的一组设备时 使用该模式 此时地址模式设置为afaddrgroup 并且地址信息结构体afaddrtype t中的目标地址addr应设置为组id 在使用这个功能之前 必须在网络中定义组 afaddrtype tmysendtest danbo dstaddr 寻址方式为组寻址mysendtest danbo dstaddr addrmode afaddrgroup 设置端点号mysendtest danbo dstaddr endpoint mysendtest endpoint 设置目标地址addr为组id号mysendtest danbo dstaddr addr shortaddr mysendtest flash group 76 6 6 2数据的发送和接收 发送数据目的地址 广播寻址 当应用程序需要将数据包发送给网络中的每一个设备时 使用此模式 此时将地址模式设置为addrbrodcast 地址信息结构体afaddrtype t中的目标地址addr可以设置为以下广播地址中的一种 0 xffff 如果目的地址为0 xffff时 数据包将被传送到网络上的所有设备 包括睡眠中的设备 对于睡眠中的设备 数据包将被保留在其父节点 直到它苏醒后主动到父节点查询 或者直到消息超时丢失此数据包 0 xffff是广播模式目标地址的默认值 0 xfffd 如果目的地址为0 xfffd时数据包将被传送到网络上所有空闲时打开接收的设备 即除了睡眠中的所有设备 77 6 6 2数据的发送和接收 发送数据目的地址 广播寻址 当应用程序需要将数据包发送给网络中的每一个设备时 使用此模式 此时将地址模式设置为addrbrodcast 地址信息结构体afaddrtype t中的目标地址addr可以设置为以下广播地址中的一种 0 xfffc 如果目的地址为0 xfffc时 数据包发送给所有的路由器 其中也包括协调器 0 xfffe 如果目的地址为0 xfffe时 应用层将不指定目标设备 而是通过协议栈读取绑定表获得相应额度目标设备的短地址 78 6 6 2数据的发送和接收 发送数据目的地址 广播寻址地址分配方法 afaddrtype tmysendtest periodic dstaddr 设置广播地址模式mysendtest periodic dstaddr addrmode afaddrbroadcast 设置端点mysendtest periodic dstaddr endpoint mysendtest endpoint 设置广播地址目的地址短地址 默认值mysendtest periodic dstaddr addr shortaddr 0 xffff 79 6 6 2数据的发送和接收 数据的接收 数据包被发送到一个登记注册过的端点 在应用层通过osal事件处理函数中的接收信息事件af incoming msg cmd来处理数据的接收 其中数据的接收是通过在af层定义的结构体afincomingmsgpacket t来进行 此结构体定义在af h文件中 typedefstruct osal event hdr thdr uint16groupid uint16clusterid afaddrtype tsrcaddr uint16macdestaddr u
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 魏振赢民法课件
- 高铁消防知识培训课件
- 济宁市2024-2025学年九年级下学期语文月考测试试卷
- 集安市2025-2026学年八年级上学期语文期中模拟试卷
- 高速铁路线路课件
- 电表读数课件
- 高血压药物课件
- 江西省鹰潭市2024-2025学年高一下学期期末考试 思想政治试卷
- 消化系统常用药鲁临2讲课文档
- 电网供配电知识培训内容课件
- 押题宝典期货从业资格之《期货法律法规》试题及参考答案详解(能力提升)
- 2025年北师大版新教材数学二年级上册教学计划(含进度表)
- 2025年职业技能鉴定-油品储运调和操作工-油品储运调和操作工(高级技师)历年参考题库含答案解析(5套)
- 初中语文学科组质量分析
- 基孔肯雅热防控技术指南2025版培训课件
- GB 2536-2025电工流体变压器和开关用的未使用过的矿物绝缘油
- 2025年广东省中考语文试卷真题(含答案)
- 部编人教版六年级上册语文全册教学课件+单元复习课件
- 【新教材】苏科版(2024)七年级上册数学第1-6章全册教案设计
- 金沙县光热水气候条件分析.
- 非人灵长类种质资源与模型研发中心项目可行性研究报告模板立项审批
评论
0/150
提交评论