从零开始学习Zigbee开发.docx
从零开场学习ZstackN1.ZStaCktft况:本人采用的是T1.的ZStaCk1.4.3协议.据说这个需要IAR7.30B及以上版本,而目前巾面上又没有破解,所以用的人很少,这也是我的时机!呵呵!(傻笑有点多,关键是WRD里没有表情符号,不能正常表达我此时的心情!)正式开场:开场之前在说一句:从T1.网站上下数的ZStaCk的方法就不介绍了.否则就是从T开场了而不是从O开场了我是这么觉得的!第一步:安笠ZStaCk从T1.官方网站上下载的ZS1.aCk为:swrc072c.zip,我想这个压缩包大家都认识.解压之后为:ZStack-CC2430T.4.3exe文件.这个安装文件大家播会了.默认安装路径为:C:TexasInStrUaentsZStack-1.4.3.安装之后在C:TexasInstruaentsXZStack1.4.3目录下有各PDF文档为:GettingStartedGuideCC243O.pdf,不用多说,这个肯定是要看的.既然把它放到这么前面.说明它是入门中的入门文档.下面就简单介绍下这个文档:1、介绍了安装ZStaCk-C¢2130TJ.3exe需要的硬件软件条件:需要电脑、操作系统为Windows2000或WindowsXP.至于更拓或更低版本的本人没有尝试.2、讲了安装流程。这个有点多余了,这年月做个有电脑的没有安装上百上次的软件吗但是需要强调的是安装路径默认就好!3、接下来就是让我们看的笫一个文档为:Start->Programs->TexasInstru三ents->ZStack-1.I.3->Z-StackUser'sGuide,既然让我看我就来看看这个文档!第二步:ZStaCk用户指导这个文档的更新时间为:2007年12月21H应该还是比照新的版本。由于本人英文的却有限,就不购译了,浏览-泄,把大概盘思说下就可以了;1、介绍1.1、适用范围本文档适用于CC2430ZigBee开发扳-CC2430ZDK.2、产品包描述Cn提供的CC2430ZDK工具包)2.1、安装包内容这个就是上面提到的的ZStnckCC24301.4.3.exe安装之后的所有内容儿说白了就是包含ZS1.aCk开发所需要的所有软件和文档资料等,2.2、开发板介绍两块SmartW-O1.EB评估版,每个都可以用于CC243OHM评估模块.如图17所示:Figure1:ChipcotiSiiiar1.RFGIKBEva1.uationBoardwithCC2430EM5块CC2430DB评估板,如图12所示:Figure2:ChipconCC2430DBDeve1.opmentBoard10个SOCBB评估板,每个都可以用于CC2430EM或CC243】EN如图卜3所示:Figure3:ChipconS0C.BBBatteryBoard2.3、电缆也就是包含开发包所需要的电缜,如RS232串口线,I;SB线等等附属用件.3、安装配置3.1,主机配置一台个人计券机一一也就是电脑哈我想玩嵌入式的应该福有,而现今不过时的汉也就可以:下面是最低配世?.NET1.1架构TIindowsXPServicePack1(i如果是WindowsXP)?1个巾11(也就是RS232接口)S?1USB接口个人认为要求1.I”相当低了,如果你的电脑没有这配置,个人强累建议马上扔掉!不过如今空记本电脑很少有串口的,所以建议使用台式电脏,而且装机的时帔定要把串口引出,否则就比照麻烦了!3.2、目标板隔求其实也是开发环境需求-IARE805U目前SS要的版本为7.3OB及以上.4,产品安装过程4.1、 安装Z-StaCk这个也就是安装ZStackCC21301.4.3.exe的过程.4.2、 IAR安装彼米说安装选择默认路径,但是自定义路径也不会出问题的。注意IAR版木7.3OB及以上版本才可以运行1.4.3协议.4.3、 设备IEEE地址每个CC2430DB.CC2430郎.和CC2431EM都已经排列了一个唯一的64位物理地址(IEEE地址),这个地址已经写到了CC2430内部F1.ASH里面.在CC2430DB,CC2430EM,和CC2431EM板的底部有这个地址标器.这个地址被写入到FHSH的OX1.FFF8地址中,注意这个地址也可以更改的.通过些F1.ASH软件,-般Oxffffffffffffffff地址被认为是无效地址。5、配置并试用Z-Stack1.1、 i£RZ-Stack这个详见5.3节.1.2、 逻辑类型这里主要是介绍了ZIGBEE防议中的三种设符类型:?ZigBee协调者(ZC):这个设备技配商为初始化并建设一个PAN网络?ZigBee路由器(ZR):该设备被能置为参加一个存在的网络,可以参加一个协词求或路由器.然后允许其他设符参加它,在网络中路有数据信息.7ZiBec终端节点(ZED):该设符被配巴为参加一个存在的网络,可以参加一个访调求线路由器。1.3、 建设样品应用设备:Samp1.eApp根本上就是采用SanIPIeAPP附用中的Denw例子来演示整个流程,就是采用一个协调器和一个或多个谿由器来形成一个ZigBee网络演示。在该例子中主要通过Siimr1.RFO1.EB板上的某此跳战来完成设的类型的选型,当然这个方法在程序中是需要判断哪个按键被拉低或拉高.对于做个设计的来说隔该是相当好理解的.申明:出于本人很穷,所以没人民币买T1.原装开发包,当然也就没有上面提到的硬件,本人采用的是某家公司(为了防止广告,这里就不说明了)的硬件系统。1.4、 建设一个SanPIe1.ight怖调器设备至于提到的硬件连接这里一律省略,无疑:首先要翻开对应工程.如图14所示:图IT在工作窗口中选择DcmoEB,如图15所示:图1-5然后选择工程菜单(Project)下的全部编译(Rebui1.dA1.1.)选项,如图卜6所示:/IAREmbeddedWorkbenchIDEFi1.eEditViewToo1.sWindowHe1.p口才&AddFi1.es.Wrksp(eAddGroup.IbemoEBImportFi1.e1.ist.Fi1.esEditConfigurations.SamPIeAPR-SCJAppRemoveH3-JHA1.HsjmacCreateNewProject.-SOMTHS口NwKAddExistingProject.I-SOOSA1.Options.A1.t+F7-B_1.Profi1.ep-JSecuritySourceCodeContro1.-S-JServicesHi1.CJTooIsMakeT320。H三ZMacCompi1.eHsCJZMcjnRebui1.dA1.1.1.43ZjOutputQeanBatchbui1.d.F8图1-6然后选择工程菜单(ProjeCt)下的调试(DebUg)选项,如图1-7所示:/IAREmbeddedWorkbenchIDEFi1.eEdit/1.ewProjectToo1.sWindowHe1.pA&AddFi1.es.AddGroup.ImportFi1.e1.ist.EditConfigurations.s-IDeroE6A1.esBSarnP1.eAPI-B-JAppRemove-EHA1.CreateNewProject.AddExistingProject.P三1.MACI-B-JMTI-B-J1.TvVKI-S1.iOSA1.-三Rofi1.e-B_Security-_jSe1.ViceSOptions.A1.t+F7SourceCodeContro1.B_jToo1.sI-S-JZDO卜BBJZMaC-ZMain1.nOUtPUtMakeF7Compi1.eCtr1.+F7Rebui1.dA1.1.C1.eanBatchbui1.d.F8StopBui1.dCtr1.+BreakIIDebtKJCtr1.+D图1-7下我完之后就可以退出调试状态,通过选中调试菜单下的容顿调试选项,如图1-8所示;F汉IAREmbeddedWorkbenchIDEFi1.eEditViewProjectCh1.pnEmu1.atorT1.sWindowHe1.pDaaI.<½BGoF5W眇出b命I一11.eBreakReset>DemoEBStopDebuggingCtr1.+Sh1.ft÷DFi1.es1*-b三BsampIeApp-.S-B1.1.App-B口HA1.-B1.JMACStepOverF1.OStepIntoF1.1.StepOutShift+F1.1.void);void);void);(void);HE)口MTfS口NWK-BOSA1.HB-JProIiIeHs1.JSecvtiiyNextStatementRuntoCursorAutostep.void);B1.ServicesH)Too1.sFsuzdo-®1.1.ZMacT31.j2MqiRefresh,af*erstatz.SetNextStatementMacros.1.-,Ou1.put1.ogging,130TSOft皿=:S中:131三HS;:132图】-8按照此种方法下栽至少两个CC2430BI模块,我可以进展Deg演示了.6. Z-Stack示范略至于详细的示范流程,这里先不说了.因为本人采用的硬件与原袋有点差异,即使按照这个方法下载仍然不能演示.因为我这个不能用跳线来选择设备类型.所以我必须进入程序把跳找判断程序进展简单必要的修改才能演示。该文档介绍的演示结果及现象都是暴于CHIPCoN原厂评估板,7. PanID和通道(Channe1.)选择Zig1.ke协议标准规定,一个14位的个域网标志符(PANID)来标识唯一的一个网络.ZStack可以用两种方式由用户自己选择KPANID.当ZDAPP_CONFIG_PANID值设置不为OxITFF时,那么设备建设或参加网络的PANIDItJZDAPPCoNFIG_PA、D指定:如果设置ZDAPPCONE1(;PANID为OXFFFP:那么设备就将建设或参加它发现网络中的-最好"的网络.关于这里提到的“最好”的网络,我觉得可能是有些参数评估,只不过这里没行详细的介绍,在后续文档中应该有介绍的.在2.4G颇段匕IEEE802.15.4/ZIGBEE标准规定了16各频道.用户可以通过选择DEFMTreHAN1.IST不同的值可以选择不同的顼道,其频道如图卜9所示.改协议默认频道为OXB及0x00000800.图1-9Channe1.NumberBitMapFie1.d110x00000800120x00001000130x00002000140x00004000150x00008000160x00010000170x00020000180x(X)040000190x00080000200x00100000210x0()2()()000三wv0x00400000230x00800000240x01000000250x020()()00()260x04000000DEF1.1.TAN1.IST和ZDAPPCONFIGPANDaJ作为IARIDE中的摘译选项可以进展设S1.在应用文件中的Projcc1.sVoo1.sCC2430DB目录下的1.-8Corfig.cf文件中有相应设置,如图1-10所示。f8wConfig.cfg-NotepadE1.1.eEditFQrmatViewHe1.p*Defau1.tchanne1.isChanne1.11-OxOB/Channe1.saredefinedinthefo1.1.owing:/:868MHz1-10:915MHz11-26:2.4GHz0x000000010×000007FEOxO7FFF8OO/-DMAX_CHANNE1.S_868MHZ/-DMAX_CHANNE1.S_915MHZ/-DMAX_CHANNE1.S_24GHZ/DDEFAU1.T_CHAN1.1.ST=OXO4000000/-DDEFAU1.T_CHAN1.IST=0×02000000-DDEFAU1.T_chan1.ist=OXO1.OOoOOo-DoEFAUIjCHAN1.IST=OXOo800000/-DDEFAU1.T_CHAN1.IST=Ox00400000/-DDEFAU1.T_CHAN1.IST=0×00200000-DDEFAU1.TqAN1.15T=OXOO1.oOOOO-DDEFAU1.T_CHAN1.IST=OXOOo80000/-DDEFAU1.T.CHAN1.IST=0×00040000/-UUtFAU1.I.CHAN1.ISI=x0O20U/-DDEFAU1.T_CHAN1.IST=Ox00010000/-DOEFAU1.T.CHAN1.IST=0×00008000-DDEFAU1.jchan1.ist=OXoOe1.o4000-DDEFAU1.T_CHAN1.1.ST=OXOoOO2000-DDEFAU1.JCHAN1.IST=OXOOoO1.OOO-DDEFAU1.TCHAN1.IST=0x000008000x0000010x000007FE0x07FFF800频道列表*Definethedefau1.tPANID./12625-24-OX1.A0x190x1823-Ox1./22-0x1621-20-19-18-17-16-Ox1.S0x140x1;0x12Ox1.1.OxK15141312-OxOF-OxOE-OxOC-OxOCOXOR默认频道* Settingthistoava1.ueOtherthanOxFFFFcauses* Z(X)_CooRDtousethisva1.ueasitsPANIDandPANID设* RoutersandenddevicestojoinPANwiththisID-DZDAPPCoNFIGPANIDMOXFFFF图1-10该节到此完毕,卜节就进入Samp1.eApp例型中进展学习!从零开场学习Zstack之2上节根本上初步认识了ZStaCk的一些情况,今天维续我的学习,翻开SamPIe例子看看,终究Z1.GBEE是殷设何回事.定无疑问:如果是第一次解开这个例子工程,肯定很迷糊,因为此时我迷糊了。对图2T我简宜是相当迷糊.-DemoEB两条路:1就是先看主语数,2就是看TI提供例子说明文档没有.我这里先看看主函数再说哈!因为我就知道从主画故右起.没方法大概每个文件夹找啊.主函数的特征还是比照明明显的,见图2-2所示:<3ZMam-SS1.chipn-bankd,d-s.-EEjChipcojcexits51.-43囤chipn.cstrtups51.-S面OnBoardC国OnBoardh1.43I1.图2-2下面把主函数复制过来简单看下:ZSEGintmain(void)/Turnoffinterrupts关闭中断osa1._int_disab1.e(INTSjUJ.);/Initia1.izeHA1.初始化HA1.,关于HR1.是什么我也后面会有介绍的.HAI.IJ(WR1.)INITO;/Makesuresupp1.yvo1.tageishighenoughtorun电压检测,最好是能保证芯片能正常工作的电压Zinainvdd-chcck();/Initia1.izestackmemory初始化StaCk存储区Zinainram_initO:/Initia1.izeboardI/O初始化板数10InitBoard(OB_Co1.D):/Initia1.zeHA1.drivers初始化HA1.驱动IIa1.DriverInit):/Initia1.izeWSystem初始化*,系统,NV是什么后面我想也殳有介绍的osa1._nv_init(NU1.1.);/Determinetheextendedaddress确定扩展胞址(64位IEEE/物理地址)zmain_ext_addr():/Initia1.izebasicNViteBS初始化根本NV条目ZgInitO;/Initia1.izetheMAC初始化MACZMncInit():ftifndcfNONWK/SincetheAFisn'tatask,ca1.1it,sinitia1.izationroutineaf1.nit():endif/Initia1.izetheOPeraIinRsystem初始化操作系统,看样子这里面还有0S,麻烦了.!OSa1.ini1._SySIe0;/A1.IOWinterrupts允许中断Osa1.int_CnHbIe(INTSA1.1.):/Fina1.boardinitia1.izationG后的版在初始化Ini1.BOard(0B_READY):/Disp1.ayinformntionaboutthisdevice显示设备侑息zmaindevinfo();液晶支持显示Wifdef1.CDSUPPORTEDznain_1.edinit():SendifOSa1.SIar1._SyStem0;/NoReturnfromhere这里没有返回,大概是进入OS了。/main()可以看到根本上都是初始化函数因为函数名称都根本上带了init字样的,呵呵个人觉得TI的变成习惯比我好,一看名称就知道大概功能了。所以这里也奉劝各位像我这样菜鸟级的初学者,一开场一定就要养成标准化编程的JJ惯,据说这样维护以及以后升级或者移枕掖容性都比照好.我就先不管各个初始化函数是假谀何实现的,我先看看各个功能是什么现学攫整体功能在细化我觉得这样的学习方法比照好,因为代眄是在太多了从一开场就逐句看,我敢保证没几个人有耐心看完看明白!幸好好个初始化函数都有一句说明,虽然是英文的,但是理解起来一点都不难的,关于摊个1.ED1.ABE1.CO1.OR1.EDID1.Green1.ED2D2Red1.ED3D2Red1.ED4D1.Given如图25关于上面几个图2-4/5中出现的1.EDX实际上是程序中出现的关键字。2、初始化64位IEEE地址实际上在主函数中有这么个初始化函数的:ZmainoXtf1.ddN).这里说如果地址复位为Oxffffffffffffffff的话.那么就会不杵的闪烁1.ED1.一直等到按键sws按下后程序才能维续运行,意思就是说按卜SW5后就把无效的地址初始化为有效地物理地址了,这个应该是程序上实现的,加么就来看看对应的程序Zmain_ex1.addr,staticZSEGvoidZBain_ext_addr(void)uint8i:uint81.ed:uint8tmp:UinI8*xad;uint16AtoD;/Initia1.izeextendedaddressinN'初始化NV里的扩我地址OSa1.nVjfinit(ZCD_NV_EXTAw)R,Z_EXTAM)I1.1.EN,NU1.1.);OSa1.nVJCad(ZCDNV_EXTADDR,0,Z_EXTADDR1.EN,aExtendedAddrcss):/Checkforuninitia1.izedva1.ue(erasedEEPROM=OXFF)检E是否为无效值(Jfehh)xad=(Uint8*)AaExtendedAddress;for(i=0;i<Z_EXTADDR_1.EN:i+)if<*xad+!=OxFF)return;如果有一个字节不为OKFF,那么该地址有效返回«ifdefzx)C(K)Rdinatortmp-0x10;e1.SCimp=0x20;Sendif/Initia1.izewithasimp1.epattern简单初始化扩展地址Xad=(Uint8*AaExtendedAddress;for(i=0:i<Z_EXTADDR1.EN;i)* xad+=trap+;/F1.ash1.ED1.unti1.userhitsSW5闪烁1.ED1.直到SW5按下1.ed=HAI.J.ED_MODE_OFF;whi1.e(I1.A1.J(EY_SI_5!-IIa1.KeyReadO)-S於循环检测(YiCrOWai1(62500):Ha1.1.edSet(HAI.J.ED_1.,1.ed"=HA1.1.EDjWDI1.ON):/Togg1.ethe1.EDMicroWait(62500):)Ha1.1.edSet(HA1._1.ED_1,HAj1.ED_MoDE_OFF):/P1.ugAtoDdatainto1.owerbytesRtoD-IIa1.AdcRead(I1A1._ADC_CHANNE1._7,HA1._ADC_RESO1.UTION10):xad=(uint8*)&aExIcndcdAddrcss;* xad+=1.OMNn6(AtoD);* xad=H1.j1.Nn6(toD):#if!defined(ZTOO1.-PoRT)defined(ZPORT)defined(WRESTORE)HIfnosupportforZ-Too1.seria1.I/O,/Writete三porary61-bitaddresstoNV些临时的81位物理地址进入NVosa1._nv_write(ZCI)_NVRXTAW)R,O.Z_EXTADI)R_I.EN,&aExIendedAddress);Sfendif从程序中可以看出,一开场就检测F1.ASH中的物理胞址,因为这个地址在F1.ASH中是固定的存储空间,一旦为有效地址或退出函数.一旦为无效地址(OXFFFFFFFFFFFFFFFF),那么就对其物理地址进展简电的初始化并检测SW5按犍.还是比照好理解的!3、运行例子在这里提到了跳践,由于本人采用的非TI原装硬件,没有该跳戏,所以必须对程序进展修改,否则检测不到虢线,连Z1.GBEE的设备类型都不能确定,肯定不能正常运行了.所以这里就先暂时不说了.这里要说的是一切都正常的情况下,例子的验尸结果.小小跳跟一下.不然学习一宜没有进展很麻烦的!格调器:上电运行,地址检测如上面介绍的情况,通过之后呢就诳展通道扫描,此时1.ER闪烁,一旦协调器成功建设网络,此时1.EDI停顿闪烁,而1.ED3被点亮.路由雷:上电运行,仍然是地址检测在前.之后就是通道扫描寻求是否乂存在的N络此时1.ED1.闪烁,一旦检测到存在网络并成功参加该网络,1.ED1.将停顿闪爆,被转换的是1.ED3别点亮,也就说明路由器成功卷加了网络e那么此时能进展的操作控制是什么呢,也是最简单的去现F法-一按迸无线控制1.E1.h?周期(5S)发送信息到网络中辟个设法?SW1.按下,发送一个佶息到组1的设备?SW2按下,退出/参加组1这个我是经过验证的,如:?按下协调器S用1,路由器的1.ED1.狂闪几下:按下路由器的SI1.,那么协调器的1.ED1.也就狂闪几下:当然我是只有两个节点.?如果按1下协调器的SW2.在按下路由湍的SW1.此时协调湍就没有反响,说明协调器已经退出组1:但是再按下协调器S2在按路由涔的SWI就与上一步类似了。路由器与此类似可以通过SW2退出/参加组1.终于把演示弄完了,接下来就来看着程序.在此之前还是来希看T1.提供的Samp1.e指导文档.这个文档个人觉得写的不借.要是没看之他就有程序的却很依闷的!但是本人英文很差,所以需要辍假看,等点时间放上来从零开场学Z-StaCk之31:2009-032320:17:281Samp1.eApp1.icationf(Jt)kZ-StackCC2430DBandCC2430EBSamp1.eApp1.ication1.1、介绍该文档时介绍T1.协议入门的一个例rSamp1.eApp的,适用EM和DB开发板。1.1.1、描述这个例子是非常简单的演示,每个设备都可以发送和接收两个信息?周期信息参加该网络的所有设备每隔IOS(可能会加上个随机数的冷)都发送一个周期信息,该信息的数据载荷为发送信息次数的计数。?闪烁控制信息通过按卜SW1.可以发送一个控制灯闪烁的播送信息,该播送信息只针对组1的所有设备。所有设备初始化为参加组1,所以网络一旦成功建设/参加就可以进展闪烁控制。可以通过按下设备的SW2退出组】,所以可以通过退出组I可以不承受闪灯信息。通过按下SW2也可以让不在组1的设备参加近组1,从而又可以承受闪灯信息了。这个理解应该不困难的,反正我理解没有什么障碍!1.1.1.k按键?SW1:发送闪烁信息到组1所有设备?SW2:转换推出/参加组1状态1.1.2、 用户应用开发这里我根本上能看明白是什么,但是我不打算写出来,因为涉及到一些ZIGBEE的关键术语,不是很明白。大概就是简单介绍了下用户假设何利用例子做H己的应用,但是实用价值不高,说的太笼统,全是概念性的说明。1.2、 OSA1.任务1.3、 1、初始化因为Z-Stack是在OS下运行的,所以在之前必须调用。Sa1.AddTaSkS()初始化任务。1.3.1、 组织关于OS的AP1.函数介绍请看文档:Z-StackOSA1.API(F8W-2003-OOO2),应该说协议栈的每层或者说每局部都有相关的Ap1.说明文档。OSa1.AddTaSkS()初始化任务,OSaITaSkAdd()函数添加任务,都可以到API文档或程序中详细分析函数功能。1.3.2、 系统服务OSA1.和AP1.系统服务是唯一的,因为比方按键和串口类似事件处分就只能用唯一的一个任务标识。这两个硬件都留给了用户自己定义使用。1.3.3、 应用设计用户可能为每一个应用对象都创立一个任务,或者为所有的应用对象只创立一个任务。中选择上述的设计的时候,下面是一些设计思路:1.2.4. 1、为许多应用对象创立一个OSA1.任务下面是正面和反面(pros&cons)的一些表达:- Pro:承受一个互斥任务事件(开关按下或串口)时,动作是单一的。- Pro:需要堆栈空间保存一些OSA1.任务构造。-Con:接收一个AF信息或一个AF数据确认时,动作是第杂的在一个用户任务上,分支多路处理应用对象的信息事件。- Con:通过匹配描述符(如:自动匹配)去发现服务的处理过程更复杂为了适当的对ZDoAB1.DSTADDR信息起作用,一个静态标志必须被维持。1.2. 4.2、为一个应用对象创立一个OSA1.任务:一对一设计的反面和正面(pros&cons)是与上面一对多设计相反的:-Pro:在应用对象试图自动匹配时,仅仅一个ZDO_NEkDSTADDR被接收。-Pro:已经被协议栈下层多元处理后的一个AF输入信息或一个AF数据确认。Con:需要堆栈空间保存一些OSA1.任务构造。-Con:如果两个或更多应用对象用同一个唯一的资源,接收一个互斥任务事件的动作就更熨杂。1.2.5、强制方法任何一个OSA1.任务必须用两种方法执行:一个是初始化,另一个是处理任务事件。1.2.5.1、任务初始化在例子中调用如下函数执行任务初始化:mApp1.icationName"_Init(如SAPIJnit).该任务初始化函数应该完成如下功能:变量或相应应用对象特征初始化,为了使OSA1.内存管理更有效,在这里应该分配永久堆栈存储区。在AF层登记相应应用对象(如:afRegister()<>登记可用的OSA1.或HA1.系统服务(如:RegisterForKeysO)1.2.5.2、任务事件处理调用如下函数处理任务事件:44App1.icationName*_ProcessEvent(e.g.SAPI_ProcessEvent().除了强制的事件之外,任一OSA1.任务能被定义多达15个任务事件。1.2.6、强制事件一个任务事件SYS_EVENT_MSG(0x8000),被保存必须通过OSA1.任务设计。2.2.6.1、SYS_EVENT_MSG(0x8000)任务事件管理者应该处理如下的系统信息子集,下面只列出了局部信息,但是是最常用的几个信息处理,推荐根据例子复制到自己工程中使用。1.2. 6.1.UAF_DATA_CONFIRM_CMD调用AFDataRequestO函数数据请求成功的指示。Zsuccess确认数据请求传输成功,如果数据请求设置AF_ACK.REQUEST标志位,那么,只有最终目的地址成功接收后,ZSUCCCSS确认才返回。如果如果数据请求没有设置AF_ACK_REQUEST标志位,那么,数据请求只要成功传输到下跳节点就返回Zsuccess确认信息。1. 2.6.1.2、AF_INCOMING_MSG_CMDAF信息输入指示2. 2.6.1.3、KEY_CHANGE选盘动作指示1.2.6.1.4、ZD(1.NEW_DSTADDR匹配描述符请求(MatchDcorRequest)响应指示。(例如:自动匹配)1.2.6.1.5、ZDO_STATE_CHANGE网络状态改变指示1.3、网络格式化例如应用程序编译为协调器的在defau1.than1.ist指定的通道上形成一个网络,协调器将建设一个随机编号源于自身的IEEE地址或由zdapp_config_pan_id指定的网络PANID(如果zdapp_config_pan_id上节介绍了建设一个应用需要做的几个必须的理情,现在就来通过分析SamP1.eApp1.ication来具体看石衢要做哪些事情,才能建设一个Z1.GBEE应用功能.当然这里只是做点简尔的必须的工作.TheSamp1.eApp1.ication(Sanip1.eApp)1、介绍主要是介绍一个的用建设的构造及需要进展的程洋流程.1.1 ,程序流程1.1.1、 初始化首先防要调用初始化函数Samp1.eApp_InitO.SanIPIeAPP_TaskID-task-id;初始化应用建设的仔务ID号,其实用过OS的人都应该晓得这个是干啥的,我没用过,不足很理解,但是我知道是必须的,就相当于一个任务的标识,这样才能区分运行过程中不同任务中的不同事件,我是这么认为的ID说白了就是给该任务取了各名字,就向人名字一样,区分不同的人,就是一个代号。人名可以重红,重红了有时候叫起来就容易混消:所以才程序中为了防止这种混沿,就强制性的规定任务ID不能重处。耍是哪大国家或者联合国姓名管理委员会规定,人民不能小更,那么这个人名就需要全球统,管理了。那给嫌取个名字就要向联合国姓名管理委员会中请了,呵呵!?Snmp1.eAppQwkState-DEVINIT:初始化应用设符的网络状态。线设何说呢,据说是设备类型的改变都要产牛.一个牛件,叫ZDO_STATE-CHANGE,从字面理解为ZDo状态发生了改变。所以在设备初始化的时候一定要把它初始化为什么状态都没有,那么它就要去检测整个环境.看是否能弟新建i殳或拧参加存在的网络.但是有一种情况例外,就是当NVRESTORE被设置的时候(NV_RESn)RE是把信息保存在作易失存储器中),那么当设备断电或者某种意外重启时,由于网络状态存储在非易失存储器中,那么此时就只衢要恢及其网络状态,而不需要小新建设或者舂加网络了,我也是从文档中这么理解的,至于为什么只有有待进一步考证.SamPIeAPP_DStAddr.addrMode-(afddrfc>de_t)AddrNotPresent:SHmPIeAPP_Ds1.Addr.endPoin1.=0:Samp1.eAppJ)stAddr.addr.ShortAddr=0:看见这几句话从字面理解为:初始化不标设备地址模式及目标设备EP号和网络地址.从代码可以看出.这些地址或EP均为C1.也就是说目标设备为协调者的ZDO.这个意义就很明显了,就是设需建设后可以直接与侨调器的ZDO交互信刖.Samp1.eApp_epDesc.endPoint=SRMP1.EAP叱ENDPo1.NT;Samp1.eAppEP描述符的EP号SnmPIeAPP_CPDeSC.taskid-SSamp1.eApp_TaskID:SiUnP1。APPEP描述符的任务IDSamp1.cApp-cpDcsc.Simp1.eDesc=Sump1.eAppEP简单描述符Simp1.eeion1