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.

[参考译文] 编译器/LAUNCHCC3220MODASF:WiFi 作为静态模式

Guru**** 2595770 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/916711/compiler-launchcc3220modasf-wifi-as-static-mode

器件型号:LAUNCHCC3220MODASF

工具/软件:TI C/C++编译器

尊敬的先生:

我正在为 WiFi 应用开发 CC3220。 我必须将 wifi 配置为静态 IP 模式。  

这是我的代码、我标记了静态 IP 模式、但我认为它不起作用

[代码]

静态 Int32_t 配置 SimpleLinkToDefaultState (void)

uint8_t ucConfigOpt;
uint8_t ucPower;
int32_t RetVal =-1;
int32_t 模式=-1;
uint32_t IfBitmap = 0;
uint16_t configLen = 0;
uint8_t simpleLinkMac[sl_MAC_ADDR_LEN];
uint16_t macAddressLen;
SlWlanScanParamCommand_t ScanDefault ={0};
SlDeviceVersion_t ver ={0};
SlWlanRxFilterOperationCommandBuff_t RxFilterIdMask ={0}};

//启动 CC3220网络层

MODE = SL_Start (NULL、NULL、NULL);

if (mode!= role_STA)

/*将 NWP 角色设置为 STA */
//let 将 aa 设置为 STA 模式
MODE = SL_WlanSetMode (Role_STA);

/*要使更改生效,我们重新启动 NWP */
RetVal = sl_Stop (sl_stop_timeout);

//重新启动 CC3220网络层以获取 STA 模式
MODE = SL_Start (NULL、NULL、NULL);

if (mode!= role_STA)

WMErrorLog (error_log、"未能将设备配置为标准模式%d"、MODE);
返回-1;

//获取 wifi 详细信息

/*获取设备的信息*/
ucConfigOpt = sl_device_General_version;
configLen = sizeof (ver);
RetVal = sl_DeviceGet (sl_device_General、&ucConfigOpt、&configLen、
(uint8_t *)(&V));

WMLogInfo (INFO_log、"芯片%d\r\n MAC 31.%d.%d.%d.%d\r\n PHY %d.%d.%d.%d.\r\n\r\n NWP %d.%d.%d.%d.%d.\r\n\r\n ROM %d\r\n 主机%d.%d.%d.%d.%d.%d.%d.%d%d%d"、
Ver.ChipId、
ver.FwVersion[0]、ver.FwVersion[1]、
ver.FwVersion[2]、ver.FwVersion[3]、
ver.PhyVersion[0]、ver.PhyVersion[1]、
ver.PhyVersion[2]、ver.PhyVersion[3]、
ver.NwpVersion[0]、ver.NwpVersion[1]、ver.NwpVersion[2]、ver.NwpVersion[3]、
版本 RomVersion、
SL_MAJOR VERSION_NUM、SL_MINAL_VERSION_NUM、SL_VERSION_NUM、SL_SUB_VERSION_NUM);


//Get MAC Address
macAddressLen = sizeof (simpleLinkMac);
sl_NetCfgGet (sl_netcfg_MAC_address_get、NULL、&macAddressLen、
(unsigned char *) simpleLinkMac);

WMLogInfo (INFO_LOG、"MAC 地址:%02x:%02x:%02x:%02x:%02x:%02x"、simpleLinkMac[0]、
simpleLinkMac[1]、simpleLinkMac[2]、simpleLinkMac[3]、
simpleLinkMac[4]、simpleLinkMac[5]);

/*删除现有配置文件*/
RetVal = sl_WlanProfileDel (0xFF);

if (RetVal < 0)

WMErrorLog (error_log、"无法删除现有的 wifi 配置文件");

/*将策略设置为仅自动*/
/*快速连接*/

RetVal = sl_WlanPolicySet (sl_WLAN_policy_connection、sl_WLAN_connection_policy (1、1、0、1)、 空,0);

if (RetVal < 0)

WMErrorLog (error_log、"无法将自动仅限策略设置为 wifi ");

/*禁用自动配置*/
RetVal = sl_WlanProvisioning (sl_WLAN_PROVISIONING_CMD_STOP、0xFF、0、NULL、0x0);

if (RetVal < 0)

WMErrorLog (ERROR_LOG、"Failed to disable the auto provisioning of the wifi (禁用 wifi 的自动配置失败)");

#ifdef static_ip_mode

SlNetCfgIpV4Args_t IPv4;
IPv4.IP =(_u32) sl_IPv4_VAL (192、168、1、98);//_u32 IP 地址
IPv4.IpsMask =(_u32) sl_IPv4_VAL (255、255、255、0);//_u32子网掩码适用于此 STA/P2P
IPv4.IpsGateway =(_u32) sl_IPv4_VAL (192、168、1、1);//_u32默认网关地址

RetVal = sl_NetCfgSet (sl_netcfg_IPv4_STA_ADDR_MODE、sl_netcfg_ADDR_STATIC、sizeof (slNetCfgIpV4Args_t)、(_u8 *)&IPv4);

if (RetVal < 0)

WMErrorLog (error_log、"使用[错误代码]%d 将静态 IP 地址设置为 wifi 失败"、RetVal);

RetVal = sl_NetCfgSet (sl_netcfg_IPv4_STA_ADDR_MODE、sl_netcfg_if_disable_IPv4_DHCP、0、0);

if (RetVal < 0)

WMErrorLog (error_log、"使用[错误代码]%d 禁用 wifi 的 DHCP 客户端失败"、RetVal);


其他
/*启用 DHCP 客户端*/
RetVal = sl_NetCfgSet (sl_netcfg_IPv4_STA_ADDR_MODE、sl_netcfg_ADDR_DHCP、0、0);

if (RetVal < 0)

