zigbee 自动绑定的实现

近来事情比较多,忙着答辩,忙着去应酬,尤其是同学之间的感情需要喝酒来加深,以至于没什么时间看书写码。所以就没什么空看书写码了。

今天把绑定的实验重新做了一遍,但是觉得通过按键来绑定是手动实现的,过程很麻烦。所以就琢磨着用自动的方式实现。下面就讲讲实现自动绑定的过程了。

BTW,把我在这次实验的过程中失败经验也介绍一下,希望大家一下。在开始的过程中,我在初始化中添加了自己的事件MY_EVENT,然后在事件中读取设备的类型,如果是协调器就允许绑定,绑定时间无限制,如果是终端就发送绑定请求。但是始终失败了,而且设备在不断的重启。甚是烦恼,不知道什么原因。

希望遇到类似问题的童鞋们可以和我讲解一下。

ok,如正题吧。估计大家已经不赖烦了要喷我了。

1、要保证设备的自动启动。在原来的程序中,设备的类型是依据不同按键进行设置的,也就是说按下不同的按键,其将该节点按照特定的设备进行启动。

首先屏蔽掉在初始化程序中的按键部分。因为这部分关闭了自动启动模式。

/*

#if (defined HAL_KEY) && (HAL_KEY == TRUE)

if ( HalKeyRead () == HAL_KEY_SW_1)

{

// If SW1 is pressed and held while powerup, force auto-start and nv-restore off and reset

startOptions = 0;

zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );

zb_SystemReset();

}

#endif // HAL_KEY

*/

初始化函数的结束部分添加如下代码:

startOptions = ZCD_STARTOPT_AUTO_START;

zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions );

ZDOInitDevice(0);

设备自动启动以后,会向任务发送一个设备状态改变的消息,在任务处理函数中对应如下的部分:

case ZDO_STATE_CHANGE:

// If the device has started up, notify the application

if (pMsg->status == DEV_END_DEVICE ||

pMsg->status == DEV_ROUTER ||

pMsg->status == DEV_ZB_COORD )

{

SAPI_StartConfirm( ZB_SUCCESS );

}

break;

当设备进行确认状态发生变化的时候,这个时候我们开始来允许设备进行绑定,或是发送绑定请求。

具体代码见SAPI_StartConfirm( ZB_SUCCESS );这个函数。

void SAPI_StartConfirm( uint8 status )

{

#if defined ( MT_SAPI_CB_FUNC )

/* First check if MT has subscribed for this callback. If so , pass it as

a event to MonitorTest and return control to calling function after that */

if ( SAPICB_CHECK( SPI_CB_SAPI_START_CNF ) )

{

zb_MTCallbackStartConfirm( status );

}

else

#endif  //MT_SAPI_CB_FUNC

{

zb_StartConfirm( status );

}

}

在最后一个函数中我们来添加自己的代码。

void zb_StartConfirm( uint8 status )

{

// If the device sucessfully started, change state to running

if ( status == ZB_SUCCESS )

{

myAppState = APP_START;

uint8 type;

zb_ReadConfiguration( ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &type );

if(type==ZG_DEVICETYPE_COORDINATOR)

zb_AllowBind(0xff);

else

{

zb_BindDevice(TRUE, TOGGLE_LIGHT_CMD_ID, NULL);

}

}

else

{

// Try again later with a delay

osal_start_timer( MY_START_EVT, myStartRetryDelay );

}

}

首先读取设备的类型,如果为协调器,则允许设备进行绑定,注意绑定时间为0xff,意味着在所有时刻都允许设备进行绑定。如果为其他设备类型,则发送设备绑定请求。      经过上电后,发现设备能自动加入网络并且能进行自动绑定,当我们再次拨动开关设备上的灯控制按键的时候,协调器上对应的灯状态则发送翻转。因此,可以证明自动绑定实现了。

时间: 2024-10-18 15:42:23

zigbee 自动绑定的实现的相关文章

XamarinAndroid 自动绑定View变量

Android 编程时我们少不了使用FindIdByView函数,在Xamarin Android开发时也需要如此.这个工作很无聊且烦人.在常规Android开发中,人们已经发明了一些方法免除这项工作,例如Android数据绑定,还有butterknife,都可以解决这个问题.关于它们我不去细说了.但是这两个方案在Xamarin Android开发里还无法使用.本文介绍一个函数,就可以把程序员从这项工作中解脱出来,原文请参见http://redth.codes/auto-wire-up-view

