TI中文支持网
TI专业的中文技术问题搜集分享网站

zigbee BUILD_ALL_DEVICES问题

你好TI的工程师们:

       最近由于项目需求要在程序中做协调器和路由之间的却换,是不是我预编译里面定义BUILD_ALL_DEVICES  然后就可以通过程序直接做 协调器和路由之间的却换了, 如果能请告诉下我修改那些参数

      我直接在程序中修改了 zgDeviceLogicalType和 devStartMode 就可以实现两者之间的相互却换 但是组成的网络不稳定  路由很容易就掉线了 

Li Amly1:

 我看你们的历程SampleApp中 实现方式如下

if ( keys & HAL_KEY_SW_1 ) { if ( myAppState == APP_INIT ) { // In the init state, keys are used to indicate the logical mode. // Key 1 starts device as a coordinator

zb_ReadConfiguration( ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType ); if ( logicalType != ZG_DEVICETYPE_ENDDEVICE ) { logicalType = ZG_DEVICETYPE_COORDINATOR; zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType); }

// Do more configuration if necessary and then restart device with auto-start bit set // write endpoint to simple desc…dont pass it in start req..then reset

zb_ReadConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions ); startOptions = ZCD_STARTOPT_AUTO_START; zb_WriteConfiguration( ZCD_NV_STARTUP_OPTION, sizeof(uint8), &startOptions ); zb_SystemReset();

}

。。。

}

是不是只用修改logicalType  和  startOptions 就能实现

hao hu2:

回复 Li Amly1:

我目前的项目中,也有这个,需要根据周围环境,如果有协调器就入网,如果没有协调器就自己建立一个新的网络。

目前的处理是这样的,测试通过。

    开机以路由器模式启动,最少扫描3此,最多扫描5次,如果发现ZigBee网络,则加入。如果没发现,则配置为协调器模式,并且重启,重启建网之后,再次将启动模式设置为路由器模式。这样的话,下次重启,就会重复上面的流程,达到想要的效果。

    设置为协调器模式:

extern uint8 StartType;StartType = ZG_DEVICETYPE_COORDINATOR; osal_nv_item_init(PP_TEST_SAVE,sizeof(uint8),NULL); osal_nv_write(APP_TEST_SAVE,0,sizeof(uint8),&StartType);

  启动建立一个新的网络:

uint8 startOptions = ZCD_STARTOPT_CLEAR_STATE | ZCD_STARTOPT_CLEAR_CONFIG; osal_nv_item_init(ZCD_NV_STARTUP_OPTION,sizeof(uint8),NULL); osal_nv_write(ZCD_NV_STARTUP_OPTION,0,sizeof(uint8),&startOptions);

复位设备

// Reset the device with new configuration extern void zb_SystemReset ( void ); //zb_SystemReset(); SystemReset();

希望能够帮到你。

Li Amly1:

回复 hao hu2:

我修改后是能通信上的 但是 我的网络 不稳定  节点像网关发送数据的时候 发送 100K左右有网络就不行了奔溃了 在也通信不上了 只能自己复位后才能通信

VV:

回复 Li Amly1:

在模式切换前要把所有保存在NV里面的数据全部清除掉。

你说的100k是指连续发送吗?

quan Chen:

回复 VV:

删除所有的NV,是initNV();吗?

我之前只是在初始化时修改

uint8 t = 0xff;

osal_nv_read(ZCD_NV_E45E_STATE_LABEL, 0, sizeof(unsigned char), &t); switch(t & 0x0c) { case 0x04: { zgDeviceLogicalType &= 0x00; zgDeviceLogicalType |= ZG_DEVICETYPE_COORDINATOR; EnDMode = ZG_DEVICETYPE_COORDINATOR; break; } case 0x08: { zgDeviceLogicalType &= 0x00; zgDeviceLogicalType |= ZG_DEVICETYPE_ROUTER; EnDMode = ZG_DEVICETYPE_ROUTER; break; } default: { zgDeviceLogicalType &= 0x00; zgDeviceLogicalType |= ZG_DEVICETYPE_ROUTER; EnDMode = ZG_DEVICETYPE_ROUTER; }break; } osal_nv_item_init(ZCD_NV_LOGICAL_TYPE,sizeof(zgDeviceLogicalType), &zgDeviceLogicalType); osal_nv_write(ZCD_NV_LOGICAL_TYPE, 0, sizeof(zgDeviceLogicalType), &zgDeviceLogicalType);

当时测试的时候可以的,现在却又不行了,不知道是怎么回事,求大神指点!

赞(0)
未经允许不得转载:TI中文支持网 » zigbee BUILD_ALL_DEVICES问题
分享到: 更多 (0)