ImageVerifierCode 换一换
格式:DOC , 页数:5 ,大小:21.52KB ,
资源ID:7027627      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7027627.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(通过SimpleApp例程理解绑定的流程(二).doc)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

通过SimpleApp例程理解绑定的流程(二).doc

1、通过SimpleApp例程理解绑定的流程(二) (2010-12-04 11:16) 分类: ZigBee 技术学习 在上一篇文章中主要描述了第一种已知扩展地址的绑定,这一篇是未知扩展地址的绑定,这种方式会稍微复杂一点。 2. 未知扩展地址的绑定 该绑定方式下,在发送请求之前,先要让被绑定的目的设备处于允许绑定模式。可以调用函数zb_AllowBind()进入该模式,在一定的周期内该函数可以使设备处于允许绑定的状态。通过调用zb_BindDevice()函数实现两个设备的真正绑定。下面是其源代码; void zb_AllowBind ( uint8 timeout ) {

2、 osal_stop_timerEx(sapi_TaskID, ZB_ALLOW_BIND_TIMER); if ( timeout == 0 ) { afSetMatch(sapi_epDesc.simpleDesc->EndPoint, FALSE); } else { afSetMatch(sapi_epDesc.simpleDesc->EndPoint, TRUE);//设置允许设备响应ZDO的描述符匹配请求 if ( timeout != 0xFF ) { if ( timeout > 64 ) { timeout = 64; } //匹配允许后,设置了一

3、个定义器,定义的时间是timeout*1000,定时时间一到,就会触发sapi_TaskID任务中的ZB_ALLOW_BIND_TIMER事件,在SAPI_ProcessEvent()函数中,对其进行处理,这个不是强制事件类型的子集,是用户定义的 #define ZB_ALLOW_BIND_TIMER 0x4000 //0x0001 osal_start_timerEx(sapi_TaskID, ZB_ALLOW_BIND_TIMER, timeout*1000); } } return; } 参数timeout是进行绑定模式持续的时间,单位是秒,如果设置timeout=0xFF

4、则设备在任何时候都可以允许绑定,如果设置timeout=0x00,设备将禁止绑定。其中,这个timeout的有效值在1到65之间,如果大于64也处于绑定模式,时间默认的还是64. 调用该函数使调适给定的时间内进入允许绑定模式。一个在允许绑定模式下同等的设备调用函数zb_BindDevice()能与之建立绑定,目的地址为空。也就是源设备也处于允许绑定的模式,在里面调用函数afSetMatch(),使之允许响应ZDO的匹配描述符请求。 在目的设备处于允许绑定的模式的时间内,源设备可以调用函数zb_BindDevice()发起绑定请求。 设置允许反应的标志 uint8 afSetMa

5、tch( uint8 ep, uint8 action ) { epList_t *epSearch; // Look for the endpoint 寻找EP epSearch = afFindEndPointDescList( ep ); if ( epSearch ) { if ( action ) { epSearch->flags |= eEP_AllowMatch; } else { epSearch->flags &= (0xff ^ eEP_AllowMatch); } return ( TRUE ); } else return ( FA

6、LSE ); } static epList_t *afFindEndPointDescList( byte EndPoint ) { epList_t *epSearch; // Start at the beginning epSearch = epList; // Look through the list until the end 遍历链表 while ( epSearch ) { // Is there a match? 找到匹配的 if ( epSearch->epDesc->endPoint == EndPoint ) { return ( epSea

7、rch ); } else epSearch = epSearch->nextDesc; // Next entry } return ( (epList_t *)NULL ); } 调用函数zb_BindDevice()发起绑定请求的实现代码在上面也已经一起分析过了,为了完整也放在下面。 else //未知扩展地址的绑定 *pDestination为NULL { ret = ZB_INVALID_PARAMETER; destination.addrMode = Addr16Bit; //设置16位短地址 destination.addr.shortAddr = NW

8、K_BROADCAST_SHORTADDR;//广播模式 //比较输出簇commandId是否和本终端输出簇列表中有匹配项,成功匹配返回TRUE if(ZDO_AnyClusterMatches(1,&commandId, sapi_epDesc.simpleDesc->AppNumOutClusters, sapi_epDesc.simpleDesc->pAppOutClusterList ) ) { // Try to match with a device in the allow bind mode 匹配一个在允许绑定模式下的设备 ret = ZDP_MatchDescR

9、eq( &destination, NWK_BROADCAST_SHORTADDR, sapi_epDesc.simpleDesc->AppProfId, 1, &commandId, 0, (cId_t *)NULL, 0 ); } //如果commandId是输入簇,则查找本地输入簇列表中是否有匹配项 else if( ZDO_AnyClusterMatches(1,&commandId, sapi_epDesc.simpleDesc->AppNumInClusters, sapi_epDesc.simpleDesc->pAppInClusterList ) ) { //匹配一

