40 #include <ti/drivers/net/wifi/simplelink.h> 42 #include <ti/net/utils/str_mpl.h> 44 #include <ti/net/atcmd/atcmd_netcfg.h> 45 #include <ti/net/atcmd/atcmd_defs.h> 46 #include <ti/net/atcmd/atcmd_event.h> 47 #include <ti/net/atcmd/atcmd_gen.h> 48 #include <ti/net/atcmd/atcmd.h> 58 typedef struct _ATCmdNetcfg_t_
80 int32_t ATCmdNetcfg_setFree(ATCmdNetcfg_t *params)
82 if (params->value != NULL)
99 int32_t ATCmdNetcfg_setParse(
char *buff, ATCmdNetcfg_t *params)
102 uint8_t optional = 0;
106 if ((ret = StrMpl_getListVal(ATCmd_netcfgId,
sizeof(ATCmd_netcfgId)/
sizeof(StrMpl_List_t), &buff, ¶ms->id, ATCMD_DELIM_ARG, STRMPL_FLAG_PARAM_SIZE_16 )) < 0)
111 if ((params->id == SL_NETCFG_MAC_ADDRESS_SET) ||
112 (params->id == SL_NETCFG_AP_STATION_DISCONNECT) ||
113 (params->id == SL_NETCFG_IPV4_DNS_CLIENT))
118 if ((ret = StrMpl_getListVal(ATCmd_netcfgOption,
sizeof(ATCmd_netcfgOption)/
sizeof(StrMpl_List_t), &buff, ¶ms->option, ATCMD_DELIM_ARG, STRMPL_FLAG_PARAM_SIZE_16 )) < 0)
120 if ((ret != STRMPL_ERROR_PARAM_MISSING) || (optional == 0))
129 case SL_NETCFG_MAC_ADDRESS_SET:
130 case SL_NETCFG_AP_STATION_DISCONNECT:
132 params->value = malloc(SL_WLAN_BSSID_LENGTH);
133 if (params->value == NULL)
137 if ((ret = StrMpl_getArrayVal(&buff, (
void *)params->value, SL_WLAN_BSSID_LENGTH,ATCMD_DELIM_TRM,ATCMD_DELIM_ARRAY,STRMPL_FLAG_PARAM_SIZE_8,ATCmd_excludeDelimArray)) < 0)
141 params->len = SL_WLAN_BSSID_LENGTH;
144 if (params->option == SL_NETCFG_IF_STATE)
146 params->len =
sizeof(uint32_t);
147 params->value = malloc(params->len);
148 if (params->value == NULL)
152 if ((ret = StrMpl_getBitmaskListVal(ATCmd_netcfgIfState,
sizeof(ATCmd_netcfgIfState)/
sizeof(StrMpl_List_t), &buff, (
void *)params->value, ATCMD_DELIM_TRM, ATCMD_DELIM_BIT, ATCmd_excludeDelimArray, STRMPL_FLAG_PARAM_SIZE_32)) < 0)
154 if (ret != STRMPL_ERROR_PARAM_MISSING)
166 case SL_NETCFG_IPV4_STA_ADDR_MODE:
167 case SL_NETCFG_IPV4_AP_ADDR_MODE:
168 switch (params->option)
170 case SL_NETCFG_ADDR_STATIC:
171 params->value = malloc(
sizeof(SlNetCfgIpV4Args_t));
172 if (params->value == NULL)
177 if ((ret = StrMpl_getArrayVal(&buff,(
void *)ip,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER, STRMPL_FLAG_PARAM_SIZE_8 ,ATCmd_excludeDelimArray)) < 0)
181 ((SlNetCfgIpV4Args_t *)(params->value))->Ip = SL_IPV4_VAL(ip[0],ip[1],ip[2],ip[3]);
183 if ((ret = StrMpl_getArrayVal(&buff,(
void *)ip,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER, STRMPL_FLAG_PARAM_SIZE_8 ,ATCmd_excludeDelimArray)) < 0)
187 ((SlNetCfgIpV4Args_t *)(params->value))->IpMask = SL_IPV4_VAL(ip[0],ip[1],ip[2],ip[3]);
189 if ((ret = StrMpl_getArrayVal(&buff,(
void *)ip,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER, STRMPL_FLAG_PARAM_SIZE_8 ,ATCmd_excludeDelimArray)) < 0)
193 ((SlNetCfgIpV4Args_t *)(params->value))->IpGateway = SL_IPV4_VAL(ip[0],ip[1],ip[2],ip[3]);
195 if ((ret = StrMpl_getArrayVal(&buff,(
void *)ip,4,ATCMD_DELIM_TRM,ATCMD_DELIM_INTER, STRMPL_FLAG_PARAM_SIZE_8 ,ATCmd_excludeDelimArray)) < 0)
199 ((SlNetCfgIpV4Args_t *)(params->value))->IpDnsServer = SL_IPV4_VAL(ip[0],ip[1],ip[2],ip[3]);
200 params->len =
sizeof(SlNetCfgIpV4Args_t);
202 case SL_NETCFG_ADDR_DHCP:
203 case SL_NETCFG_ADDR_DHCP_LLA:
204 case SL_NETCFG_ADDR_RELEASE_IP_SET:
205 case SL_NETCFG_ADDR_RELEASE_IP_OFF:
206 if (params->id == SL_NETCFG_IPV4_AP_ADDR_MODE)
216 case SL_NETCFG_IPV6_ADDR_LOCAL:
217 switch (params->option)
219 case SL_NETCFG_ADDR_STATIC:
220 params->value = malloc(
sizeof(SlNetCfgIpV6Args_t));
221 if (params->value == NULL)
226 if ((ret = StrMpl_getArrayVal(&buff, (
void *)((SlNetCfgIpV6Args_t *)(params->value))->Ip,4,ATCMD_DELIM_TRM,ATCMD_DELIM_ARRAY,STRMPL_FLAG_PARAM_SIZE_32,ATCmd_excludeDelimArray)) < 0)
230 params->len =
sizeof(SlNetCfgIpV6Args_t);
232 case SL_NETCFG_ADDR_STATEFUL:
233 case SL_NETCFG_ADDR_STATELESS:
240 case SL_NETCFG_IPV6_ADDR_GLOBAL:
241 switch (params->option)
243 case SL_NETCFG_ADDR_STATIC:
244 params->value = malloc(
sizeof(SlNetCfgIpV6Args_t));
245 if (params->value == NULL)
250 if ((ret = StrMpl_getArrayVal(&buff, (
void *)((SlNetCfgIpV6Args_t *)(params->value))->Ip,4,ATCMD_DELIM_ARG,ATCMD_DELIM_ARRAY,STRMPL_FLAG_PARAM_SIZE_32,ATCmd_excludeDelimArray)) < 0)
255 if ((ret = StrMpl_getArrayVal(&buff, (
void *)((SlNetCfgIpV6Args_t *)(params->value))->IpDnsServer,4,ATCMD_DELIM_TRM,ATCMD_DELIM_ARRAY,STRMPL_FLAG_PARAM_SIZE_32,ATCmd_excludeDelimArray)) < 0)
259 params->len =
sizeof(SlNetCfgIpV6Args_t);
261 case SL_NETCFG_ADDR_STATEFUL:
262 case SL_NETCFG_ADDR_STATELESS:
269 case SL_NETCFG_IPV4_DNS_CLIENT:
270 params->value = malloc(
sizeof(SlNetCfgIpV4DnsClientArgs_t));
271 if (params->value == NULL)
277 if ((ret = StrMpl_getArrayVal(&buff,(
void *)ip,4,ATCMD_DELIM_TRM,ATCMD_DELIM_INTER, STRMPL_FLAG_PARAM_SIZE_8 ,ATCmd_excludeDelimArray)) < 0)
281 ((SlNetCfgIpV4DnsClientArgs_t *)(params->value))->DnsSecondServerAddr = SL_IPV4_VAL(ip[0],ip[1],ip[2],ip[3]);
282 params->len =
sizeof(SlNetCfgIpV4DnsClientArgs_t);
307 ATCmdNetcfg_t params;
309 memset(¶ms, 0x0,
sizeof(ATCmdNetcfg_t));
312 ret = ATCmdNetcfg_setParse((
char *)arg, ¶ms);
316 ATCmd_errorResult(ATCmd_errorParseStr,ret);
317 ATCmdNetcfg_setFree(¶ms);
322 ret = sl_NetCfgSet(params.id,params.option,params.len,params.value);
326 ATCmd_errorResult(ATCmd_errorCmdStr,ret);
333 ATCmdNetcfg_setFree(¶ms);
346 int32_t ATCmdNetcfg_getFree(ATCmdNetcfg_t *params)
350 if (params->value != NULL)
369 int32_t ATCmdNetcfg_getParse(
char *buff, ATCmdNetcfg_t *params)
374 if ((ret = StrMpl_getListVal(ATCmd_netcfgId,
sizeof(ATCmd_netcfgId)/
sizeof(StrMpl_List_t), &buff, ¶ms->id, ATCMD_DELIM_TRM, STRMPL_FLAG_PARAM_SIZE_16 )) < 0)
382 case SL_NETCFG_MAC_ADDRESS_GET:
383 params->len = SL_WLAN_BSSID_LENGTH;
386 params->len =
sizeof(uint32_t);
388 case SL_NETCFG_IPV4_STA_ADDR_MODE:
389 case SL_NETCFG_IPV4_AP_ADDR_MODE:
390 params->len =
sizeof(SlNetCfgIpV4Args_t);
392 case SL_NETCFG_IPV6_ADDR_LOCAL:
393 case SL_NETCFG_IPV6_ADDR_GLOBAL:
394 params->len =
sizeof(SlNetCfgIpV6Args_t);
396 case SL_NETCFG_IPV4_DHCP_CLIENT:
397 params->len =
sizeof(SlNetCfgIpv4DhcpClient_t);
399 case SL_NETCFG_IPV4_DNS_CLIENT:
400 params->len =
sizeof(SlNetCfgIpV4DnsClientArgs_t);
402 case SL_NETCFG_AP_STATIONS_NUM_CONNECTED:
403 params->len =
sizeof(uint8_t);
405 case SL_NETCFG_AP_STATIONS_INFO_LIST:
406 params->len =
sizeof(SlNetCfgStaInfo_t) * 4;
412 params->value = malloc(params->len);
413 if (params->value == NULL)
431 int32_t ATCmdNetcfg_getResult(
void *args, int32_t num,
char *buff)
434 ATCmdNetcfg_t *params = (ATCmdNetcfg_t *)args;
436 uint8_t i, stationListSize;
439 StrMpl_setStr(ATCmd_netcfgGetStr,&buff,ATCMD_DELIM_EVENT);
443 case SL_NETCFG_MAC_ADDRESS_GET:
444 StrMpl_setArrayVal(params->value,&buff,SL_WLAN_BSSID_LENGTH,ATCMD_DELIM_TRM,ATCMD_DELIM_ARRAY,STRMPL_FLAG_PARAM_HEX | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
447 StrMpl_setBitmaskListStr(ATCmd_netcfgIfState,
sizeof(ATCmd_netcfgIfState)/
sizeof(StrMpl_List_t), params->value, &buff, ATCMD_DELIM_TRM, ATCMD_DELIM_BIT, STRMPL_FLAG_PARAM_SIZE_32);
449 case SL_NETCFG_IPV4_STA_ADDR_MODE:
450 case SL_NETCFG_IPV4_AP_ADDR_MODE:
451 StrMpl_setListStr(ATCmd_netcfgOption,
sizeof(ATCmd_netcfgOption)/
sizeof(StrMpl_List_t), ¶ms->option,&buff,ATCMD_DELIM_ARG,STRMPL_FLAG_PARAM_SIZE_16|STRMPL_FLAG_PARAM_UNSIGNED);
453 ATCmd_valToIPv4(((SlNetCfgIpV4Args_t *)(params->value))->Ip, ip);
454 StrMpl_setArrayVal(ip,&buff,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER,STRMPL_FLAG_PARAM_DEC | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
456 ATCmd_valToIPv4(((SlNetCfgIpV4Args_t *)(params->value))->IpMask, ip);
457 StrMpl_setArrayVal(ip,&buff,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER,STRMPL_FLAG_PARAM_DEC | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
459 ATCmd_valToIPv4(((SlNetCfgIpV4Args_t *)(params->value))->IpGateway, ip);
460 StrMpl_setArrayVal(ip,&buff,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER,STRMPL_FLAG_PARAM_DEC | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
462 ATCmd_valToIPv4(((SlNetCfgIpV4Args_t *)(params->value))->IpDnsServer, ip);
463 StrMpl_setArrayVal(ip,&buff,4,ATCMD_DELIM_TRM,ATCMD_DELIM_INTER,STRMPL_FLAG_PARAM_DEC | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
465 case SL_NETCFG_IPV6_ADDR_LOCAL:
466 case SL_NETCFG_IPV6_ADDR_GLOBAL:
467 StrMpl_setListStr(ATCmd_netcfgOption,
sizeof(ATCmd_netcfgOption)/
sizeof(StrMpl_List_t), ¶ms->option,&buff,ATCMD_DELIM_ARG,STRMPL_FLAG_PARAM_SIZE_16|STRMPL_FLAG_PARAM_UNSIGNED);
469 StrMpl_setArrayVal(((SlNetCfgIpV6Args_t *)(params->value))->Ip,&buff,4,ATCMD_DELIM_TRM,ATCMD_DELIM_ARRAY,STRMPL_FLAG_PARAM_HEX | STRMPL_FLAG_PARAM_SIZE_32 | STRMPL_FLAG_PARAM_UNSIGNED);
471 case SL_NETCFG_IPV4_DHCP_CLIENT:
473 ATCmd_valToIPv4(((SlNetCfgIpv4DhcpClient_t *)(params->value))->Ip, ip);
474 StrMpl_setArrayVal(ip,&buff,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER,STRMPL_FLAG_PARAM_DEC | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
476 ATCmd_valToIPv4(((SlNetCfgIpv4DhcpClient_t *)(params->value))->Mask, ip);
477 StrMpl_setArrayVal(ip,&buff,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER,STRMPL_FLAG_PARAM_DEC | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
479 ATCmd_valToIPv4(((SlNetCfgIpv4DhcpClient_t *)(params->value))->Gateway, ip);
480 StrMpl_setArrayVal(ip,&buff,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER,STRMPL_FLAG_PARAM_DEC | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
482 ATCmd_valToIPv4(((SlNetCfgIpv4DhcpClient_t *)(params->value))->Dns[0], ip);
483 StrMpl_setArrayVal(ip,&buff,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER,STRMPL_FLAG_PARAM_DEC | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
485 ATCmd_valToIPv4(((SlNetCfgIpv4DhcpClient_t *)(params->value))->Dns[1], ip);
486 StrMpl_setArrayVal(ip,&buff,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER,STRMPL_FLAG_PARAM_DEC | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
488 ATCmd_valToIPv4(((SlNetCfgIpv4DhcpClient_t *)(params->value))->DhcpServer, ip);
489 StrMpl_setArrayVal(ip,&buff,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER,STRMPL_FLAG_PARAM_DEC | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
491 StrMpl_setVal(&((SlNetCfgIpv4DhcpClient_t *)(params->value))->LeaseTime, &buff,ATCMD_DELIM_ARG,STRMPL_FLAG_PARAM_SIZE_32 |STRMPL_FLAG_PARAM_UNSIGNED|STRMPL_FLAG_PARAM_DEC);
493 StrMpl_setVal(&((SlNetCfgIpv4DhcpClient_t *)(params->value))->TimeToRenew, &buff,ATCMD_DELIM_ARG,STRMPL_FLAG_PARAM_SIZE_32 |STRMPL_FLAG_PARAM_UNSIGNED|STRMPL_FLAG_PARAM_DEC);
495 StrMpl_setListStr(ATCmd_netcfgDhcpState,
sizeof(ATCmd_netcfgDhcpState)/
sizeof(StrMpl_List_t), &((SlNetCfgIpv4DhcpClient_t *)(params->value))->DhcpState,&buff,ATCMD_DELIM_TRM,STRMPL_FLAG_PARAM_SIZE_8|STRMPL_FLAG_PARAM_UNSIGNED);
498 case SL_NETCFG_IPV4_DNS_CLIENT:
500 ATCmd_valToIPv4(((SlNetCfgIpV4DnsClientArgs_t *)(params->value))->DnsSecondServerAddr, ip);
501 StrMpl_setArrayVal(ip,&buff,4,ATCMD_DELIM_TRM,ATCMD_DELIM_INTER,STRMPL_FLAG_PARAM_DEC | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
503 case SL_NETCFG_AP_STATIONS_NUM_CONNECTED:
504 StrMpl_setVal(params->value, &buff,ATCMD_DELIM_TRM,STRMPL_FLAG_PARAM_SIZE_8 |STRMPL_FLAG_PARAM_UNSIGNED|STRMPL_FLAG_PARAM_DEC);
506 case SL_NETCFG_AP_STATIONS_INFO_LIST:
507 stationListSize = params->len /
sizeof(SlNetCfgStaInfo_t);
508 delim = ATCMD_DELIM_LIST;
509 for (i=0; i<stationListSize; i++)
511 if (i == (stationListSize - 1))
513 delim = ATCMD_DELIM_TRM;
516 ATCmd_valToIPv4(((SlNetCfgStaInfo_t *)(params->value))->Ip, ip);
517 StrMpl_setArrayVal(ip,&buff,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER,STRMPL_FLAG_PARAM_DEC | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
519 StrMpl_setArrayVal(((SlNetCfgStaInfo_t *)(params->value))->MacAddr,&buff,SL_WLAN_BSSID_LENGTH,ATCMD_DELIM_ARG,ATCMD_DELIM_ARRAY,STRMPL_FLAG_PARAM_HEX | STRMPL_FLAG_PARAM_SIZE_8 | STRMPL_FLAG_PARAM_UNSIGNED);
521 StrMpl_setStr((
char *)((SlNetCfgStaInfo_t *)(params->value))->Name,&buff,delim);
528 ATCmdNetcfg_getFree(params);
546 ATCmdNetcfg_t *params;
547 uint16_t *pOption = NULL;
549 params = malloc(
sizeof(ATCmdNetcfg_t));
553 ATCmd_errorResult(ATCmd_errorAllocStr,0);
556 memset(params, 0x0,
sizeof(ATCmdNetcfg_t));
559 ret = ATCmdNetcfg_getParse((
char *)arg, params);
563 ATCmd_errorResult(ATCmd_errorParseStr,ret);
564 ATCmdNetcfg_getFree(params);
567 if ((params->id != SL_NETCFG_IF) && (params->id != SL_NETCFG_AP_STATIONS_NUM_CONNECTED))
569 pOption = ¶ms->option;
573 ret = sl_NetCfgGet(params->id,pOption,¶ms->len,params->value);
577 ATCmd_errorResult(ATCmd_errorCmdStr,ret);
578 ATCmdNetcfg_getFree(params);
582 ATCmd_commandResult(ATCmdNetcfg_getResult,params,0);
int32_t ATCmdNetcfg_setCallback(void *arg)
Netcfg Set callback.
int32_t ATCmdNetcfg_getCallback(void *arg)
Netcfg Get callback.