Page 1 of 1

zigbee设备发送失败后,有什么补救方法

Posted: 2023年 Sep 1日 18:59
by linshc

当设备调用tal_zg_send_data(TAL_ZG_SEND_DATA_T *pdata, TAL_SEND_RESULT_CB callback, UINT_T timeout);时,回调函数中可以判断是否发送成功。
1.如果发送失败了,有没有什么办法,可以保证他下次能够确保成功吗?
2.处理回调中的异常的标准做法是什么,是否有示例能够提供?
3.我们目前有设备发现,app控制面板和现象不同步的问题。比如:灯的设备,下发了关的指令,灯确实关了,但面板上没有更新。之后面板就操作不了了。我们想复现这种现象,但目前复现不出来。想通过上面的方法,减少这种错误。


Re: zigbee设备发送失败后,有什么补救方法

Posted: 2023年 Sep 6日 11:36
by huanghuan

1.无线发送会受到各种信号的干扰,有限时间内无法做到一次发送保证100%成功,如果一次发送失败,要确保数据上报上去,需要将tal_zg_send_data 入参使用QOS_1 即需要收到对端的default respond
2.如果发送失败可以自己创建并开启一个定时器,用于状态的report,直到状态上报上去


Re: zigbee设备发送失败后,有什么补救方法

Posted: 2023年 Dec 14日 10:39
by linshc

1.入参已经是QOS_1了
2.错误的原因为SEND_ST_MEMORY_ERR,是否和内存有关呢?


Re: zigbee设备发送失败后,有什么补救方法

Posted: 2023年 Dec 14日 11:27
by huanghuan

1.出现 SEND_ST_MEMORY_ERR 实际发送数据不会进入发送队列进行排队,而QOS_1是针对发送队列中的项发送时check 对端的respond,所以出现 SEND_ST_MEMORY_ERR时QOS_1无法做到重发。
2.请检查下,是否是在 TAL_MSG_RET_E tal_zcl_specific_msg_recv_callback(TAL_ZCL_MSG_T *msg) 函数中进行write attr及调用 tal_zg_send_data 操作;如果是上述做法会导致压栈比较深,可能会导致malloc fail,建议使用timer start的方式进行回调处理,先释放掉无线数据接收这部分的ram开销。
3.在另外一个帖子中介绍了heap size调整的说明,你可以定义下该函数,可以调整heap size https://www.tuyaos.com/viewtopic.php?t=2595


Re: zigbee设备发送失败后,有什么补救方法

Posted: 2023年 Dec 14日 11:39
by linshc

1.对于第二点,是的,我在callback中进行的错误处理。我会试着使用timer start的方式处理错误处理。
2.此贴先结束,最新的问题,将在新贴中进行https://www.tuyaos.com/viewtopic.php?t=2595