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.

[参考译文] CC3220MODA:应用程序如何访问当前器件模式(AP、STA、P2P)?

Guru**** 2390755 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/813045/cc3220moda-how-is-the-current-device-mode-ap-sta-p2p-set-accessed-by-application

器件型号:CC3220MODA

为了了解我进入 SL API 的方法、我将根据 network_terminal 应用程序尝试使用代码。

我在扩展闪屏上报告的信息。 请参阅屏幕截图、其中我更改了应用标题并添加 了设备名称、域名和角色类型。

您可以在屏幕截图中看到 CC3220已设置为 AP 模式、甚至添加了基站。 但是,我访问的用于显示角色类型的变量是过时的。

这是我使用的代码。

UART_PRINT ("\t MAC 地址:%02x:%02x:%02x:%02x:%02x:%02x"、macAddress[0]、macAddress[1]、macAddress[2]、macAddress[3]、 MacAddress[4]、macAddress[5]);
UART_PRINT (lineBreak);
UART_PRINT ("\t 设备名称:%s"、my_device_name);
UART_PRINT (lineBreak);
UART_PRINT ("\t 域名:%s"、my_domain_name);
UART_PRINT (lineBreak);
/*获取角色类型*//FLE 20190618
GET_STATUS_BIT (APP_CB.Status、STATUS_BIT_CONNECTION);//这不会断开 AP 连接、但不起作用
// SET_STATUS_BIT (APP_CB.Status、STATUS_BIT_CONNECTION);//这会中断 AP 连接
UART_PRINT ("\t 角色类型:");
if (app_cb.role = role_ap){
UART_PRINT ("角色为 AP");
}
否则、如果(app_cb.role = role_sta){
UART_PRINT ("角色为 STA");
}
否则、如果(app_cb.role = role_p2p){
UART_PRINT ("角色是 P2P");
}
否则{
UART_PRINT ("角色是?????");
}/*结束获取角色类型*/

UART_PRINT (lineBreak);
UART_PRINT (lineBreak);
UART_PRINT ("\t");

因此、我认为 app_bc.role 是过时的、我需要执行一些操作来获取 app_bb 引用。
希望获得一些见解。

