工具/软件: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;
}
[/代码]