This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
由于TI提供的原始znp-host-framework太过于简陋,以至于都不支持OTA操作,但是标准的zigbee linux gateway又过于复杂了,好多人也遇到OTA出的各种问题,也不容易用在实际项目中,而且bug问题一堆,虽说最新的Z-Stack 3.0.1号称修复了ZNP不兼容老的zigbee linux gateway,但是也没有测试,不知道能不能用。
前段时间把OTA从gateway完美移植到znp-host-framework,但是修改了ZNP固件里面MT部分的代码为代价的,后来发现,ZCL层其实也可以放到znp-host-framework来实现的,这样ZCL就不用占用ZNP上及其有限的内存资源了,数据格式即使发生变化,也不需要修改znp.eww里面相关的代码了,相当于收到空中数据afIncomingData直接转发给host,然后host发出的数据,直接通过MT_AF.c提供的接口直接发出去。
尤其是对于像CC2530这种弱爆了的MCU,麻辣隔壁,留给用户使用的RAM空间几乎没有了,曾经尝试在上面增加一点点新的功能,都爆出XDATA编译错误,其实所谓ZCL也就是数据收发的一种组织方式,最后都是调用AF_DataRequest发出去的。
把zcl.c和zcl_ota.c全部移植到znp-host-framework,已经完美工作,只是endpoint注册还得放在AF.c里面做,主要是数据收发之前都要查询一下endpoint是否存在,不存在就不收发。这有点讨厌,本来内存已经很紧张了,还搞个endpoint链表,不耗费内存吗,放到host上来做,不是更好吗,我host有64MB内存,跑arm linux都秒杀,顶的上几千个CC2530的6KB了吧。
自己分析了zigbee linux gateway的源代码,刚开始还以为AF层的所有操作都给做了,其实gateway并没有做AF层的东西,AF层的afDataRequest和AfIncoming回调函数还是要放在ZNP固件里面实现,包括邻居表之类的,都是必须放在ZNP端实现,那么运行gateway的主机程序,强大的硬件性能(300Mhz处理器+64MB DDR2)根本派不上用场啊,也不能增加邻居表,更不能增加关联表。
呵呵,我水平也是一般,只是很多时候不服气而已,最后还是把问题给解决了,我这边开发这么久,没有TI的任何支持,技术问题都是自己解决的,最后我都把解决方法分享出来,希望能帮助更多的人。
TI的技术支持是这样的:
1、首先他要看你片子的用量(这个是关键),一年要是有个100w级别的量,你就是爷,有啥问题,他们会第一时间给解决。这是芯片大厂的尿性,不仅TI这样,像NXP,OV也是这德性,这是我自己的亲身体验。
2、像我们这种一般般的公司,一年用个几K,十几K(有的前期做研发和测试,需求量可能几百片),他们是根本看不上眼的,你发邮件,也就象征性回答一下问题,而且周期比较长,论坛里发技术贴,无非是无关痛痒的回复一下,对解决问题没什么实际意义,总的来说就是效率很低。
3、大神对znp-host-framework整体逻辑分析的很到位,虚心学习之。
另外,zigbee linux gateway里面很多代码的实现都不错,我们是直接copy过来都能用在别的地方。
比如znp-host-framework里面用双向链表实现了一个队列,我们也直接拿过来用在了别的地方,呵呵。
意思是会有新的zigbee linux gateway版本来支持zigbee 3.0.1吗。
现在那个zigbee linux gateway 1.0.1还是2014年的