也许有更好的方法。 SWRU455H 的第21页上列出了 API、我看到的是 SL_WanSetMode、但没有相应的 SL_WanGetMode、因此那里没有 Joy。

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

    您好、Forrest、

    正确、您必须使用 API 来更新内部 appCB。 您可以使用以下函数获取角色:

    sl_WlanGet (sl_WLAN_CONNECT_INFO、NULL、&Len、(_u8*)&WlanConnectInfo);

    在结构 SL_WLAN_CONNECT_INFO 中、您将有一个模式字段、因此您可以执行以下操作:

    APP_CB.Role = WlanConnectInfo.Mode;

    请查看此主题:
    https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/t/715698

    BR、
    Vince

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

    大家好、Vince、

    我尝试了代码、但未成功。 首先、我必须获取 length 参数而不是抛出错误、现在第一个参数未定义

    这是我的代码

    /*获取角色类型*//FLE 20190618
    //sl_WlanGet (sl_WLAN_CONNECT_INFO、NULL、&Len、(_u8*)&WlanConnectInfo);
    sl_WlanGet (sl_WLAN_CONNECT_INFO、NULL、(_U16) sizeof (sl_WLAN_CONNECT_INFO)、(_u8*)&WlanConnectInfo);
    APP_CB.Role = WlanConnectInfo.Mode;
    // GET_STATUS_BIT (APP_CB.Status、STATUS_BIT_CONNECTION);//这不会断开 AP 连接、但不起作用
    // SET_STATUS_BIT (APP_CB.Status、STATUS_BIT_CONNECTION);//这会中断 AP 连接
    UART_PRINT ("\t 角色类型:");
    if (app_cb.role = role_ap){
    UART_PRINT ("角色为 AP");
    }
    否则、如果(app_cb.role = role_sta){
    UART_PRINT ("角色为 STA");
    }
    否则、如果(app_cb.role = role_p2p){
    UART_PRINT ("角色是 P2P");
    }
    否则{
    UART_PRINT ("角色是?????");
    }/*结束获取角色类型*/
    

    我收到构建错误、"#20 identifier "WlanConnectInfo" is undefined"

    当我查看"sl_WlanGet "的定义时 、我发现第一个参数列表不包含"sl_WLAN_CONNECT_INFo"

    我使用的是 SDK 版本:"simplelink_cc32xx_sdk_2_30_00_05"。

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

    您好、Forrest、

    2.30 SDK 中的文件 wlan.h:

    _i16 RetVal = 0;
    _U16 Len = sizeof (slWlanConnStatusParam_t);
    SlWlanConnStatusParam_t WlanConnectInfo;
    RetVal = sl_WlanGet (sl_WLAN_CONNECT_INFO、NULL、&Len、 (_u8*)&WlanConnectInfo); 

    1月

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

    好的、我取得了进展。 我在 wlan.h 文件中找到了建议的代码

    - sl_WLAN_CONNECT_INFO:
    代码
    _i16 RetVal = 0;
    _U16 Len = sizeof (slWlanConnStatusParam_t);
    SlWlanConnStatusParam_t WlanConnectInfo;
    RetVal = sl_WlanGet (sl_WLAN_CONNECT_INFO、NULL、&Len、(_u8*)&WlanConnectInfo);
    \endcode
    

    我的代码(尚未清理)为:

    /*获取角色类型*//FLE 20190618
    // _U16 Len = sizeof (slWlanConnStatusParam_t);
    //sl_WlanGet (sl_WLAN_CONNECT_INFO、NULL、&Len、(_u8*)&WlanConnectInfo);
    // SL_WlanGet (SL_WLAN_CFG_General_Param_ID、NULL、(_U16) sizeof (SL_WLAN_CFG_General_Param_ID)、(_u8*)&WlanConnectInfo);
    
    _i16 RetVal = 0;
    _U16 Len = sizeof (slWlanConnStatusParam_t);
    SlWlanConnStatusParam_t WlanConnectInfo;
    RetVal = sl_WlanGet (sl_WLAN_CONNECT_INFO、NULL、&Len、(_u8*)&WlanConnectInfo);
    APP_CB.Role = WlanConnectInfo.Mode;
    // GET_STATUS_BIT (APP_CB.Status、STATUS_BIT_CONNECTION);//这不会断开 AP 连接、但不起作用
    // SET_STATUS_BIT (APP_CB.Status、STATUS_BIT_CONNECTION);//这会中断 AP 连接
    UART_PRINT ("\t 角色类型:");
    if (app_cb.role = role_ap){
    UART_PRINT ("角色为 AP");
    }
    否则、如果(app_cb.role = role_sta){
    UART_PRINT ("角色为 STA");
    }
    否则、如果(app_cb.role = role_p2p){
    UART_PRINT ("角色是 P2P");
    }
    否则{
    UART_PRINT ("角色是?????");
    }/*结束获取角色类型*/
    

    这将生成并运行。 它返回了令人困惑的错误结果。 我通过登录我们的网络 AP 将器件置于 STA 模式。 但是、角色类型报告为 P2P。 请参阅终端屏幕截图。

    让我想知道模式的枚举类型是否关闭了一个或多个...

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

    您好、Forrest、

    您是否从结构体 SlWlanConnStatusParam_t 读取了返回值

    typedef 结构
    {
    _u8模式; /* role_STA、role_AP、role_P2P */
    _u8 ConnStatus;/* SlWlanConnStatusFlags_e *
    _u8安全类型;/*当前连接安全类型-(断开连接或 AP 模式时为0) SL_WLAN_SEC_TYPE_OPEN、SL_WLAN_SEC_TYPE_WEP、SL_WLAN_SEC_TYPE_WPA_WPA2、SL_WLAN_SEC_TYPE_WPA_ENT、SL_WLAN_SEC_TYPE_WPS_PBC、 SL_WLAN_SEC_TYPE_WPS_PIN *
    _u8保留;
    SlWlanConnectionInfo_u ConnectionInfo;
    }SlWlanConnStatusParam_t; 

    好的、现在我找到了您的线路 app_CB.Role = WlanConnectInfo.Mode;

    BTW。 为什么不保存 sl_Start()命令的返回值?

    1月

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

    我认为我在 wlan.h 文档中发现了 sl_WlanGet 参数的错误

    大约1945年的第行

    /*!
    \brief 正在获取 WLAN 配置
    
    \param[in] ConfigId -配置 ID
    - SL_WLAN_CFG_AP_ID 
    - SL_WLAN_CFG_General_Param_ID 
    - SL_WLAN_CFG_P2P_PARAM_ID 
    - SL_WLAN_CFG_AP_ACCESS_LIST_ID 
    - SL_WLAN_RX_FILTERS_ID 
    

    有五个参数、0到4。

    但是在276行上有0到5。

    /* WLAN 配置应用程序 ID */
    #define SL_WLAN_CFG_AP_ID (0)
    #define SL_WLAN_CFG_General_Param_ID (1)
    #define SL_WLAN_CFG_P2P_PARAM_ID (2)
    #define SL_WLAN_CFG_AP_ACCESS_LIST_ID (3)
    #define SL_WLAN_RX_FILTERS_ID (4)
    #define SL_WLAN_CONNECT_INFO (5)
    

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

    您好、Forrest、

    是的、但 如果您仔细观察、您会发现评论(和 doxygen 文档)中有更多错误。

    1月

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

    1月、

    关于,"BTW 为什么不保存 sl_Start()命令的返回值?"  我试图弄清楚如何退出 NWP、以查看它在做什么、而不是主机代码认为它在做什么。

    我不清楚如果我第二次调用 sl_Start(),并且在它们是连接之后会发生什么情况。 我还没有尝试过它。

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

    今天结束了、我简单地将测试与 AT 和 STA 的某些整数(魔术数)进行了硬编码、并将 P2P 的猜测编码到代码中。

    /*获取角色类型*//FLE 20190618
    _i16 RetVal = 0;
    _U16 Len = sizeof (slWlanConnStatusParam_t);
    SlWlanConnStatusParam_t WlanConnectInfo;
    RetVal = sl_WlanGet (sl_WLAN_CONNECT_INFO、NULL、&Len、(_u8*)&WlanConnectInfo);
    APP_CB.Role = WlanConnectInfo.Mode;
    UART_PRINT ("\t 角色类型:");
    // if (app_bc.role =(uint32_t) role_AP){
    if (app_cb.role = 0){
    UART_PRINT ("'0'。 角色为 AP");
    }
    // 否则、如果(app_b.role =(uint32_t) role_STA){
    否则、如果(app_cb.role = 3){
    UART_PRINT ("'3'。 角色为 STA");
    }
    // 否则、如果(app_cb.role =(uint32_t) role_p2p){
    否则、如果(app_cb.role = 1){
    UART_PRINT ("'1'。 角色为 p2p");
    }
    否则{
    UART_PRINT ("编号%d 角色是????"、APP_CB.role);
    }/*结束获取角色类型*/ 

    屏幕截图:

    希望进一步了解 WlanConnectInfo.Mode 实际应该返回的内容。