当前位置:文档之家› zigbee协议,源代码

zigbee协议,源代码

竭诚为您提供优质文档/双击可除zigbee协议,源代码篇一:揭开zigbee20xx协议栈z-stack的”开源“面纱揭开zigbee20xx协议栈z-stack的”开源“面纱(20xx-11-2216:06)分类:zigbee技术学习我们都在说zigbee20xx协议栈z-stack是开源的,但是这个协议栈到底是全部开源的,还是只是开源一部分,让我们来揭开它的“开源”面纱?z-stack是在20xx年4月,德州仪器推出业界领先的zigbee协议栈,z-stack符合zigbee20xx规范,支持多种平台,z-stack 包含了网状网络拓扑的几近于全功能的协议栈,在竞争激烈的zigbee领域占有很重要地位。

配合osal完成整个协议栈的运行。

z-stack只是zigbee协议的一种具体的实现,我们要澄清的是zigbee不仅仅有z-stack这一种,也不能把z-stack 等同于zigbee20xx协议,现在也有好几个真正开源的zigbee协议栈,例如:msstatepan协议栈,freakz协议栈,这些都是zigbee协议的具体实现,而且是全部真正的开源的,它们的所有源代码我们都可以看到,而z-stack中的很多关键的代码是以库文件的形式给出来,也就是我们只能用它们,而看不到它们的具体的实现。

那下面我们就以z-stack1.4.3-1.2.0看看它的组织架构,那些功能是开源的,那些是以库文件的形式提供给我们的。

我们利用z-stack开发应用,只能知道怎么做和做什么也就是“how”和“what”,而不能准确的知道“为什么”,“why”.我们也可以通过真正这些开源的zigbee协议栈了解为什么。

我们可以从ti的官方网站下载最新的协议栈,/zigbee 我这里的是zigbee20xx版本为版本的。

下载完以后我们可以点击exe文件进行安装,默认会在c盘的根目录下建立texasinstruments目录,该目录下面的子目录就是安装z-stack的文件。

下面的这个图就是z-stack协议栈的目录结构,根目录下有一个gettingstartedguidecc2430.pdf文件,是安装卸载协议栈的说明文件,另外三个文件夹分别是documentscomponents和project。

1.documentsdocuments文件夹包含了对整个协议栈进行说明的所有文档信息,下面有很多的pdF格式的文档,内容比较多,不过也无需全部的细读,我们可以把它们当做参考手册,根据需要来阅读。

ponentscomponents文件夹是z-stack协议栈的各个功能部件的实现,本文件夹下包含的子目录如下:1)hal文件夹为硬件平台的抽象层2)mac文件夹包含了802.15.4物理协议的实现说需要代码文件的头文件,由于ti公司处于某种考虑,这部分并没有给出具体的源代码,而是以库文件的形式存在.\projects\zstack\libraries文件夹给出3)mt文件夹包含了为系统添加在电脑上有z-tools调试的功能所需要的源文件4)osal包含了操作系统抽象层所需要的文件5)service文件夹保护了z-stack提供的两种服务:寻址服务和数据服务所需要的文件6)stack文件夹是components文件夹最核心的部分,是zigbee协议栈具体实现部分,在在其下有分为了af(应用框架),nwk(网络层),sapi(简单应用接口)、sec(安全)、sys(系统头文件),zcl(zigbee簇库),zdo(zigbee设备对象)等7个文件夹。

7)zmac文件夹包含了z-stackmac导出层文件。

还有一个project目录,该目录下包含了用于z-stack功能演示的各个项目的例子。

可供开发者们参考。

从上面我们可以看到其中核心部分的代码都是编译好的,以库文件的形式给出的,比如安全模块,路由模块,和mesh自组网模块。

如果要获得这部分的源代码可以向ti购买,可能花费不菲,可要大几万人民币。

ti所谓的“开源”只是提供给我们一个平台,开发者可以在上面做应用而已,而绝不是我们通常理解的开源。

也就我们在下载后源代码后,有些函数我们根本无法查看到它们的源代码的原因。

现在ti 公司提供的cc2480芯片,已经把这个协议栈固化到了硬件中,我们只需要掌握几个简单的api就可以完成基本的应用开发。

现在也有公司开发出了基于at指令集的zigbee协议栈,更方便开发了。

在前面也提到过一些真正开源的zigbee协议栈,不过这些协议栈没有大的商业公司的支持,开发升级方面,性能方面和ti公司的还是有很大的差距,这里就简单的介绍几个:(1)msstatepan协议栈msstatepan协议栈是由密西西比大学的R.Reese教授为广大无线技术爱好者开发的精简版zigbee协议栈,基于标准c语言编写,基本具备了zigbee协议标准所规定的功能,最新版本为V0.2.6,该版本支持多种开发平台,包括picdemz、cc2430评估板、msp430+cc2420(tmote)以及win32虚拟平台。