asp.netMVC中的自动绑定模型测试小结

很久没有自己测试测试一些东西了,今天特意测试了一下MVC中自动绑定模型.本人也是小菜,希望能帮助到小小菜....嘿嘿 1.首先,创建一个MVC4的项目 2.创建一个Controller(控制器),有些小小菜肯定也知道Home是路由里默认的. 3.控制器都有了,默认会有个Index动作方法,我们只需要在拷贝一个接受Post请求的action即可 public ActionResult Index() { return View(); } [HttpPost] //视图中加的是实体类中的属性名对应

最新iOS 6 in Xcode4.5新特性——Storyboard和属性自动绑定

最新iOS 6 in Xcode4.5新特性编程之二(上)——Storyboard和属性自动绑定 从Xcode 4.3开始,Storyboard 就是iOS 5和iOS 6中令人兴奋的一个新特性,他将为你在创建用户界面上节省很多时间. 那么究竟什么是Storyboard呢?我将用一幅图片来向你展示: 下面这个就是本实例中即将用到的Storyboard. 关于故事板编程,我在“最新Xcode 4.3.2 下使用Storyboard和ARC开发iPhone4程序 03——Storyboard类及使用

slf4j自动绑定实现类原理

slf4j自动绑定实现类的方式基于约定:它要求你在实现类的包名和拿到LoggerFactory实例的文件路径必须是:org/slf4j/impl/StaticLoggerBinder.class 有了这个约定就好办了,slf4j在自己的基本类LoggerFactory里,直接调用实现类StaticLoggerBinder拿到LoggerFactory的实例 看代码:下面是我自己实现的一个:StaticLoggerBinder public class StaticLoggerBinder { p

基于jquery的表格动态创建,自动绑定,自动获取值

最近刚加入GUT项目,学习了很多其他同事写的代码,感觉受益匪浅. 在GUT项目中,经常会碰到这样一个问题:动态生成表格,包括从数据库中读取数据,并绑定在表格中,以及从在页面上通过jQuery新增删除表格.如下所示: 在实现过程中,开发人员经常采用如下方式来实现: 1)          在前台,通过js生成表格行的html字符串,然后通过jquery的after方法加到表格底部. 2)          在后台,读取数据库,然后生成表格的html字符串,然后传递给前台渲染 3)         

关于Cocos2d-js自动绑定遇到的问题。

关于cocos2d-js自动绑定请阅读一下README.md文件或者看看官网文档(https://github.com/cocos2d/bindings-generator) 根据文档说明配置好环境.不然出错概率很大.是那种找不到问题的错误.你会很郁闷...比如,python一定要是32bit的.如果64bit的.就会出现很奇葩的错误. 现在开始讲讲我遇到的问题,以cocos2d-js-v3.5版本test为例. cocos2d-js-v3.5\tools\bindings-generator\

jQuery插件:Ajax将Json数据自动绑定到Form表单

jQuery注册方法的两种常用方式: //jQuery静态方法注册 //调用方法$.a1() $.extend({ a1: function () { console.log("a1"); } }) //jQuery插件方法注册 //调用方法$("#col").b1() $.fn.extend({ b1: function () { console.log("b1"); } }) 将ajax返回的数据自动绑定到form表单中的插件,常用语修改等业

WinForm开发-界面控件到实体,实体到界面控件自动绑定

在WinForm开发中,我们是不是为绑定界面控件的数据而每个控件每个控件的赋值?在保存修改时是不是也是每个控件每个控件的赋值到实体中?字段一多,那简直就是噩梦.有没有像Web中那样方便的方法直接就自动映射了呢?现在不用如此繁琐,在RDIFramework.NET开发框架的WinForm部分新增了界面控件到实体,实体到界面控件自动绑定,一句话就搞定了,非常的方便.主要是引用“RDIFramework.WinForm.Utilities.dll”dll文件,再调用下面两个方法即可: 1.实体到界面控

Winform开发常用控件之DataGridView的简单数据绑定——自动绑定

DataGridView控件可谓是Winform开发的重点控件,对于数据的呈现和操作非常方便,DataGridView可谓是既简单又复杂.简单在于其已经集成了很多方法,复杂在于可以使用其实现复杂的数据呈现和操作. 本文是入门级培训,先介绍DataGridView的简单应用,复杂的应用在后续的博文中会一一呈上. DataGridView主要是呈现数据和数据操作的,那自然离不开数据. 首先是数据绑定,DataGridView的数据源可以是DataSet.DataTable或Ilist等,至于Data