【已解决】[求助]关于wifi切换,备选wifi

Wi-Fi 设备、Wi-Fi 低功耗设备、Wi-Fi BLE 双模设备、Ethernet设备、Ethernet+Wi-Fi设备等
haha_de
Posts: 43

卢台长 2024年 Nov 27日 13:55

Hi,您好
当路由器断开外网的情况,只会尝试mqtt重连,但是如果5分钟内未连接成功云,则会走wifi重连的逻辑,原因是某些路由器,外网良好的情况下,存在连云一直失败,通过重新连接路由器才可以连上云

你意思是断外网的情况下,mqtt长时间离线,不会切网络到备选wifi,只会反复尝试重连当前正在连接的wifi,是吗?如果是的话,我觉得还是加一下切别的wifi是不是更好点,哪怕判定时间更久一点。

User avatar
卢台长
Posts: 17

Re: [求助]关于wifi切换,备选wifi

haha_de 2024年 Nov 27日 17:02
卢台长 2024年 Nov 27日 13:55

Hi,您好
当路由器断开外网的情况,只会尝试mqtt重连,但是如果5分钟内未连接成功云,则会走wifi重连的逻辑,原因是某些路由器,外网良好的情况下,存在连云一直失败,通过重新连接路由器才可以连上云

你意思是断外网的情况下,mqtt长时间离线,不会切网络到备选wifi,只会反复尝试重连当前正在连接的wifi,是吗?如果是的话,我觉得还是加一下切别的wifi是不是更好点,哪怕判定时间更久一点。

Hi 您好
wifi重连的逻辑是包含了备选wifi连接的切换。

haha_de
Posts: 43

Re: [求助]关于wifi切换,备选wifi

目前发现你们sdk像有个可能导致内存泄漏的问题。

我这边测试wifi切换,添加多个备选wifi,断网1分钟,看到sdk开始调用tkl_wifi_scan_ap函数获取扫描到的列表,但是这之后我并没有看到你们有调用tkl_wifi_release_ap函数。

参考你们的demo,malloc的wifi列表在tkl_wifi_scan_ap函数申请传给ap_ary,tkl_wifi_release_ap函数释放。

目前看你们tkl_wifi_release_ap函数只在设备添加时候关闭ap的时候调用了一次。我这边测试多次wifi切换,每次都只调用tkl_wifi_scan_ap,这样每调用一次就漏一次。tkl_wifi_release_ap注释上写if needed. tuyaos will call this function when the ap info is no use,难道你们要一直保存数据吗?

haha_de
Posts: 43

Re: [求助]关于wifi切换,备选wifi

还有这个函数tkl_wifi_get_connected_ap_info,参考demo实现都是需要在实现中malloc的,释放是你们内部直接释放吗?没看到对应的释放函数。函数注解中也没看到。不明确写出来,会有疑虑。

User avatar
卢台长
Posts: 17

Re: [求助]关于wifi切换,备选wifi

haha_de 2024年 Dec 26日 14:53

目前发现你们sdk像有个可能导致内存泄漏的问题。

我这边测试wifi切换,添加多个备选wifi,断网1分钟,看到sdk开始调用tkl_wifi_scan_ap函数获取扫描到的列表,但是这之后我并没有看到你们有调用tkl_wifi_release_ap函数。

参考你们的demo,malloc的wifi列表在tkl_wifi_scan_ap函数申请传给ap_ary,tkl_wifi_release_ap函数释放。

目前看你们tkl_wifi_release_ap函数只在设备添加时候关闭ap的时候调用了一次。我这边测试多次wifi切换,每次都只调用tkl_wifi_scan_ap,这样每调用一次就漏一次。tkl_wifi_release_ap注释上写if needed. tuyaos will call this function when the ap info is no use,难道你们要一直保存数据吗?

Hi,您好
非常感谢您的认真测试和严谨,下面解释下原因:
tkl_wifi_scan_ap会malloc一个wifi列表结构体给上层使用,而tkl_wifi_release_ap是对wifi列表的释放,所以上层使用后,省略调用了tkl_wifi_release_ap,而是直接调用tkl_system_free进行释放,所以不会存在内存泄漏