源代码是开放的,整个协议栈是基于状态机(Fsm)实现的。

如果你的程序构架不是基于操作系统的,有限状态机应该是一个很好的选择。

而且os (operatingsystem)中进程的状态也是个各个状态间的切换。

该协议栈的网站地址如下/(3)tinyos:tinyos是ucberkeley(加州大学伯克利分校)开发的开放源代码操作系统,专为嵌入式无线传感网络设计,操作系统基于构件(component-based)的架构使得快速的更新成为可能,而这又减小了受传感网络存储器限制的代码长度。

tinyos的构件包括网络协议、分布式服务器、传感器驱动及数据识别工具。

它只是一个操作系统,不过现在已经成立了tinyoszigbeeworkinggroup已经开始设计开源的zigbee。

非常值得我们的期待。

下载地址如下:http:///篇二:zigbee数据的发送和接收数据的发送和接收一、数据的发送在zstack20xx的协议栈中,我们只需调用函数aF_dat }addr;afaddrmode_taddrmode;//传送模式byteendpoint;//端点号}afaddrtype_t;2、端点描述符endpointdesc_ttypedefstruct{byteendpoint;//端点号byte*task_id;//那一个任务的端点号simpledescriptionFormat_t*simpledesc;//简单的端点描述afnetworklatencyReq_tlatencyReq;}endpointdesc_t;3、简单描述符simpledescriptionFormat_ttypedefstruct{byteendpoint;//epuint16appprofid;//应用规范iduint16appdeviceid;//特定规范id的设备类型byteappdevVer:4;//特定规范id的设备的版本byteReserved:4;//aF_V1_suppoRtusesforappFlags:4.byteappnuminclusters;//输入簇id的个数cid_t*pappinclusterlist;//输入簇id的列表byteappnumoutclusters;//输出簇id的个数cid_t*pappoutclusterlist;//输出簇id的列表}simpledescriptionFormat_t;4、簇idcidclusterid--具体应用串id5、发送选项options发送选项有如下选项#defineaF_FRagmented0x01#defineaF_ack_Request0x10#defineaF_discV_Route0x20#defineaF_en_secuRity0x40#defineaF_skip_Routing0x80其中aF_ack_Request为发送后需要接收方的确认6、半径、条数radius传输跳数或传输半径,默认值为10数据发送模式说明:在协议栈数据发送模式有以下几种:单播、组播、广播和直接发送四种模式。

广播发送广播发送可以分为三种,如果想使用广播发送,则只需将dstaddr->addrmode设为addrbroadcast,dstaddr->addr->shortaddr设置为相应的广播类型即可。

具体的定义如下:nwk_bRoadcast_shoRtaddR_deVall(0xFFFF)——数据包将被传送到网络上的所有设备,包括睡眠中的设备。

对于睡眠中的设备,数据包将被保留在其父亲节点直到查询到它,或者消息超时。

nwk_bRoadcast_shoRtaddR_deVRxon(0xFFFd)——数据包将被传送到网络上的所有接收机的设备(Rxonwhenidle),也就是说,除了睡眠中的所有设备。

nwk_bRoadcast_shoRtaddR_deVzczR(0xFFFc)——数据包发送给所有的路由器,包括协调器。

组播发送如果设备想传输数据到某一组设备,那么只需将dstaddr->addrmode设为addrgroup,dstaddr->addr->shortaddr设置为相应的组id即可。

代码如下://setupfortheflashcommandsdestinationaddress-group1sampleapp_Flash_dstaddr.addrmode=(afaddrmode_t)afad drgroup;sampleapp_Flash_dstaddr.endpoint=sampleapp_endpoint; sampleapp_Flash_dstaddr.addr.shortaddr=sampleapp_Flash_gRoup;根据上面代码的配置,然后使用aF_dataRequest()函数来进行组播发送。

单播发送单播发送需要知道目标设备的短地址,需要将dstaddr->addrmode设为addr16bit,dstaddr->addr->shortaddr设置为目标设备的短地址即可。

代码如下:sampleapp_Flash_dstaddr.addrmode=(afaddrmode_t)afad dr16bit;sampleapp_Flash_dstaddr.endpoint=sampleapp_endpoint;sampleapp_Flash_dstaddr.addr.shortaddr=0x00;根据上面代码的配置,然后使用aF_dataRequest()函数来进行点对点发送。

相关主题