10、个在允许绑定模式的设备 ret = ZDP_MatchDescReq( &destination, NWK_BROADCAST_SHORTADDR, sapi_epDesc.simpleDesc->AppProfId, 0, (cId_t *)NULL, 1, &commandId, 0 ); } if ( ret == ZB_SUCCESS )//如果匹配成功 { // Set a timer to make sure bind completes 设置一个时间,确保绑定完成 osal_start_timerEx(sapi_TaskID, ZB_BIND_TIMER, AIB_

11、MaxBindingTime); sapi_bindInProgress = commandId; //允许基于命令的绑定过程 return; // dont send cback event } } } SAPI_SendCback( SAPICB_BIND_CNF, ret, commandId ); } .................................... } 在这其中调用了函数ZDP_MatchDescReq(),将建立和发送一个匹配描述符(Match Description)请求,用这个函数在一个应用中的输入/输出簇列表中搜索匹配某条件的设备/

12、应用。 afStatus_t ZDP_MatchDescReq( zAddrType_t *dstAddr, uint16 nwkAddr, uint16 ProfileID, byte NumInClusters, cId_t *InClusterList, byte NumOutClusters, cId_t *OutClusterList, byte SecurityEnable ) 其中: dstArr:目的地址 nwkAddr:已知的16位网络地址 ProfileID:应用模式(Application’s Profile)ID,为簇ID作为参考 NumInClus

13、ters:输入簇ID的队列 NumOutClusters:在输出簇列表中簇ID的数量 OutClusterList:输出簇列表中簇ID的数量 OutClusterLIst:输出簇ID的队列 SecuritySuite:信息安全类型 返回:无 查找到一个匹配描述符后,调用AF_DataRequest()函数发送。该绑定的响应处理在SAPI_ProcessEvent()函数中。这个应该是源设备的响应。,该事件属于SYS_EVENT_MSG强制事件的子事件 。 case ZDO_CB_MSG: SAPI_ProcessZDOMsgs( (zdoIncomingMsg_t *)pMsg

14、 ); break; 下面是SAPI_ProcessZDOMsgs()函数,在SAPI_Init()函数中注册了以下两个ZDO信息 // ZDO_RegisterForZDOMsg( sapi_TaskID, NWK_addr_rsp ); // ZDO_RegisterForZDOMsg( sapi_TaskID, Match_Desc_rsp ); void SAPI_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg ) { switch ( inMsg->clusterID ) { .............................

15、....... case Match_Desc_rsp: { zAddrType_t dstAddr; ZDO_ActiveEndpointRsp_t *pRsp = ZDO_ParseEPListRsp( inMsg ); if ( sapi_bindInProgress != 0xffff ) { // Create a binding table entry 创建绑定表的实体 dstAddr.addrMode = Addr16Bit; dstAddr.addr.shortAddr = pRsp->nwkAddr; //调用和上次一样的函数,实现绑定 if ( APS

16、ME_BindRequest( sapi_epDesc.simpleDesc->EndPoint, sapi_bindInProgress, &dstAddr, pRsp->epList[0] ) == ZSuccess ) { //zb_BindDevice()中开启了一个定时器, osal_start_timerEx(sapi_TaskID, ZB_BIND_TIMER, AIB_MaxBindingTime); 用于接收Match_Desc_rsp事件计时 //如果接收到,则停止这个定时器;如果溢出,则触发相应任务事件 osal_stop_timerEx(sapi_TaskI

17、D, ZB_BIND_TIMER); osal_start_timerEx( ZDAppTaskID, ZDO_NWK_UPDATE_NV, 250 ); sapi_bindInProgress = 0xffff; // Find IEEE addr 查找IEEE地址 ZDP_IEEEAddrReq( pRsp->nwkAddr, ZDP_ADDR_REQTYPE_SINGLE, 0, 0 ); // Send bind confirm callback to application 向应用程序发送绑定确认消息 zb_BindConfirm( sapi_bindInProgress, ZB_SUCCESS ); } } } break; } } 以上程序中介绍了两种绑定方式中,最终都是调用函数APSME_BindRequest()创建绑定,不同的是,前者采用的目的地址是64位扩展地址,而后者采用的是目的地址是16位网络地址,前者已知扩展地址,调用了ZDP_NwkAddrReq()函数获得目的设备的短地址,后者利用描述匹配得到了短地址,然后调用了ZDP_IEEEAddrReq()函数,获取设备的扩展地址。下一篇文章将跟踪SiampleApp例程查看绑定的过程。

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服