开发包全名:sdk_6.2.4.tar.gz,通过Wind IDE下载,RV1106B芯片平台
问题描述:设备通过蓝牙配网后能正常出流,重启设备,MQTT无法上线。日志请查看附件
附件:“log.log"
【求助】【TuyaOS SDK】配网后重启,MQTT无法上线
【求助】【TuyaOS SDK】配网后重启,MQTT无法上线
- Attachments
-
- log.log
- (144.41 KiB) Downloaded 19 times
Tags:
Re: 【求助】【TuyaOS SDK】配网后重启,MQTT无法上线
tkl_wifi_init 的入参是个回调,如果网络状态改变,会把状态告诉sdk。但是重启后,该回调没有被调用
Re: 【求助】【TuyaOS SDK】配网后重启,MQTT无法上线
有回调的,可以看日志文件的第263行:
[00:00:24:224] [TKL_WIFI] [tkl_wifi_station_get_status, 681]:g_sta_status = 6
[00:00:24:224] [TKL_WIFI] [wifi_status_event_cb, 59]:set wifi event[0]
代码如下:
Code: Select all
STATIC VOID_T *wifi_status_event_cb(void *arg)
{
WF_EVENT_E wf_event;
WF_STATION_STAT_E stat = 0;
WF_STATION_STAT_E last_stat = 0;
int last_state = -1;
pthread_detach(pthread_self());
while (1) {
tkl_wifi_station_get_status(&stat);
if(stat != WSS_CONN_SUCCESS && stat != WSS_GOT_IP) {
wf_event = WFE_DISCONNECTED;
}
if(stat == WSS_CONN_FAIL) {
wf_event = WFE_CONNECT_FAILED;
} else if(stat == WSS_GOT_IP || stat == WSS_CONN_SUCCESS) {
wf_event = WFE_CONNECTED;
if (last_stat != stat) {
last_stat = stat;
last_state = wf_event;
LOG_INFO("set wifi event[%d]", wf_event);
wifi_status_cb(wf_event, NULL);
sleep(1);
continue;
}
}
if(last_state == wf_event) {
sleep(1);
continue;
}
last_state = wf_event;
LOG_INFO("set wifi event[%d]", wf_event);
wifi_status_cb(wf_event,NULL);
sleep(1);
}
return NULL;
}
Re: 【求助】【TuyaOS SDK】配网后重启,MQTT无法上线
正常来说,如果执行了这个回调,sdk会打印:wifi status changed to xxx, stat: xxx。但是这个日志里没有。你看配网的时候会有这个打印吗?
Re: 【求助】【TuyaOS SDK】配网后重启,MQTT无法上线
配网的时候连上WIFI之后有这个打印:
[TKL_WIFI] [wifi_status_event_cb, 59]:set wf event[0]
[14:32:02:314]:[01-01 00:00:50 ty N][b500][tal_wifi_reconnet.c:249] wifi status changed to 0, stat: 1
配网的时候会先回调WFE_DISCONNECTED:
[TKL_WIFI] [wifi_status_event_cb, 59]:set wf event[2]
正常启动时涂鸦SDK初始化时WIFI已经时CONNECTED状态了,所以就没有上报DISCONNECTED状态。
是不是SDK内部这个状态迁移需要遵循什么规则?这个帮忙确认下
Re: 【求助】【TuyaOS SDK】配网后重启,MQTT无法上线
看起来是某个任务阻塞导致的,我加了些打印,帮忙收集下配网重启后的日志
- Attachments
-
- lib.tar.gz
- (1.94 MiB) Downloaded 14 times
Re: 【求助】【TuyaOS SDK】配网后重启,MQTT无法上线
看起来是因为我把tkl_wifi.c中的wifi_status_event_cb函数中的以下代码片段注释了
Code: Select all
#if 1 //仅 wifi链接模式下,使用debug入网激活需要,原因:IOT会判断当前wifi的work_mode,然后再记录event,debug模式下给event太快,非debug模式不用sleep
sleep(3);
tal_wifi_set_work_mode(WWM_STATION);
#endif
我理解成非debug模式下把#if 1改成#if 0了
另外几个问题请教下:
1.我没太理解为什么这里要设置以下WiFi的work_mode,tkl_wifi不是有接口可以获取WiFi的当前模式吗?
2.配网模式下是否也需要调用tal_wifi_set_work_mode(WWM_STATION)接口设置wifi的work_mode
Re: 【求助】【TuyaOS SDK】配网后重启,MQTT无法上线
- 这是因为sdk内部有对wifi模式的判断。必须让wifi处于station或者ap模式下,状态的回调才生效
- 这段代码配网前和配网后保持一致