SimpleLink CC32xx ATCommands Library
Simplifies the implementation of Internet connectivity
atcmd_netcfg.c
1 /*
2  * Copyright (c) 2016, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 //*****************************************************************************
34 // includes
35 //*****************************************************************************
36 #include <stdlib.h>
37 #include <stdio.h>
38 
39 /* TI-DRIVERS Header files */
40 #include <ti/drivers/net/wifi/simplelink.h>
41 
42 #include <ti/net/utils/str_mpl.h>
43 
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>
49 
50 //*****************************************************************************
51 // defines
52 //*****************************************************************************
53 
54 //*****************************************************************************
55 // typedefs
56 //*****************************************************************************
57 
58 typedef struct _ATCmdNetcfg_t_
59 {
60  uint16_t id;
61  uint16_t option;
62  uint16_t len;
63  uint8_t *value;
64 }ATCmdNetcfg_t;
65 
66 
67 //*****************************************************************************
68 // AT Command Netcfg Routines
69 //*****************************************************************************
70 
71 
80 int32_t ATCmdNetcfg_setFree(ATCmdNetcfg_t *params)
81 {
82  if (params->value != NULL)
83  {
84  free(params->value);
85  }
86  return 0;
87 }
88 
99 int32_t ATCmdNetcfg_setParse(char *buff, ATCmdNetcfg_t *params)
100 {
101  int32_t ret = 0;
102  uint8_t optional = 0;
103  uint8_t ip[4];
104 
105  /* ID */
106  if ((ret = StrMpl_getListVal(ATCmd_netcfgId, sizeof(ATCmd_netcfgId)/sizeof(StrMpl_List_t), &buff, &params->id, ATCMD_DELIM_ARG, STRMPL_FLAG_PARAM_SIZE_16 )) < 0)
107  {
108  return ret;
109  }
110 
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))
114  {
115  optional = 1;
116  }
117  /* Option */
118  if ((ret = StrMpl_getListVal(ATCmd_netcfgOption, sizeof(ATCmd_netcfgOption)/sizeof(StrMpl_List_t), &buff, &params->option, ATCMD_DELIM_ARG, STRMPL_FLAG_PARAM_SIZE_16 )) < 0)
119  {
120  if ((ret != STRMPL_ERROR_PARAM_MISSING) || (optional == 0))
121  {
122  return ret;
123  }
124  }
125 
126  /* value */
127  switch (params->id)
128  {
129  case SL_NETCFG_MAC_ADDRESS_SET:
130  case SL_NETCFG_AP_STATION_DISCONNECT:
131  params->option = 1;
132  params->value = malloc(SL_WLAN_BSSID_LENGTH);
133  if (params->value == NULL)
134  {
135  return -1;
136  }
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)
138  {
139  return ret;
140  }
141  params->len = SL_WLAN_BSSID_LENGTH;
142  break;
143  case SL_NETCFG_IF:
144  if (params->option == SL_NETCFG_IF_STATE)
145  {
146  params->len = sizeof(uint32_t);
147  params->value = malloc(params->len);
148  if (params->value == NULL)
149  {
150  return -1;
151  }
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)
153  {
154  if (ret != STRMPL_ERROR_PARAM_MISSING)
155  {
156  return ret;
157  }
158  ret = 0;
159  }
160  }
161  else
162  {
163  return -1;
164  }
165  break;
166  case SL_NETCFG_IPV4_STA_ADDR_MODE:
167  case SL_NETCFG_IPV4_AP_ADDR_MODE:
168  switch (params->option)
169  {
170  case SL_NETCFG_ADDR_STATIC:
171  params->value = malloc(sizeof(SlNetCfgIpV4Args_t));
172  if (params->value == NULL)
173  {
174  return -1;
175  }
176  /* ip address */
177  if ((ret = StrMpl_getArrayVal(&buff,(void *)ip,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER, STRMPL_FLAG_PARAM_SIZE_8 ,ATCmd_excludeDelimArray)) < 0)
178  {
179  return ret;
180  }
181  ((SlNetCfgIpV4Args_t *)(params->value))->Ip = SL_IPV4_VAL(ip[0],ip[1],ip[2],ip[3]);
182  /* Subnet mask */
183  if ((ret = StrMpl_getArrayVal(&buff,(void *)ip,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER, STRMPL_FLAG_PARAM_SIZE_8 ,ATCmd_excludeDelimArray)) < 0)
184  {
185  return ret;
186  }
187  ((SlNetCfgIpV4Args_t *)(params->value))->IpMask = SL_IPV4_VAL(ip[0],ip[1],ip[2],ip[3]);
188  /* Default gateway address */
189  if ((ret = StrMpl_getArrayVal(&buff,(void *)ip,4,ATCMD_DELIM_ARG,ATCMD_DELIM_INTER, STRMPL_FLAG_PARAM_SIZE_8 ,ATCmd_excludeDelimArray)) < 0)
190  {
191  return ret;
192  }
193  ((SlNetCfgIpV4Args_t *)(params->value))->IpGateway = SL_IPV4_VAL(ip[0],ip[1],ip[2],ip[3]);
194  /* DNS server address */
195  if ((ret = StrMpl_getArrayVal(&buff,(void *)ip,4,ATCMD_DELIM_TRM,ATCMD_DELIM_INTER, STRMPL_FLAG_PARAM_SIZE_8 ,ATCmd_excludeDelimArray)) < 0)
196  {
197  return ret;
198  }
199  ((SlNetCfgIpV4Args_t *)(params->value))->IpDnsServer = SL_IPV4_VAL(ip[0],ip[1],ip[2],ip[3]);
200  params->len = sizeof(SlNetCfgIpV4Args_t);
201  break;
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)
207  {
208  return -1;
209  }
210  params->len = 0;
211  break;
212  default:
213  return -1;
214  }
215  break;
216  case SL_NETCFG_IPV6_ADDR_LOCAL:
217  switch (params->option)
218  {
219  case SL_NETCFG_ADDR_STATIC:
220  params->value = malloc(sizeof(SlNetCfgIpV6Args_t));
221  if (params->value == NULL)
222  {
223  return -1;
224  }
225  /* ip address */
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)
227  {
228  return ret;
229  }
230  params->len = sizeof(SlNetCfgIpV6Args_t);
231  break;
232  case SL_NETCFG_ADDR_STATEFUL:
233  case SL_NETCFG_ADDR_STATELESS:
234  params->len = 0;
235  break;
236  default:
237  return -1;
238  }
239  break;
240  case SL_NETCFG_IPV6_ADDR_GLOBAL:
241  switch (params->option)
242  {
243  case SL_NETCFG_ADDR_STATIC:
244  params->value = malloc(sizeof(SlNetCfgIpV6Args_t));
245  if (params->value == NULL)
246  {
247  return -1;
248  }
249  /* ip address */
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)
251  {
252  return ret;
253  }
254  /* DNS server address */
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)
256  {
257  return ret;
258  }
259  params->len = sizeof(SlNetCfgIpV6Args_t);
260  break;
261  case SL_NETCFG_ADDR_STATEFUL:
262  case SL_NETCFG_ADDR_STATELESS:
263  params->len = 0;
264  break;
265  default:
266  return -1;
267  }
268  break;
269  case SL_NETCFG_IPV4_DNS_CLIENT:
270  params->value = malloc(sizeof(SlNetCfgIpV4DnsClientArgs_t));
271  if (params->value == NULL)
272  {
273  return -1;
274  }
275  params->option = 0;
276  /* DNS server address */
277  if ((ret = StrMpl_getArrayVal(&buff,(void *)ip,4,ATCMD_DELIM_TRM,ATCMD_DELIM_INTER, STRMPL_FLAG_PARAM_SIZE_8 ,ATCmd_excludeDelimArray)) < 0)
278  {
279  return ret;
280  }
281  ((SlNetCfgIpV4DnsClientArgs_t *)(params->value))->DnsSecondServerAddr = SL_IPV4_VAL(ip[0],ip[1],ip[2],ip[3]);
282  params->len = sizeof(SlNetCfgIpV4DnsClientArgs_t);
283  break;
284 
285  default:
286  return -1;
287  }
288 
289  return ret;
290 }
291 
292 
304 int32_t ATCmdNetcfg_setCallback(void *arg)
305 {
306  int32_t ret = 0;
307  ATCmdNetcfg_t params;
308 
309  memset(&params, 0x0, sizeof(ATCmdNetcfg_t));
310 
311  /* Call the command parser */
312  ret = ATCmdNetcfg_setParse((char *)arg, &params);
313 
314  if (ret < 0)
315  {
316  ATCmd_errorResult(ATCmd_errorParseStr,ret);
317  ATCmdNetcfg_setFree(&params);
318  return -1;
319  }
320 
321  /* set netcfg option */
322  ret = sl_NetCfgSet(params.id,params.option,params.len,params.value);
323 
324  if (ret < 0)
325  {
326  ATCmd_errorResult(ATCmd_errorCmdStr,ret);
327  }
328  else
329  {
330  ATCmd_okResult();
331  }
332 
333  ATCmdNetcfg_setFree(&params);
334  return ret;
335 }
336 
337 
346 int32_t ATCmdNetcfg_getFree(ATCmdNetcfg_t *params)
347 {
348  if (params != NULL)
349  {
350  if (params->value != NULL)
351  {
352  free(params->value);
353  }
354  free(params);
355  }
356  return 0;
357 }
358 
369 int32_t ATCmdNetcfg_getParse(char *buff, ATCmdNetcfg_t *params)
370 {
371  int32_t ret = 0;
372 
373  /* ID */
374  if ((ret = StrMpl_getListVal(ATCmd_netcfgId, sizeof(ATCmd_netcfgId)/sizeof(StrMpl_List_t), &buff, &params->id, ATCMD_DELIM_TRM, STRMPL_FLAG_PARAM_SIZE_16 )) < 0)
375  {
376  return ret;
377  }
378 
379  /* value */
380  switch (params->id)
381  {
382  case SL_NETCFG_MAC_ADDRESS_GET:
383  params->len = SL_WLAN_BSSID_LENGTH;
384  break;
385  case SL_NETCFG_IF:
386  params->len = sizeof(uint32_t);
387  break;
388  case SL_NETCFG_IPV4_STA_ADDR_MODE:
389  case SL_NETCFG_IPV4_AP_ADDR_MODE:
390  params->len = sizeof(SlNetCfgIpV4Args_t);
391  break;
392  case SL_NETCFG_IPV6_ADDR_LOCAL:
393  case SL_NETCFG_IPV6_ADDR_GLOBAL:
394  params->len = sizeof(SlNetCfgIpV6Args_t);
395  break;
396  case SL_NETCFG_IPV4_DHCP_CLIENT:
397  params->len = sizeof(SlNetCfgIpv4DhcpClient_t);
398  break;
399  case SL_NETCFG_IPV4_DNS_CLIENT:
400  params->len = sizeof(SlNetCfgIpV4DnsClientArgs_t);
401  break;
402  case SL_NETCFG_AP_STATIONS_NUM_CONNECTED:
403  params->len = sizeof(uint8_t);
404  break;
405  case SL_NETCFG_AP_STATIONS_INFO_LIST:
406  params->len = sizeof(SlNetCfgStaInfo_t) * 4;
407  break;
408 
409  default:
410  return -1;
411  }
412  params->value = malloc(params->len);
413  if (params->value == NULL)
414  {
415  return -1;
416  }
417 
418  return ret;
419 }
420 
431 int32_t ATCmdNetcfg_getResult(void *args, int32_t num, char *buff)
432 {
433  int32_t ret = 0;
434  ATCmdNetcfg_t *params = (ATCmdNetcfg_t *)args;
435  uint8_t ip[4];
436  uint8_t i, stationListSize;
437  char delim;
438 
439  StrMpl_setStr(ATCmd_netcfgGetStr,&buff,ATCMD_DELIM_EVENT);
440 
441  switch (params->id)
442  {
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);
445  break;
446  case SL_NETCFG_IF:
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);
448  break;
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), &params->option,&buff,ATCMD_DELIM_ARG,STRMPL_FLAG_PARAM_SIZE_16|STRMPL_FLAG_PARAM_UNSIGNED);
452  /* address */
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);
455  /* Subnet mask */
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);
458  /* Gateway */
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);
461  /* DNS */
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);
464  break;
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), &params->option,&buff,ATCMD_DELIM_ARG,STRMPL_FLAG_PARAM_SIZE_16|STRMPL_FLAG_PARAM_UNSIGNED);
468  /* address */
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);
470  break;
471  case SL_NETCFG_IPV4_DHCP_CLIENT:
472  /* address */
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);
475  /* Subnet mask */
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);
478  /* Gateway */
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);
481  /* DNS 1 */
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);
484  /* DNS 2 */
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);
487  /* DHCP Server */
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);
490  /* Lease Time */
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);
492  /* Time To Renew */
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);
494  /* Dhcp State */
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);
496  break;
497 
498  case SL_NETCFG_IPV4_DNS_CLIENT:
499  /* DNS */
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);
502  break;
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);
505  break;
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++)
510  {
511  if (i == (stationListSize - 1))
512  {
513  delim = ATCMD_DELIM_TRM;
514  }
515  /* address */
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);
518  /* MAC address */
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);
520  /* name */
521  StrMpl_setStr((char *)((SlNetCfgStaInfo_t *)(params->value))->Name,&buff,delim);
522  }
523  break;
524 
525  default:
526  ret = -1;
527  }
528  ATCmdNetcfg_getFree(params);
529  return ret;
530 }
531 
543 int32_t ATCmdNetcfg_getCallback(void *arg)
544 {
545  int32_t ret = 0;
546  ATCmdNetcfg_t *params;
547  uint16_t *pOption = NULL;
548 
549  params = malloc(sizeof(ATCmdNetcfg_t));
550 
551  if (params == NULL)
552  {
553  ATCmd_errorResult(ATCmd_errorAllocStr,0);
554  return -1;
555  }
556  memset(params, 0x0, sizeof(ATCmdNetcfg_t));
557 
558  /* Call the command parser */
559  ret = ATCmdNetcfg_getParse((char *)arg, params);
560 
561  if (ret < 0)
562  {
563  ATCmd_errorResult(ATCmd_errorParseStr,ret);
564  ATCmdNetcfg_getFree(params);
565  return -1;
566  }
567  if ((params->id != SL_NETCFG_IF) && (params->id != SL_NETCFG_AP_STATIONS_NUM_CONNECTED))
568  {
569  pOption = &params->option;
570  }
571 
572  /* set netapp option */
573  ret = sl_NetCfgGet(params->id,pOption,&params->len,params->value);
574 
575  if (ret < 0)
576  {
577  ATCmd_errorResult(ATCmd_errorCmdStr,ret);
578  ATCmdNetcfg_getFree(params);
579  }
580  else
581  {
582  ATCmd_commandResult(ATCmdNetcfg_getResult,params,0);
583  ATCmd_okResult();
584  }
585 
586  return ret;
587 }
588 
int32_t ATCmdNetcfg_setCallback(void *arg)
Netcfg Set callback.
Definition: atcmd_netcfg.c:304
int32_t ATCmdNetcfg_getCallback(void *arg)
Netcfg Get callback.
Definition: atcmd_netcfg.c:543