znp-host-framework完美支持OTA和ZCL(zigbee没有支持一样能搞定,TI你还有什么可说的)

        由于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 平台的开发与研究,致力于帮助更多的人。