WMErrorLog (error_log、"无法启用 wifi 的 DHCP 客户端");

#endif //static_ip_mode

/*禁用 IPv6 */
IfBitmap =!(sl_netcfg_if_IPv6_STA_local | sl_netcfg_if_IPv6_STA_global);
RetVal = sl_NetCfgSet (sl_netcfg_if、sl_netcfg_if_State、sizeof (IfBitmap)、(const unsigned char *)&IfBitmap);

if (RetVal < 0)

WMErrorLog (error_log、"禁用 wifi 的 IPv6失败");

/*将扫描参数配置为默认值*/
ScanDefault.ChannelsMask = channel_mask_all;
ScanDefault.RssiThreshold = RSSI_TH_MAX;

RetVal = SL_WlanSet (SL_WLAN_CFG_General_Param_ID、SL_WLAN_General_Param_opt_scan_Params、sizeof (ScanDefault)、(uint8_t *)&ScanDefault);

if (RetVal < 0)

WMErrorLog (error_log、"设置 wifi 的默认扫描参数失败");

/*禁用扫描*/
ucConfigOpt = sl_WLAN_SCAN_policy (0、0);
RetVal = sl_WlanPolicySet (sl_WLAN_policy_scan、ucConfigOpt、NULL、0);

if (RetVal < 0)

WMErrorLog (error_log、"无法设置 wifi 的禁用扫描设置");

/*将 TX 功率 lvl 设置为最大值*/
ucPower = 0;
RetVal = SL_WlanSet (SL_WLAN_CFG_General_Param_ID、SL_WLAN_General_Param_OPT_STA_TX_POWER、1、(uint8_t *)&ucPower);

if (RetVal < 0)

WMErrorLog (ERROR_LOG、"Failed to set the TX power set of the WiFi");

/*将 NWP 电源策略设置为"正常"*/
RetVal = sl_WlanPolicySet (sl_WLAN_policy_PM、sl_WLAN_normal_policy、NULL、0);

if (RetVal < 0)

WMErrorLog (ERROR_LOG、"Failed to set the NWP power policy to normal of the WIFI");

/*取消注册 mDNS 服务*/
RetVal = sl_NetAppMDNSUnRegisterService (0、0、0);

if (RetVal < 0)

WMErrorLog (error_log、"设置 wifi 的 DNS 服务设置失败");

/*停止内部 HTTP 服务器*/
RetVal = sl_NetAppStop (sl_NetApp_HTTP_Server_ID);

if (RetVal < 0)

WMErrorLog (error_log、"无法停止 wifi 的内部 HTTP 服务器");

/*启动内部 HTTP 服务器*/
RetVal = sl_NetAppStart (sl_NetApp_HTTP_Server_ID);

if (RetVal < 0)

WMErrorLog (error_log、"无法启动 wifi 的内部 HTTP 服务器");

/*删除所有64个 RX 过滤器(8*8)*/
memset (RxFilterIdMask.FilterBitmap、0xFF、8);

RetVal = sl_WlanSet (sl_WLAN_RX_FILTERS_ID、sl_WLAN_RX_FILTER_REMOVE、sizeof (SlWlanRxFilterOperationCommandBuff_t)、(uint8_t *)&RxFilterIdMask);

if (RetVal < 0)

WMErrorLog (ERROR_LOG、"Failed to remove RX filter setting of the WiFi");

/*将 NWP 角色设置为 STA */
RetVal = sl_WlanSetMode (Role_STA);

if (RetVal < 0)

WMErrorLog (ERROR_LOG、"Failed to set NWP role as STA of the WiFi");

/*要使更改生效,我们重新启动 NWP */
RetVal = sl_Stop (sl_stop_timeout);

if (RetVal < 0)

WMErrorLog (ERROR_LOG、"Failed to restart the NWP of the WiFi");

MODE = SL_Start (NULL、NULL、NULL);

if (RetVal < 0)

WMErrorLog (ERROR_LOG、"Failed to set STA mode after setting the wifi (设置 wifi 后无法设置 STA 模式)");
返回-1;

其他

APP_CB.Role = Role_STA;
SET_STATUS_BIT (APP_CB.Status、STATUS_BIT_NWP_INIT);

WMLogInfo (INFO_LOG、"wifi 设备已在默认状态下启动");

返回 RetVal;

[/代码]

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

    您好!

    是否从 sl_NetCfgSet()调用中看到特定错误? 或者是否显示静态 IP 选项未设置、设备仍使用从 DHCP 分配给它的 IP?

    最突出的是 IPv4.IpsServer 未设置的方式。 请尝试将其设置为 DNS 服务器、例如8、8、8、8、如下所示:

    IPv4.IpsServer =(_u32) sl_IPv4_VAL (8、8、8);

    请告诉我这是否能解决问题。

    此致、

    Michael

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

    尊敬的先生:

    感谢你的答复。 我将尝试使用 DNS、我将告诉您。 但是、对于我在此处共享的当前代码、我在禁用 DHCP 服务器时遇到错误  

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

    尊敬的先生:

    我在 IPv4结构中添加了 DNS、我得到了静态 IP 地址、但禁用 DCHP 服务器时仍有错误。

    请附上外观屏幕截图  

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

    您好!

    如果您将静态 IP 设置为默认网关子网内的地址,它是否会更改代码的行为?

    此外、如果您删除了 SL_NetCfgSet (sl_netcfg_IPv4_STA_ADDR_MODE、SL_netcfg_if_disable_IPv4_DHCP、0、0);调用、 这会改变吗? 似乎没有在 NWP 程序员主指南中记录 sl_netcfg_if_disable_IPv4_DHCP。 您在哪里找到描述的此选项? 了解您在哪里看到了文档、这将有助于我了解和跟踪该选项的功能。

    此致、

    Michael