您的建议也非常好,我们会在新版本进行更新替换

祝你周末愉快,生活美满

User avatar
卢台长
Posts: 17

Re: [求助]关于wifi切换,备选wifi

haha_de 2024年 Dec 26日 20:35

还有这个函数tkl_wifi_get_connected_ap_info,参考demo实现都是需要在实现中malloc的,释放是你们内部直接释放吗?没看到对应的释放函数。函数注解中也没看到。不明确写出来,会有疑虑。

抱歉给你带来了困扰,我们会在使用后调用tkl_system_free函数进行释放,后面会把注释更新完善

haha_de
Posts: 43

Re: [求助]关于wifi切换,备选wifi

卢台长 2024年 Dec 27日 18:54
haha_de 2024年 Dec 26日 14:53

目前发现你们sdk像有个可能导致内存泄漏的问题。

我这边测试wifi切换,添加多个备选wifi,断网1分钟,看到sdk开始调用tkl_wifi_scan_ap函数获取扫描到的列表,但是这之后我并没有看到你们有调用tkl_wifi_release_ap函数。

参考你们的demo,malloc的wifi列表在tkl_wifi_scan_ap函数申请传给ap_ary,tkl_wifi_release_ap函数释放。

目前看你们tkl_wifi_release_ap函数只在设备添加时候关闭ap的时候调用了一次。我这边测试多次wifi切换,每次都只调用tkl_wifi_scan_ap,这样每调用一次就漏一次。tkl_wifi_release_ap注释上写if needed. tuyaos will call this function when the ap info is no use,难道你们要一直保存数据吗?

Hi,您好
非常感谢您的认真测试和严谨,下面解释下原因:
tkl_wifi_scan_ap会malloc一个wifi列表结构体给上层使用,而tkl_wifi_release_ap是对wifi列表的释放,所以上层使用后,省略调用了tkl_wifi_release_ap,而是直接调用tkl_system_free进行释放,所以不会存在内存泄漏

您的建议也非常好,我们会在新版本进行更新替换

祝你周末愉快,生活美满

您好,针对您上面描述,我没理解到位。
您上面想表达的是不是:接口实现方即我这边,在tkl_wifi_scan_ap函数malloc空间,将空间地址通过arr_ay传给你们,我们这边并改写列表num大小,至于释放空间,你们会通过release_scan_ap将我们给你的空间回传给我们释放,或者你们自己内部因为知道这个空间是我们这边malloc的,直接调用system_free释放。

User avatar
卢台长
Posts: 17

Re: [求助]关于wifi切换,备选wifi

haha_de 2024年 Dec 30日 10:34
卢台长 2024年 Dec 27日 18:54
haha_de 2024年 Dec 26日 14:53

目前发现你们sdk像有个可能导致内存泄漏的问题。

我这边测试wifi切换,添加多个备选wifi,断网1分钟,看到sdk开始调用tkl_wifi_scan_ap函数获取扫描到的列表,但是这之后我并没有看到你们有调用tkl_wifi_release_ap函数。

参考你们的demo,malloc的wifi列表在tkl_wifi_scan_ap函数申请传给ap_ary,tkl_wifi_release_ap函数释放。

目前看你们tkl_wifi_release_ap函数只在设备添加时候关闭ap的时候调用了一次。我这边测试多次wifi切换,每次都只调用tkl_wifi_scan_ap,这样每调用一次就漏一次。tkl_wifi_release_ap注释上写if needed. tuyaos will call this function when the ap info is no use,难道你们要一直保存数据吗?

Hi,您好
非常感谢您的认真测试和严谨,下面解释下原因:
tkl_wifi_scan_ap会malloc一个wifi列表结构体给上层使用,而tkl_wifi_release_ap是对wifi列表的释放,所以上层使用后,省略调用了tkl_wifi_release_ap,而是直接调用tkl_system_free进行释放,所以不会存在内存泄漏

您的建议也非常好,我们会在新版本进行更新替换

祝你周末愉快,生活美满

您好,针对您上面描述,我没理解到位。
您上面想表达的是不是:接口实现方即我这边,在tkl_wifi_scan_ap函数malloc空间,将空间地址通过arr_ay传给你们,我们这边并改写列表num大小,至于释放空间,你们会通过release_scan_ap将我们给你的空间回传给我们释放,或者你们自己内部因为知道这个空间是我们这边malloc的,直接调用system_free释放。

