This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220SF:SSIDlen 返回错误的 SSID 长度

Guru**** 2466550 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1548187/cc3220sf-the-ssidlen-returns-wrong-length-of-ssid

器件型号:CC3220SF


工具/软件:

typedef 结构

_u8 SSID[SL_WLAN_SSID_MAX_LENGTH];
_u8 SsidLen;
_u8 BSSID[SL_WLAN_BSSID_LENGTH];
_i8 RSSI;
_i16 SecurityInfo;
_u8 通道;
_i8 保留[1];
}SlWlanNetworkEntry_t;

我正在使用 sl_WlanGetNetworkList 获取 SSID 列表、结构返回正确的 SSID、但 SsidLen 返回错误? 我想检查这里是否缺少任何内容

例如:

第 236 章,我是你的女人

我的超次元帝国 36

谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我不知道 CC3220 器件存在此类问题。 您使用的是哪个 SDK 版本? 您在设备中上传了什么服务包?

    1 月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能分享用来查看此行为的代码片段吗? 还可以共享您用来查看该内容的 SDK 吗?  

    您能否尝试使用 SDK 中的 network_terminal 应用程序、看看是否看到相同的行为?  

    已在本地尝试此项、我们可以看到 SSID 的正确长度。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用的是 SDK 7、这对我来说似乎是个旧问题、我只是将 CC3220 从版本 3 移植到版本 7。

    SlWlanNetworkEntry_t *net_entry_ptr;

    NET_ENTRY_ptr =(SlWlanNetworkEntry_t*) malloc (sizeof (SlWlanNetworkEntry_t)
    *20);

    Return_value = sl_WlanGetNetworkList (0、20、net_entrys_ptr);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您使用什么服务包(从 SDK 7.10 开始)? 在我的生产器件中、我使用的是 SDK 6.10。 此 SDK 具有与 7.10 完全相同的主机驱动程序。 我在现场有数千台设备、我从未遇到过这样的问题。 根据建议、是否可以使用 network_terminal 示例应用程序进行测试?

    1 月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     屏幕截图显示 — 从 API 填充的 SSID 以及阵列中的结果、屏幕底部显示 SSID_len 值= 236。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    以及 SlWlanNetworkEntry_t*数组的第一个[0]元素的外观。 它仍然有错误的长度? 它返回了正确的返回代码?

    1 月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、它们的长度都错误

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的主要问题是:当我测试的 SSID 大于 32char 时,我认为它会弄乱我的内存,因为设备返回的字符超过 32char 并且 API 不执行边界检查。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    从我的角度来看、您的代码中似乎有一些奇怪的错误。 从什么环境调用  sl_WlanGetNetworkList ()?  您能否使用静态数组而不是使用 malloc () 进行测试? 如何从  sl_WlanGetNetworkList () 返回代码

    1 月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我也使用静态数组对其进行了测试:

    lWlanNetworkEntry_t net_ptr[20]={0};
    Return_value = sl_WlanGetNetworkList (0、20、net_ptr);

    同样的结果、  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对不起,我想纠正自己,我不能使用 SSID_len ,而是使用 strlen ()。 使用 SSID_len 时、它打印了错误的 SSID –32char +一些垃圾

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    其他问题如何处理:

    • 服务包版本
    • 从  sl_WlanGetNetworkList() 返回代码
    • 调用  sl_WlanGetNetworkList () 的上下文
    • 使用 network_terminal 示例进行测试

    BTW ...使用 strlen () 到 SSID 可能是危险的。 以防万一、您应该添加 SSID[31]= 0x00;

    1 月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Service Pack:sp_3.22.0.1_2.7.0.0_2.2.0.7.bin

    返回代码:发现的网络数

    获得网络终端测试的结果后、我将进行更新

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是来自网络终端示例的响应——colmm 是关于 ssidLen 的、这是错误的:

    此外,在整个示例文件中:它不用于任何东西,我想我有我的答案不依赖于这个变量,但它是一个缺陷。

    if ((SSID!= NULL)&&(strlen (SSID)<= SL_WLAN_SSID_MAX_LENGTH))

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、  

    我也修改了 network_terminal 示例、可以正确查看 SSID 长度。 在该表中、第二项是 SSID 长度。

    这里没有错误/缺陷。  

    SsidLen 元素在示例工程 (wlan_cmd.c) 中用于打印扫描结果。 尽管 SSID_LEN 未打印出来、但它用于确定如何打印 SSID。 希望这一点澄清。

            /* In case the SSID length is 32 characters (the maximum valid size),
             * the NWP sends the SSID field without NULL terminating character.
             * In order to avoid printing a string which has no NULL terminated
             character,
             * print each character individually.
             */
            ssid_len = (uint8_t)app_CB.gDataBuffer.netEntries[index].SsidLen;
    
            if (ssid_len < SL_WLAN_SSID_MAX_LENGTH)
            {
                UART_PRINT("| %-2d ", ssid_len);
                UART_PRINT("| %-32s | ", app_CB.gDataBuffer.netEntries[index].Ssid);
            }

    您能分享如何打印 SSID 长度吗?  
    我使用的是 SDK 7_10_00_13。 您使用的确切 SDK 版本是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、是对的、默认情况下不打印、我已修改为打印第 7 行、  

    SSID_len = app_CB.gDataBuffer.netEntries[index].SsidLen;
    uart_print(“|-%d |“、app_CB.gDataBuffer.netEntries[index].SsidLen);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试了与您尝试的完全相同的代码、它对我来说很有效。  

    请参阅下面的代码片段:

            ssid_len = app_CB.gDataBuffer.netEntries[index].SsidLen;
    
            if (ssid_len < SL_WLAN_SSID_MAX_LENGTH)
            {
                UART_PRINT("|-- %d ", app_CB.gDataBuffer.netEntries[index].SsidLen);
                UART_PRINT("| %-32s | ", app_CB.gDataBuffer.netEntries[index].Ssid);
            }

    根据您之前的消息、 SSID 显示了一些不可打印的字符。 AP 上的 SSID 设置为什么? 他们有什么特殊的字符吗? 您是否可以将 1-2 个 AP 重命名为“test123"或“或类似内容并尝试此测试?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、因为我设置了 SSID 超过 32 个字符、这里重点是结构由 TI 驱动程序填充、这也在结构中设置了 SSIDLen 值。 我当时想使用 SSIDLen、因此应用程序不必在 SSID 上调用 strnlen。 但事实证明、SSIDLen 的值填充了一些随机数、这不是字符串的实际长度。  

    sl_WlanGetNetworkList 函数存在缺陷。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于小于 32 个字符的 SSID、您能否获得正确的 SSID 长度?