您理解的是正确的。
tkl_wifi_scan_ap -> malloc(arr_ay)
release_scan_ap -> free(arr_ay) = system_free(arr_ay)

haha_de
Posts: 43

Re: [求助]关于wifi切换,备选wifi

卢台长 2024年 Dec 30日 10:50
haha_de 2024年 Dec 30日 10:34
卢台长 2024年 Dec 27日 18:54

Hi,您好
非常感谢您的认真测试和严谨,下面解释下原因:
tkl_wifi_scan_ap会malloc一个wifi列表结构体给上层使用,而tkl_wifi_release_ap是对wifi列表的释放,所以上层使用后,省略调用了tkl_wifi_release_ap,而是直接调用tkl_system_free进行释放,所以不会存在内存泄漏

您的建议也非常好,我们会在新版本进行更新替换

祝你周末愉快,生活美满

您好,针对您上面描述,我没理解到位。
您上面想表达的是不是:接口实现方即我这边,在tkl_wifi_scan_ap函数malloc空间,将空间地址通过arr_ay传给你们,我们这边并改写列表num大小,至于释放空间,你们会通过release_scan_ap将我们给你的空间回传给我们释放,或者你们自己内部因为知道这个空间是我们这边malloc的,直接调用system_free释放。

您理解的是正确的。
tkl_wifi_scan_ap -> malloc(arr_ay)
release_scan_ap -> free(arr_ay) = system_free(arr_ay)

嗯嗯,好的,还有一点需要帮忙解答,先前提到这个接口函数tkl_wifi_get_connected_ap_info,看到demo里面还要回传密码,我当前直接返回OPRT_COM_ERROR,没有实现。对接体验下来并不影响实际使用,请问该接口实现与否对于你们这边是否有必要性。

User avatar
卢台长
Posts: 17

Re: [求助]关于wifi切换,备选wifi

haha_de 2024年 Dec 30日 11:29
卢台长 2024年 Dec 30日 10:50
haha_de 2024年 Dec 30日 10:34

您好,针对您上面描述,我没理解到位。
您上面想表达的是不是:接口实现方即我这边,在tkl_wifi_scan_ap函数malloc空间,将空间地址通过arr_ay传给你们,我们这边并改写列表num大小,至于释放空间,你们会通过release_scan_ap将我们给你的空间回传给我们释放,或者你们自己内部因为知道这个空间是我们这边malloc的,直接调用system_free释放。

您理解的是正确的。
tkl_wifi_scan_ap -> malloc(arr_ay)
release_scan_ap -> free(arr_ay) = system_free(arr_ay)

嗯嗯,好的,还有一点需要帮忙解答,先前提到这个接口函数tkl_wifi_get_connected_ap_info,看到demo里面还要回传密码,我当前直接返回OPRT_COM_ERROR,没有实现。对接体验下来并不影响实际使用,请问该接口实现与否对于你们这边是否有必要性。

您好,这个接口可以不实现,返回错误即可,需要与tkl_wifi_station_fast_connect接口配合使用(该接口也可以不实现,返回错误即可)下面讲一下应用的场景:

主要应用在wifi soc芯片(RTOS系统)的产品,有些客户希望产品上电能快速连接涂鸦云,以达到友好的体验效果
还有一些传感低功耗的场景中,通常设备上电后需要快速连云,然后上报状态,上报完后又睡眠了,这对连云上报时间非常严格

tkl_wifi_get_connected_ap_info接口用于获取wifi快速连接的基本信息(信道+bssid+加密模式+psk+ssid+passwd+ip等信息),因为wifi平台比较多,这部分内容有厂家所决定,我们sdk会对其进行保存&更新(wifi连接上路由器的时候会进行获取),上电的时候会读取sdk保存的信息,能读到就会透传给tkl_wifi_station_fast_connect接口,用于实现快速连接路由器,

我们实测soc wifi芯片可以达到1s连云,从rtos平台上电到wifi快连只需要600ms

希望对您有帮助理解!

Post Reply