1 /*
2 * Copyright (c) 2022 Winner Microelectronics Co., Ltd. All rights reserved.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <string.h>
17 #include <ctype.h>
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include "wm_debug.h"
21 #if (GCC_COMPILE == 1)
22 #include "wm_cmdp_hostif_gcc.h"
23 #else
24 #include "wm_cmdp_hostif.h"
25 #endif
26 #include "list.h"
27 #include "wm_mem.h"
28 #include "wm_regs.h"
29 #include "wm_params.h"
30 #include "wm_wl_task.h"
31 #include "utils.h"
32 #include "wm_efuse.h"
33 #include "wm_fwup.h"
34 #include "wm_flash.h"
35 #include "litepoint.h"
36 #include "wm_irq.h"
37 #include "wm_config.h"
38 #include "wm_http_client.h"
39 #include "wm_rmms.h"
40 #include "wm_cpu.h"
41 #include "wm_internal_flash.h"
42 #include "wm_cmdp.h"
43 #include "wm_bt_config.h"
44 #include "wm_bt_def.h"
45
46 const u8 SysCreatedDate[] = __DATE__;
47 const u8 SysCreatedTime[] = __TIME__;
48
49 #define TWO 2
50 #define THREE 3
51 #define FOUR 4
52 #define FIVE 5
53 #define SIX 6
54 #define SEVEN 7
55 #define EIGHT 8
56 #define NINE 9
57 #define TEN 10
58 #define TWENTY 20
59 #define THIRTY 30
60 #define FORTY 40
61 #define FIFTY 50
62 #define SIXTY 60
63 #define SEVENTY 70
64 #define EIGHTY 80
65 #define ONE_HUNDRED 100
66 #define TWO_HUNDRED 200
67 #define TWO_HUNDRED_AND_FIFTY_FIVE 255
68 #define TWO_HUNDRED_AND_FIFTY_SIX 256
69 #define FIVE_HUNDRED_AND_TWELVE 512
70 #define ONE_THOUSAND 1000
71 #define ONE_THOUSAND_AND_TWENTY_FOUR 1024
72 #define ONE_THOUSAND_FOUR_HUNRED_AND_FIFTY 1450
73 #define TWO_THOUSAND 2000
74 #define TWO_THOUSAND_AND_FIVE_HUNRED 2500
75 #define TEN_THOUSAND 10000
76 #define TEN_HUNDRED_AND_FIFTEEN_THOUSAND_AND_TWO_HUNDRED 115200
77 #define SIXTY_FIVE_THOUSAND_FIVE_HUNDRED_AND_THIRTY_FIVE 65535
78 #define ONE_MILLION 1000000
79 #define TEN_MILLION 10000000
80 #define FOUR_HUNRED_AND_EIGHTY_MILLION 480000000
81
82 #if TLS_CONFIG_HOSTIF
83 #include "wm_osal.h"
84 #include "wm_uart.h"
85 #include "wm_sockets.h"
86
87 #define RFR_REG_MAX_NUM (28)
88
89 struct tls_hostif g_hostif;
tls_get_hostif(void)90 struct tls_hostif *tls_get_hostif(void)
91 {
92 return &g_hostif;
93 }
94
95 u8 default_socket = 0;
96 #if TLS_CONFIG_CMD_USE_RAW_SOCKET
97 struct tls_uart_circ_buf *sockrecvmit[TLS_MAX_NETCONN_NUM];
98 #else
99 #define SOCK_RECV_TIMEOUT 100
100 struct tls_uart_circ_buf *sockrecvmit[MEMP_NUM_NETCONN];
101 fd_set fdatsockets;
102 static struct sockaddr sock_cmdp_addrs[MEMP_NUM_NETCONN];
103 static u32 sock_cmdp_timeouts[MEMP_NUM_NETCONN] = {0};
104 #endif
105
tls_hostif_get_recvmit(int socket_num)106 struct tls_uart_circ_buf *tls_hostif_get_recvmit(int socket_num)
107 {
108 #if TLS_CONFIG_CMD_USE_RAW_SOCKET
109 TLS_DBGPRT_INFO("socket_num=%d, precvmit=0x%x\n", socket_num, (u32)sockrecvmit[socket_num - 1]);
110 return sockrecvmit[socket_num - 1];
111 #else
112 return sockrecvmit[socket_num-LWIP_SOCKET_OFFSET];
113 #endif
114 }
115
tls_hostif_fill_cmdrsp_hdr(struct tls_hostif_cmdrsp * cmdrsp,u8 code,u8 err,u8 ext)116 void tls_hostif_fill_cmdrsp_hdr(struct tls_hostif_cmdrsp *cmdrsp,
117 u8 code, u8 err, u8 ext)
118 {
119 cmdrsp->cmd_hdr.code = code;
120 cmdrsp->cmd_hdr.err = err;
121 cmdrsp->cmd_hdr.ext = ext;
122 cmdrsp->cmd_hdr.msg_type = HOSTIF_MSG_TYPE_RSP;
123 }
124
tls_hostif_fill_event_hdr(struct tls_hostif_event * event,u8 code,u8 err,u8 ext)125 void tls_hostif_fill_event_hdr(struct tls_hostif_event *event,
126 u8 code, u8 err, u8 ext)
127 {
128 event->cmd_hdr.code = code;
129 event->cmd_hdr.err = err;
130 event->cmd_hdr.ext = ext;
131 event->cmd_hdr.msg_type = HOSTIF_MSG_TYPE_EVENT;
132 }
133
tls_hostif_fill_hdr(struct tls_hostif * hif,struct tls_hostif_hdr * hdr,u8 type,u16 length,u8 flag,u8 dest_addr,u8 chk)134 void tls_hostif_fill_hdr(struct tls_hostif *hif,
135 struct tls_hostif_hdr *hdr, u8 type, u16 length, u8 flag, u8 dest_addr, u8 chk)
136 {
137 hdr->sync = 0xAA;
138 hdr->type = type;
139 hdr->length = host_to_be16(length);
140 hdr->seq_num = hif->hspi_tx_seq++;
141 hdr->flag = flag;
142 hdr->dest_addr = dest_addr;
143 hdr->chk = chk;
144 }
145
tls_hostif_get_tx_msg(void)146 struct tls_hostif_tx_msg *tls_hostif_get_tx_msg(void)
147 {
148 struct tls_hostif_tx_msg *tx_msg = tls_mem_alloc(sizeof(struct tls_hostif_tx_msg));
149 return tx_msg;
150 }
151
tls_hostif_get_tx_event_msg(struct tls_hostif * hif)152 struct tls_hostif_tx_msg *tls_hostif_get_tx_event_msg(struct tls_hostif *hif)
153 {
154 return tls_hostif_get_tx_msg();
155 }
156
free_tx_msg_buffer(struct tls_hostif_tx_msg * tx_msg)157 void free_tx_msg_buffer(struct tls_hostif_tx_msg *tx_msg)
158 {
159 switch (tx_msg->type) {
160 case HOSTIF_TX_MSG_TYPE_EVENT:
161 case HOSTIF_TX_MSG_TYPE_CMDRSP:
162 tls_mem_free(tx_msg->u.msg_event.buf);
163 break;
164 #if TLS_CONFIG_SOCKET_RAW || TLS_CONFIG_SOCKET_STD
165 /* Tcp and Udp both use the below case. */
166 case HOSTIF_TX_MSG_TYPE_UDP:
167 case HOSTIF_TX_MSG_TYPE_TCP:
168 pbuf_free(tx_msg->u.msg_tcp.p);
169 break;
170 #endif /* TLS_CONFIG_SOCKET_RAW */
171 default:
172 break;
173 }
174 }
175
tls_hostif_atcmd_loopback(u8 hostif_type,char * buf,u32 buflen)176 int tls_hostif_atcmd_loopback(u8 hostif_type,
177 char *buf, u32 buflen)
178 {
179 struct tls_hostif_tx_msg *tx_msg;
180 struct tls_hostif *hif = tls_get_hostif();
181
182 if (buf == NULL || buflen == 0) {
183 return -1;
184 }
185 switch (hostif_type) {
186 case HOSTIF_MODE_UART0:
187 tx_msg = tls_hostif_get_tx_event_msg(hif);
188 if (tx_msg == NULL) {
189 return -1;
190 }
191 tx_msg->offset = 0;
192 tx_msg->u.msg_cmdrsp.buf = buf;
193 tx_msg->type = HOSTIF_TX_MSG_TYPE_CMDRSP;
194 tx_msg->u.msg_cmdrsp.buflen = buflen;
195
196 if (hif->uart_send_tx_msg_callback != NULL) {
197 hif->uart_send_tx_msg_callback(hostif_type, tx_msg, FALSE);
198 }
199 break;
200 case HOSTIF_MODE_UART1_LS:
201 tx_msg = tls_hostif_get_tx_event_msg(hif);
202 if (tx_msg == NULL) {
203 return -1;
204 }
205 tx_msg->offset = 0;
206 tx_msg->u.msg_cmdrsp.buf = buf;
207 tx_msg->type = HOSTIF_TX_MSG_TYPE_CMDRSP;
208 tx_msg->u.msg_cmdrsp.buflen = buflen;
209
210 if (hif->uart_send_tx_msg_callback != NULL) {
211 hif->uart_send_tx_msg_callback(hostif_type, tx_msg, FALSE);
212 }
213 break;
214 #if TLS_CONFIG_RMMS
215 case HOSTIF_MODE_RMMS_AT:
216 /* rmms do nothing */
217 break;
218 #endif
219 default:
220 break;
221 }
222 return 0;
223 }
224
225 extern struct tls_uart_port uart_port[FOUR];
tls_hostif_process_cmdrsp(u8 hostif_type,char * cmdrsp,u32 cmdrsp_size)226 int tls_hostif_process_cmdrsp(u8 hostif_type, char *cmdrsp, u32 cmdrsp_size)
227 {
228 struct tls_hostif_tx_msg *tx_msg;
229 struct tls_hostif *hif = tls_get_hostif();
230 u16 remain_len = 0;
231 extern int tls_uart_tx_remain_len(struct tls_uart_port *port);
232
233 if (cmdrsp == NULL || cmdrsp_size == 0) {
234 return -1;
235 }
236 switch (hostif_type) {
237 case HOSTIF_MODE_HSPI:
238 tx_msg = tls_hostif_get_tx_event_msg(hif);
239 if (tx_msg == NULL) {
240 return -1;
241 }
242 tx_msg->offset = 0;
243 tx_msg->u.msg_cmdrsp.buf = cmdrsp;
244 tx_msg->type = HOSTIF_TX_MSG_TYPE_CMDRSP;
245 tx_msg->u.msg_cmdrsp.buflen = cmdrsp_size;
246 if (hif->hspi_send_tx_msg_callback != NULL) {
247 hif->hspi_send_tx_msg_callback(hostif_type, tx_msg, FALSE);
248 }
249 break;
250 case HOSTIF_MODE_UART0:
251 case HOSTIF_MODE_UART1_LS:
252 case HOSTIF_MODE_UART1_HS:
253 tx_msg = tls_hostif_get_tx_event_msg(hif);
254 if (tx_msg == NULL) {
255 return -1;
256 }
257 tx_msg->offset = 0;
258 tx_msg->u.msg_cmdrsp.buf = cmdrsp;
259 tx_msg->type = HOSTIF_TX_MSG_TYPE_CMDRSP;
260 tx_msg->u.msg_cmdrsp.buflen = cmdrsp_size;
261
262 if (hif->uart_send_tx_msg_callback != NULL) {
263 while (tx_msg->u.msg_cmdrsp.buflen > remain_len) {
264 if (hostif_type == HOSTIF_MODE_UART0) {
265 remain_len = tls_uart_tx_remain_len(&uart_port[0]);
266 } else {
267 remain_len = tls_uart_tx_remain_len(&uart_port[1]);
268 }
269 tls_os_time_delay(TWO);
270 }
271 hif->uart_send_tx_msg_callback(hostif_type, tx_msg, FALSE);
272 }
273 break;
274 #if TLS_CONFIG_RMMS
275 case HOSTIF_MODE_RMMS_AT:
276 RMMS_SendHedAtRsp((struct rmms_msg *)cmdrsp);
277 break;
278 #endif
279 default:
280 break;
281 }
282 return 0;
283 }
284
tls_hostif_cmd_handler(u8 hostif_cmd_type,char * buf,u32 length)285 int tls_hostif_cmd_handler(u8 hostif_cmd_type, char *buf, u32 length)
286 {
287 #define CMD_RSP_BUF_SIZE 600 // 256
288 char *cmdrsp_buf;
289 u32 cmdrsp_size;
290 struct tls_atcmd_token_t *atcmd_tok = NULL;
291 int err;
292 int i, name_len;
293 struct tls_hostif_hdr *hdr = (struct tls_hostif_hdr *)buf;
294 u8 hostif_type;
295 struct tls_hostif *hif = tls_get_hostif();
296
297 cmdrsp_size = CMD_RSP_BUF_SIZE;
298 atcmd_tok = tls_mem_alloc(sizeof(struct tls_atcmd_token_t));
299 if (atcmd_tok == NULL) {
300 return -1;
301 }
302
303 switch (hostif_cmd_type) {
304 case HOSTIF_UART1_AT_CMD:
305 case HOSTIF_UART0_AT_CMD:
306 if (hostif_cmd_type == HOSTIF_UART1_AT_CMD) {
307 hostif_type = HOSTIF_MODE_UART1_LS;
308 } else {
309 hostif_type = HOSTIF_MODE_UART0;
310 }
311
312 /* at cmd loopback */
313 if (hif->uart_insdisp) {
314 u8 *atcmd_loopback_buf = tls_mem_alloc(length + 1);
315 if (!atcmd_loopback_buf) {
316 tls_mem_free(atcmd_tok);
317 return -1;
318 }
319 MEMCPY(atcmd_loopback_buf, buf, length);
320 atcmd_loopback_buf[length - 1] = '\r';
321 atcmd_loopback_buf[length] = '\n';
322 err = tls_hostif_atcmd_loopback(hostif_type, (char *)atcmd_loopback_buf,
323 length + 1);
324 if (err) {
325 tls_mem_free(atcmd_loopback_buf);
326 }
327 }
328
329 cmdrsp_buf = tls_mem_alloc(CMD_RSP_BUF_SIZE);
330 if (!cmdrsp_buf) {
331 tls_mem_free(atcmd_tok);
332 return -1;
333 }
334 memset(atcmd_tok, 0, sizeof(struct tls_atcmd_token_t));
335 if (hostif_cmd_type == HOSTIF_UART0_AT_CMD) {
336 atcmd_tok->cmd_mode = CMD_MODE_UART0_ATCMD;
337 } else {
338 atcmd_tok->cmd_mode = CMD_MODE_UART1_ATCMD;
339 }
340 #if TLS_CONFIG_RMMS
341 if (hostif_cmd_type == HOSTIF_RMMS_AT_CMD) {
342 err = tls_atcmd_parse(atcmd_tok, buf + SIX + THREE, length - THREE - SIX);
343 } else {
344 #endif
345 err = tls_atcmd_parse(atcmd_tok, buf + THREE, length - THREE);
346 }
347
348 if (err) {
349 TLS_DBGPRT_INFO("err parse cmd, code = %d\n", err);
350 cmdrsp_size = sprintf(cmdrsp_buf, "+ERR=%d\r\n", err);
351 } else {
352 name_len = strlen(atcmd_tok->name);
353 for (i = 0; i < name_len; i++) {
354 atcmd_tok->name[i] = toupper(atcmd_tok->name[i]);
355 }
356 cmdrsp_size = CMD_RSP_BUF_SIZE;
357 err = tls_hostif_atcmd_exec(atcmd_tok, cmdrsp_buf, &cmdrsp_size);
358 if (err != -CMD_ERR_SKT_RPT && err != -CMD_ERR_SKT_SND) {
359 cmdrsp_buf[cmdrsp_size] = '\r';
360 cmdrsp_buf[cmdrsp_size + 1] = '\n';
361 cmdrsp_buf[cmdrsp_size + TWO] = '\r';
362 cmdrsp_buf[cmdrsp_size + THREE] = '\n';
363 cmdrsp_buf[cmdrsp_size + FOUR] = '\0';
364 cmdrsp_size += FOUR;
365 }
366 }
367 break;
368 default:
369 TLS_DBGPRT_ERR("illegal command type\n");
370 tls_mem_free(atcmd_tok);
371 return -1;
372 }
373
374 err = tls_hostif_process_cmdrsp(hostif_type, cmdrsp_buf, cmdrsp_size);
375 if (err) {
376 tls_mem_free(cmdrsp_buf);
377 }
378
379 tls_mem_free(atcmd_tok);
380 return err;
381 }
382
tls_hostif_hdr_check(u8 * buf,u32 length)383 int tls_hostif_hdr_check(u8 *buf, u32 length)
384 {
385 if (!buf) {
386 return -1;
387 }
388 return 0;
389 }
390
tls_hostif_send_event_port_check(void)391 int tls_hostif_send_event_port_check(void)
392 {
393 struct tls_hostif *hif = tls_get_hostif();
394
395 if (hif->hostif_mode == HOSTIF_MODE_UART1_HS) {
396 return 0;
397 }
398 if (hif->hostif_mode == HOSTIF_MODE_HSPI) {
399 return 0;
400 }
401
402 return -1;
403 }
404
tls_hostif_send_event(char * buf,u32 buflen,u8 type)405 int tls_hostif_send_event(char *buf, u32 buflen, u8 type)
406 {
407 struct tls_hostif_tx_msg *tx_msg;
408 struct tls_hostif *hif = tls_get_hostif();
409 u8 ext;
410 struct tls_hostif_event *event = (struct tls_hostif_event *)buf;
411
412 tx_msg = tls_hostif_get_tx_event_msg(hif);
413 if (!tx_msg) {
414 return -1;
415 }
416
417 tls_hostif_fill_hdr(hif, &event->hdr, PACKET_TYPE_RI_CMD, buflen - EIGHT, 0, 0, 0);
418 if (buflen == (TEN + TWO)) {
419 ext = 0;
420 } else {
421 ext = 1;
422 }
423 tls_hostif_fill_event_hdr(event, type, 0, ext);
424
425 tx_msg->u.msg_event.buf = buf;
426 tx_msg->u.msg_event.buflen = buflen;
427 tx_msg->type = HOSTIF_TX_MSG_TYPE_EVENT;
428
429 if (hif->hostif_mode == HOSTIF_MODE_HSPI) {
430 if (hif->hspi_send_tx_msg_callback != NULL) {
431 hif->hspi_send_tx_msg_callback(HOSTIF_MODE_HSPI, tx_msg, TRUE);
432 }
433 } else if (hif->hostif_mode == HOSTIF_MODE_UART1_HS) {
434 if (hif->uart_send_tx_msg_callback != NULL) {
435 hif->uart_send_tx_msg_callback(HOSTIF_MODE_UART1_HS, tx_msg, TRUE);
436 }
437 } else {
438 return -1;
439 }
440 return 0;
441 }
442
tls_hostif_send_event_init_cmplt(void)443 int tls_hostif_send_event_init_cmplt(void)
444 {
445 char *buf;
446 u16 buflen;
447 int err;
448
449 err = tls_hostif_send_event_port_check();
450 if (err) {
451 return 0;
452 }
453 buflen = sizeof(struct tls_hostif_hdr) + sizeof(struct tls_hostif_cmd_hdr);
454 buf = (char *)tls_mem_alloc(buflen);
455 if (!buf) {
456 return 0;
457 }
458 err = tls_hostif_send_event(buf, buflen, HOSTIF_EVENT_INIT_END);
459 if (err) {
460 tls_mem_free(buf);
461 }
462 return 0;
463 }
464
tls_hostif_send_event_linkup(void)465 static int tls_hostif_send_event_linkup(void)
466 {
467 char *buf;
468 u16 buflen;
469 int err;
470
471 err = tls_hostif_send_event_port_check();
472 if (err) {
473 return 0;
474 }
475 buflen = sizeof(struct tls_hostif_hdr) + sizeof(struct tls_hostif_cmd_hdr);
476 buf = (char *)tls_mem_alloc(buflen);
477 if (!buf) {
478 return 0;
479 }
480 err = tls_hostif_send_event(buf, buflen, HOSTIF_EVENT_LINKUP);
481 if (err) {
482 tls_mem_free(buf);
483 }
484 return 0;
485 }
486
tls_hostif_send_event_wjoin_success(void)487 int tls_hostif_send_event_wjoin_success(void)
488 {
489 char *buf;
490 u16 buflen;
491 int err;
492 char *p;
493 struct tls_curr_bss_t bss;
494
495 err = tls_hostif_send_event_port_check();
496 if (err) {
497 return 0;
498 }
499 tls_wifi_get_current_bss(&bss);
500
501 buflen = sizeof(struct tls_hostif_hdr) + sizeof(struct tls_hostif_cmd_hdr)
502 + TEN + TWO + bss.ssid_len;
503 buf = (char *)tls_mem_alloc(buflen);
504 if (!buf) {
505 return 0;
506 }
507 p = &buf[(TEN + TWO)];
508 *p++ = 1;
509
510 MEMCPY(p, bss.bssid, ETH_ALEN);
511 p += ETH_ALEN;
512 *p++ = (char)bss.type;
513 *p++ = (char)bss.channel;
514 *p++ = (char)bss.encryptype;
515 *p++ = (char)bss.ssid_len;
516 MEMCPY(p, bss.ssid, bss.ssid_len);
517 p += bss.ssid_len;
518 *p = bss.rssi;
519 err = tls_hostif_send_event(buf, buflen, HOSTIF_EVENT_JOIN_RES);
520 if (err) {
521 tls_mem_free(buf);
522 }
523 return 0;
524 }
525
tls_hostif_send_event_wjoin_failed(void)526 int tls_hostif_send_event_wjoin_failed(void)
527 {
528 char *buf;
529 u16 buflen;
530 int err;
531
532 err = tls_hostif_send_event_port_check();
533 if (err) {
534 return 0;
535 }
536 buflen = sizeof(struct tls_hostif_hdr) +
537 sizeof(struct tls_hostif_cmd_hdr) + 1;
538 buf = (char *)tls_mem_alloc(buflen);
539 if (!buf) {
540 return 0;
541 }
542 buf[TEN + TWO] = 0;
543 err = tls_hostif_send_event(buf, buflen,
544 HOSTIF_EVENT_JOIN_RES);
545 if (err) {
546 tls_mem_free(buf);
547 }
548 return 0;
549 }
550
tls_hostif_send_event_linkdown(void)551 int tls_hostif_send_event_linkdown(void)
552 {
553 char *buf;
554 u16 buflen;
555 int err;
556
557 err = tls_hostif_send_event_port_check();
558 if (err) {
559 return 0;
560 }
561 buflen = sizeof(struct tls_hostif_hdr) +
562 sizeof(struct tls_hostif_cmd_hdr);
563 buf = (char *)tls_mem_alloc(buflen);
564 if (!buf) {
565 return 0;
566 }
567 err = tls_hostif_send_event(buf, buflen,
568 HOSTIF_EVENT_LINKDOWN);
569 if (err) {
570 tls_mem_free(buf);
571 }
572 return 0;
573 }
574
tls_hostif_send_event_sta_join(void)575 int tls_hostif_send_event_sta_join(void)
576 {
577 char *buf;
578 u16 buflen;
579 int err;
580
581 err = tls_hostif_send_event_port_check();
582 if (err) {
583 return 0;
584 }
585 buflen = sizeof(struct tls_hostif_hdr) + sizeof(struct tls_hostif_cmd_hdr);
586 buf = (char *)tls_mem_alloc(buflen);
587 if (!buf) {
588 return 0;
589 }
590 err = tls_hostif_send_event(buf, buflen, HOSTIF_EVENT_STA_JOIN);
591 if (err) {
592 tls_mem_free(buf);
593 }
594 return 0;
595 }
596
tls_hostif_send_event_sta_leave(void)597 int tls_hostif_send_event_sta_leave(void)
598 {
599 char *buf;
600 u16 buflen;
601 int err;
602
603 err = tls_hostif_send_event_port_check();
604 if (err) {
605 return 0;
606 }
607 buflen = sizeof(struct tls_hostif_hdr) + sizeof(struct tls_hostif_cmd_hdr);
608 buf = (char *)tls_mem_alloc(buflen);
609 if (!buf) {
610 return 0;
611 }
612 err = tls_hostif_send_event(buf, buflen, HOSTIF_EVENT_STA_LEAVE);
613 if (err) {
614 tls_mem_free(buf);
615 }
616 return 0;
617 }
618
tls_hostif_send_event_crc_err(void)619 int tls_hostif_send_event_crc_err(void)
620 {
621 char *buf;
622 u16 buflen;
623 int err;
624
625 err = tls_hostif_send_event_port_check();
626 if (err) {
627 return 0;
628 }
629 buflen = sizeof(struct tls_hostif_hdr) + sizeof(struct tls_hostif_cmd_hdr);
630 buf = (char *)tls_mem_alloc(buflen);
631 if (!buf) {
632 return 0;
633 }
634 err = tls_hostif_send_event(buf, buflen, HOSTIF_EVENT_CRC_ERR);
635 if (err) {
636 tls_mem_free(buf);
637 }
638 return 0;
639 }
640
tls_hostif_send_event_tx_fail(void)641 int tls_hostif_send_event_tx_fail(void)
642 {
643 char *buf;
644 u16 buflen;
645 int err;
646
647 err = tls_hostif_send_event_port_check();
648 if (err) {
649 return 0;
650 }
651 buflen = sizeof(struct tls_hostif_hdr) + sizeof(struct tls_hostif_cmd_hdr);
652 buf = (char *)tls_mem_alloc(buflen);
653 if (!buf) {
654 return 0;
655 }
656 err = tls_hostif_send_event(buf, buflen, HOSTIF_EVENT_TX_ERR);
657 if (err) {
658 tls_mem_free(buf);
659 }
660 return 0;
661 }
662
tls_hostif_send_event_tcp_conn(u8 socket,u8 res)663 int tls_hostif_send_event_tcp_conn(u8 socket, u8 res)
664 {
665 char *buf;
666 u16 buflen;
667 int err;
668
669 err = tls_hostif_send_event_port_check();
670 if (err) {
671 return 0;
672 }
673 buflen = sizeof(struct tls_hostif_hdr) + sizeof(struct tls_hostif_cmd_hdr) + TWO;
674 buf = (char *)tls_mem_alloc(buflen);
675 if (!buf) {
676 return 0;
677 }
678 buf[TEN + TWO] = socket;
679 buf[TEN + THREE] = res;
680
681 err = tls_hostif_send_event(buf, buflen, HOSTIF_EVENT_TCP_CONN);
682 if (err) {
683 tls_mem_free(buf);
684 }
685 return 0;
686 }
687
tls_hostif_send_event_tcp_join(u8 socket)688 int tls_hostif_send_event_tcp_join(u8 socket)
689 {
690 char *buf;
691 u16 buflen;
692 int err;
693
694 err = tls_hostif_send_event_port_check();
695 if (err) {
696 return 0;
697 }
698 buflen = sizeof(struct tls_hostif_hdr) + sizeof(struct tls_hostif_cmd_hdr) + 1;
699 buf = (char *)tls_mem_alloc(buflen);
700 if (!buf) {
701 return 0;
702 }
703 buf[TEN + TWO] = socket;
704
705 err = tls_hostif_send_event(buf, buflen, HOSTIF_EVENT_TCP_JOIN);
706 if (err) {
707 tls_mem_free(buf);
708 }
709 return 0;
710 }
711
tls_hostif_send_event_tcp_dis(u8 socket)712 int tls_hostif_send_event_tcp_dis(u8 socket)
713 {
714 char *buf;
715 u16 buflen;
716 int err;
717
718 err = tls_hostif_send_event_port_check();
719 if (err) {
720 return 0;
721 }
722 buflen = sizeof(struct tls_hostif_hdr) + sizeof(struct tls_hostif_cmd_hdr) + 1;
723 buf = (char *)tls_mem_alloc(buflen);
724 if (!buf) {
725 return 0;
726 }
727 buf[TEN + TWO] = socket;
728
729 err = tls_hostif_send_event(buf, buflen, HOSTIF_EVENT_TCP_DIS);
730 if (err) {
731 tls_mem_free(buf);
732 }
733 return 0;
734 }
735
tls_hostif_send_event_scan_cmplt(struct tls_scan_bss_t * scan_res,enum tls_cmd_mode cmd_mode)736 int tls_hostif_send_event_scan_cmplt(struct tls_scan_bss_t *scan_res,
737 enum tls_cmd_mode cmd_mode)
738 {
739 char *buf = NULL;
740 u32 buflen, remain_len;
741 int err = 0;
742 int i, j;
743 struct tls_bss_info_t *bss_info;
744 char *p;
745 u8 hostif_type;
746 u32 strlen;
747
748 if (scan_res == NULL) {
749 return -1;
750 }
751
752 switch (cmd_mode) {
753 case CMD_MODE_UART0_ATCMD:
754 case CMD_MODE_UART1_ATCMD:
755 buf = (char *)tls_mem_alloc(TWO_THOUSAND_AND_FIVE_HUNRED);
756 if (!buf) {
757 return 0;
758 }
759 p = buf;
760 buflen = sprintf(p, "+OK=");
761 p += buflen;
762 bss_info = scan_res->bss;
763 for (i = 0; i < scan_res->count; i++) {
764 strlen = sprintf(p, "%02X%02X%02X%02X%02X%02X, %u, %u, %u,\"",
765 bss_info->bssid[0], bss_info->bssid[1], bss_info->bssid[TWO],
766 bss_info->bssid[THREE], bss_info->bssid[FOUR], bss_info->bssid[FIVE],
767 bss_info->mode, bss_info->channel, bss_info->privacy);
768 buflen += strlen;
769 p = buf + buflen;
770 for (j = 0; j < bss_info->ssid_len; j++) {
771 strlen = sprintf(p, "%c", bss_info->ssid[j]);
772 buflen += strlen;
773 p = buf + buflen;
774 }
775 strlen = sprintf(p, "\",%d\r\n", (signed char)bss_info->rssi);
776 buflen += strlen;
777 p = buf + buflen;
778 bss_info++;
779 }
780 if (cmd_mode == CMD_MODE_UART0_ATCMD) {
781 hostif_type = HOSTIF_MODE_UART0;
782 } else {
783 hostif_type = HOSTIF_MODE_UART1_LS;
784 }
785 err = tls_hostif_process_cmdrsp(hostif_type, buf, buflen);
786 break;
787 default:
788 break;
789 }
790 if (err && buf) {
791 tls_mem_free(buf);
792 }
793
794 return 0;
795 }
796
tls_hostif_tx_timeout(void * ptmr,void * parg)797 void tls_hostif_tx_timeout(void *ptmr, void *parg)
798 {
799 struct tls_hostif *hif = (struct tls_hostif *)parg;
800
801 if (hif->hostif_mode == HOSTIF_MODE_HSPI) {
802 if (hif->uart_send_tx_msg_callback != NULL) {
803 hif->uart_send_tx_msg_callback(HOSTIF_MODE_HSPI, NULL, FALSE);
804 }
805 } else if (hif->hostif_mode == HOSTIF_MODE_UART0) {
806 if (hif->uart_send_tx_msg_callback != NULL) {
807 hif->uart_send_tx_msg_callback(HOSTIF_MODE_UART0, NULL, FALSE);
808 }
809 } else if ((hif->hostif_mode == HOSTIF_MODE_UART1_LS) ||
810 (hif->hostif_mode == HOSTIF_MODE_UART1_HS)) {
811 if (hif->uart_send_tx_msg_callback != NULL) {
812 hif->uart_send_tx_msg_callback(hif->hostif_mode, NULL, FALSE);
813 }
814 } else {
815 ;
816 }
817 }
818
hostif_wscan_cmplt(void)819 void hostif_wscan_cmplt(void)
820 {
821 char *buf;
822 u32 buflen;
823 int err;
824 enum tls_cmd_mode cmd_mode;
825 struct tls_hostif *hif = tls_get_hostif();
826
827 if (hif->last_scan) {
828 cmd_mode = hif->last_scan_cmd_mode;
829 hif->last_scan = 0;
830
831 buflen = TWO_THOUSAND;
832 buf = tls_mem_alloc(buflen);
833 if (!buf) {
834 return;
835 }
836 err = tls_wifi_get_scan_rslt((u8 *)buf, buflen);
837 if (err) {
838 tls_mem_free(buf);
839 return;
840 }
841 switch (cmd_mode) {
842 case CMD_MODE_HSPI_RICMD:
843 case CMD_MODE_UART1_RICMD:
844 tls_hostif_send_event_scan_cmplt((struct tls_scan_bss_t *)buf, cmd_mode);
845 tls_mem_free(buf);
846 break;
847 case CMD_MODE_UART0_ATCMD:
848 case CMD_MODE_UART1_ATCMD:
849 #if TLS_CONFIG_RMMS
850 case CMD_MODE_RMMS_ATCMD:
851 #endif
852 tls_hostif_send_event_scan_cmplt((struct tls_scan_bss_t *)buf, cmd_mode);
853 tls_mem_free(buf);
854 hif->uart_atcmd_bits |= (1 << UART_ATCMD_BIT_WSCAN);
855 tls_os_sem_release(hif->uart_atcmd_sem);
856 break;
857 default:
858 tls_mem_free(buf);
859 }
860 }
861 }
862 #if TLS_CONFIG_UART
863
864 #define HOSTIF_TASK_STK_SIZE 800
865 #if TLS_OS_FREERTOS
866 u32 hostif_stk[HOSTIF_TASK_STK_SIZE];
867 struct task_parameter wl_task_param_hostif = {
868 .mbox_size = THIRTY + TWO,
869 .name = "uart spi task",
870 .stk_size = HOSTIF_TASK_STK_SIZE,
871 .stk_start = (u8 *)hostif_stk,
872 .task_id = TLS_HOSTIF_TASK_PRIO,
873 .mbox_id = TLS_MBOX_ID_HOSTIF_TASK,
874 .timeo_id = TLS_TIMEO_ID_HOSTIF_TASK,
875 };
876 #elif TLS_OS_LITEOS
877 struct task_parameter wl_task_param_hostif = {
878 .mbox_size = THIRTY + TWO,
879 .name = "uart spi task",
880 .stk_size = HOSTIF_TASK_STK_SIZE,
881 .stk_start = (u8 *)NULL,
882 .task_id = TLS_HOSTIF_TASK_PRIO,
883 .mbox_id = TLS_MBOX_ID_HOSTIF_TASK,
884 .timeo_id = TLS_TIMEO_ID_HOSTIF_TASK,
885 };
886 #endif
887
tls_hostif_task_init(void)888 int tls_hostif_task_init(void)
889 {
890 return tls_wl_task_run(&wl_task_param_hostif);
891 }
892 #endif
893
tls_hostif_init(void)894 int tls_hostif_init(void)
895 {
896 struct tls_hostif *hif;
897 int err;
898
899 u16 transparent_trigger_length;
900 u8 mode;
901
902 hif= &g_hostif;
903 memset(hif, 0, sizeof(struct tls_hostif));
904 tls_param_get(TLS_PARAM_ID_AUTO_TRIGGER_LENGTH, &transparent_trigger_length, FALSE);
905 hif->uart_atlt = transparent_trigger_length;
906
907 tls_param_get(TLS_PARAM_ID_USRINTF, (void *)&mode, TRUE);
908 if ((mode == TLS_PARAM_USR_INTF_HSPI) || (mode == TLS_PARAM_USR_INTF_HSDIO)) {
909 hif->hostif_mode = HOSTIF_MODE_HSPI;
910 } else if (mode == TLS_PARAM_USR_INTF_HUART) {
911 hif->hostif_mode = HOSTIF_MODE_UART1_HS;
912 } else if (mode == TLS_PARAM_USR_INTF_LUART) {
913 hif->hostif_mode = HOSTIF_MODE_UART1_LS;
914 } else {
915 hif->hostif_mode = HOSTIF_MODE_HSPI;
916 }
917 err = tls_os_sem_create(&hif->uart_atcmd_sem, 0);
918 if (err) {
919 return err;
920 }
921 err = tls_os_timer_create(&hif->tx_timer,
922 tls_hostif_tx_timeout,
923 hif,
924 SIXTY * HZ, /* 60 seconds */
925 TRUE,
926 NULL);
927 if (!err) {
928 tls_os_timer_start(hif->tx_timer);
929 }
930 #if TLS_CONFIG_UART
931 err = tls_hostif_task_init();
932 #endif
933
934 return err;
935 }
936
937 #if TLS_CONFIG_SOCKET_RAW || TLS_CONFIG_SOCKET_STD
tls_hostif_set_recvmit(int socket_num,struct tls_uart_circ_buf * precvmit)938 static void tls_hostif_set_recvmit(int socket_num, struct tls_uart_circ_buf *precvmit)
939 {
940 #if TLS_CONFIG_CMD_USE_RAW_SOCKET
941 TLS_DBGPRT_INFO("socket_num=%d, precvmit=0x%x\n", socket_num, (u32)precvmit);
942 sockrecvmit[socket_num - 1] = precvmit;
943 #else
944 sockrecvmit[socket_num - LWIP_SOCKET_OFFSET] = precvmit;
945 #endif
946 }
947
alloc_recvmit(int socket_num)948 static void alloc_recvmit(int socket_num)
949 {
950 char *buf;
951 struct tls_uart_circ_buf *precvmit = tls_hostif_get_recvmit(socket_num);
952 if (precvmit != NULL) {
953 return;
954 }
955 precvmit = tls_mem_alloc(sizeof(struct tls_uart_circ_buf));
956 if (precvmit == NULL) {
957 return;
958 }
959 memset(precvmit, 0, sizeof(struct tls_uart_circ_buf));
960 buf = tls_mem_alloc(TLS_SOCKET_RECV_BUF_SIZE);
961 if (buf == NULL) {
962 tls_mem_free(precvmit);
963 precvmit = NULL;
964 tls_hostif_set_recvmit(socket_num, precvmit);
965 return;
966 }
967 precvmit->buf = (u8 *)buf;
968 tls_hostif_set_recvmit(socket_num, precvmit);
969 }
970
free_recvmit(int socket_num)971 static void free_recvmit(int socket_num)
972 {
973 struct tls_uart_circ_buf *precvmit = tls_hostif_get_recvmit(socket_num);
974 if (precvmit == NULL) {
975 return;
976 }
977 if (precvmit->buf != NULL) {
978 tls_mem_free((void *)precvmit->buf);
979 }
980 tls_mem_free(precvmit);
981 precvmit = NULL;
982 tls_hostif_set_recvmit(socket_num, precvmit);
983 }
984
tls_hostif_recv_data(struct tls_hostif_tx_msg * tx_msg)985 int tls_hostif_recv_data(struct tls_hostif_tx_msg *tx_msg)
986 {
987 struct tls_hostif *hif = &g_hostif;
988
989 if (hif->hostif_mode == HOSTIF_MODE_UART0) {
990 if (hif->uart_send_tx_msg_callback != NULL) {
991 hif->uart_send_tx_msg_callback(HOSTIF_MODE_UART0, tx_msg, FALSE);
992 }
993 } else if ((hif->hostif_mode == HOSTIF_MODE_UART1_LS) ||
994 (hif->hostif_mode == HOSTIF_MODE_UART1_HS)) {
995 if (hif->uart_send_tx_msg_callback != NULL) {
996 hif->uart_send_tx_msg_callback(hif->hostif_mode, tx_msg, FALSE);
997 }
998 } else {
999 /* HSPI */
1000 if (hif->hspi_send_tx_msg_callback != NULL) {
1001 hif->hspi_send_tx_msg_callback(HOSTIF_MODE_HSPI, tx_msg, FALSE);
1002 }
1003 }
1004
1005 return 0;
1006 }
1007
hostif_default_socket_setup(void * ptmr,void * parg)1008 static void hostif_default_socket_setup(void *ptmr, void *parg)
1009 {
1010 tls_hostif_close_default_socket();
1011 default_socket = 0;
1012 tls_hostif_create_default_socket();
1013 }
1014
hostif_socket_rpt(u8 skt_num,u16 datalen,u8 * ipaddr,u16 port,s8 err)1015 static s8 hostif_socket_rpt(u8 skt_num, u16 datalen, u8 *ipaddr, u16 port, s8 err)
1016 {
1017 #undef CMDIND_BUF_SIZE
1018 #define CMDIND_BUF_SIZE 600 // 128
1019 char *cmdind_buf = NULL;
1020 u32 cmdind_size = 0;
1021 struct tls_hostif *hif = tls_get_hostif();
1022
1023 if (hif->rptmode) {
1024 cmdind_buf = tls_mem_alloc(CMDIND_BUF_SIZE);
1025 if (cmdind_buf) {
1026 cmdind_size = sprintf(cmdind_buf, "+SKTRPT=%d,%d,%d.%d.%d.%d,%d\r\n\r\n",
1027 skt_num, datalen, ipaddr[0], ipaddr[1], ipaddr[TWO],
1028 ipaddr[THREE], port);
1029 if (tls_hostif_process_cmdrsp(hif->hostif_mode, cmdind_buf, cmdind_size)) {
1030 tls_mem_free(cmdind_buf);
1031 }
1032 }
1033 }
1034 return ERR_OK;
1035 }
1036
hostif_socket_recv(u8 skt_num,struct pbuf * p,s8 err)1037 static s8 hostif_socket_recv(u8 skt_num, struct pbuf *p, s8 err)
1038 {
1039 struct tls_hostif_tx_msg *tx_msg;
1040 u8 state;
1041 struct tls_skt_status_ext_t skt_ext;
1042
1043 tx_msg = tls_hostif_get_tx_msg();
1044 err = tls_cmd_get_socket_state(skt_num, &state, &skt_ext);
1045 if (tx_msg == NULL || err || NETCONN_STATE_NONE == state) {
1046 pbuf_free(p);
1047 return ERR_OK;
1048 } else {
1049 tx_msg->type = HOSTIF_TX_MSG_TYPE_TCP;
1050 tx_msg->u.msg_tcp.p = p;
1051 tx_msg->u.msg_tcp.sock = skt_num;
1052 if (skt_ext.protocol == SOCKET_PROTO_UDP) {
1053 tx_msg->type = HOSTIF_TX_MSG_TYPE_UDP;
1054 tx_msg->u.msg_udp.p = p;
1055 tx_msg->u.msg_udp.sock = skt_num;
1056 tx_msg->u.msg_udp.port = skt_ext.remote_port;
1057 tx_msg->u.msg_udp.localport = skt_ext.local_port;
1058 MEMCPY(ip_2_ip4(&tx_msg->u.msg_udp.ip_addr), &skt_ext.host_ipaddr[0], FOUR);
1059 }
1060 tx_msg->offset = 0;
1061 tx_msg->time = tls_os_get_time();
1062 }
1063
1064 tls_hostif_recv_data(tx_msg);
1065 return ERR_OK;
1066 }
1067
1068 #if TLS_CONFIG_CMD_USE_RAW_SOCKET
hostif_default_socket_state_changed(u8 skt_num,u8 event,u8 state)1069 static void hostif_default_socket_state_changed(u8 skt_num, u8 event, u8 state)
1070 {
1071 TLS_DBGPRT_INFO("event=%d, state=%d\n", event, state);
1072 switch (event) {
1073 case NET_EVENT_TCP_JOINED:
1074 alloc_recvmit(skt_num);
1075 break;
1076 case NET_EVENT_TCP_DISCONNECT:
1077 free_recvmit(skt_num);
1078 break;
1079 case NET_EVENT_TCP_CONNECTED:
1080 alloc_recvmit(skt_num);
1081 break;
1082 case NET_EVENT_TCP_CONNECT_FAILED:
1083 free_recvmit(skt_num);
1084 break;
1085 case NET_EVENT_UDP_START:
1086 alloc_recvmit(skt_num);
1087 default:
1088 break;
1089 }
1090 }
1091
1092 struct tls_socket_desc skt_desc_def;
1093 #endif
1094
tls_hostif_create_default_socket(void)1095 int tls_hostif_create_default_socket(void)
1096 {
1097 return;
1098 }
1099
tls_hostif_close_default_socket(void)1100 int tls_hostif_close_default_socket(void)
1101 {
1102 return;
1103 }
1104
1105 #if TLS_CONFIG_CMD_USE_RAW_SOCKET
hostif_socket_state_changed_ATCMD(u8 skt_num,u8 event,u8 state)1106 static void hostif_socket_state_changed_ATCMD(u8 skt_num, u8 event, u8 state)
1107 {
1108 struct tls_hostif *hif = tls_get_hostif();
1109 TLS_DBGPRT_INFO("event=%d, state=%d\n", event, state);
1110 switch (event) {
1111 case NET_EVENT_TCP_JOINED:
1112 alloc_recvmit(skt_num);
1113 tls_hostif_send_event_tcp_join(skt_num);
1114 break;
1115 case NET_EVENT_TCP_DISCONNECT:
1116 free_recvmit(skt_num);
1117 tls_hostif_send_event_tcp_dis(skt_num);
1118 break;
1119 case NET_EVENT_TCP_CONNECTED:
1120 alloc_recvmit(skt_num);
1121 hif->uart_atcmd_bits |= (1 << UART_ATCMD_BIT_SKCT);
1122 tls_os_sem_release(hif->uart_atcmd_sem);
1123 break;
1124 case NET_EVENT_TCP_CONNECT_FAILED:
1125 free_recvmit(skt_num);
1126 hif->uart_atcmd_bits |= (1 << UART_ATCMD_BIT_SKCT);
1127 tls_os_sem_release(hif->uart_atcmd_sem);
1128 break;
1129 case NET_EVENT_UDP_START:
1130 alloc_recvmit(skt_num);
1131 hif->uart_atcmd_bits |= (1 << UART_ATCMD_BIT_SKCT);
1132 tls_os_sem_release(hif->uart_atcmd_sem);
1133 break;
1134 case NET_EVENT_UDP_START_FAILED:
1135 hif->uart_atcmd_bits |= (1 << UART_ATCMD_BIT_SKCT);
1136 tls_os_sem_release(hif->uart_atcmd_sem);
1137 break;
1138 default:
1139 break;
1140 }
1141 }
1142
hostif_socket_state_changed_RICMD(u8 skt_num,u8 event,u8 state)1143 static void hostif_socket_state_changed_RICMD(u8 skt_num, u8 event, u8 state)
1144 {
1145 TLS_DBGPRT_INFO("event=%d, state=%d\n", event, state);
1146 switch (event) {
1147 case NET_EVENT_TCP_JOINED:
1148 tls_hostif_send_event_tcp_join(skt_num);
1149 break;
1150 case NET_EVENT_TCP_DISCONNECT:
1151 tls_hostif_send_event_tcp_dis(skt_num);
1152 break;
1153 case NET_EVENT_TCP_CONNECTED:
1154 tls_hostif_send_event_tcp_conn(skt_num, 1);
1155 break;
1156 case NET_EVENT_TCP_CONNECT_FAILED:
1157 tls_hostif_send_event_tcp_conn(skt_num, 0);
1158 break;
1159 default:
1160 break;
1161 }
1162 }
1163
1164 struct tls_socket_desc skt_desc;
1165 #endif
1166
tls_cmd_close_socket(u8 skt_num)1167 int tls_cmd_close_socket(u8 skt_num)
1168 {
1169 int err;
1170 #if TLS_CONFIG_CMD_USE_RAW_SOCKET
1171 err = tls_socket_close(skt_num);
1172 #else
1173 err = closesocket(skt_num);
1174 if (!err) {
1175 FD_CLR(skt_num, &fdatsockets);
1176 }
1177 #endif
1178 if (!err) {
1179 free_recvmit(skt_num);
1180 }
1181
1182 return err;
1183 }
1184
tls_cmd_get_socket_status(u8 socket,u8 * buf,u32 bufsize)1185 int tls_cmd_get_socket_status(u8 socket, u8 *buf, u32 bufsize)
1186 {
1187 int err;
1188 #if !TLS_CONFIG_CMD_USE_RAW_SOCKET
1189 struct tls_skt_status_t *skt_status;
1190 struct tls_skt_status_ext_t *skts_ext;
1191 struct sockaddr_in sock_addr;
1192 struct sockaddr_in *peer_addr = (struct sockaddr_in *)&sock_cmdp_addrs[socket - LWIP_SOCKET_OFFSET];
1193 int optval;
1194 int optlen = sizeof(int);
1195 int remain_len;
1196 int s;
1197 socklen_t namelen = sizeof(struct sockaddr_in);
1198
1199 skt_status = (struct tls_skt_status_t *)buf;
1200 if (bufsize < sizeof(struct tls_skt_status_t)) {
1201 TLS_DBGPRT_ERR("bufsize = %d\n", bufsize);
1202 return ERR_VAL;
1203 }
1204 memset(buf, 0, bufsize);
1205
1206 remain_len = bufsize - sizeof(u32);
1207 skts_ext = (struct tls_skt_status_ext_t *)(buf + sizeof(u32));
1208 if (!FD_ISSET(socket, &fdatsockets) || getsockname(socket, (struct sockaddr *)&sock_addr, &namelen)) {
1209 TLS_DBGPRT_ERR("skt num = %d\n", socket);
1210 skt_status->socket_cnt = 1;
1211 skts_ext->protocol = SOCKET_PROTO_TCP;
1212 skts_ext->status = NETCONN_STATE_NONE;
1213 skts_ext->socket = socket;
1214 skts_ext->host_ipaddr[0] = 0;
1215 skts_ext->host_ipaddr[1] = 0;
1216 skts_ext->host_ipaddr[TWO] = 0;
1217 skts_ext->host_ipaddr[THREE] = 0;
1218 return ERR_OK;
1219 }
1220 getsockopt(socket, SOL_SOCKET, SO_TYPE, &optval, (socklen_t *)&optlen);
1221 skts_ext->protocol = optval == SOCK_STREAM ? SOCKET_PROTO_TCP : SOCKET_PROTO_UDP;
1222 if (optval == SOCK_STREAM) { /* tcp */
1223 err = getsockopt(socket, SOL_SOCKET, SO_ACCEPTCONN, &optval, (socklen_t *)&optlen);
1224 if (err) {
1225 optval = 0;
1226 }
1227 }
1228
1229 if (optval != 1) { // is udp or tcp client
1230 skt_status->socket_cnt = 1;
1231 skts_ext->socket = socket;
1232 skts_ext->status = NETCONN_STATE_CONNECTED;
1233 if (SOCK_DGRAM == optval) {
1234 err = 0;
1235 } else {
1236 namelen = sizeof(struct sockaddr_in);
1237 err = getpeername(socket, (struct sockaddr *)peer_addr, &namelen);
1238 }
1239
1240 if (err) {
1241 memset(skts_ext->host_ipaddr, 0, FOUR);
1242 skts_ext->remote_port = 0;
1243 skts_ext->status = NETCONN_STATE_NONE;
1244 } else {
1245 MEMCPY(skts_ext->host_ipaddr, (u8 *)ip_2_ip4(&peer_addr->sin_addr), FOUR);
1246 skts_ext->remote_port = htons(peer_addr->sin_port);
1247 }
1248 skts_ext->local_port = htons(sock_addr.sin_port);
1249 } else {
1250 struct tls_ethif *ethif;
1251 u16 listen_port;
1252 ethif = tls_netif_get_ethif();
1253 skt_status->socket_cnt = 1;
1254 skts_ext->socket = socket;
1255 skts_ext->status = NETCONN_STATE_WAITING; /* listen */
1256 MEMCPY(skts_ext->host_ipaddr, (char *)(ip_2_ip4(ðif->ip_addr)), FOUR);
1257 skts_ext->remote_port = 0;
1258 skts_ext->local_port = htons(sock_addr.sin_port);
1259 listen_port = sock_addr.sin_port;
1260 remain_len -= sizeof(struct tls_skt_status_ext_t);
1261
1262 for (s = LWIP_SOCKET_OFFSET; s < (MEMP_NUM_NETCONN + LWIP_SOCKET_OFFSET); s++) {
1263 if (remain_len < sizeof(struct tls_skt_status_ext_t)) {
1264 break;
1265 }
1266 if (s == socket) {
1267 continue;
1268 }
1269 namelen = sizeof(struct sockaddr_in);
1270 err = getsockname(s, (struct sockaddr *)&sock_addr, &namelen);
1271 if (err) {
1272 continue;
1273 }
1274 getsockopt(s, SOL_SOCKET, SO_TYPE, &optval, (socklen_t *)&optlen);
1275 if (optval != SOCK_STREAM) {
1276 continue;
1277 }
1278 err = getsockopt(s, SOL_SOCKET, SO_ACCEPTCONN, &optval, (socklen_t *)&optlen);
1279 if (err || optval) {
1280 continue;
1281 }
1282 if (listen_port != sock_addr.sin_port) {
1283 continue;
1284 }
1285 skts_ext++;
1286 skts_ext->status = NETCONN_STATE_CONNECTED; /* connect */
1287 skt_status->socket_cnt++;
1288 namelen = sizeof(struct sockaddr_in);
1289 err = getpeername(s, (struct sockaddr *)peer_addr, &namelen);
1290 if (err) {
1291 memset(skts_ext->host_ipaddr, 0, FOUR);
1292 skts_ext->remote_port = 0;
1293 skts_ext->status = NETCONN_STATE_NONE;
1294 } else {
1295 MEMCPY(skts_ext->host_ipaddr, (u8 *)ip_2_ip4(&peer_addr->sin_addr), FOUR);
1296 skts_ext->remote_port = htons(peer_addr->sin_port);
1297 }
1298 skts_ext->local_port = htons(listen_port);
1299 skts_ext->socket = s;
1300 skts_ext->protocol = SOCKET_PROTO_TCP;
1301 remain_len -= sizeof(struct tls_skt_status_ext_t);
1302 }
1303 }
1304 err = 0;
1305 #else
1306 #endif
1307 return err;
1308 }
1309
tls_cmd_get_socket_state(u8 socket,u8 * state,struct tls_skt_status_ext_t * skt_ext)1310 int tls_cmd_get_socket_state(u8 socket, u8 *state, struct tls_skt_status_ext_t *skt_ext)
1311 {
1312 struct tls_skt_status_t *skt_status = 0;
1313 struct tls_skt_status_ext_t *ext;
1314 int err;
1315 u32 buflen;
1316 buflen = sizeof(struct tls_skt_status_ext_t) * FIVE + sizeof(u32);
1317 skt_status = (struct tls_skt_status_t *)tls_mem_alloc(buflen);
1318 if (skt_status == NULL) {
1319 return NETCONN_STATE_NONE;
1320 }
1321 memset(skt_status, 0, buflen);
1322 err = tls_cmd_get_socket_status(socket, (u8 *)skt_status, buflen);
1323 if (err) {
1324 *state = NETCONN_STATE_NONE;
1325 } else {
1326 ext = &skt_status->skts_ext[0];
1327 if (skt_ext != NULL) {
1328 MEMCPY(skt_ext, ext, sizeof(struct tls_skt_status_ext_t));
1329 }
1330 *state = ext->status;
1331 }
1332 tls_mem_free(skt_status);
1333 return err;
1334 }
1335
tls_cmd_get_default_socket(void)1336 u8 tls_cmd_get_default_socket(void)
1337 {
1338 return default_socket;
1339 }
1340
tls_cmd_set_default_socket(u8 socket)1341 int tls_cmd_set_default_socket(u8 socket)
1342 {
1343 #if TLS_CONFIG_CMD_USE_RAW_SOCKET
1344 if (socket < 1 || socket > TWENTY) {
1345 return -1;
1346 }
1347 #endif
1348 default_socket = socket;
1349 return 0;
1350 }
1351
1352 #endif /* TLS_CONFIG_SOCKET_RAW */
1353
tls_hostif_wjoin_success(void)1354 static void tls_hostif_wjoin_success(void)
1355 {
1356 struct tls_hostif *hif = tls_get_hostif();
1357 if (hif->last_join) {
1358 hif->last_join = 0;
1359 if ((hif->last_join_cmd_mode == CMD_MODE_HSPI_RICMD) ||
1360 (hif->last_join_cmd_mode == CMD_MODE_UART1_RICMD)) {
1361 tls_hostif_send_event_wjoin_success();
1362 } else if (hif->last_join_cmd_mode == CMD_MODE_UART1_ATCMD) {
1363 hif->uart_atcmd_bits |= (1 << UART_ATCMD_BIT_WJOIN);
1364 tls_os_sem_release(hif->uart_atcmd_sem);
1365 } else if (hif->last_join_cmd_mode == CMD_MODE_UART0_ATCMD) {
1366 hif->uart_atcmd_bits |= (1 << UART_ATCMD_BIT_WJOIN);
1367 tls_os_sem_release(hif->uart_atcmd_sem);
1368 #if TLS_CONFIG_RMMS
1369 } else if (hif->last_join_cmd_mode == CMD_MODE_RMMS_ATCMD) {
1370 hif->uart_atcmd_bits |= (1 << UART_ATCMD_BIT_WJOIN);
1371 tls_os_sem_release(hif->uart_atcmd_sem);
1372 #endif
1373 } else {
1374 ;
1375 }
1376 }
1377 }
1378
tls_hostif_wjoin_failed(void)1379 static void tls_hostif_wjoin_failed(void)
1380 {
1381 struct tls_hostif *hif = tls_get_hostif();
1382 if (hif->last_join) {
1383 if ((hif->last_join_cmd_mode == CMD_MODE_HSPI_RICMD) ||
1384 (hif->last_join_cmd_mode == CMD_MODE_UART1_RICMD)) {
1385 tls_hostif_send_event_wjoin_failed();
1386 } else if (hif->last_join_cmd_mode == CMD_MODE_UART1_ATCMD) {
1387 hif->uart_atcmd_bits |= (1 << UART_ATCMD_BIT_WJOIN);
1388 tls_os_sem_release(hif->uart_atcmd_sem);
1389 } else if (hif->last_join_cmd_mode == CMD_MODE_UART0_ATCMD) {
1390 hif->uart_atcmd_bits |= (1 << UART_ATCMD_BIT_WJOIN);
1391 tls_os_sem_release(hif->uart_atcmd_sem);
1392 #if TLS_CONFIG_RMMS
1393 } else if (hif->last_join_cmd_mode == CMD_MODE_RMMS_ATCMD) {
1394 hif->uart_atcmd_bits |= (1 << UART_ATCMD_BIT_WJOIN);
1395 tls_os_sem_release(hif->uart_atcmd_sem);
1396 #endif
1397 } else {
1398 ;
1399 }
1400 hif->last_join = 0;
1401 }
1402 }
1403
tls_hostif_net_status_changed(u8 status)1404 static void tls_hostif_net_status_changed(u8 status)
1405 {
1406 return;
1407 }
1408
1409 #if TLS_CONFIG_SOCKET_RAW || TLS_CONFIG_SOCKET_STD
tls_hostif_set_net_status_callback(void)1410 int tls_hostif_set_net_status_callback(void)
1411 {
1412 return;
1413 }
1414 #endif
1415
1416 #if TLS_CONFIG_HTTP_CLIENT_TASK
1417 u8 pSession_flag = 0;
tls_hostif_http_client_recv_callback(HTTP_SESSION_HANDLE pSession,CHAR * data,u32 totallen,u32 datalen)1418 void tls_hostif_http_client_recv_callback(HTTP_SESSION_HANDLE pSession, CHAR *data,
1419 u32 totallen, u32 datalen)
1420 {
1421 #undef CMDIND_BUF_SIZE
1422 #define CMDIND_BUF_SIZE 64
1423 char *cmdind_buf = NULL;
1424 int err1 = 0;
1425 u32 cmdind_size = 0;
1426
1427 struct tls_hostif *hif = tls_get_hostif();
1428 if ((hif->rptmode) || (HOSTIF_MODE_HSPI == hif->hostif_mode)) {
1429 if (pSession_flag == 0) {
1430 cmdind_buf = tls_mem_alloc(CMDIND_BUF_SIZE);
1431 if (cmdind_buf) {
1432 cmdind_size = sprintf(cmdind_buf, "+HTTPCRPT=%d,%d\r\n\r\n", pSession, totallen);
1433 err1 = tls_hostif_process_cmdrsp(hif->hostif_mode, cmdind_buf, cmdind_size);
1434 if (err1) {
1435 tls_mem_free(cmdind_buf);
1436 cmdind_buf = NULL;
1437 tls_mem_free(data);
1438 return;
1439 }
1440 pSession_flag = 1;
1441 } else {
1442 tls_mem_free(data);
1443 }
1444 }
1445 err1 = tls_hostif_process_cmdrsp(hif->hostif_mode, (char *)data, datalen);
1446 if (err1) {
1447 tls_mem_free(data);
1448 }
1449 } else {
1450 tls_mem_free(data);
1451 }
1452 }
1453
tls_hostif_http_client_err_callback(HTTP_SESSION_HANDLE pSession,int err)1454 void tls_hostif_http_client_err_callback(HTTP_SESSION_HANDLE pSession, int err)
1455 {
1456 #undef CMDIND_BUF_SIZE
1457 #define CMDIND_BUF_SIZE 64
1458 char *cmdind_buf = NULL;
1459 int err1 = 0;
1460 u32 cmdind_size = 0;
1461
1462 struct tls_hostif *hif = tls_get_hostif();
1463
1464 if ((hif->rptmode) || (HOSTIF_MODE_HSPI == hif->hostif_mode)) {
1465 cmdind_buf = tls_mem_alloc(CMDIND_BUF_SIZE);
1466 if (cmdind_buf) {
1467 cmdind_size = sprintf(cmdind_buf, "+HTTPCERRRPT=%d,%d\r\n\r\n", pSession, err);
1468 err1 = tls_hostif_process_cmdrsp(hif->hostif_mode, cmdind_buf, cmdind_size);
1469 if (err1) {
1470 tls_mem_free(cmdind_buf);
1471 cmdind_buf = NULL;
1472 }
1473 }
1474 }
1475 }
1476 #endif
1477
atcmd_filter_quotation(u8 ** keyInfo,u8 * inbuf)1478 int atcmd_filter_quotation(u8 **keyInfo, u8 *inbuf)
1479 {
1480 u8 len = strlen((char *)inbuf);
1481 int i;
1482 if (*inbuf == '"') { /* argument such as "xxxx" */
1483 inbuf++; /* skip 1st <"> */
1484 len -= 1;
1485 *keyInfo = inbuf;
1486 if ((*(inbuf + len - 1) == '"') && (*(inbuf + len) == '\0')) {
1487 *(inbuf + len - 1) = '\0';
1488 len -= 1;
1489 for (i = 0; i < len; i++) {
1490 if (inbuf[i] == '\\') {
1491 len -= 1;
1492 memcpy(inbuf + i, inbuf + i + 1, len - i);
1493 }
1494 }
1495 inbuf[len] = '\0';
1496 } else {
1497 return 1;
1498 }
1499 } else {
1500 *keyInfo = inbuf;
1501 }
1502
1503 return 0;
1504 }
1505
1506 #if 1
z_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1507 int z_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1508 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1509 {
1510 tls_cmd_reset_sys();
1511 return 0;
1512 }
1513
e_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1514 int e_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1515 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1516 {
1517 struct tls_hostif *hif = tls_get_hostif();
1518 if (hif->uart_insdisp) {
1519 hif->uart_insdisp = 0;
1520 } else {
1521 hif->uart_insdisp = 1;
1522 }
1523 return 0;
1524 }
1525
ents_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1526 int ents_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1527 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1528 {
1529 int ret = 0;
1530 struct tls_cmd_ps_t ps;
1531
1532 if (cmd->ps.ps_type > TWO || (cmd->ps.wake_type > 1)) {
1533 return -CMD_ERR_INV_PARAMS;
1534 }
1535
1536 if ((cmd->ps.ps_type == 1 || cmd->ps.ps_type == TWO)
1537 && (((cmd->ps.wake_type == 1)
1538 && (cmd->ps.wake_time > SIXTY_FIVE_THOUSAND_FIVE_HUNDRED_AND_THIRTY_FIVE
1539 || cmd->ps.wake_time < ONE_THOUSAND))
1540 || (cmd->ps.delay_time < ONE_HUNDRED || cmd->ps.delay_time > TEN_THOUSAND))) {
1541 return -CMD_ERR_INV_PARAMS;
1542 }
1543
1544 ps.ps_type=cmd->ps.ps_type;
1545 ps.wake_type = cmd->ps.wake_type;
1546 ps.delay_time=cmd->ps.delay_time;
1547 ps.wake_time = cmd->ps.wake_time;
1548 ret = tls_cmd_ps(&ps);
1549 return ret ? -CMD_ERR_OPS : 0;
1550 }
1551
rstf_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1552 int rstf_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1553 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1554 {
1555 return;
1556 }
1557
pmtf_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1558 int pmtf_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1559 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1560 {
1561 int ret = 0;
1562 ret = tls_cmd_pmtf();
1563 return ret ? -CMD_ERR_OPS : 0;
1564 }
1565
ioc_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1566 int ioc_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1567 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1568 {
1569 return 0;
1570 }
1571
wleav_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1572 int wleav_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1573 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1574 {
1575 int ret = 0;
1576 if (cmd->wreg.region == TWO) {
1577 ret = tls_cmd_disconnect_network(IEEE80211_MODE_AP);
1578 } else {
1579 ret = tls_cmd_disconnect_network(IEEE80211_MODE_INFRA);
1580 }
1581 return ret ? -CMD_ERR_FLASH : 0;
1582 }
1583
1584 #if TLS_CONFIG_SOCKET_RAW || TLS_CONFIG_SOCKET_STD
lkstt_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1585 int lkstt_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1586 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1587 {
1588 struct tls_cmd_link_status_t lk;
1589
1590 memset(&lk, 0, sizeof(struct tls_cmd_link_status_t));
1591 tls_cmd_get_link_status(&lk);
1592 cmdrsp->lkstt.status = lk.status;
1593 if (cmdrsp->lkstt.status == 0) {
1594 return 0;
1595 } else {
1596 memcpy(cmdrsp->lkstt.ip, lk.ip, FOUR);
1597 memcpy(cmdrsp->lkstt.nm, lk.netmask, FOUR);
1598 memcpy(cmdrsp->lkstt.gw, lk.gw, FOUR);
1599 memcpy(cmdrsp->lkstt.dns1, lk.dns1, FOUR);
1600 memcpy(cmdrsp->lkstt.dns2, lk.dns2, FOUR);
1601 }
1602 return 0;
1603 }
1604
skstt_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1605 int skstt_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1606 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1607 {
1608 int ret = 0, i = 0;
1609 u32 buflen;
1610 u8 socket = cmd->skstt.socket;
1611 struct tls_skt_status_t *skt_status = 0;
1612 if (set_opt) {
1613 #if TLS_CONFIG_CMD_USE_RAW_SOCKET
1614 if (cmd->skclose.socket < 1 || cmd->skclose.socket > TLS_MAX_NETCONN_NUM) {
1615 return -CMD_ERR_INV_PARAMS;
1616 }
1617 #endif
1618 buflen = sizeof(struct tls_skt_status_ext_t) * FIVE + sizeof(u32);
1619 skt_status = (struct tls_skt_status_t *)tls_mem_alloc(buflen);
1620 if (!skt_status) {
1621 return -CMD_ERR_MEM;
1622 } else {
1623 memset(skt_status, 0, buflen);
1624 ret = tls_cmd_get_socket_status(socket, (u8 *)skt_status, buflen);
1625 if (ret) {
1626 return -CMD_ERR_INV_PARAMS;
1627 }
1628 cmdrsp->skstt.number = skt_status->socket_cnt;
1629 for (i = 0; i < skt_status->socket_cnt; i++) {
1630 cmdrsp->skstt.ext[i].status = skt_status->skts_ext[i].status;
1631 cmdrsp->skstt.ext[i].socket= skt_status->skts_ext[i].socket;
1632 memcpy(cmdrsp->skstt.ext[i].host_ipaddr, skt_status->skts_ext[i].host_ipaddr, FOUR);
1633 cmdrsp->skstt.ext[i].remote_port = skt_status->skts_ext[i].remote_port;
1634 cmdrsp->skstt.ext[i].local_port = skt_status->skts_ext[i].local_port;
1635 }
1636 if (skt_status) {
1637 tls_mem_free(skt_status);
1638 }
1639 }
1640 }
1641
1642 return ret ? -CMD_ERR_OPS : 0;
1643 }
1644
skcls_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1645 int skcls_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1646 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1647 {
1648 int ret = 0;
1649 if (set_opt) {
1650 #if TLS_CONFIG_CMD_USE_RAW_SOCKET
1651 if (cmd->skclose.socket < 1 || cmd->skclose.socket>TLS_MAX_NETCONN_NUM) {
1652 return -CMD_ERR_INV_PARAMS;
1653 }
1654 #endif
1655 ret = tls_cmd_close_socket(cmd->skclose.socket);
1656 }
1657
1658 return ret ? -CMD_ERR_OPS : 0;
1659 }
1660
sksdf_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1661 int sksdf_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1662 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1663 {
1664 if (set_opt) {
1665 if (cmd->sksdf.socket < 1 || cmd->sksdf.socket > TWENTY) {
1666 return -CMD_ERR_INV_PARAMS;
1667 }
1668 tls_cmd_set_default_socket(cmd->sksdf.socket);
1669 }
1670
1671 return 0;
1672 }
1673
skrcv_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1674 int skrcv_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1675 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1676 {
1677 u32 socket = 0, size = 0, maxsize;
1678 u8 state;
1679 if (set_opt) {
1680 socket = cmd->skrcv.socket;
1681 size = cmd->skrcv.size;
1682 #if TLS_CONFIG_CMD_USE_RAW_SOCKET
1683 if (socket < 1 || socket > TLS_MAX_NETCONN_NUM) {
1684 return -CMD_ERR_INV_PARAMS;
1685 }
1686 #endif
1687 if (size > ONE_THOUSAND_AND_TWENTY_FOUR) {
1688 size = ONE_THOUSAND_AND_TWENTY_FOUR;
1689 }
1690 tls_cmd_get_socket_state(socket, &state, NULL);
1691 if (state != NETCONN_STATE_CONNECTED) {
1692 return -CMD_ERR_INV_PARAMS;
1693 } else {
1694 maxsize = size;
1695 cmdrsp->skrcv.socket = socket;
1696 cmdrsp->skrcv.size = maxsize;
1697 }
1698 }
1699
1700 return 0;
1701 }
1702
skrptm_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1703 int skrptm_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1704 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1705 {
1706 int ret = 0;
1707 struct tls_hostif *hif = tls_get_hostif();
1708 if (set_opt) {
1709 if (cmd->skrptm.mode > 1) {
1710 return -CMD_ERR_INV_PARAMS;
1711 }
1712 hif->rptmode = cmd->skrptm.mode;
1713 } else {
1714 cmdrsp->skrptm.mode = hif->rptmode;
1715 }
1716
1717 return ret ? -CMD_ERR_OPS : 0;
1718 }
1719
sksrcip_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1720 int sksrcip_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1721 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1722 {
1723 return;
1724 }
1725
skghbn_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1726 int skghbn_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1727 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1728 {
1729 u8 *ipstr = NULL;
1730 int i = 0;
1731 struct hostent* HostEntry;
1732 if (set_opt) {
1733 ipstr = cmd->skghbn.ipstr;
1734 HostEntry = gethostbyname((char *)ipstr);
1735 if (HostEntry) {
1736 for (i = 0; i < FOUR; i++) {
1737 cmdrsp->skghbn.h_addr_list[i] = *(HostEntry->h_addr_list[0] + i);
1738 }
1739 } else {
1740 return -CMD_ERR_INV_PARAMS;
1741 }
1742 }
1743
1744 return 0;
1745 }
1746
1747 #endif
1748
wprt_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1749 int wprt_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1750 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1751 {
1752 int ret = 0;
1753 if (set_opt) {
1754 if (cmd->wprt.type > THREE) {
1755 return -CMD_ERR_INV_PARAMS;
1756 }
1757 ret = tls_cmd_set_wireless_mode(cmd->wprt.type, update_flash);
1758 } else {
1759 ret = tls_cmd_get_wireless_mode(&cmdrsp->wprt.type);
1760 }
1761 return ret ? -CMD_ERR_OPS : 0;
1762 }
1763
ssid_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1764 int ssid_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1765 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1766 {
1767 int ret = 0;
1768 struct tls_cmd_ssid_t ssid;
1769
1770 memset(&ssid, 0, sizeof(struct tls_cmd_ssid_t));
1771 if (set_opt) {
1772 if ((cmd->ssid.ssid_len > (THIRTY + TWO)) || (cmd->ssid.ssid_len == 0)) {
1773 return -CMD_ERR_INV_PARAMS;
1774 }
1775 ssid.ssid_len = cmd->ssid.ssid_len;
1776 MEMCPY(ssid.ssid, cmd->ssid.ssid, ssid.ssid_len);
1777 ret = tls_cmd_set_ssid(&ssid, update_flash);
1778 } else {
1779 ret = tls_cmd_get_ssid(&ssid);
1780 if (!ret) {
1781 cmdrsp->ssid.ssid_len = ssid.ssid_len;
1782 MEMCPY(cmdrsp->ssid.ssid, ssid.ssid, ssid.ssid_len);
1783 }
1784 }
1785 return ret ? -CMD_ERR_OPS : 0;
1786 }
1787
key_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1788 int key_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1789 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1790 {
1791 int ret = 0;
1792 struct tls_cmd_key_t key;
1793 if (set_opt) {
1794 if (cmd->key.format > 1 || cmd->key.index > FOUR || cmd->key.key_len > (SIXTY + FOUR)) {
1795 return -CMD_ERR_INV_PARAMS;
1796 }
1797 key.format = cmd->key.format;
1798 key.index = cmd->key.index;
1799 memcpy(key.key, cmd->key.key, cmd->key.key_len);
1800 key.key_len = cmd->key.key_len;
1801 ret = tls_cmd_set_key(&key, update_flash);
1802 } else {
1803 ret = tls_cmd_get_key(&key);
1804 if (!ret) {
1805 cmdrsp->key.format = key.format;
1806 cmdrsp->key.index = key.index;
1807 cmdrsp->key.key_len = key.key_len;
1808 memcpy(cmdrsp->key.key, key.key, cmdrsp->key.key_len);
1809 }
1810 }
1811
1812 return ret ? -CMD_ERR_OPS : 0;
1813 }
1814
encry_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1815 int encry_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1816 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1817 {
1818 int ret = 0;
1819 if (set_opt) {
1820 if (cmd->encrypt.mode > EIGHT) {
1821 return -CMD_ERR_INV_PARAMS;
1822 }
1823 ret = tls_cmd_set_encrypt(cmd->encrypt.mode, update_flash);
1824 } else {
1825 ret = tls_cmd_get_encrypt(&cmdrsp->encrypt.mode);
1826 }
1827
1828 return ret ? -CMD_ERR_OPS : 0;
1829 }
1830
bssid_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1831 int bssid_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1832 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1833 {
1834 int ret = 0;
1835 struct tls_cmd_bssid_t bssid;
1836 if (set_opt) {
1837 if (cmd->bssid.enable > 1) {
1838 return -CMD_ERR_INV_PARAMS;
1839 }
1840 bssid.enable = cmd->bssid.enable;
1841 if (bssid.enable == 1) {
1842 memcpy(bssid.bssid, cmd->bssid.bssid, SIX);
1843 }
1844 ret = tls_cmd_set_bssid(&bssid, update_flash);
1845 } else {
1846 ret = tls_cmd_get_bssid(&bssid);
1847 cmdrsp->bssid.enable = bssid.enable;
1848 memcpy(cmdrsp->bssid.bssid, bssid.bssid, SIX);
1849 }
1850
1851 return ret ? -CMD_ERR_OPS : 0;
1852 }
1853
brdssid_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1854 int brdssid_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1855 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1856 {
1857 int ret = 0;
1858 if (set_opt) {
1859 if (cmd->brd_ssid.enable > 1) {
1860 return -CMD_ERR_INV_PARAMS;
1861 }
1862 ret = tls_cmd_set_hide_ssid(cmd->brd_ssid.enable, update_flash);
1863 } else {
1864 ret = tls_cmd_get_hide_ssid(&cmdrsp->brd_ssid.enable);
1865 }
1866
1867 return ret ? -CMD_ERR_OPS : 0;
1868 }
1869
cntparam_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1870 int cntparam_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1871 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1872 {
1873 struct tls_param_ssid original_ssid;
1874 struct tls_param_original_key original_key;
1875 struct tls_cmd_bssid_t bssid;
1876
1877 memset(&original_ssid, 0, sizeof(struct tls_param_ssid));
1878 memset(&original_key, 0, sizeof(struct tls_param_original_key));
1879 memset(&bssid, 0, sizeof(struct tls_cmd_bssid_t));
1880 tls_cmd_get_bssid(&bssid);
1881 tls_cmd_get_original_key(&original_key);
1882 if (bssid.enable) {
1883 cmdrsp->cntparam_bssid_en.bssid_enable = bssid.enable;
1884 memcpy(cmdrsp->cntparam_bssid_en.bssid, bssid.bssid, SIX);
1885 cmdrsp->cntparam_bssid_en.key_len = original_key.key_length;
1886 memcpy(cmdrsp->cntparam_bssid_en.key, original_key.psk, original_key.key_length);
1887 } else {
1888 tls_cmd_get_original_ssid(&original_ssid);
1889 cmdrsp->cntparam_bssid_dis.bssid_enable = bssid.enable;
1890 cmdrsp->cntparam_bssid_dis.ssid_len = original_ssid.ssid_len;
1891 memcpy(cmdrsp->cntparam_bssid_dis.ssid_key, original_ssid.ssid, original_ssid.ssid_len);
1892 cmdrsp->cntparam_bssid_dis.key_len = original_key.key_length;
1893 memcpy(cmdrsp->cntparam_bssid_dis.ssid_key+cmdrsp->cntparam_bssid_dis.ssid_len,
1894 original_key.psk, original_key.key_length);
1895 }
1896 return 0;
1897 }
1898
chl_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1899 int chl_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1900 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1901 {
1902 int ret = 0;
1903 if (set_opt) {
1904 if ((cmd->channel.enable > 1) || ((cmd->channel.enable == 1)
1905 && ((cmd->channel.channel > (TEN + FOUR))
1906 || (cmd->channel.channel < 1)))) {
1907 return -CMD_ERR_INV_PARAMS;
1908 }
1909 if (cmd->channel.enable == 0) {
1910 cmd->channel.channel = 1;
1911 }
1912 ret = tls_cmd_set_channel(cmd->channel.channel, cmd->channel.enable, update_flash);
1913 } else {
1914 ret = tls_cmd_get_channel(&cmdrsp->channel.channel, &cmdrsp->channel.enable);
1915 }
1916
1917 return ret ? -CMD_ERR_OPS : 0;
1918 }
1919
chll_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1920 int chll_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1921 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1922 {
1923 if (set_opt) {
1924 if ((cmd->channel_list.channellist & (~0x3fff)) || (cmd->channel_list.channellist == 0)) {
1925 return -CMD_ERR_INV_PARAMS;
1926 }
1927 tls_cmd_set_channellist(cmd->channel_list.channellist, update_flash);
1928 } else {
1929 tls_cmd_get_channellist((u16 *)&(cmdrsp->channel_list.channellist));
1930 }
1931
1932 return 0;
1933 }
1934
wreg_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1935 int wreg_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1936 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1937 {
1938 if (set_opt) {
1939 tls_cmd_set_region(cmd->wreg.region, update_flash);
1940 } else {
1941 tls_cmd_get_region((u16 *)&cmdrsp->wreg.region);
1942 }
1943 return 0;
1944 }
1945
wbgr_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1946 int wbgr_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1947 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1948 {
1949 int ret = 0;
1950 int limit_rate;
1951 struct tls_cmd_wl_hw_mode_t hw_mode;
1952 memset(&hw_mode, 0, sizeof(struct tls_cmd_wl_hw_mode_t));
1953
1954 if (set_opt) {
1955 if (cmd->wbgr.mode > THREE || cmd->wbgr.rate > (TWENTY + EIGHT)) {
1956 return -CMD_ERR_INV_PARAMS;
1957 }
1958 limit_rate = (cmd->wbgr.mode == 1) ? THREE : ((cmd->wbgr.mode == TWO)
1959 ? (TWENTY + EIGHT) : (TEN + 1));
1960 hw_mode.max_rate = (cmd->wbgr.rate > limit_rate) ? limit_rate: cmd->wbgr.rate;
1961 hw_mode.hw_mode = cmd->wbgr.mode;
1962 ret = tls_cmd_set_hw_mode(&hw_mode, update_flash);
1963 } else {
1964 ret = tls_cmd_get_hw_mode(&hw_mode);
1965 cmdrsp->wbgr.mode = hw_mode.hw_mode;
1966 cmdrsp->wbgr.rate = hw_mode.max_rate;
1967 }
1968 return ret ? -CMD_ERR_OPS : 0;
1969 }
1970
watc_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1971 int watc_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1972 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1973 {
1974 int ret = 0;
1975 if (set_opt) {
1976 if (cmd->watc.enable > 1) {
1977 return -CMD_ERR_INV_PARAMS;
1978 }
1979 ret = tls_cmd_set_adhoc_create_mode(cmd->watc.enable, update_flash);
1980 } else {
1981 ret = tls_cmd_get_adhoc_create_mode(&cmdrsp->watc.enable);
1982 }
1983
1984 return ret ? -CMD_ERR_OPS : 0;
1985 }
1986
wpsm_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)1987 int wpsm_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
1988 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
1989 {
1990 int ret = 0;
1991 if (set_opt) {
1992 if (cmd->wpsm.enable > 1) {
1993 return -CMD_ERR_INV_PARAMS;
1994 }
1995 ret = tls_cmd_set_wl_ps_mode(cmd->wpsm.enable, update_flash);
1996 } else {
1997 ret = tls_cmd_get_wl_ps_mode(&cmdrsp->wpsm.enable);
1998 }
1999
2000 return ret ? -CMD_ERR_OPS : 0;
2001 }
2002
warc_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2003 int warc_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2004 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2005 {
2006 int ret = 0;
2007 if (set_opt) {
2008 if (cmd->warc.autoretrycnt > TWO_HUNDRED_AND_FIFTY_FIVE) {
2009 return -CMD_ERR_INV_PARAMS;
2010 }
2011 ret = tls_cmd_set_warc(cmd->warc.autoretrycnt, update_flash);
2012 } else {
2013 ret = tls_cmd_get_warc(&cmdrsp->warc.autoretrycnt);
2014 }
2015
2016 return ret ? -CMD_ERR_OPS : 0;
2017 }
2018
warm_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2019 int warm_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2020 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2021 {
2022 int ret = 0;
2023 if (set_opt) {
2024 if (cmd->warm.enable > 1) {
2025 return -CMD_ERR_INV_PARAMS;
2026 }
2027 ret = tls_cmd_set_roaming_mode(cmd->warm.enable, update_flash);
2028 } else {
2029 ret = tls_cmd_get_roaming_mode(&cmdrsp->warm.enable);
2030 }
2031
2032 return ret ? -CMD_ERR_OPS : 0;
2033 }
2034
2035 #if TLS_CONFIG_SOCKET_RAW || TLS_CONFIG_SOCKET_STD
nip_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2036 int nip_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2037 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2038 {
2039 int ret = 0;
2040 struct tls_cmd_ip_params_t ip_info;
2041 if (set_opt) {
2042 if (cmd->nip.type > 1) {
2043 return -CMD_ERR_INV_PARAMS;
2044 }
2045 ip_info.type = cmd->nip.type;
2046 memcpy(ip_info.ip_addr, cmd->nip.ip, FOUR);
2047 memcpy(ip_info.netmask, cmd->nip.nm, FOUR);
2048 memcpy(ip_info.gateway, cmd->nip.gw, FOUR);
2049 memcpy(ip_info.dns, cmd->nip.dns, FOUR);
2050 ret = tls_cmd_set_ip_info(&ip_info, update_flash);
2051 } else {
2052 ret = tls_cmd_get_ip_info(&ip_info);
2053 cmdrsp->nip.type = ip_info.type;
2054 memcpy(cmdrsp->nip.ip, ip_info.ip_addr, FOUR);
2055 memcpy(cmdrsp->nip.nm, ip_info.netmask, FOUR);
2056 memcpy(cmdrsp->nip.gw, ip_info.gateway, FOUR);
2057 memcpy(cmdrsp->nip.dns, ip_info.dns, FOUR);
2058 }
2059
2060 return ret ? -CMD_ERR_OPS : 0;
2061 }
2062 #endif
2063
atm_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2064 int atm_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2065 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2066 {
2067 int ret = 0;
2068 if (set_opt) {
2069 if (cmd->atm.mode > 1) {
2070 return -CMD_ERR_INV_PARAMS;
2071 }
2072 ret = tls_cmd_set_work_mode(cmd->atm.mode, update_flash);
2073 } else {
2074 ret = tls_cmd_get_work_mode(&cmdrsp->atm.mode);
2075 }
2076
2077 return ret ? -CMD_ERR_OPS : 0;
2078 }
2079
atrm_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2080 int atrm_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2081 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2082 {
2083 if (set_opt) {
2084 tls_cmd_set_default_socket_params((struct tls_cmd_socket_t *)&cmd->atrm, update_flash);
2085 } else {
2086 tls_cmd_get_default_socket_params((struct tls_cmd_socket_t *)&cmdrsp->atrm);
2087 }
2088 return 0;
2089 }
2090
aolm_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2091 int aolm_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2092 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2093 {
2094 return 0;
2095 }
2096
portm_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2097 int portm_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2098 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2099 {
2100 int ret = 0;
2101 if (set_opt) {
2102 if (cmd->portm.mode > THREE) {
2103 return -CMD_ERR_INV_PARAMS;
2104 }
2105 ret = tls_cmd_set_hostif_mode(cmd->portm.mode, update_flash);
2106 } else {
2107 ret = tls_cmd_get_hostif_mode(&cmdrsp->portm.mode);
2108 }
2109
2110 return ret ? -CMD_ERR_OPS : 0;
2111 }
2112
uart_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2113 int uart_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2114 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2115 {
2116 int ret = 0;
2117 struct tls_cmd_uart_params_t uart_cfg;
2118 memset(&uart_cfg, 0, sizeof(struct tls_cmd_uart_params_t));
2119 if (set_opt) {
2120 memcpy((u8 *)&uart_cfg.baud_rate, cmd->uart.baud_rate, THREE);
2121 uart_cfg.charlength = cmd->uart.char_len;
2122 uart_cfg.stop_bit = cmd->uart.stopbit;
2123 uart_cfg.parity = cmd->uart.parity;
2124 uart_cfg.flow_ctrl = cmd->uart.flow_ctrl;
2125 ret = tls_cmd_set_uart_params(&uart_cfg, update_flash);
2126 } else {
2127 ret = tls_cmd_get_uart_params(&uart_cfg);
2128 memcpy(cmdrsp->uart.baud_rate, &uart_cfg.baud_rate, THREE);
2129 cmdrsp->uart.char_len = uart_cfg.charlength;
2130 cmdrsp->uart.flow_ctrl = uart_cfg.flow_ctrl;
2131 cmdrsp->uart.parity = uart_cfg.parity;
2132 cmdrsp->uart.stopbit = uart_cfg.stop_bit;
2133 }
2134
2135 return ret ? -CMD_ERR_OPS : 0;
2136 }
2137
atlt_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2138 int atlt_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2139 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2140 {
2141 int ret = 0;
2142 if (set_opt) {
2143 if (cmd->atlt.length > ONE_THOUSAND_AND_TWENTY_FOUR || cmd->atlt.length < (THIRTY + TWO)) {
2144 return -CMD_ERR_INV_PARAMS;
2145 }
2146 ret = tls_cmd_set_atlt(cmd->atlt.length, update_flash);
2147 } else {
2148 ret = tls_cmd_get_atlt((u16 *)&cmdrsp->atlt.length);
2149 }
2150
2151 return ret ? -CMD_ERR_OPS : 0;
2152 }
2153
dns_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2154 int dns_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2155 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2156 {
2157 int ret = 0;
2158 if (set_opt) {
2159 if (cmd->dns.length > (THIRTY + 1) || cmd->dns.length == 0) {
2160 return -CMD_ERR_INV_PARAMS;
2161 }
2162 cmd->dns.name[cmd->dns.length] = '\0';
2163 ret = tls_cmd_set_dnsname(cmd->dns.name, update_flash);
2164 } else {
2165 ret = tls_cmd_get_dnsname(cmdrsp->dns.name);
2166 cmdrsp->dns.length = strlen((char *)cmdrsp->dns.name);
2167 }
2168
2169 return ret ? -CMD_ERR_OPS : 0;
2170 }
2171
ddns_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2172 int ddns_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2173 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2174 {
2175 return 0;
2176 }
2177
upnp_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2178 int upnp_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2179 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2180 {
2181 return 0;
2182 }
2183
dname_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2184 int dname_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2185 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2186 {
2187 return 0;
2188 }
2189
atpt_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2190 int atpt_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2191 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2192 {
2193 int ret = 0;
2194 if (set_opt) {
2195 if (cmd->portm.mode > TEN_THOUSAND) {
2196 return -CMD_ERR_INV_PARAMS;
2197 }
2198 ret = tls_cmd_set_atpt(cmd->atpt.period, update_flash);
2199 } else {
2200 ret = tls_cmd_get_atpt((u16 *)&cmdrsp->atpt.period);
2201 }
2202
2203 return ret ? -CMD_ERR_OPS : 0;
2204 }
2205
dbg_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2206 int dbg_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2207 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2208 {
2209 if (set_opt) {
2210 tls_cmd_set_dbg(cmd->dbg.dbg_level);
2211 }
2212
2213 return 0;
2214 }
2215
espc_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2216 int espc_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2217 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2218 {
2219 int ret = 0;
2220 if (set_opt) {
2221 if (cmd->espc.escapechar > 0xFF) {
2222 return -CMD_ERR_INV_PARAMS;
2223 }
2224 ret = tls_cmd_set_espc(cmd->espc.escapechar, update_flash);
2225 } else {
2226 ret = tls_cmd_get_espc(&cmdrsp->espc.escapechar);
2227 }
2228
2229 return ret ? -CMD_ERR_OPS : 0;
2230 }
2231
espt_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2232 int espt_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2233 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2234 {
2235 int ret = 0;
2236 if (set_opt) {
2237 if (cmd->espt.escapeperiod > TEN_THOUSAND || cmd->espt.escapeperiod < ONE_HUNDRED) {
2238 return -CMD_ERR_INV_PARAMS;
2239 }
2240 ret = tls_cmd_set_espt(cmd->espt.escapeperiod, update_flash);
2241 } else {
2242 ret = tls_cmd_get_espt((u16 *)&cmdrsp->espt.escapeperiod);
2243 }
2244
2245 return ret ? -CMD_ERR_OPS : 0;
2246 }
2247
webs_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2248 int webs_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2249 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2250 {
2251 int ret = 0;
2252 struct tls_webs_cfg stWebsCfg;
2253 if (set_opt) {
2254 if (cmd->webs.autorun > 1 || cmd->webs.portnum < 1
2255 || cmd->webs.portnum > SIXTY_FIVE_THOUSAND_FIVE_HUNDRED_AND_THIRTY_FIVE) {
2256 return -CMD_ERR_INV_PARAMS;
2257 }
2258 stWebsCfg.AutoRun = cmd->webs.autorun;
2259 stWebsCfg.PortNum = cmd->webs.portnum;
2260 ret = tls_cmd_set_webs(stWebsCfg, update_flash);
2261 } else {
2262 ret = tls_cmd_get_webs(&stWebsCfg);
2263 cmdrsp->webs.autorun = stWebsCfg.AutoRun;
2264 cmdrsp->webs.portnum = stWebsCfg.PortNum;
2265 }
2266
2267 return ret ? -CMD_ERR_OPS : 0;
2268 }
2269
iom_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2270 int iom_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2271 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2272 {
2273 int ret = 0;
2274 if (set_opt) {
2275 if (cmd->iom.mode > TWO) {
2276 return -CMD_ERR_INV_PARAMS;
2277 }
2278 ret = tls_cmd_set_iom(cmd->iom.mode, update_flash);
2279 } else {
2280 ret = tls_cmd_get_iom(&cmdrsp->iom.mode);
2281 }
2282
2283 return ret ? -CMD_ERR_OPS : 0;
2284 }
2285
cmdm_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2286 int cmdm_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2287 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2288 {
2289 int ret = 0;
2290 if (set_opt) {
2291 if (cmd->iom.mode > 1) {
2292 return -CMD_ERR_INV_PARAMS;
2293 }
2294 ret = tls_cmd_set_cmdm(cmd->cmdm.mode, update_flash);
2295 } else {
2296 ret = tls_cmd_get_cmdm(&cmdrsp->cmdm.mode);
2297 }
2298
2299 return ret ? -CMD_ERR_OPS : 0;
2300 }
2301
pass_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2302 int pass_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2303 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2304 {
2305 int ret = 0;
2306 if (set_opt) {
2307 if (cmd->pass.length != SIX) {
2308 return -CMD_ERR_INV_PARAMS;
2309 }
2310 ret = tls_cmd_set_pass(cmd->pass.password, update_flash);
2311 } else {
2312 ret = tls_cmd_get_pass(cmdrsp->pass.password);
2313 cmdrsp->pass.length = SIX;
2314 }
2315
2316 return ret ? -CMD_ERR_OPS : 0;
2317 }
2318
2319 #if TLS_CONFIG_HTTP_CLIENT_TASK
httpc_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2320 int httpc_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2321 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2322 {
2323 http_client_msg msg;
2324
2325 if (set_opt) {
2326 if ((cmd->httpc.url_len > TWO_HUNDRED_AND_FIFTY_FIVE)
2327 || (cmd->httpc.data_len > FIVE_HUNDRED_AND_TWELVE)) {
2328 return -CMD_ERR_INV_PARAMS;
2329 }
2330 memset(&msg, 0, sizeof(http_client_msg));
2331 msg.param.Uri = (CHAR *)cmd->httpc.url;
2332 msg.method = (HTTP_VERB)cmd->httpc.verb;
2333 if (cmd->httpc.verb == VerbPost || cmd->httpc.verb == VerbPut) {
2334 msg.dataLen = cmd->httpc.data_len;
2335 msg.sendData = (CHAR *)cmd->httpc.data;
2336 }
2337 msg.recv_fn = tls_hostif_http_client_recv_callback;
2338 msg.err_fn = tls_hostif_http_client_err_callback;
2339 http_client_post(&msg);
2340 cmdrsp->httpc.psession = msg.pSession;
2341 }
2342
2343 return 0;
2344 }
2345
fwup_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2346 int fwup_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2347 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2348 {
2349 return;
2350 }
2351
2352 #endif
2353 #endif
2354
tem_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2355 int tem_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2356 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2357 {
2358 int ret = 0;
2359 struct tls_cmd_tem_t tem = { 0 };
2360
2361 memset(&tem, 0, sizeof(struct tls_cmd_tem_t));
2362 if (set_opt) {
2363 return -CMD_ERR_UNSUPP;
2364 } else {
2365 char temperature[EIGHT] = {0};
2366 int temp = adc_temp();
2367 s32 offset = 0;
2368
2369 ret = tls_get_rx_iq_gain((u8 *)&offset);
2370 if (offset != -1) {
2371 temp = temp - offset;
2372 }
2373 if (!ret) {
2374 if (temp < 0) {
2375 temp = 0 - temp;
2376 sprintf(temperature, "-%d.%d", temp / ONE_THOUSAND, (temp % ONE_THOUSAND) / ONE_HUNDRED);
2377 } else {
2378 sprintf(temperature, "%d.%d", temp / ONE_THOUSAND, (temp % ONE_THOUSAND) / ONE_HUNDRED);
2379 }
2380 memcpy((char *)cmdrsp->tem.offset, temperature, strlen(temperature));
2381 }
2382 }
2383
2384 return ret ? -CMD_ERR_OPS : 0;
2385 }
2386
qmac_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2387 int qmac_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2388 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2389 {
2390 u8 *mac = NULL;
2391 mac = wpa_supplicant_get_mac();
2392 memcpy(cmdrsp->mac.addr, mac, SIX);
2393 return 0;
2394 }
2395
2396 #if TLS_CONFIG_AP
slist_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2397 int slist_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2398 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2399 {
2400 #define STA_DETAIL_BUF_LEN 320
2401 u32 sta_num = 0;
2402 u8 *sta_detail;
2403 int ret = -1;
2404
2405 sta_detail = tls_mem_alloc(STA_DETAIL_BUF_LEN);
2406 if (sta_detail == NULL) {
2407 return -CMD_ERR_MEM;
2408 }
2409
2410 memset(sta_detail, 0, STA_DETAIL_BUF_LEN);
2411 ret = tls_cmd_get_sta_detail(&sta_num, sta_detail);
2412 if (ret) {
2413 tls_mem_free(sta_detail);
2414 return -CMD_ERR_MEM;
2415 }
2416
2417 cmdrsp->stalist.sta_num = sta_num;
2418 memcpy(cmdrsp->stalist.data, sta_detail, strlen((char *)sta_detail) + 1);
2419 tls_mem_free(sta_detail);
2420
2421 return 0;
2422 }
2423
softap_lkstt_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2424 int softap_lkstt_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2425 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2426 {
2427 struct tls_cmd_link_status_t lk;
2428
2429 memset(&lk, 0, sizeof(struct tls_cmd_link_status_t));
2430 tls_cmd_get_softap_link_status(&lk);
2431 cmdrsp->lkstt.status = lk.status;
2432 if (cmdrsp->lkstt.status == 0) {
2433 return 0;
2434 } else {
2435 memcpy(cmdrsp->lkstt.ip, lk.ip, FOUR);
2436 memcpy(cmdrsp->lkstt.nm, lk.netmask, FOUR);
2437 memcpy(cmdrsp->lkstt.gw, lk.gw, FOUR);
2438 memcpy(cmdrsp->lkstt.dns1, lk.dns1, FOUR);
2439 memcpy(cmdrsp->lkstt.dns2, lk.dns2, FOUR);
2440 }
2441 return 0;
2442 }
2443
softap_ssid_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2444 int softap_ssid_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2445 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2446 {
2447 int ret = 0;
2448 struct tls_cmd_ssid_t ssid;
2449
2450 memset(&ssid, 0, sizeof(struct tls_cmd_ssid_t));
2451 if (set_opt) {
2452 if ((cmd->ssid.ssid_len > (THIRTY + TWO)) || (cmd->ssid.ssid_len == 0)) {
2453 return -CMD_ERR_INV_PARAMS;
2454 }
2455 ssid.ssid_len = cmd->ssid.ssid_len;
2456 MEMCPY(ssid.ssid, cmd->ssid.ssid, ssid.ssid_len);
2457 ret = tls_cmd_set_softap_ssid(&ssid, update_flash);
2458 } else {
2459 ret = tls_cmd_get_softap_ssid(&ssid);
2460 if (!ret) {
2461 cmdrsp->ssid.ssid_len = ssid.ssid_len;
2462 MEMCPY(cmdrsp->ssid.ssid, ssid.ssid, ssid.ssid_len);
2463 }
2464 }
2465 return ret ? -CMD_ERR_OPS : 0;
2466 }
2467
softap_qmac_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2468 int softap_qmac_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2469 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2470 {
2471 u8 *mac = NULL;
2472 mac = hostapd_get_mac();
2473 memcpy(cmdrsp->mac.addr, mac, SIX);
2474 return 0;
2475 }
2476
softap_encry_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2477 int softap_encry_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2478 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2479 {
2480 int ret = 0;
2481 if (set_opt) {
2482 if (cmd->encrypt.mode > EIGHT) {
2483 return -CMD_ERR_INV_PARAMS;
2484 }
2485 ret = tls_cmd_set_softap_encrypt(cmd->encrypt.mode, update_flash);
2486 } else {
2487 ret = tls_cmd_get_softap_encrypt(&cmdrsp->encrypt.mode);
2488 }
2489
2490 return ret ? -CMD_ERR_OPS : 0;
2491 }
2492
softap_key_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2493 int softap_key_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2494 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2495 {
2496 int ret = 0;
2497 struct tls_cmd_key_t key;
2498 if (set_opt) {
2499 if (cmd->key.format > 1 || cmd->key.index > FOUR
2500 || cmd->key.key_len > (SIXTY + FOUR)) {
2501 return -CMD_ERR_INV_PARAMS;
2502 }
2503 key.format = cmd->key.format;
2504 key.index = cmd->key.index;
2505 memcpy(key.key, cmd->key.key, cmd->key.key_len);
2506 key.key_len = cmd->key.key_len;
2507 ret = tls_cmd_set_softap_key(&key, update_flash);
2508 } else {
2509 ret = tls_cmd_get_softap_key(&key);
2510 if (!ret) {
2511 cmdrsp->key.format = key.format;
2512 cmdrsp->key.index = key.index;
2513 cmdrsp->key.key_len = key.key_len;
2514 memcpy(cmdrsp->key.key, key.key, cmdrsp->key.key_len);
2515 }
2516 }
2517
2518 return ret ? -CMD_ERR_OPS : 0;
2519 }
2520
softap_chl_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2521 int softap_chl_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2522 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2523 {
2524 int ret = 0;
2525 if (set_opt) {
2526 if ((cmd->channel.enable > 1) || ((cmd->channel.enable == 1)
2527 && ((cmd->channel.channel > (TEN + FOUR)) ||(cmd->channel.channel < 1)))) {
2528 return -CMD_ERR_INV_PARAMS;
2529 }
2530 if (cmd->channel.enable == 0) {
2531 cmd->channel.channel = 1;
2532 }
2533 ret = tls_cmd_set_softap_channel(cmd->channel.channel, update_flash);
2534 } else {
2535 ret = tls_cmd_get_softap_channel(&cmdrsp->channel.channel);
2536 cmdrsp->channel.enable = 1;
2537 }
2538
2539 return ret ? -CMD_ERR_OPS : 0;
2540 }
2541
softap_wbgr_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2542 int softap_wbgr_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2543 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2544 {
2545 int ret = 0;
2546 int limit_rate;
2547 struct tls_cmd_wl_hw_mode_t hw_mode;
2548 memset(&hw_mode, 0, sizeof(struct tls_cmd_wl_hw_mode_t));
2549
2550 if (set_opt) {
2551 if (cmd->wbgr.mode > THREE || cmd->wbgr.rate > (TWENTY + EIGHT)) {
2552 return -CMD_ERR_INV_PARAMS;
2553 }
2554 limit_rate = (cmd->wbgr.mode == 1) ? THREE : ((cmd->wbgr.mode == TWO)
2555 ? (TWENTY + EIGHT) : (TEN + 1));
2556 hw_mode.max_rate = (cmd->wbgr.rate > limit_rate) ? limit_rate: cmd->wbgr.rate;
2557 hw_mode.hw_mode = cmd->wbgr.mode;
2558 ret = tls_cmd_set_softap_hw_mode(&hw_mode, update_flash);
2559 } else {
2560 ret = tls_cmd_get_softap_hw_mode(&hw_mode);
2561 cmdrsp->wbgr.mode = hw_mode.hw_mode;
2562 cmdrsp->wbgr.rate = hw_mode.max_rate;
2563 }
2564 return ret ? -CMD_ERR_OPS : 0;
2565 }
2566
softap_nip_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2567 int softap_nip_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2568 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2569 {
2570 int ret = 0;
2571 struct tls_cmd_ip_params_t ip_info;
2572 if (set_opt) {
2573 if (cmd->nip.type > 1) {
2574 return -CMD_ERR_INV_PARAMS;
2575 }
2576 ip_info.type = cmd->nip.type;
2577 memcpy(ip_info.ip_addr, cmd->nip.ip, FOUR);
2578 memcpy(ip_info.netmask, cmd->nip.nm, FOUR);
2579 memcpy(ip_info.gateway, cmd->nip.gw, FOUR);
2580 memcpy(ip_info.dns, cmd->nip.dns, FOUR);
2581 ret = tls_cmd_set_softap_ip_info(&ip_info, update_flash);
2582 } else {
2583 ret = tls_cmd_get_softap_ip_info(&ip_info);
2584 cmdrsp->nip.type = ip_info.type;
2585 memcpy(cmdrsp->nip.ip, ip_info.ip_addr, FOUR);
2586 memcpy(cmdrsp->nip.nm, ip_info.netmask, FOUR);
2587 memcpy(cmdrsp->nip.gw, ip_info.gateway, FOUR);
2588 memcpy(cmdrsp->nip.dns, ip_info.dns, FOUR);
2589 }
2590
2591 return ret ? -CMD_ERR_OPS : 0;
2592 }
2593 #endif
2594
qver_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2595 int qver_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2596 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2597 {
2598 tls_cmd_get_ver((struct tls_cmd_ver_t *)&cmdrsp->ver);
2599 return 0;
2600 }
2601
updd_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2602 int updd_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2603 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2604 {
2605 int datasize, session_id;
2606 int err = 0;
2607
2608 session_id = tls_fwup_get_current_session_id();
2609 if ((session_id == 0) || (TLS_FWUP_STATUS_OK != tls_fwup_current_state(session_id))) {
2610 return -CMD_ERR_INV_PARAMS;
2611 }
2612
2613 datasize = cmd->updd.size;
2614 if (cmd->updd.data[0] == 0) { /* at */
2615 if (datasize != sizeof(struct tls_fwup_block)) {
2616 err = -CMD_ERR_INV_PARAMS;
2617 }
2618 } else if (cmd->updd.data[0] == 1) { /* ri */
2619 }
2620
2621 return err;
2622 }
2623
2624 /******************************************************************
2625 * Description: Read register or memory
2626
2627 * Format: AT+®R=<address>,[num]<CR>
2628 +OK=<value1>,[value2]...<CR><LF><CR><LF>
2629
2630 * Argument: address: num:
2631
2632 * Author: kevin 2014-03-19
2633 ******************************************************************/
regr_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2634 int regr_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2635 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2636 {
2637 u32 Addr, Num;
2638 int i = 0;
2639 Addr = cmd->regr.reg_base_addr;
2640 Num = cmd->regr.length;
2641 for (i = 0; i < Num; i++) {
2642 cmdrsp->regr.value[i] = tls_reg_read32(Addr);
2643 Addr += FOUR;
2644 }
2645 cmdrsp->regr.length = Num;
2646 return 0;
2647 }
2648
2649 /******************************************************************
2650 * Description: Write register or memory
2651
2652 * Format: AT+®W=<address>,<value1>,[value2]...<CR>
2653 +OK=<CR><LF><CR><LF>
2654
2655 * Argument: address: value:
2656
2657 * Author: kevin 2014-03-19
2658 ******************************************************************/
regw_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2659 int regw_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2660 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2661 {
2662 u32 Addr, i;
2663 u32 cpu_sr;
2664
2665 cpu_sr = tls_os_set_critical();
2666 Addr = cmd->regw.reg_base_addr;
2667 for (i = 0; i < cmd->regw.length; i++) {
2668 tls_reg_write32(Addr, cmd->regw.v[i]);
2669 Addr += FOUR;
2670 }
2671 tls_os_release_critical(cpu_sr);
2672 return 0;
2673 }
2674
2675 /******************************************************************
2676 * Description: Read RF register
2677
2678 * Format: AT+&RFR=<address>,[num]<CR>
2679 +OK=<value1>,[value2]...<CR><LF><CR><LF>
2680
2681 * Argument: address: size:
2682
2683 * Author: kevin 2014-03-19
2684 ******************************************************************/
rfr_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2685 int rfr_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2686 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2687 {
2688 int i;
2689 u32 Addr, Num;
2690
2691 Addr = cmd->rfr.reg_base_addr;
2692 Num = cmd->rfr.length;
2693
2694 if ((Num < 1) || (Num > EIGHT) || (Addr + Num - 1) > RFR_REG_MAX_NUM) {
2695 return -CMD_ERR_INV_PARAMS;
2696 }
2697
2698 for (i = 0; i < Num; i++) {
2699 cmdrsp->rfr.value[i] = (u16)rf_spi_read(Addr);
2700 Addr += 1;
2701 }
2702 cmdrsp->rfr.length = Num;
2703 return 0;
2704 }
2705
2706 /******************************************************************
2707 * Description: Write RF registers
2708
2709 * Format: AT+&RFW=<address>,<value1>,[value2]...<CR>
2710 +OK<CR><LF><CR><LF>
2711
2712 * Argument: address: value:
2713
2714 * Author: kevin 2014-03-19
2715 ******************************************************************/
rfw_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2716 int rfw_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2717 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2718 {
2719 int i;
2720 u32 Addr, Num;
2721 u16 databuf[EIGHT];
2722
2723 Num = 0;
2724 Addr = cmd->rfw.reg_base_addr;
2725 for (i = 0; i < cmd->rfw.length; i++) {
2726 databuf[Num++] = cmd->rfw.v[i];
2727 }
2728 if ((Num < 1) || (Num > EIGHT) || (Addr + Num - 1) > RFR_REG_MAX_NUM) {
2729 return -CMD_ERR_INV_PARAMS;
2730 }
2731 Addr = Addr * TWO;
2732 for (i = 0; i < Num; i++) {
2733 rf_spi_write((Addr << (TEN + SIX)) | databuf[i]);
2734 Addr += TWO;
2735 }
2736 return 0;
2737 }
2738
flsr_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2739 int flsr_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2740 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2741 {
2742 u32 addr, len, ret = 0;
2743 u8 buff[THIRTY + TWO];
2744 addr = cmd->flsr.reg_base_addr;
2745 len = cmd->flsr.length;
2746 if ((len > EIGHT) || (len < 1)) {
2747 TLS_DBGPRT_INFO("ret = 0x%x, len = 0x%x\r\n", ret, len);
2748 return -CMD_ERR_INV_PARAMS;
2749 }
2750
2751 TLS_DBGPRT_INFO("addr = 0x%x, len = 0x%x\r\n", addr, len);
2752
2753 memset(buff, 0, sizeof(buff));
2754 ret = tls_fls_read(addr, buff, FOUR * len);
2755 if (ret) {
2756 TLS_DBGPRT_INFO("ret = 0x%x\r\n", ret);
2757 return -CMD_ERR_INV_PARAMS;
2758 }
2759 memcpy((u8 *)cmdrsp->flsr.value, buff, FOUR * len);
2760 cmdrsp->flsr.length = len;
2761 return 0;
2762 }
2763
flsw_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2764 int flsw_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2765 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2766 {
2767 u32 addr, num, data, ret, i;
2768 u8 buff[THIRTY + TWO];
2769 addr = cmd->flsw.reg_base_addr;
2770 num = cmd->flsw.length;
2771 memset(buff, 0, sizeof(buff));
2772 for (i = 0; i < num; i++) {
2773 data = cmd->flsw.v[i];
2774 MEMCPY(&buff[FOUR * i], &data, sizeof(u32));
2775 TLS_DBGPRT_INFO("data = 0x%x\r\n", data);
2776 }
2777
2778 ret = tls_fls_write(addr, buff, FOUR * num);
2779 if (ret) {
2780 TLS_DBGPRT_INFO("ret = 0x%x\r\n", ret);
2781 return -CMD_ERR_INV_PARAMS;
2782 }
2783 return 0;
2784 }
2785
2786 /******************************************************************
2787 * Description: set/get system tx gain
2788
2789 * Format: AT+&TXG=[!?][gain]<CR>
2790 +OK[=gain]<CR><LF><CR><LF>
2791
2792 * Argument: 12 byte hex ascii
2793
2794 * Author: kevin 2014-03-12
2795 ******************************************************************/
txg_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2796 int txg_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2797 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2798 {
2799 u8* tx_gain = ieee80211_get_tx_gain();
2800 if (set_opt) {
2801 memcpy(tx_gain, cmd->txg.tx_gain, TX_GAIN_LEN);
2802 TLS_DBGPRT_INFO("save tx gain!\r\n");
2803 tls_set_tx_gain(tx_gain);
2804 } else {
2805 MEMCPY(cmdrsp->txg.tx_gain, tx_gain, TX_GAIN_LEN);
2806 }
2807 return 0;
2808 }
2809
txg_rate_set_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2810 int txg_rate_set_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2811 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2812 {
2813 u8* tx_gain = ieee80211_get_tx_gain();
2814 if (set_opt) {
2815 tx_gain[cmd->txgr.tx_rate] = cmd->txgr.txr_gain[0];
2816 tx_gain[cmd->txgr.tx_rate + TX_GAIN_LEN / THREE] = cmd->txgr.txr_gain[1];
2817 tx_gain[cmd->txgr.tx_rate + TX_GAIN_LEN * TWO / THREE] = cmd->txgr.txr_gain[TWO];
2818 tls_set_tx_gain(tx_gain);
2819 }
2820 return 0;
2821 }
2822
txg_rate_get_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2823 int txg_rate_get_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2824 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2825 {
2826 u8* tx_gain = ieee80211_get_tx_gain();
2827 cmdrsp->txgr.tx_rate = cmd->txgr.tx_rate;
2828 cmdrsp->txgr.txr_gain[0] = tx_gain[cmd->txgr.tx_rate];
2829 cmdrsp->txgr.txr_gain[1] = tx_gain[cmd->txgr.tx_rate + TX_GAIN_LEN / THREE];
2830 cmdrsp->txgr.txr_gain[TWO] = tx_gain[cmd->txgr.tx_rate + TX_GAIN_LEN * TWO / THREE];
2831 return 0;
2832 }
2833
mac_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2834 int mac_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2835 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2836 {
2837 if (set_opt) {
2838 if (cmd->mac.length > (TEN + TWO)) {
2839 return -CMD_ERR_INV_PARAMS;
2840 }
2841 wpa_supplicant_set_mac(cmd->mac.macaddr);
2842 tls_set_mac_addr(cmd->mac.macaddr);
2843 } else {
2844 u8 *mac = NULL;
2845 mac = wpa_supplicant_get_mac();
2846 memcpy(cmdrsp->mac.addr, mac, SIX);
2847 }
2848 return 0;
2849 }
2850
hwv_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2851 int hwv_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2852 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2853 {
2854 tls_cmd_get_ver((struct tls_cmd_ver_t *)&cmdrsp->ver);
2855 return 0;
2856 }
2857
2858 /******************************************************************
2859 * Description: Set/Get spi flash's parameter
2860
2861 * Format: AT+&SPIF=[!?][size]<CR>[data stream]
2862 +OK<CR><LF><CR><LF>[data stream]
2863
2864 * Argument: hex
2865
2866 * Author: kevin 2014-03-17
2867 ******************************************************************/
spif_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2868 int spif_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2869 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2870 {
2871 return 0;
2872 }
2873
2874 /******************************************************************
2875 * Description: For litepoint init
2876
2877 * Format: none
2878
2879 * Argument: none
2880
2881 * Author: kevin 2014-03-13
2882 ******************************************************************/
atcmd_lpinit(void)2883 static void atcmd_lpinit(void)
2884 {
2885 tls_cmd_disconnect_network(IEEE80211_MODE_INFRA | IEEE80211_MODE_AP);
2886 tls_litepoint_start();
2887 }
2888
2889 /******************************************************************
2890 * Description: For litepoint test, set wireless channel
2891
2892 * Format: AT+&LPCHL=[!?]<channel><CR>
2893 +OK<CR><LF><CR><LF>
2894 * Argument: channel:1-14
2895
2896 * Author: kevin 2014-03-12
2897 ******************************************************************/
lpchl_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2898 int lpchl_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2899 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2900 {
2901 if ((cmd->lpchl.channel < 1) || (cmd->lpchl.channel > (TEN + FOUR))) {
2902 TLS_DBGPRT_INFO("kevin params err! %x\r\n", cmd->lpchl.channel);
2903 return -CMD_ERR_INV_PARAMS;
2904 }
2905
2906 atcmd_lpinit();
2907 tls_set_test_channel(cmd->lpchl.channel, cmd->lpchl.bandwidth);
2908
2909 return 0;
2910 }
2911
2912 /******************************************************************
2913 * Description: For litepoint test, start tx process
2914
2915 * Format: AT+&LPTSTR=<temperaturecompensation>,<PacketCount>,
2916 <PsduLen>,<TxGain>,<DataRate>[,rifs][,greenfield][,gimode]<CR>
2917 +OK<CR><LF><CR><LF>
2918
2919 * Argument: hex <temperaturecompensation>:
2920 255-compensation for different temperature;other value-no temperature;
2921 <PacketCount>, 0琛ㄧず闀垮彂
2922 <PsduLen>, 鍖呴暱搴?
2923 <TxGain>, 澧炵泭锛岀洿鎺ュ啓鍒癕ac bd
2924 <DataRate>,
2925 S2M = 0x0000,
2926 S5M5 = 0x0001, S11M = 0x0002, L1M = 0x0003, L2M = 0x0004,
2927 L5M5 = 0x0005, L11M = 0x0006,
2928 R06M = 0x0100, R09M = 0x0101, R12M = 0x0102, R18M = 0x0103, R24M = 0x0104,
2929 R36M = 0x0105, R48M = 0x0106, R54M = 0x0107,
2930 MCS0 = 0x0200, MCS1 = 0x0201, MCS2 = 0x0202, MCS3 = 0x0203, MCS4 = 0x0204,
2931 MCS5 = 0x0205, MCS6 = 0x0206, MCS7 = 0x0207, MCS8 = 0x0208, MCS9 = 0x0209,
2932 MCS10 = 0x0210, MCS11 = 0x0211, MCS12 = 0x0212, MCS13 = 0x0213, MCS14 = 0x0214,
2933 MCS15 = 0x0215, MCS32 = 0x0232,
2934 [rifs], 1: mac_txbd->ctrl1 |= (1 << 12)
2935 [greenfield], 1: mac_txbd->ctrl4 |= (1 << 18)
2936 [gimode], 1: mac_txbd->ctrl4 |= (1 << 19)
2937 [timedelay] 鍖呴棿闅旀椂闂达紝鍗曚綅寰锛?6杩涘埗
2938 ******************************************************************/
lptstr_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2939 int lptstr_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2940 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2941 {
2942 TLS_DBGPRT_INFO("tempcomp = 0x%x, PacketCount = 0x%x, PsduLen = 0x%x, TxGain = 0x%x, DataRate = 0x%x"
2943 "rifs:0x%x,greenfield:0x%x, gimode:0x%x \r\n",
2944 cmd->lptstr.tempcomp, cmd->lptstr.packetcount, cmd->lptstr.psdulen,
2945 cmd->lptstr.txgain, cmd->lptstr.datarate, cmd->lptstr.rifs,
2946 cmd->lptstr.greenfield, cmd->lptstr.gimode);
2947
2948 atcmd_lpinit();
2949 tls_tx_litepoint_test_start(cmd->lptstr.tempcomp, cmd->lptstr.packetcount, cmd->lptstr.psdulen,
2950 cmd->lptstr.txgain, cmd->lptstr.datarate, cmd->lptstr.gimode,
2951 cmd->lptstr.greenfield, cmd->lptstr.rifs);
2952
2953 return 0;
2954 }
2955
tls_lptperiod_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2956 int tls_lptperiod_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2957 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2958 {
2959 if (set_opt) {
2960 tls_set_tx_litepoint_period(cmd->rxsin.rxlen);
2961 }
2962 return 0;
2963 }
2964
2965 /******************************************************************
2966 * Description: For litepoint test, stop tx process
2967
2968 * Format: AT+&LPTSTP<CR>
2969 +OK<CR><LF><CR><LF>
2970
2971 * Argument: none
2972
2973 * Author: kevin 2014-03-13
2974 ******************************************************************/
lptstp_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2975 int lptstp_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2976 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2977 {
2978 tls_txrx_litepoint_test_stop();
2979 return 0;
2980 }
2981
2982 /******************************************************************
2983 * Description: For litepoint test, query tx infomation
2984
2985 * Format: AT+&LPTSTT<CR>
2986 +OK=<TransCnt><CR><LF><CR><LF>
2987
2988 * Author: kevin 2014-03-13
2989 ******************************************************************/
lptstt_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)2990 int lptstt_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
2991 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
2992 {
2993 return 0;
2994 }
2995
2996 /******************************************************************
2997 * Description: For litepoint test, start rx process
2998
2999 * Format: AT+&LPRSTR=channel<CR>
3000 +OK<CR><LF><CR><LF>
3001
3002 * Argument: channel:1-14
3003
3004 * Author: kevin 2014-03-13
3005 ******************************************************************/
lprstr_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3006 int lprstr_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3007 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3008 {
3009 if ((cmd->lpchl.channel < 1) || (cmd->lpchl.channel > (TEN + FOUR))) {
3010 TLS_DBGPRT_INFO("Channel = 0x%x \r\n", cmd->lpchl.channel);
3011 return -CMD_ERR_INV_PARAMS;
3012 }
3013 atcmd_lpinit();
3014 tls_rx_litepoint_test_start(cmd->lpchl.channel, cmd->lpchl.bandwidth);
3015 return 0;
3016 }
3017
3018 /******************************************************************
3019 * Description: For litepoint test, stop rx process
3020
3021 * Format: AT+&LPRSTP<CR>
3022 +OK<CR><LF><CR><LF>
3023
3024 * Author: kevin 2014-03-13
3025 ******************************************************************/
lprstp_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3026 int lprstp_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3027 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3028 {
3029 tls_txrx_litepoint_test_stop();
3030 return 0;
3031 }
3032
3033 /******************************************************************
3034 * Description: For litepoint test, query rx infomation
3035
3036 * Format: AT+&LPRSTT<CR>
3037 +OK=<TotalRecvCnt>,<CorrectRecvCnt>,<FcsErrorCnt><CR><LF><CR><LF>
3038
3039 * Author: kevin 2014-03-13
3040 ******************************************************************/
lprstt_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3041 int lprstt_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3042 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3043 {
3044 return 0;
3045 }
3046
3047 /******************************************************************
3048 * Description: For litepoint test, start the calibration process of rf's parameter(LO-Leakage)
3049
3050 * Format: AT+&LPPSTR=<init_param>,<flag_start><CR>
3051 +OK<CR><LF><CR><LF>
3052
3053 * Argument: hex init_param: flag_start:
3054
3055 * Author: kevin 2014-03-14
3056 ******************************************************************/
3057 u8 gulCalFlag = 0;
lppstr_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3058 int lppstr_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3059 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3060 {
3061 return 0;
3062 }
3063
3064 /******************************************************************
3065 * Description: For litepoint test, stop the calibration and return the result (IQ-Mismatch)
3066
3067 * Format: AT+&LPPSTP=<result_param><CR>
3068 +OK<CR><LF><CR><LF>
3069
3070 * Argument: hex result_param: IQ-Mismatch
3071
3072 * Author: kevin 2014-03-14
3073 ******************************************************************/
lppstp_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3074 int lppstp_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3075 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3076 {
3077 return 0;
3078 }
3079
3080 /******************************************************************
3081 * Description: For litepoint test, setting the parameter of RF
3082
3083 * Format: AT+&LPRFPS=< rftype ><size><CR>[data stream]
3084 +OK=<CR><LF><CR><LF>
3085
3086 * Argument: ftype锛歳f绫诲瀷 0锛?230锛?锛?829锛?锛欻EDrf
3087 data stream 涓寘鍚?6涓猺f瀵勫瓨鍣紝鍜?8涓俊閬撳瘎瀛樺櫒
3088
3089 * Author: kevin 2014-03-14
3090 ******************************************************************/
lprfps_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3091 int lprfps_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3092 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3093 {
3094 return 0;
3095 }
3096
3097 /******************************************************************
3098 * Description: For litepoint test, receive and set channel
3099
3100 * Format: AT+&LPCHRS =<channel>,< rxcbw ><CR>
3101 +OK<CR><LF><CR><LF>
3102
3103 * Argument: channel: 鏃犵嚎淇¢亾鍙凤紝鏈夋晥鑼冨洿1锝?4
3104 rxcbw: 鎺ユ敹瀵瑰簲淇¢亾甯﹀0: 20M锛?锛?0M
3105
3106 * Author: kevin 2014-03-14
3107 ******************************************************************/
lpchrs_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3108 int lpchrs_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3109 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3110 {
3111 return lpchl_proc(set_opt, update_flash, cmd, cmdrsp);
3112 }
3113
3114 /******************************************************************
3115 * Description: For litepoint test, BD Tx process
3116
3117 * Format: AT+&LPTBD =< psdulen >,< txgain >,< datarate >< txcbw >,<gi>,<gf>,< rifs ><CR>
3118 +OK<CR><LF><CR><LF>
3119
3120 * Argument: psdulen: 鏁版嵁闀垮害锛屾湁鏁堣寖鍥?4锝?5535
3121 txgain: 鍙戝皠澧炵泭
3122 datarate: 鏁版嵁鏁扮巼
3123 txcbw: 鍙戝皠甯﹀0:20M;1:40M
3124 gi: 0:normal gi;1:short gi
3125 gf: 0:no green field;1: green field
3126 rifs: 0:no rifs;1:rifs
3127 Data Rate:
3128 S2M = 0x0000, S5.5M = 0x0001, S11M = 0x0002, L1M = 0x0003,
3129 L2M = 0x0004, L5M5 = 0x0005, L11M = 0x0006, 06M = 0x0100,
3130 09M = 0x0101, 12M = 0x0102, 18M = 0x0103, 24M = 0x0104,
3131 36M = 0x0105, 48M = 0x0106, 54M = 0x0107, MCS0 = 0x200,
3132 MCS1 = 0x201, MCS2 = 0x202, MCS3 = 0x203, MCS4 = 0x204,
3133 MCS5 = 0x205, MCS6 = 0x206, MCS7 = 0x207,
3134
3135 * Author: kevin 2014-03-14
3136 ******************************************************************/
lptbd_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3137 int lptbd_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3138 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3139 {
3140 return lptstr_proc(set_opt, update_flash, cmd, cmdrsp);
3141 }
3142
3143 /******************************************************************
3144 * Description: For litepoint test, stop tx process
3145
3146 * Format: AT+&LPSTPT<CR>
3147 +OK<CR><LF><CR><LF>
3148
3149 * Author: kevin 2014-03-14
3150 ******************************************************************/
lpstpt_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3151 int lpstpt_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3152 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3153 {
3154 return lptstp_proc(set_opt, update_flash, cmd, cmdrsp);
3155 }
3156
3157 /******************************************************************
3158 * Description: For litepoint test, receive channel
3159
3160 * Format: AT+&LPCHLR =<channel>,< rxcbw ><CR>
3161 +OK<CR><LF><CR><LF>
3162
3163 * Author: kevin 2014-03-14
3164 ******************************************************************/
lpchlr_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3165 int lpchlr_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3166 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3167 {
3168 return lprstr_proc(set_opt, update_flash, cmd, cmdrsp);
3169 }
3170
3171 /******************************************************************
3172 * Description: For litepoint test, stop rx process
3173
3174 * Format: AT+&LPSTPR<CR>
3175 +OK<CR><LF><CR><LF>
3176
3177 * Author: kevin 2014-03-14
3178 ******************************************************************/
lpstpr_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3179 int lpstpr_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3180 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3181 {
3182 return lprstp_proc(set_opt, update_flash, cmd, cmdrsp);
3183 }
3184
3185 /******************************************************************
3186 * Description: For litepoint test, For query rx frame information
3187
3188 * Format: AT+&LPRAGC <CR>
3189 +OK=<TotalRecvCnt>,<CorrectRecvCnt>,<FcsErrorCnt><CR><LF><CR><LF>
3190
3191 * Author: kevin 2014-03-14
3192 ******************************************************************/
lpragc_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3193 int lpragc_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3194 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3195 {
3196 return 0;
3197 }
3198
3199 /******************************************************************
3200 * Description: For litepoint test, For query rx frame information
3201
3202 * Format: AT+&LPRSR [=?]<CR>
3203 +OK[=valid,rcpi,snr]<CR><LF><CR><LF>
3204
3205 * Argument: none
3206
3207 * Author: kevin 2014-03-14
3208 ******************************************************************/
lprsr_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3209 int lprsr_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3210 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3211 {
3212 return 0;
3213 }
3214
tls_tx_lo_proc(u8 set_opt,u8 update_flah,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3215 int tls_tx_lo_proc(u8 set_opt, u8 update_flah, union HOSTIF_CMD_PARAMS_UNION *cmd,
3216 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3217 {
3218 int ret = -1;
3219
3220 if (set_opt) {
3221 ret = tls_set_tx_lo((u8 *)&cmd->txLO.txlo);
3222 } else {
3223 ret = tls_get_tx_lo((u8 *)&cmdrsp->txLO.txlo);
3224 }
3225
3226 return ret;
3227 }
3228
tls_tx_iq_mismatch_proc(u8 set_opt,u8 update_flah,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3229 int tls_tx_iq_mismatch_proc(u8 set_opt, u8 update_flah, union HOSTIF_CMD_PARAMS_UNION *cmd,
3230 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3231 {
3232 int ret = -1;
3233
3234 if (set_opt) {
3235 ret = tls_set_tx_iq_gain((u8 *)&cmd->txIQ.txiqgain);
3236 ret = tls_set_tx_iq_phase((u8 *)&cmd->txIQ.txiqphase);
3237 } else {
3238 ret = tls_get_tx_iq_gain((u8 *)&cmdrsp->txIQ.txiqgain);
3239 ret = tls_get_tx_iq_phase((u8 *)&cmdrsp->txIQ.txiqphase);
3240 }
3241
3242 return ret;
3243 }
3244
tls_freq_error_proc(u8 set_opt,u8 update_flah,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3245 int tls_freq_error_proc(u8 set_opt, u8 update_flah, union HOSTIF_CMD_PARAMS_UNION *cmd,
3246 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3247 {
3248 int ret = -1;
3249
3250 if (set_opt) {
3251 ret = tls_freq_err_op((u8 *) &cmd->FreqErr.freqerr, 1);
3252 } else {
3253 ret = tls_freq_err_op((u8 *) &cmdrsp->FreqErr.freqerr, 0);
3254 }
3255
3256 return ret;
3257 }
3258
tls_rf_vcg_ctrl_proc(u8 set_opt,u8 update_flah,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3259 int tls_rf_vcg_ctrl_proc(u8 set_opt, u8 update_flah, union HOSTIF_CMD_PARAMS_UNION *cmd,
3260 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3261 {
3262 return;
3263 }
3264
3265 #if TLS_CONFIG_WIFI_PERF_TEST
3266 /******************************************************************
3267 * Description: As server: TEST UDP & TCP RX
3268 AT+THT=Ss,-i=1
3269 AT+THT=Ss
3270
3271 As client: None
3272 UDP TX: AT+THT=Cc,192.168.1.100, UDP, -b=10K,-t=10,-i=1
3273 -b=0: full speed test
3274 K for kilo bps
3275 M for Mega bps
3276
3277 TCP TX: AT+THT=Cc,192.168.1.100, TCP, -l=1024,-t=10,-i=1
3278 -l: 1024 block size; prefer to x * 1024, l < 32
3279
3280 ******************************************************************/
tht_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3281 int tht_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3282 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3283 {
3284 int ret = -1;
3285 ret = tht_start_iperf_test(((struct tls_atcmd_token_t *)cmd->tht.tok)->arg);
3286 switch (ret) {
3287 case 0:
3288 ret = 0;
3289 break;
3290 case -1:
3291 ret = -CMD_ERR_MEM;
3292 break;
3293 default:
3294 ret = -CMD_ERR_INV_PARAMS;
3295 break;
3296 }
3297 return ret;
3298 }
3299 #endif
3300
3301 #if TLS_CONFIG_WIFI_PING_TEST
ping_parse_param(struct ping_param * para,union HOSTIF_CMD_PARAMS_UNION * cmd)3302 static int ping_parse_param(struct ping_param *para,
3303 union HOSTIF_CMD_PARAMS_UNION *cmd)
3304 {
3305 int ret = -1;
3306
3307 strcpy(para->host, (char*)cmd->ping.ip);
3308 para->interval = cmd->ping.timeLimt;
3309 para->cnt = cmd->ping.cnt;
3310 para->src = cmd->ping.src;
3311 ret = cmd->ping.start;
3312 return ret;
3313 }
3314
3315 /*
3316 AT+PING=HOST,INTERVAL(ms),T(0|1),START(1)
3317 AT+PING=HOST,INTERVAL(ms),T(0|1),STOP(0)
3318 */
ping_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3319 static int ping_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3320 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3321 {
3322 int ret = -1;
3323 struct ping_param para;
3324
3325 memset(¶, 0, sizeof(para));
3326 cmdrsp->ping.ext = cmd->ping.ext;
3327
3328 if (cmd->ping.ext) {
3329 ping_test_create_task();
3330
3331 ret = ping_parse_param(¶, cmd);
3332 if (ret == 1) {
3333 ping_test_start(¶);
3334 ret = 0;
3335 } else if (ret == 0) {
3336 ping_test_stop();
3337 ret = 0;
3338 } else {
3339 ret = -CMD_ERR_INV_PARAMS;
3340 }
3341 } else {
3342 ping_parse_param(¶, cmd);
3343 ret = ping_test_sync(¶);
3344 if (ret >= 0) {
3345 cmdrsp->ping.ttl = ret;
3346 ret = 0;
3347 }
3348 }
3349 return ret;
3350 }
3351 #endif
3352
3353 /*
3354 For PIN:
3355 1:
3356 Step1: AT+WWPS=get_pin
3357 Pin code will be responsed; User should input this Pin to AP;
3358 Step2: AT+WWPS=start_pin
3359 ___________________________
3360 2:
3361 Step1: AT+WWPS=!set_pin,xxxx
3362 User can set an Pin code to device; User should input this Pin to AP;
3363 Step2: AT+WWPS=start_pin
3364
3365 ___________________________
3366 3:
3367 Step1: AT+WWPS=start_pin
3368 Pin code is the default value, and stored in system during
3369 manufacturing;User should input this Pin to AP;
3370
3371 ___________________________
3372 For PBC:
3373 4:
3374 Step1: AT+WWPS=start_pbc
3375
3376 */
3377 #if TLS_CONFIG_WPS
wwps_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3378 int wwps_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3379 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3380 {
3381 struct tls_param_wps tmp_wps;
3382 int err = 0;
3383
3384 if (set_opt) {
3385 memset(&tmp_wps, 0, sizeof(struct tls_param_wps));
3386 if (cmd->wps.mode == 0) {
3387 tls_cmd_get_wps_pin(&tmp_wps);
3388 memcpy(cmdrsp->wps.pin, tmp_wps.pin, WPS_PIN_LEN);
3389 cmdrsp->wps.pin_len = WPS_PIN_LEN;
3390 cmdrsp->wps.result = 1;
3391 } else if (cmd->wps.mode == 1) {
3392 if (cmd->wps.pin_len != EIGHT) {
3393 return -CMD_ERR_INV_PARAMS;
3394 }
3395 memcpy(tmp_wps.pin, cmd->wps.pin, cmd->wps.pin_len);
3396 tls_cmd_set_wps_pin(&tmp_wps, update_flash);
3397 cmdrsp->wps.result = 0;
3398 } else if (cmd->wps.mode == TWO) {
3399 err = tls_wps_start_pin();
3400 cmdrsp->wps.result = 0;
3401 } else if (cmd->wps.mode == THREE) {
3402 err = tls_wps_start_pbc();
3403 cmdrsp->wps.result = 0;
3404 } else
3405 err = 1;
3406 } else {
3407 err = 1;
3408 }
3409 return err ? -CMD_ERR_INV_PARAMS : 0;
3410 }
3411 #endif
3412
custdata_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3413 int custdata_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3414 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3415 {
3416 return;
3417 }
3418
stand_by_power_down(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3419 int stand_by_power_down(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3420 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3421 {
3422 #define CMD_START_Pos 8U /*!< CMD start position */
3423 #define CMD_START_Msk (1UL << CMD_START_Pos) /*!< CMD start Mask */
3424 uint32_t val = 0;
3425 val = tls_reg_read32(HR_PMU_PS_CR);
3426 val |= BIT(0);
3427 tls_reg_write32(HR_PMU_PS_CR, val);
3428
3429 /* Enter Deep Power Down Mode */
3430 M32(HR_FLASH_CMD_ADDR) = 0xB9;
3431 M32(HR_FLASH_CMD_START) = CMD_START_Msk;
3432 return 0;
3433 }
3434
cpu_state_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3435 int cpu_state_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3436 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3437 {
3438 csi_vic_set_wakeup_irq(UART0_IRQn);
3439 switch (cmd->width.freq) {
3440 case 0:
3441 __WAIT();
3442 break;
3443 case 1:
3444 __DOZE();
3445 break;
3446 case TWO:
3447 __STOP();
3448 break;
3449 default:
3450 return -1;
3451 }
3452 printf("cpu state %d out\n", cmd->width.freq);
3453 return 0;
3454 }
3455
tls_uart_bps_set(u8 portNum,u32 bdrate)3456 s32 tls_uart_bps_set(u8 portNum, u32 bdrate)
3457 {
3458 u32 val, reg_addr;
3459 tls_sys_clk sysclk;
3460
3461 reg_addr = HR_UART0_BAUD_RATE_CTRL + portNum * 0x200;
3462 tls_sys_clk_get(&sysclk);
3463 val = (sysclk.apbclk * ONE_MILLION / ((TEN + SIX) * bdrate) - 1) |
3464 (((sysclk.apbclk * ONE_MILLION % (bdrate * (TEN + SIX))) *
3465 (TEN + SIX) / (bdrate * (TEN + SIX))) << (TEN + SIX));
3466
3467 tls_reg_write32(reg_addr, val);
3468
3469 return 0;
3470 }
3471
3472 #if (WM_BT_INCLUDED == CFG_ON || WM_BLE_INCLUDED == CFG_ON || WM_NIMBLE_INCLUDED == CFG_ON)
3473
bt_enable_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3474 int bt_enable_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3475 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3476 {
3477 return;
3478 }
3479
bt_destory_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3480 int bt_destory_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3481 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3482 {
3483 return;
3484 }
3485
bt_ctrl_get_status_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3486 int bt_ctrl_get_status_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3487 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3488 {
3489 cmdrsp->bt.status = (u8)tls_bt_controller_get_status();
3490 return 0;
3491 }
3492
bt_sleep_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3493 int bt_sleep_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3494 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3495 {
3496 tls_bt_status_t ret = TLS_BT_STATUS_FAIL;
3497
3498 if (cmd->bt.cmd) {
3499 ret = tls_bt_ctrl_sleep(TRUE);
3500 } else {
3501 ret = tls_bt_ctrl_sleep(FALSE);
3502 }
3503
3504 return (ret == TLS_BT_STATUS_SUCCESS) ? 0 : -CMD_ERR_OPS;
3505 }
3506
ble_tx_power_set_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3507 int ble_tx_power_set_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3508 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3509 {
3510 tls_bt_status_t ret = TLS_BT_STATUS_FAIL;
3511 ret = tls_ble_set_tx_power((tls_ble_power_type_t)cmd->btctrl.type, cmd->btctrl.level);
3512
3513 return (ret == TLS_BT_STATUS_SUCCESS) ? 0 : -CMD_ERR_OPS;
3514 }
3515
ble_tx_power_get_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3516 int ble_tx_power_get_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3517 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3518 {
3519 cmdrsp->bt.status = (u8)tls_ble_get_tx_power((tls_ble_power_type_t)cmd->btctrl.type);
3520 return 0;
3521 }
3522
bt_tx_power_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3523 int bt_tx_power_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3524 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3525 {
3526 tls_bt_status_t ret = TLS_BT_STATUS_FAIL;
3527
3528 if (set_opt) {
3529 ret = tls_bredr_set_tx_power((int8_t)cmd->btctrl.type, (int8_t)cmd->btctrl.level);
3530 } else {
3531 tls_bredr_get_tx_power((int8_t *)&cmdrsp->blepow.min, (int8_t *)&cmdrsp->blepow.max);
3532 ret = TLS_BT_STATUS_SUCCESS;
3533 }
3534
3535 return (ret == TLS_BT_STATUS_SUCCESS) ? 0 : -CMD_ERR_OPS;
3536 }
3537
bt_test_mode_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3538 int bt_test_mode_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3539 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3540 {
3541 tls_bt_status_t ret = TLS_BT_STATUS_SUCCESS;
3542 tls_bt_hci_if_t hci_if;
3543
3544 if (cmd->bt.cmd == 1) {
3545 /* default uart1 will be used */
3546 hci_if.uart_index = 1;
3547 ret = enable_bt_test_mode(&hci_if);
3548 } else if (cmd->bt.cmd == 0) {
3549 ret = exit_bt_test_mode();
3550 }
3551
3552 return (ret == TLS_BT_STATUS_SUCCESS) ? 0 : -CMD_ERR_OPS;
3553 }
3554
bt_mac_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3555 int bt_mac_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3556 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3557 {
3558 int ret;
3559
3560 if (set_opt) {
3561 if (cmd->mac.length > (TEN + TWO)) {
3562 return -CMD_ERR_INV_PARAMS;
3563 }
3564 ret = tls_set_bt_mac_addr(cmd->mac.macaddr);
3565 } else {
3566 ret = tls_get_bt_mac_addr(cmdrsp->mac.addr);
3567 }
3568 return ret;
3569 }
3570
bt_name_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3571 int bt_name_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3572 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3573 {
3574 return;
3575 }
3576
bt_rf_mode_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3577 int bt_rf_mode_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3578 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3579 {
3580 tls_bt_status_t ret = TLS_BT_STATUS_SUCCESS;
3581 tls_rf_bt_mode(cmd->bt.cmd);
3582 return (ret == TLS_BT_STATUS_SUCCESS) ? 0 : -CMD_ERR_OPS;
3583 }
3584
3585 #if (WM_BTA_AV_SINK_INCLUDED == CFG_ON)
3586
bt_audio_sink_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3587 int bt_audio_sink_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3588 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3589 {
3590 tls_bt_status_t ret = TLS_BT_STATUS_SUCCESS;
3591
3592 if (cmd->bt.cmd == 1) {
3593 ret = tls_bt_enable_a2dp_sink();
3594 } else if (cmd->bt.cmd == 0) {
3595 ret = tls_bt_disable_a2dp_sink();
3596 }
3597 return (ret == TLS_BT_STATUS_SUCCESS) ? 0 : -CMD_ERR_OPS;
3598 }
3599 #endif
3600
3601 #if (WM_BTA_HFP_HSP_INCLUDED == CFG_ON)
3602
bt_hfp_client_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3603 int bt_hfp_client_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3604 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3605 {
3606 tls_bt_status_t ret = TLS_BT_STATUS_SUCCESS;
3607
3608 if (cmd->bt.cmd == 1) {
3609 ret = tls_bt_enable_hfp_client();
3610 } else if (cmd->bt.cmd == 0) {
3611 ret = tls_bt_disable_hfp_client();
3612 }
3613 return (ret == TLS_BT_STATUS_SUCCESS) ? 0 : -CMD_ERR_OPS;
3614 }
3615
bt_dial_up_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3616 int bt_dial_up_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3617 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3618 {
3619 tls_bt_status_t ret = TLS_BT_STATUS_FAIL;
3620
3621 ret = tls_bt_dial_number(cmd->btname.name);
3622
3623 return (ret == TLS_BT_STATUS_SUCCESS) ? 0 : -CMD_ERR_OPS;
3624 }
3625
3626 #endif
3627
3628 #if (WM_BTA_SPPC_INCLUDED == CFG_ON)
bt_spp_client_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3629 int bt_spp_client_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3630 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3631 {
3632 tls_bt_status_t ret = TLS_BT_STATUS_SUCCESS;
3633
3634 if (cmd->bt.cmd == 1) {
3635 ret = tls_bt_enable_spp_client();
3636 } else if (cmd->bt.cmd == 0) {
3637 ret = tls_bt_disable_spp_client();
3638 }
3639 return (ret == TLS_BT_STATUS_SUCCESS) ? 0 : -CMD_ERR_OPS;
3640 }
3641 #endif
3642
3643 #if (WM_BTA_SPPS_INCLUDED == CFG_ON)
3644
bt_spp_server_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3645 int bt_spp_server_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3646 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3647 {
3648 tls_bt_status_t ret = TLS_BT_STATUS_SUCCESS;
3649
3650 if (cmd->bt.cmd == 1) {
3651 ret = tls_bt_enable_spp_server();
3652 } else if (cmd->bt.cmd == 0) {
3653 ret = tls_bt_disable_spp_server();
3654 }
3655 return (ret == TLS_BT_STATUS_SUCCESS) ? 0 : -CMD_ERR_OPS;
3656 }
3657 #endif
3658
3659 #if (WM_BT_INCLUDED == CFG_ON)
3660
bt_scan_mode_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3661 int bt_scan_mode_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3662 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3663 {
3664 tls_bt_status_t ret = TLS_BT_STATUS_SUCCESS;
3665 ret = demo_bt_scan_mode(cmd->bt.cmd);
3666
3667 return (ret == TLS_BT_STATUS_SUCCESS) ? 0 : -CMD_ERR_OPS;
3668 }
3669
bt_inquiry_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3670 int bt_inquiry_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3671 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3672 {
3673 tls_bt_status_t ret = TLS_BT_STATUS_SUCCESS;
3674 ret = demo_bt_inquiry(cmd->bt.cmd);
3675
3676 return (ret == TLS_BT_STATUS_SUCCESS) ? 0 : -CMD_ERR_OPS;
3677 }
3678 #endif
3679 #endif
3680
cpu_clock_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3681 int cpu_clock_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3682 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3683 {
3684 u8 div = (u8)cmd->width.freq;
3685 if (set_opt) {
3686 tls_sys_clk_set(div);
3687 tls_uart_bps_set(0, TEN_HUNDRED_AND_FIFTEEN_THOUSAND_AND_TWO_HUNDRED);
3688 } else {
3689 clk_div_reg clk_div;
3690 clk_div.w = tls_reg_read32(HR_CLK_DIV_CTL);
3691 cmdrsp->pass.length = clk_div.b.CPU;
3692 div = clk_div.b.CPU;
3693 }
3694 printf("cpu clk is %d\n", FOUR_HUNRED_AND_EIGHTY_MILLION / div);
3695 return 0;
3696 }
3697
set_token_proc(u8 set_opt,u8 update_flash,union HOSTIF_CMD_PARAMS_UNION * cmd,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp)3698 int set_token_proc(u8 set_opt, u8 update_flash, union HOSTIF_CMD_PARAMS_UNION *cmd,
3699 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp)
3700 {
3701 return;
3702 }
3703
3704 static struct tls_cmd_t at_ri_cmd_tbl[] = {
3705 #if 1
3706 { "Z", HOSTIF_CMD_RESET, 0x11, 0, 0, z_proc},
3707 { "E", HOSTIF_CMD_NOP, 0x1, 0, 0, e_proc},
3708 { "ENTS", HOSTIF_CMD_PS, 0x22, FOUR, FOUR, ents_proc},
3709 { "RSTF", HOSTIF_CMD_RESET_FLASH, 0x11, 0, 0, rstf_proc},
3710 { "PMTF", HOSTIF_CMD_PMTF, 0x11, 0, 0, pmtf_proc},
3711 { "IOC", HOSTIF_CMD_GPIO, 0x11, 0, 0, ioc_proc},
3712 { "WLEAV", HOSTIF_CMD_WLEAVE, 0x13, 1, 0, wleav_proc},
3713 #if TLS_CONFIG_SOCKET_RAW || TLS_CONFIG_SOCKET_STD
3714 { "LKSTT", HOSTIF_CMD_LINK_STATUS, 0x19, 0, 0, lkstt_proc},
3715 { "SKSTT", HOSTIF_CMD_SKSTT, 0x22, 1, 1, skstt_proc},
3716 { "SKCLS", HOSTIF_CMD_SKCLOSE, 0x22, 1, 1, skcls_proc},
3717 { "SKSDF", HOSTIF_CMD_SKSDF, 0x22, 1, 1, sksdf_proc},
3718 { "SKRCV", HOSTIF_CMD_NOP, 0x02, TWO, 0, skrcv_proc},
3719 { "SKRPTM", HOSTIF_CMD_NOP, 0xA, 1, 0, skrptm_proc},
3720 { "SKSRCIP", HOSTIF_CMD_SKSRCIP, 0x18, 0, 0, sksrcip_proc},
3721 { "SKGHBN", HOSTIF_CMD_SKGHBN, 0x22, 1, 1, skghbn_proc},
3722 #endif
3723 { "WPRT", HOSTIF_CMD_WPRT, 0x7F, 1, 1, wprt_proc},
3724 { "SSID", HOSTIF_CMD_SSID, 0x7F, 1, 1, ssid_proc},
3725 { "KEY", HOSTIF_CMD_KEY, 0x7F, THREE, THREE, key_proc},
3726 { "ENCRY", HOSTIF_CMD_ENCRYPT, 0x7F, 1, 1, encry_proc},
3727 { "BSSID", HOSTIF_CMD_BSSID, 0x7F, 1, 1, bssid_proc},
3728 { "BRDSSID", HOSTIF_CMD_BRD_SSID, 0x7F, 1, 1, brdssid_proc},
3729 { "CNTPARAM", HOSTIF_CMD_CNTPARAM, 0x19, 0, 0, cntparam_proc},
3730 { "CHL", HOSTIF_CMD_CHNL, 0x7F, 1, TWO, chl_proc},
3731 { "CHLL", HOSTIF_CMD_CHLL, 0x7F, 1, TWO, chll_proc},
3732 { "WREG", HOSTIF_CMD_WREG, 0x7F, 1, TWO, wreg_proc},
3733 { "WBGR", HOSTIF_CMD_WBGR, 0x7F, TWO, TWO, wbgr_proc},
3734 { "WATC", HOSTIF_CMD_WATC, 0x7F, 1, 1, watc_proc},
3735 { "WPSM", HOSTIF_CMD_WPSM, 0x7F, 1, 1, wpsm_proc},
3736 { "WARC", HOSTIF_CMD_WARC, 0x7F, 1, 1, warc_proc},
3737 { "WARM", HOSTIF_CMD_WARM, 0x7F, 1, 1, warm_proc},
3738 #if TLS_CONFIG_SOCKET_RAW || TLS_CONFIG_SOCKET_STD
3739 { "NIP", HOSTIF_CMD_NIP, 0x7F, 1, TEN + SEVEN, nip_proc},
3740 #endif
3741 { "ATM", HOSTIF_CMD_ATM, 0x7F, 1, 1, atm_proc},
3742 { "ATRM", HOSTIF_CMD_ATRM, 0x7F, FOUR, SIX, atrm_proc},
3743 { "AOLM", HOSTIF_CMD_AOLM, 0x7F, 0, 0, aolm_proc},
3744 { "PORTM", HOSTIF_CMD_PORTM, 0x7F, 1, 1, portm_proc},
3745 { "UART", HOSTIF_CMD_UART, 0x7F, FOUR, SEVEN, uart_proc},
3746 { "ATLT", HOSTIF_CMD_ATLT, 0x7F, 1, TWO, atlt_proc},
3747 { "DNS", HOSTIF_CMD_DNS, 0x7F, 1, TWO, dns_proc},
3748 { "DDNS", HOSTIF_CMD_DDNS, 0x7F, 0, 0, ddns_proc},
3749 { "UPNP", HOSTIF_CMD_UPNP, 0x7F, 0, 0, upnp_proc},
3750 { "DNAME", HOSTIF_CMD_DNAME, 0x7F, 0, 0, dname_proc},
3751 { "ATPT", HOSTIF_CMD_ATPT, 0x7F, 1, TWO, atpt_proc},
3752 { "&DBG", HOSTIF_CMD_DBG, 0x22, 1, FOUR, dbg_proc},
3753 { "ESPC", HOSTIF_CMD_NOP, 0xF, 1, 0, espc_proc},
3754 { "ESPT", HOSTIF_CMD_NOP, 0xF, 1, 0, espt_proc},
3755 { "WEBS", HOSTIF_CMD_WEBS, 0x7F, 1, 1, webs_proc},
3756 { "IOM", HOSTIF_CMD_IOM, 0x7F, 1, 1, iom_proc},
3757 { "CMDM", HOSTIF_CMD_CMDM, 0x7F, 1, 1, cmdm_proc},
3758 { "PASS", HOSTIF_CMD_PASS, 0x7F, 1, SEVEN, pass_proc},
3759 #if TLS_CONFIG_HTTP_CLIENT_TASK
3760 { "FWUP", HOSTIF_CMD_FWUP, 0x22, 1, 0, fwup_proc},
3761 #endif
3762 { "TEM", HOSTIF_CMD_TEM, 0x7F, 1, 1, tem_proc},
3763 #endif
3764 { "QMAC", HOSTIF_CMD_MAC, 0x19, 0, 0, qmac_proc},
3765 { "QVER", HOSTIF_CMD_VER, 0x19, 0, 0, qver_proc},
3766 { "&UPDD", HOSTIF_CMD_UPDD, 0x22, 1, TWO, updd_proc},
3767 { "®R", HOSTIF_CMD_REGR, 0x22, TWO, FIVE, regr_proc},
3768 { "®W", HOSTIF_CMD_REGW, 0x22, TWO, FIVE, regw_proc},
3769 { "&RFR", HOSTIF_CMD_RFR, 0x22, TWO, THREE, rfr_proc},
3770 { "&RFW", HOSTIF_CMD_RFW, 0x22, TWO, THREE, rfw_proc},
3771 { "&FLSR", HOSTIF_CMD_FLSR, 0x22, TWO, FIVE, flsr_proc},
3772 { "&FLSW", HOSTIF_CMD_FLSW, 0x22, TWO, FIVE, flsw_proc},
3773 { "&TXG", HOSTIF_CMD_NOP, 0xF, 1, 0, txg_proc},
3774 { "&TXGS", HOSTIF_CMD_NOP, 0xF, 1, 0, txg_rate_set_proc},
3775 { "&TXGG", HOSTIF_CMD_NOP, 0xF, 1, 0, txg_rate_get_proc},
3776 { "&MAC", HOSTIF_CMD_NOP, 0xF, 1, 0, mac_proc},
3777 { "&HWV", HOSTIF_CMD_NOP, 0x9, 0, 0, hwv_proc},
3778 { "&SPIF", HOSTIF_CMD_NOP, 0x2, 1, 0, spif_proc},
3779 { "&LPCHL", HOSTIF_CMD_NOP, 0xB, 1, 0, lpchl_proc},
3780 { "&LPTSTR", HOSTIF_CMD_NOP, 0x2, FIVE, 0, lptstr_proc},
3781 { "&LPTSTP", HOSTIF_CMD_NOP, 0x1, 0, 0, lptstp_proc},
3782 { "&LPTSTT", HOSTIF_CMD_NOP, 0xF, 0, 0, lptstt_proc},
3783 { "&LPRSTR", HOSTIF_CMD_NOP, 0x2, 1, 0, lprstr_proc},
3784 { "&LPRSTP", HOSTIF_CMD_NOP, 0x1, 0, 0, lprstp_proc},
3785 { "&LPRSTT", HOSTIF_CMD_NOP, 0x1, 0, 0, lprstt_proc},
3786 { "&LPPSTR", HOSTIF_CMD_NOP, 0x3, TWO, 0, lppstr_proc},
3787 { "&LPPSTP", HOSTIF_CMD_NOP, 0x2, 1, 0, lppstp_proc},
3788 { "&LPRFPS", HOSTIF_CMD_NOP, 0x1, 0, 0, lprfps_proc},
3789 { "&LPCHRS", HOSTIF_CMD_NOP, 0x2, 1, 0, lpchrs_proc},
3790 { "&LPTBD", HOSTIF_CMD_NOP, 0x2, SEVEN, 0, lptbd_proc},
3791 { "&LPSTPT", HOSTIF_CMD_NOP, 0x1, 0, 0, lpstpt_proc},
3792 { "&LPCHLR", HOSTIF_CMD_NOP, 0x2, 1, 0, lpchlr_proc},
3793 { "&LPSTPR", HOSTIF_CMD_NOP, 0x1, 0, 0, lpstpr_proc},
3794 { "&LPRAGC", HOSTIF_CMD_NOP, 0x1, 0, 0, lpragc_proc},
3795 { "&LPRSR", HOSTIF_CMD_NOP, 0x9, 0, 0, lprsr_proc},
3796 #if TLS_CONFIG_AP
3797 { "SLIST", HOSTIF_CMD_STA_LIST, 0x19, 0, 0, slist_proc},
3798 { "APLKSTT", HOSTIF_CMD_AP_LINK_STATUS, 0x19, 0, 0, softap_lkstt_proc},
3799 { "APSSID", HOSTIF_CMD_AP_SSID, 0x7F, 1, 1, softap_ssid_proc},
3800 { "APMAC", HOSTIF_CMD_AP_MAC, 0x19, 0, 0, softap_qmac_proc},
3801 { "APENCRY", HOSTIF_CMD_AP_ENCRYPT, 0x7F, 1, 1, softap_encry_proc },
3802 { "APKEY", HOSTIF_CMD_AP_KEY, 0x7F, THREE, THREE, softap_key_proc },
3803 { "APCHL", HOSTIF_CMD_AP_CHL, 0x7F, 1, TWO, softap_chl_proc},
3804 { "APWBGR", HOSTIF_CMD_AP_WBGR, 0x7F, TWO, TWO, softap_wbgr_proc},
3805 { "APNIP", HOSTIF_CMD_AP_NIP, 0x7F, 1, TEN + SEVEN, softap_nip_proc },
3806 #endif
3807 #if TLS_CONFIG_WIFI_PERF_TEST
3808 { "THT", HOSTIF_CMD_NOP, 0x2, 0, 0, tht_proc},
3809 #endif
3810 #if TLS_CONFIG_WIFI_PING_TEST
3811 { "PING", HOSTIF_CMD_NOP, 0x2, 0, 0, ping_proc},
3812 #endif
3813 #if TLS_CONFIG_WPS
3814 { "WWPS", HOSTIF_CMD_WPS, 0x7F, 1, 1, wwps_proc},
3815 #endif
3816 { "CUSTDATA", HOSTIF_CMD_CUSTDATA, 0x19, 0, 0, custdata_proc},
3817 { "TXLO", HOSTIF_CMD_NOP, 0x7F, 1, 0, tls_tx_lo_proc},
3818 { "TXIQ", HOSTIF_CMD_NOP, 0x7F, TWO, 0, tls_tx_iq_mismatch_proc},
3819 { "FREQ", HOSTIF_CMD_NOP, 0x7F, 1, 0, tls_freq_error_proc},
3820 { "VCG", HOSTIF_CMD_NOP, 0x7F, 1, 0, tls_rf_vcg_ctrl_proc},
3821 { "&LPTPD", HOSTIF_CMD_NOP, 0x7F, 1, 0, tls_lptperiod_proc},
3822 { "STDBY", HOSTIF_CMD_NOP, 0x1, 0, 0, stand_by_power_down},
3823 { "CPUSTA", HOSTIF_CMD_NOP, 0x2, 1, 0, cpu_state_proc},
3824 { "CPUDIV", HOSTIF_CMD_NOP, 0xb, 1, 0, cpu_clock_proc},
3825 #if (WM_BT_INCLUDED == CFG_ON || WM_BLE_INCLUDED == CFG_ON || WM_NIMBLE_INCLUDED == CFG_ON)
3826
3827 { "BTEN", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, TWO, 0, bt_enable_proc},
3828 { "BTDES", HOSTIF_CMD_NOP, ATCMD_OP_NULL, 0, 0, bt_destory_proc},
3829 { "&BTMAC", HOSTIF_CMD_NOP, 0xF, 1, 0, bt_mac_proc},
3830 { "&BTNAME", HOSTIF_CMD_NOP, 0xF, 1, 0, bt_name_proc},
3831 { "BTCTRLGS", HOSTIF_CMD_NOP, ATCMD_OP_NULL | ATCMD_OP_QU | RICMD_OP_GET, 0, 0, bt_ctrl_get_status_proc},
3832 { "BTSLEEP", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, 1, 0, bt_sleep_proc},
3833 { "BLETPS", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, TWO, 0, ble_tx_power_set_proc},
3834 { "BLETPG", HOSTIF_CMD_NOP, ATCMD_OP_NULL | ATCMD_OP_QU | RICMD_OP_GET, 1, 0, ble_tx_power_get_proc},
3835 { "BTTEST", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, 1, 0, bt_test_mode_proc},
3836 { "BTRF", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, 1, 0, bt_rf_mode_proc},
3837 #if (WM_BTA_AV_SINK_INCLUDED == CFG_ON)
3838 { "BTAVS", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, 1, 0, bt_audio_sink_proc},
3839 #endif
3840 #if (WM_BTA_HFP_HSP_INCLUDED == CFG_ON)
3841 { "BTHFP", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, 1, 0, bt_hfp_client_proc},
3842 { "BTDIAL", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, 1, 0, bt_dial_up_proc},
3843 #endif
3844 #if (WM_BTA_SPPS_INCLUDED == CFG_ON)
3845 { "BTSPPS", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, 1, 0, bt_spp_server_proc},
3846 #endif
3847 #if (WM_BTA_SPPC_INCLUDED == CFG_ON)
3848 { "BTSPPC", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, 1, 0, bt_spp_client_proc},
3849 #endif
3850
3851 #if (WM_BT_INCLUDED == CFG_ON)
3852 { "BTSCM", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, 1, 0, bt_scan_mode_proc},
3853 { "BTINQUIRY", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, 1, 0, bt_inquiry_proc},
3854 #endif
3855 #endif
3856 { "SETTOKEN", HOSTIF_CMD_NOP, ATCMD_OP_EQ | ATCMD_OP_EP | RICMD_OP_SET, FOUR, 0, set_token_proc},
3857 { NULL, HOSTIF_CMD_NOP, 0, 0, 0, NULL},
3858 };
3859
at_parse_func(char * at_name,struct tls_atcmd_token_t * tok,union HOSTIF_CMD_PARAMS_UNION * cmd)3860 int at_parse_func(char *at_name, struct tls_atcmd_token_t *tok, union HOSTIF_CMD_PARAMS_UNION *cmd)
3861 {
3862 if (strcmp("QMAC", at_name) == 0 || strcmp("QVER", at_name) == 0 || strcmp("&HWV", at_name) == 0 ||
3863 strcmp("&LPTSTP", at_name) == 0 || strcmp("&LPTSTT", at_name) == 0 || strcmp("&LPRSTP", at_name) == 0 ||
3864 strcmp("&LPRSTT", at_name) == 0 || strcmp("&LPRFPS", at_name) == 0 || strcmp("&LPSTPT", at_name) == 0 ||
3865 strcmp("&LPSTPR", at_name) == 0 || strcmp("&LPRAGC", at_name) == 0 || strcmp("&LPRSR", at_name) == 0 ||
3866 strcmp("CUSTDATA", at_name) == 0 || strcmp("STDBY", at_name) == 0) {
3867 ;
3868 #if TLS_CONFIG_AT_CMD
3869 } else if ((strcmp("Z", at_name) == 0) || (strcmp("E", at_name) == 0) || (strcmp("RSTF", at_name) == 0) ||
3870 (strcmp("PMTF", at_name) == 0) || (strcmp("IOC", at_name) == 0) ||
3871 (strcmp("LKSTT", at_name) == 0) || (strcmp("CNTPARAM", at_name) == 0)) {
3872 ;
3873 } else if (strcmp("ENTS", at_name) == 0) {
3874 int err = 0, ret = 0;
3875 u32 params;
3876 if (tok->arg_found != FOUR)
3877 return -CMD_ERR_INV_PARAMS;
3878 do {
3879 ret = string_to_uint(tok->arg[0], ¶ms);
3880 if (ret) {
3881 err = 1;
3882 break;
3883 }
3884 cmd->ps.ps_type = (u8)params;
3885
3886 ret = string_to_uint(tok->arg[1], ¶ms);
3887 if (ret) {
3888 err = 1;
3889 break;
3890 }
3891 cmd->ps.wake_type = (u8)params;
3892
3893 ret = string_to_uint(tok->arg[TWO], ¶ms);
3894 if (ret) {
3895 err = 1;
3896 break;
3897 }
3898 cmd->ps.delay_time = (u16)params;
3899
3900 ret = string_to_uint(tok->arg[THREE], ¶ms);
3901 if (ret) {
3902 err = 1;
3903 break;
3904 }
3905 cmd->ps.wake_time = (u16)params;
3906 } while (0);
3907 if (err)
3908 return -CMD_ERR_INV_PARAMS;
3909 } else if (strcmp("WJOIN", at_name) == 0) {
3910 cmd->wscan.mode = tok->cmd_mode;
3911 } else if (strcmp("WSCAN", at_name) == 0) {
3912 int ret;
3913 u32 value = 0;
3914 cmd->scanparam.mode = tok->cmd_mode;
3915 cmd->scanparam.switchinterval = 0;
3916 cmd->scanparam.scantimes = 0;
3917 cmd->scanparam.chlist = 0;
3918
3919 switch (tok->arg_found) {
3920 case THREE:
3921 ret = string_to_uint(tok->arg[TWO], &value);
3922 if (ret)
3923 return -CMD_ERR_INV_PARAMS;
3924 cmd->scanparam.switchinterval = value;
3925 case TWO:
3926 ret = string_to_uint(tok->arg[1], &value);
3927 if (ret)
3928 return -CMD_ERR_INV_PARAMS;
3929 cmd->scanparam.scantimes = value;
3930 case 1:
3931 ret = hexstr_to_unit(tok->arg[0], &value);
3932 if (ret)
3933 return -CMD_ERR_INV_PARAMS;
3934 cmd->scanparam.chlist = value;
3935 break;
3936 default:
3937 cmd->scanparam.switchinterval = 0;
3938 cmd->scanparam.scantimes = 0;
3939 cmd->scanparam.chlist = 0;
3940 break;
3941 }
3942 } else if (strcmp("SSID", at_name) == 0 || strcmp("DNS", at_name) == 0 || strcmp("PASS", at_name) == 0
3943 #if TLS_CONFIG_AP
3944 || strcmp("APSSID", at_name) == 0
3945 #endif
3946 ) {
3947 int ret = 0;
3948 u8 *tmpssid;
3949 if (tok->arg_found > 1)
3950 return -CMD_ERR_INV_PARAMS;
3951 if (tok->arg_found == 1) {
3952 ret = atcmd_filter_quotation(&tmpssid, (u8 *)tok->arg[0]);
3953 if (ret)
3954 return -CMD_ERR_INV_PARAMS;
3955 cmd->ssid.ssid_len = strlen((char *)tmpssid);
3956 memcpy(cmd->ssid.ssid, tmpssid, cmd->ssid.ssid_len);
3957 }
3958 } else if (strcmp("TEM", at_name) == 0) {
3959 int ret = 0;
3960 u8 *tmpssid;
3961 if (tok->arg_found > 1)
3962 return -CMD_ERR_INV_PARAMS;
3963 if (tok->arg_found == 1) {
3964 ret = atcmd_filter_quotation(&tmpssid, (u8 *)tok->arg[0]);
3965 if (ret)
3966 return -CMD_ERR_INV_PARAMS;
3967 cmd->tem.offsetLen = strlen((char *)tmpssid);
3968 memcpy(cmd->tem.offset, tmpssid, cmd->tem.offsetLen);
3969 }
3970 } else if ((strcmp("WPRT", at_name) == 0) || (strcmp("ENCRY", at_name) == 0) || (strcmp("BRDSSID", at_name) == 0) ||
3971 (strcmp("WATC", at_name) == 0) || (strcmp("WPSM", at_name) == 0) || (strcmp("WARC", at_name) == 0) ||
3972 (strcmp("WARM", at_name) == 0) || (strcmp("ATM", at_name) == 0) || (strcmp("PORTM", at_name) == 0) ||
3973 (strcmp("IOM", at_name) == 0) || (strcmp("CMDM", at_name) == 0) || (strcmp("ONESHOT", at_name) == 0) ||
3974 (strcmp("&UPDP", at_name) == 0)) {
3975 int ret = 0;
3976 u32 param;
3977 if (tok->arg_found > 1)
3978 return -CMD_ERR_INV_PARAMS;
3979 if (tok->arg_found == 1) {
3980 ret = string_to_uint(tok->arg[0], ¶m);
3981 if (ret)
3982 return -CMD_ERR_INV_PARAMS;
3983 cmd->wprt.type = (u8)param;
3984 }
3985 } else if ((strcmp("KEY", at_name) == 0)
3986 #if TLS_CONFIG_AP
3987 ||(strcmp("APKEY", at_name) == 0)
3988 #endif
3989 ) {
3990 int ret;
3991 u32 params;
3992 u8 *keyInfo;
3993
3994 if (tok->arg_found != 0 && tok->arg_found != THREE)
3995 return -CMD_ERR_INV_PARAMS;
3996 if (tok->arg_found == THREE) {
3997 ret= strtodec((int *)¶ms, tok->arg[0]);
3998 if (ret)
3999 return -CMD_ERR_INV_PARAMS;
4000 cmd->key.format = (u8)params;
4001 ret = strtodec((int *)¶ms, tok->arg[1]);
4002 if (ret) {
4003 return -CMD_ERR_INV_PARAMS;
4004 }
4005 cmd->key.index = (u8)params;
4006 ret = atcmd_filter_quotation(&keyInfo, (u8 *)tok->arg[TWO]);
4007 if (ret)
4008 return -CMD_ERR_INV_PARAMS;
4009 cmd->key.key_len = strlen((char *)keyInfo);
4010 memcpy(cmd->key.key, keyInfo, cmd->key.key_len);
4011 }
4012 } else if ((strcmp("CHL", at_name) == 0)
4013 #if TLS_CONFIG_AP
4014 ||(strcmp("APCHL", at_name) == 0)
4015 #endif
4016 ) {
4017 int ret;
4018 u32 params;
4019 if (tok->arg_found > TWO)
4020 return -CMD_ERR_INV_PARAMS;
4021 if (tok->arg_found > 0) {
4022 ret = string_to_uint(tok->arg[0], ¶ms);
4023 if (ret)
4024 return -CMD_ERR_INV_PARAMS;
4025 cmd->channel.enable = (u8)params;
4026 if (cmd->channel.enable == 0 && tok->arg_found > 1)
4027 return -CMD_ERR_INV_PARAMS;
4028 if (cmd->channel.enable == 0) {
4029 cmd->channel.channel = 1;
4030 return 0;
4031 }
4032 ret = string_to_uint(tok->arg[1], ¶ms);
4033 if (ret)
4034 return -CMD_ERR_INV_PARAMS;
4035 cmd->channel.channel = (u8)params;
4036 }
4037 } else if (strcmp("CHLL", at_name) == 0) {
4038 int ret;
4039 u32 params;
4040 if (tok->arg_found > 1)
4041 return -CMD_ERR_INV_PARAMS;
4042 if (tok->arg_found == 1) {
4043 ret = strtohex(¶ms, tok->arg[0]);
4044 if (ret)
4045 return -CMD_ERR_INV_PARAMS;
4046 cmd->channel_list.channellist = (u16)params;
4047 }
4048 } else if (strcmp("WREG", at_name) == 0 || strcmp("ATLT", at_name) == 0
4049 || strcmp("ATPT", at_name) == 0
4050 || strcmp("ESPT", at_name) == 0
4051 || (strcmp("WLEAV", at_name) == 0)) {
4052 int ret;
4053 u32 params;
4054 if (tok->arg_found > 1)
4055 return -CMD_ERR_INV_PARAMS;
4056 if (tok->arg_found == 1) {
4057 ret = string_to_uint(tok->arg[0], ¶ms);
4058 if (ret) {
4059 return -CMD_ERR_INV_PARAMS;
4060 }
4061 cmd->wreg.region = (u16)params;
4062 }
4063 } else if (strcmp("AOLM", at_name) == 0 || strcmp("DDNS", at_name) == 0 ||
4064 strcmp("UPNP", at_name) == 0 || strcmp("DNAME", at_name) == 0) {
4065 if (tok->arg_found) {
4066 return -CMD_ERR_INV_PARAMS;
4067 }
4068 } else if (strcmp("&DBG", at_name) == 0) {
4069 u32 dbg;
4070 int ret = 0;
4071 if (tok->arg_found != 1) {
4072 return -CMD_ERR_INV_PARAMS;
4073 }
4074 ret = string_to_uint(tok->arg[0], &dbg);
4075 if (ret) {
4076 return -CMD_ERR_INV_PARAMS;
4077 }
4078 cmd->dbg.dbg_level = dbg;
4079 } else if (strcmp("ESPC", at_name) == 0) {
4080 int ret;
4081 u32 params;
4082 if (tok->arg_found > 1) {
4083 return -CMD_ERR_INV_PARAMS;
4084 }
4085 if (tok->arg_found == 1) {
4086 ret = strtohex(¶ms, tok->arg[0]);
4087 if (ret) {
4088 return -CMD_ERR_INV_PARAMS;
4089 }
4090 cmd->espc.escapechar = (u8)params;
4091 }
4092 } else if (strcmp("WEBS", at_name) == 0) {
4093 u32 params;
4094 int ret = 0;
4095 if (tok->arg_found > TWO) {
4096 return -CMD_ERR_INV_PARAMS;
4097 }
4098 if (tok->arg_found >= 1) {
4099 ret = strtodec((int *)¶ms, tok->arg[0]);
4100 if (ret) {
4101 return -CMD_ERR_INV_PARAMS;
4102 }
4103 cmd->webs.autorun = (u8)params;
4104 cmd->webs.portnum = EIGHTY;
4105 }
4106
4107 if (tok->arg_found >= TWO) {
4108 ret = strtodec((int *)¶ms, tok->arg[1]);
4109 if (ret) {
4110 return -CMD_ERR_INV_PARAMS;
4111 }
4112 cmd->webs.portnum = (u16)params;
4113 }
4114 #if TLS_CONFIG_SOCKET_RAW || TLS_CONFIG_SOCKET_STD
4115 } else if ((strcmp("ENTM", at_name) == 0) || (strcmp("SKSRCIP", at_name) == 0)) {
4116 ;
4117 } else if ((strcmp("SKSTT", at_name) == 0) || (strcmp("SKCLS", at_name) == 0) ||
4118 (strcmp("SKSDF", at_name) == 0)) {
4119 int err;
4120 u32 params;
4121 if (tok->arg_found != 1) {
4122 return -CMD_ERR_INV_PARAMS;
4123 }
4124 err = string_to_uint(tok->arg[0], ¶ms);
4125 if (err) {
4126 return -CMD_ERR_INV_PARAMS;
4127 }
4128 cmd->skstt.socket = params;
4129 } else if ((strcmp("SKSND", at_name) == 0) || (strcmp("SKRCV", at_name) == 0)) {
4130 int ret;
4131 u32 params;
4132 if (tok->cmd_mode == CMD_MODE_UART0_ATCMD) {
4133 return -CMD_ERR_UNSUPP;
4134 }
4135
4136 if (tok->arg_found != TWO) {
4137 return -CMD_ERR_INV_PARAMS;
4138 }
4139 ret = string_to_uint(tok->arg[0], ¶ms);
4140 if (ret) {
4141 return -CMD_ERR_INV_PARAMS;
4142 }
4143 cmd->sksnd.socket = params;
4144 ret = string_to_uint(tok->arg[1], ¶ms);
4145 if (ret) {
4146 return -CMD_ERR_INV_PARAMS;
4147 }
4148 cmd->sksnd.size = params;
4149 } else if (strcmp("SKRPTM", at_name) == 0) {
4150 int err;
4151 u32 params;
4152 if (tok->arg_found > 1) {
4153 return -CMD_ERR_INV_PARAMS;
4154 }
4155 if (tok->arg_found == 1) {
4156 err = string_to_uint(tok->arg[0], ¶ms);
4157 if (err) {
4158 return -CMD_ERR_INV_PARAMS;
4159 }
4160 cmd->skrptm.mode = params;
4161 }
4162 } else if (strcmp("SKGHBN", at_name) == 0) {
4163 u8 *ipstr = NULL;
4164 if (tok->arg_found != 1) {
4165 return -CMD_ERR_INV_PARAMS;
4166 }
4167 atcmd_filter_quotation(&ipstr, (u8 *)tok->arg[0]);
4168 memcpy(cmd->skghbn.ipstr, ipstr, strlen((char *)ipstr));
4169 #endif
4170 #if TLS_CONFIG_HTTP_CLIENT_TASK
4171 } else if (strcmp("HTTPC", at_name) == 0) {
4172 int ret, verb;
4173 u8 *uri;
4174 if (tok->arg_found != TWO && tok->arg_found != THREE) {
4175 return -CMD_ERR_INV_PARAMS;
4176 }
4177 ret = atcmd_filter_quotation(&uri, (u8 *)tok->arg[0]);
4178 if (ret) {
4179 return -CMD_ERR_INV_PARAMS;
4180 }
4181 cmd->httpc.url_len = strlen((char *)uri);
4182 cmd->httpc.url = uri;
4183 ret = string_to_uint(tok->arg[1], (u32 *)&verb);
4184 if (ret) {
4185 return -CMD_ERR_INV_PARAMS;
4186 }
4187 cmd->httpc.verb = (u8)verb;
4188 if (verb == VerbPost || verb == VerbPut) {
4189 if (tok->arg_found != THREE) {
4190 return -CMD_ERR_INV_PARAMS;
4191 }
4192 cmd->httpc.data_len = strlen(tok->arg[TWO]);
4193 cmd->httpc.data = (u8 *)tok->arg[TWO];
4194 }
4195 } else if (strcmp("FWUP", at_name) == 0) {
4196 int ret;
4197 u8 *uri;
4198 if (tok->arg_found != 1) {
4199 return -CMD_ERR_INV_PARAMS;
4200 }
4201 ret = atcmd_filter_quotation(&uri, (u8 *)tok->arg[0]);
4202 if (ret) {
4203 return -CMD_ERR_INV_PARAMS;
4204 }
4205 cmd->httpc.url_len = strlen((char *)uri);
4206 cmd->httpc.url = uri;
4207 #endif
4208 #endif
4209 } else if (strcmp("&UPDM", at_name) == 0) {
4210 int ret, mode;
4211 if (tok->arg_found != 1) {
4212 return -CMD_ERR_INV_PARAMS;
4213 }
4214 ret = string_to_uint(tok->arg[0], (u32 *)&mode);
4215 if (ret) {
4216 return -CMD_ERR_INV_PARAMS;
4217 }
4218 cmd->updm.mode = (u8)mode;
4219 cmd->updm.src = 0;
4220 } else if (strcmp("®R", at_name) == 0 || strcmp("&FLSR", at_name) == 0) {
4221 int ret;
4222 u32 Addr, Num;
4223 if (tok->arg_found != TWO) {
4224 return -CMD_ERR_OPS;
4225 }
4226 ret = hexstr_to_unit(tok->arg[0], &Addr);
4227 if (ret) {
4228 return -CMD_ERR_INV_PARAMS;
4229 }
4230 cmd->regr.reg_base_addr = Addr;
4231 ret = hexstr_to_unit(tok->arg[1], &Num);
4232 if (ret) {
4233 return -CMD_ERR_INV_PARAMS;
4234 }
4235 cmd->regr.length = Num;
4236 } else if (strcmp("®W", at_name) == 0 || strcmp("&FLSW", at_name) == 0) {
4237 int ret;
4238 u32 Addr, Value, i;
4239 if (tok->arg_found < TWO || tok->arg_found > NINE) {
4240 return -CMD_ERR_OPS;
4241 }
4242 ret = hexstr_to_unit(tok->arg[0], &Addr);
4243 if (ret) {
4244 return -CMD_ERR_INV_PARAMS;
4245 }
4246 cmd->regw.reg_base_addr = Addr;
4247 cmd->regw.length = tok->arg_found - 1;
4248 for (i = 0; i < cmd->regw.length; i++) {
4249 ret = hexstr_to_unit(tok->arg[i + 1], &Value);
4250 if (ret) {
4251 return -CMD_ERR_INV_PARAMS;
4252 }
4253 cmd->regw.v[i] = Value;
4254 }
4255 } else if (strcmp("&RFR", at_name) == 0) {
4256 int ret;
4257 u32 Addr, Num;
4258 if (tok->arg_found != TWO) {
4259 return -CMD_ERR_OPS;
4260 }
4261 ret = hexstr_to_unit(tok->arg[0], &Addr);
4262 if (ret) {
4263 return -CMD_ERR_INV_PARAMS;
4264 }
4265 cmd->rfr.reg_base_addr = (u16)Addr;
4266 ret = hexstr_to_unit(tok->arg[1], &Num);
4267 if (ret) {
4268 return -CMD_ERR_INV_PARAMS;
4269 }
4270 cmd->rfr.length = Num;
4271 } else if (strcmp("&RFW", at_name) == 0) {
4272 int ret;
4273 u32 Addr, Value, i;
4274 if (tok->arg_found < TWO || tok->arg_found > NINE) {
4275 return -CMD_ERR_OPS;
4276 }
4277 ret = hexstr_to_unit(tok->arg[0], &Addr);
4278 if (ret) {
4279 return -CMD_ERR_INV_PARAMS;
4280 }
4281 cmd->rfw.reg_base_addr = (u16)Addr;
4282 cmd->rfw.length = tok->arg_found - 1;
4283 for (i = 0; i < cmd->rfw.length; i++) {
4284 ret = hexstr_to_unit(tok->arg[i + 1], &Value);
4285 if (ret) {
4286 return -CMD_ERR_INV_PARAMS;
4287 }
4288 cmd->rfw.v[i] = (u16)Value;
4289 }
4290 } else if (strcmp("&TXG", at_name) == 0) {
4291 if (tok->arg_found > 1) {
4292 return -CMD_ERR_INV_PARAMS;
4293 }
4294 if (tok->arg_found == 1) {
4295 if (strtohexarray(cmd->txg.tx_gain, TX_GAIN_LEN, tok->arg[0]) < 0) {
4296 return -CMD_ERR_INV_PARAMS;
4297 }
4298 }
4299 } else if (strcmp("&TXGI", at_name) == 0) {
4300 if (tok->arg_found > 1) {
4301 return -CMD_ERR_INV_PARAMS;
4302 }
4303
4304 if (tok->arg_found == 1) {
4305 if (strtohexarray(cmd->txg.tx_gain, TX_GAIN_LEN / THREE, tok->arg[0]) < 0) {
4306 return -CMD_ERR_INV_PARAMS;
4307 }
4308 }
4309 } else if (strcmp("&TXGS", at_name) == 0) {
4310 if (tok->arg_found >= 1) {
4311 u32 rate;
4312 if (string_to_uint(tok->arg[0], (u32 *)&rate) != 0) {
4313 return -CMD_ERR_INV_PARAMS;
4314 }
4315 cmd->txgr.tx_rate = rate;
4316 }
4317
4318 if (tok->arg_found == TWO) {
4319 if (strtohexarray(cmd->txgr.txr_gain, THREE, tok->arg[1]) < 0) {
4320 return -CMD_ERR_INV_PARAMS;
4321 }
4322 }
4323 } else if (strcmp("&TXGG", at_name) == 0) {
4324 if (tok->arg_found >= 1) {
4325 u32 rate;
4326 if (string_to_uint(tok->arg[0], (u32 *)&rate) != 0) {
4327 return -CMD_ERR_INV_PARAMS;
4328 }
4329 cmd->txgr.tx_rate = rate;
4330 }
4331 } else if (strcmp("&MAC", at_name) == 0) {
4332 u8 *tmpmac = NULL;
4333 if (tok->arg_found == 1) {
4334 if (atcmd_filter_quotation(&tmpmac, (u8 *)tok->arg[0])) {
4335 return -CMD_ERR_INV_PARAMS;
4336 }
4337 cmd->mac.length = strlen((char *)tmpmac);
4338 if (strtohexarray(cmd->mac.macaddr, ETH_ALEN, (char *)tmpmac)< 0) {
4339 return -CMD_ERR_INV_PARAMS;
4340 }
4341 }
4342 } else if (strcmp("TXLO", at_name) == 0) {
4343 int ret = 0;
4344 u32 value = 0;
4345
4346 if (tok->arg_found == 1) {
4347 ret = hexstr_to_unit(tok->arg[0], &value);
4348 if (ret) {
4349 return -CMD_ERR_INV_PARAMS;
4350 }
4351 cmd->txLO.txlo = value;
4352 }
4353 } else if (strcmp("TXIQ", at_name) == 0) {
4354 int ret = 0;
4355 u32 value = 0;
4356
4357 if (tok->arg_found == TWO) {
4358 ret = hexstr_to_unit(tok->arg[0], &value);
4359 if (ret) {
4360 return -CMD_ERR_INV_PARAMS;
4361 }
4362 cmd->txIQ.txiqgain = value;
4363
4364 ret = hexstr_to_unit(tok->arg[1], &value);
4365 if (ret) {
4366 return -CMD_ERR_INV_PARAMS;
4367 }
4368 cmd->txIQ.txiqphase = value;
4369 }
4370 } else if (strcmp("FREQ", at_name) == 0) {
4371 int ret = 0;
4372 int value = 0;
4373
4374 if (tok->arg_found == 1) {
4375 ret = strtodec(&value, tok->arg[0]);
4376 if (ret) {
4377 return -CMD_ERR_INV_PARAMS;
4378 }
4379 cmd->FreqErr.freqerr = value;
4380 }
4381 } else if (strcmp("VCG", at_name) == 0) {
4382 int ret = 0;
4383 int value = 0;
4384
4385 if (tok->arg_found == 1) {
4386 ret = strtodec(&value, tok->arg[0]);
4387 if (ret) {
4388 return -CMD_ERR_INV_PARAMS;
4389 }
4390 cmd->vcgCtrl.vcg = value;
4391 }
4392 } else if (strcmp("&SPIF", at_name) == 0) {
4393 int ret, len;
4394 if (tok->arg_found != 1 && tok->arg_found != TWO)
4395 return -CMD_ERR_INV_PARAMS;
4396 ret = string_to_uint(tok->arg[0], (u32 *)&len);
4397 if (ret) {
4398 return -CMD_ERR_INV_PARAMS;
4399 }
4400 cmd->spif.len = (u8)len;
4401 if (tok->arg_found == TWO) {
4402 if (strtohexarray(cmd->spif.data, cmd->spif.len, (char *)tok->arg[1]) < 0) {
4403 return -CMD_ERR_INV_PARAMS;
4404 }
4405 cmd->spif.mode = 1;
4406 } else {
4407 cmd->spif.mode = 0;
4408 }
4409 } else if (strcmp("&LPCHL", at_name) == 0) {
4410 int ret;
4411
4412 if (tok->arg_found == 1) {
4413 ret = string_to_uint(tok->arg[0], (u32 *)&cmd->lpchl.channel);
4414 if (ret) {
4415 return -CMD_ERR_INV_PARAMS;
4416 }
4417 cmd->lpchl.bandwidth = 0;
4418 } else if (tok->arg_found == TWO) {
4419 ret = string_to_uint(tok->arg[0], (u32 *)&cmd->lpchl.channel);
4420 if (ret) {
4421 return -CMD_ERR_INV_PARAMS;
4422 }
4423 ret = string_to_uint(tok->arg[1], (u32 *)&cmd->lpchl.bandwidth);
4424 if (ret) {
4425 return -CMD_ERR_INV_PARAMS;
4426 }
4427 } else {
4428 return -CMD_ERR_INV_PARAMS;
4429 }
4430 } else if (strcmp("&LPRSTR", at_name) == 0 || strcmp("&LPCHRS", at_name) == 0
4431 || strcmp("&LPCHLR", at_name) == 0) {
4432 int ret;
4433 if ((tok->arg_found != 1) && (tok->arg_found != TWO)) {
4434 return -CMD_ERR_INV_PARAMS;
4435 }
4436 ret = hexstr_to_unit(tok->arg[0], (u32 *)&cmd->lpchl.channel);
4437 if (ret) {
4438 return -CMD_ERR_INV_PARAMS;
4439 }
4440 if (tok->arg_found == TWO) {
4441 ret = hexstr_to_unit(tok->arg[1], (u32 *)&cmd->lpchl.bandwidth);
4442 if (ret) {
4443 return -CMD_ERR_INV_PARAMS;
4444 }
4445 }
4446 } else if (strcmp("&LPPSTR", at_name) == 0) {
4447 int ret;
4448 if (tok->arg_found != 0 && tok->arg_found != TWO) {
4449 return -CMD_ERR_INV_PARAMS;
4450 }
4451 if (tok->arg_found == TWO) {
4452 ret = hexstr_to_unit(tok->arg[0], (u32 *)&cmd->lppstr.param);
4453 if (ret) {
4454 return -CMD_ERR_INV_PARAMS;
4455 }
4456 ret = hexstr_to_unit(tok->arg[1], (u32 *)&cmd->lppstr.start);
4457 if (ret) {
4458 return -CMD_ERR_INV_PARAMS;
4459 }
4460 }
4461 } else if (strcmp("&LPPSTP", at_name) == 0) {
4462 int ret;
4463 if (tok->arg_found != 1) {
4464 return -CMD_ERR_INV_PARAMS;
4465 }
4466 ret = hexstr_to_unit(tok->arg[0], (u32 *)&cmd->lppstp.mismatch);
4467 if (ret) {
4468 return -CMD_ERR_INV_PARAMS;
4469 }
4470 } else if (strcmp("&LPTBD", at_name) == 0) {
4471 int ret;
4472 if (tok->arg_found != SEVEN) {
4473 return -CMD_ERR_INV_PARAMS;
4474 }
4475 cmd->lptstr.packetcount = 0;
4476 ret = hexstr_to_unit(tok->arg[0], (u32 *)&cmd->lptstr.psdulen);
4477 if (ret) {
4478 return -CMD_ERR_INV_PARAMS;
4479 }
4480 ret = hexstr_to_unit(tok->arg[1], (u32 *)&cmd->lptstr.txgain);
4481 if (ret) {
4482 return -CMD_ERR_INV_PARAMS;
4483 }
4484 ret = hexstr_to_unit(tok->arg[TWO], (u32 *)&cmd->lptstr.datarate);
4485 if (ret) {
4486 return -CMD_ERR_INV_PARAMS;
4487 }
4488 } else if (strcmp("WIDTH", at_name) == 0) {
4489 int ret;
4490 if (tok->arg_found != TWO) {
4491 return -CMD_ERR_INV_PARAMS;
4492 }
4493 ret = string_to_uint(tok->arg[0], (u32 *)&cmd->width.freq);
4494 if (ret) {
4495 return -CMD_ERR_INV_PARAMS;
4496 }
4497 ret = string_to_uint(tok->arg[1], (u32 *)&cmd->width.dividend);
4498 if (ret) {
4499 return -CMD_ERR_INV_PARAMS;
4500 }
4501 } else if (strcmp("&RXSIN", at_name) == 0) {
4502 int ret;
4503 if (tok->arg_found != TWO) {
4504 return -CMD_ERR_INV_PARAMS;
4505 }
4506 ret = string_to_uint(tok->arg[0], (u32 *)&cmd->rxsin.rxlen);
4507 if (ret) {
4508 return -CMD_ERR_INV_PARAMS;
4509 }
4510 ret = string_to_uint(tok->arg[1], (u32 *)&cmd->rxsin.isprint);
4511 if (ret) {
4512 return -CMD_ERR_INV_PARAMS;
4513 }
4514 } else if (strcmp("CPUSTA", at_name) == 0) {
4515 int ret;
4516 if (tok->arg_found != 1) {
4517 return -CMD_ERR_INV_PARAMS;
4518 }
4519 ret = string_to_uint(tok->arg[0], (u32 *)&cmd->width.freq);
4520 if (ret) {
4521 return -CMD_ERR_INV_PARAMS;
4522 }
4523 } else if (strcmp("CPUDIV", at_name) == 0) {
4524 int ret;
4525 if (tok->arg_found > 1) {
4526 return -CMD_ERR_INV_PARAMS;
4527 }
4528 if (tok->arg_found == 1) {
4529 ret = string_to_uint(tok->arg[0], (u32 *)&cmd->width.freq);
4530 if (ret) {
4531 return -CMD_ERR_INV_PARAMS;
4532 }
4533 }
4534 } else if (strcmp("&LPTPD", at_name) == 0) {
4535 int ret;
4536 if (tok->arg_found == 1) {
4537 ret = string_to_uint(tok->arg[0], (u32 *)&cmd->rxsin.rxlen);
4538 if (ret) {
4539 return -CMD_ERR_INV_PARAMS;
4540 }
4541 }
4542 }
4543 return 0;
4544 }
4545
at_format_func(char * at_name,u8 set_opt,u8 update_flash,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp,char * res_resp,u32 * res_len)4546 int at_format_func(char *at_name, u8 set_opt, u8 update_flash, union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp,
4547 char *res_resp, u32 *res_len)
4548 {
4549 if (strcmp("QMAC", at_name) == 0 || strcmp("&HWV", at_name) == 0
4550 #if TLS_CONFIG_AP
4551 || strcmp("APMAC", at_name) == 0
4552 #endif
4553 ) {
4554 *res_len = sprintf(res_resp, "+OK=%02x%02x%02x%02x%02x%02x",
4555 cmdrsp->mac.addr[0], cmdrsp->mac.addr[1], cmdrsp->mac.addr[TWO],
4556 cmdrsp->mac.addr[THREE], cmdrsp->mac.addr[FOUR], cmdrsp->mac.addr[FIVE]);
4557 } else if (strcmp("TEM", at_name) == 0) {
4558 if (set_opt) {
4559 *res_len = atcmd_ok_resp(res_resp);
4560 } else {
4561 *res_len = sprintf(res_resp, "+OK=%s", cmdrsp->tem.offset);
4562 }
4563 #if TLS_CONFIG_AT_CMD
4564 } else if ((strcmp("Z", at_name) == 0) || (strcmp("E", at_name) == 0) || (strcmp("ENTS", at_name) == 0) ||
4565 (strcmp("RSTF", at_name) == 0) || (strcmp("PMTF", at_name) == 0) || (strcmp("IOC", at_name) == 0) ||
4566 (strcmp("WLEAV", at_name) == 0) || (strcmp("AOLM", at_name) == 0) || (strcmp("DDNS", at_name) == 0) ||
4567 (strcmp("UPNP", at_name) == 0) || (strcmp("DNAME", at_name) == 0) || (strcmp("&DBG", at_name) == 0) ||
4568 (strcmp("&UPDP", at_name) == 0) || (strcmp("STDBY", at_name) == 0)
4569 ) {
4570 *res_len = atcmd_ok_resp(res_resp);
4571 } else if (strcmp("WJOIN", at_name) == 0) {
4572 int len = 0, i = 0;
4573 len = sprintf(res_resp, "+OK=%02x%02x%02x%02x%02x%02x,%d,%d,%d,\"",
4574 cmdrsp->join.bssid[0], cmdrsp->join.bssid[1], cmdrsp->join.bssid[TWO],
4575 cmdrsp->join.bssid[THREE], cmdrsp->join.bssid[FOUR], cmdrsp->join.bssid[FIVE],
4576 cmdrsp->join.type, cmdrsp->join.channel,
4577 (cmdrsp->join.encrypt ? 1 : 0));
4578 for (i = 0; i < cmdrsp->join.ssid_len; i++) {
4579 sprintf(res_resp + len + i, "%c", cmdrsp->join.ssid[i]);
4580 }
4581 *res_len = len + cmdrsp->join.ssid_len;
4582 len = sprintf(res_resp + len + cmdrsp->join.ssid_len, "\",%d", (signed char)cmdrsp->join.rssi);
4583 *res_len += len;
4584 } else if (strcmp("WSCAN", at_name) == 0) {
4585 *res_len = 0;
4586 } else if (strcmp("DNS", at_name) == 0 || strcmp("PASS", at_name) == 0) {
4587 if (set_opt) {
4588 *res_len = atcmd_ok_resp(res_resp);
4589 } else {
4590 *res_len = sprintf(res_resp, "+OK=\"%s\"", cmdrsp->ssid.ssid);
4591 }
4592 } else if (strcmp("SSID", at_name) == 0
4593 #if TLS_CONFIG_AP
4594 || strcmp("APSSID", at_name) == 0
4595 #endif
4596 ) {
4597 if (set_opt) {
4598 *res_len = atcmd_ok_resp(res_resp);
4599 } else {
4600 *res_len = sprintf(res_resp, "+OK=%s", cmdrsp->ssid.ssid);
4601 }
4602 } else if ((strcmp("WPRT", at_name) == 0) || (strcmp("ENCRY", at_name) == 0) || (strcmp("BRDSSID", at_name) == 0) ||
4603 (strcmp("WATC", at_name) == 0) || (strcmp("WPSM", at_name) == 0) || (strcmp("WARC", at_name) == 0) ||
4604 (strcmp("WARM", at_name) == 0) || (strcmp("ATM", at_name) == 0) || (strcmp("PORTM", at_name) == 0) ||
4605 (strcmp("IOM", at_name) == 0) || (strcmp("CMDM", at_name) == 0) || (strcmp("ONESHOT", at_name) == 0)) {
4606 if (set_opt) {
4607 *res_len = atcmd_ok_resp(res_resp);
4608 } else {
4609 *res_len = sprintf(res_resp, "+OK=%hhu", cmdrsp->bt.status);
4610 }
4611 } else if ((strcmp("KEY", at_name) == 0)
4612 #if TLS_CONFIG_AP
4613 ||(strcmp("APKEY", at_name) == 0)
4614 #endif
4615 ) {
4616 if (set_opt) {
4617 *res_len = atcmd_ok_resp(res_resp);
4618 } else {
4619 *res_len = sprintf(res_resp, "+OK=%u,%u,", cmdrsp->key.format, cmdrsp->key.index);
4620 MEMCPY(res_resp + *res_len, cmdrsp->key.key, cmdrsp->key.key_len);
4621 *res_len += cmdrsp->key.key_len;
4622 }
4623 } else if ((strcmp("CHL", at_name) == 0)
4624 #if TLS_CONFIG_AP
4625 ||(strcmp("APCHL", at_name) == 0)
4626 #endif
4627 ) {
4628 if (set_opt) {
4629 *res_len = atcmd_ok_resp(res_resp);
4630 } else {
4631 if (cmdrsp->channel.enable) {
4632 *res_len = sprintf(res_resp, "+OK=%u,%u", cmdrsp->channel.enable, cmdrsp->channel.channel);
4633 } else {
4634 *res_len = sprintf(res_resp, "+OK=%u", cmdrsp->channel.enable);
4635 }
4636 }
4637 } else if (strcmp("CHLL", at_name) == 0) {
4638 if (set_opt) {
4639 *res_len = atcmd_ok_resp(res_resp);
4640 } else {
4641 *res_len = sprintf(res_resp, "+OK=%04x", cmdrsp->channel_list.channellist);
4642 }
4643 } else if (strcmp("WREG", at_name) == 0 || strcmp("ATLT", at_name) == 0 || strcmp("ATPT", at_name) == 0 ||
4644 strcmp("ESPT", at_name) == 0) {
4645 if (set_opt) {
4646 *res_len = atcmd_ok_resp(res_resp);
4647 } else {
4648 *res_len = sprintf(res_resp, "+OK=%u", cmdrsp->wreg.region);
4649 }
4650 } else if ((strcmp("WBGR", at_name) == 0)
4651 #if TLS_CONFIG_AP
4652 ||(strcmp("APWBGR", at_name) == 0)
4653 #endif
4654 ) {
4655 if (set_opt) {
4656 *res_len = atcmd_ok_resp(res_resp);
4657 } else {
4658 *res_len = sprintf(res_resp, "+OK=%u,%u", cmdrsp->wbgr.mode,
4659 cmdrsp->wbgr.rate);
4660 }
4661 } else if (strcmp("UART", at_name) == 0) {
4662 u32 baud_rate = 0;
4663 if (set_opt) {
4664 *res_len = atcmd_ok_resp(res_resp);
4665 } else {
4666 memcpy(&baud_rate, cmdrsp->uart.baud_rate, THREE);
4667
4668 *res_len = sprintf(res_resp,
4669 "+OK=%u,%u,%u,%u,%u",
4670 baud_rate,
4671 cmdrsp->uart.char_len,
4672 cmdrsp->uart.stopbit, cmdrsp->uart.parity,
4673 cmdrsp->uart.flow_ctrl);
4674 }
4675 } else if (strcmp("ESPC", at_name) == 0) {
4676 if (set_opt) {
4677 *res_len = atcmd_ok_resp(res_resp);
4678 } else {
4679 *res_len = sprintf(res_resp, "+OK=0x%02x", cmdrsp->espc.escapechar);
4680 }
4681 } else if (strcmp("WEBS", at_name) == 0) {
4682 if (set_opt) {
4683 *res_len = atcmd_ok_resp(res_resp);
4684 } else {
4685 if (cmdrsp->webs.autorun == 1) {
4686 *res_len = sprintf(res_resp, "+OK=%d,%d", cmdrsp->webs.autorun, cmdrsp->webs.portnum);
4687 } else {
4688 *res_len = sprintf(res_resp, "+OK=%d", cmdrsp->webs.autorun);
4689 }
4690 }
4691 #if TLS_CONFIG_SOCKET_RAW || TLS_CONFIG_SOCKET_STD
4692 } else if (strcmp("ENTM", at_name) == 0 || strcmp("SKCLS", at_name) == 0 || strcmp("SKSDF", at_name) == 0) {
4693 *res_len = atcmd_ok_resp(res_resp);
4694 } else if (strcmp("SKCT", at_name) == 0) {
4695 if (set_opt) {
4696 *res_len = sprintf(res_resp, "+OK=%d", cmdrsp->skct.socket);
4697 }
4698 } else if (strcmp("SKSND", at_name) == 0) {
4699 *res_len = sprintf(res_resp, "+OK=%u", cmdrsp->sksnd.size);
4700 } else if (strcmp("SKRPTM", at_name) == 0) {
4701 if (set_opt) {
4702 *res_len = atcmd_ok_resp(res_resp);
4703 } else {
4704 *res_len = sprintf(res_resp, "+OK=%d\n", cmdrsp->skrptm.mode);
4705 }
4706 } else if (strcmp("SKSRCIP", at_name) == 0) {
4707 *res_len = sprintf(res_resp, "+OK=%d.%d.%d.%d", cmdrsp->sksrcip.ipvalue[0], cmdrsp->sksrcip.ipvalue[1],
4708 cmdrsp->sksrcip.ipvalue[TWO], cmdrsp->sksrcip.ipvalue[THREE]);
4709 } else if (strcmp("SKGHBN", at_name) == 0) {
4710 *res_len = sprintf(res_resp, "+OK=\"%d.%d.%d.%d\"", \
4711 cmdrsp->skghbn.h_addr_list[0], cmdrsp->skghbn.h_addr_list[1], \
4712 cmdrsp->skghbn.h_addr_list[TWO], cmdrsp->skghbn.h_addr_list[THREE]);
4713 #endif
4714 #if TLS_CONFIG_HTTP_CLIENT_TASK
4715 } else if (strcmp("HTTPC", at_name) == 0) {
4716 *res_len = sprintf(res_resp, "+OK=%d", cmdrsp->httpc.psession);
4717 } else if (strcmp("FWUP", at_name) == 0) {
4718 *res_len = sprintf(res_resp, "+OK=%d", cmdrsp->httpc.psession);
4719 #endif
4720 #endif
4721 } else if (strcmp("&UPDD", at_name) == 0) {
4722 *res_len = sprintf(res_resp, "+OK=%d", tls_fwup_get_current_update_numer());
4723 } else if (strcmp("&LPTPD", at_name) == 0) {
4724 if (set_opt) {
4725 *res_len = sprintf(res_resp, "+OK");
4726 } else {
4727 *res_len = sprintf(res_resp, "+OK=%d", tls_get_tx_litepoint_period());
4728 }
4729 } else if (strcmp("®R", at_name) == 0) {
4730 int i = 0;
4731 *res_len = sprintf(res_resp, "+OK=%08x", cmdrsp->regr.value[0]);
4732 for (i = 1;i < cmdrsp->regr.length; i++) {
4733 *res_len += sprintf(res_resp + *res_len, ",%08x", cmdrsp->regr.value[i]);
4734 }
4735 } else if (strcmp("&RFR", at_name) == 0) {
4736 int i = 0;
4737 *res_len = sprintf(res_resp, "+OK=%04x", cmdrsp->rfr.value[0]);
4738 for (i = 1;i < cmdrsp->rfr.length; i++) {
4739 *res_len += sprintf(res_resp + *res_len, ",%04x", cmdrsp->rfr.value[i]);
4740 }
4741 } else if (strcmp("&FLSR", at_name) == 0) {
4742 u8 temp[TEN + SIX];
4743 int i = 0;
4744 u8 buff[THIRTY + TWO];
4745 u32 len;
4746 u32 regv32;
4747 len = cmdrsp->flsr.length;
4748 memcpy(buff, (u8 *)&cmdrsp->flsr.value[0], FOUR * len);
4749 MEMCPY(®v32, &buff[0], FOUR);
4750 *res_len = sprintf(res_resp, "+OK=%08x", regv32);
4751 for (i = 1; i < len; i++) {
4752 MEMCPY(®v32, &buff[i * FOUR], FOUR);
4753 sprintf((char *)temp, ",%08x", regv32);
4754 strcat(res_resp, (char *)temp);
4755 *res_len += NINE;
4756 }
4757 }
4758 if (strcmp("&TXGS", at_name) == 0) {
4759 *res_len = atcmd_ok_resp(res_resp);
4760 }
4761 if (strcmp("&TXGG", at_name) == 0) {
4762 *res_len = sprintf(res_resp, "+OK=%d,%02x%02x%02x", cmdrsp->txgr.tx_rate, cmdrsp->txgr.txr_gain[0],
4763 cmdrsp->txgr.txr_gain[1], cmdrsp->txgr.txr_gain[TWO]);
4764 }
4765
4766 if (strcmp("&MAC", at_name) == 0) {
4767 if (set_opt) {
4768 *res_len = atcmd_ok_resp(res_resp);
4769 } else {
4770 *res_len = sprintf(res_resp, "+OK=%02x%02x%02x%02x%02x%02x",
4771 cmdrsp->mac.addr[0], cmdrsp->mac.addr[1], cmdrsp->mac.addr[TWO],
4772 cmdrsp->mac.addr[THREE], cmdrsp->mac.addr[FOUR], cmdrsp->mac.addr[FIVE]);
4773 }
4774 } else if (strcmp("TXLO", at_name) == 0) {
4775 if (set_opt) {
4776 *res_len = atcmd_ok_resp(res_resp);
4777 } else {
4778 *res_len = sprintf(res_resp, "+OK =%08x", cmdrsp->txLO.txlo);
4779 }
4780 } else if (strcmp("TXIQ", at_name) == 0) {
4781 if (set_opt) {
4782 *res_len = atcmd_ok_resp(res_resp);
4783 } else {
4784 *res_len = sprintf(res_resp, "+OK =%08x,%08x", cmdrsp->txIQ.txiqgain, cmdrsp->txIQ.txiqphase);
4785 }
4786 } else if (strcmp("FREQ", at_name) == 0) {
4787 if (set_opt) {
4788 *res_len = atcmd_ok_resp(res_resp);
4789 } else {
4790 *res_len = sprintf(res_resp, "+OK =%d", cmdrsp->FreqErr.freqerr);
4791 }
4792 } else if (strcmp("VCG", at_name) == 0) {
4793 if (set_opt) {
4794 *res_len = atcmd_ok_resp(res_resp);
4795 } else {
4796 *res_len = sprintf(res_resp, "+OK =%d", cmdrsp->vcgCtrl.vcg);
4797 }
4798 } else if (strcmp("&SPIF", at_name) == 0) {
4799 if (cmdrsp->spif.mode == 0) {
4800 *res_len = sprintf(res_resp, "+OK=%s", cmdrsp->spif.data);
4801 } else {
4802 *res_len = atcmd_ok_resp(res_resp);
4803 }
4804 } else if (strcmp("&LPCHL", at_name) == 0 || strcmp("&LPCHRS", at_name) == 0) {
4805 if (set_opt) {
4806 *res_len = atcmd_ok_resp(res_resp);
4807 } else {
4808 *res_len = sprintf(res_resp, "+OK=%d", cmdrsp->lpchl.channel);
4809 }
4810 } else if (strcmp("&LPTSTT", at_name) == 0) {
4811 *res_len = sprintf(res_resp, "+OK=%x", tls_tx_litepoint_test_get_totalsnd());
4812 } else if ((strcmp("&LPRSTT", at_name) == 0) || (strcmp("&LPRAGC", at_name) == 0)) {
4813 u32 cnt_total = 0, cnt_good = 0, cnt_bad = 0;
4814 tls_rx_litepoint_test_result(&cnt_total, &cnt_good, &cnt_bad);
4815 *res_len = sprintf(res_resp, "+OK=%x,%x,%x", cnt_total, cnt_good, cnt_bad);
4816 } else if (strcmp("&LPPSTR", at_name) == 0) {
4817 if (gulCalFlag) {
4818 *res_len = sprintf(res_resp, "+OK=%x", rf_spi_read(TEN + 1));
4819 } else {
4820 *res_len = atcmd_ok_resp(res_resp);
4821 }
4822 } else if (strcmp("&LPRSR", at_name) == 0) {
4823 u32 rx_valid, rx_snr, rx_rcpi = 0;
4824 tls_rx_litepoint_pwr_result(&rx_valid, &rx_snr, &rx_rcpi);
4825 if (rx_valid) {
4826 *res_len = sprintf(res_resp, "+OK=%d,%x,%x", rx_valid, rx_rcpi, rx_snr);
4827 } else {
4828 *res_len = sprintf(res_resp, "+OK=%d", rx_valid);
4829 }
4830 #if TLS_CONFIG_WIFI_PERF_TEST
4831 } else if (strcmp("THT", at_name) == 0) {
4832 *res_len = atcmd_ok_resp(res_resp);
4833 #endif
4834 } else if (strcmp("CUSTDATA", at_name) == 0) {
4835 *res_len = sprintf(res_resp, "+OK=\"%s\"", cmdrsp->custdata.data);
4836 #if TLS_CONFIG_AP
4837 } else if (strcmp("SLIST", at_name) == 0) {
4838 if (cmdrsp->stalist.sta_num == 0) {
4839 *res_len = sprintf(res_resp, "+OK=%hhu", cmdrsp->stalist.sta_num);
4840 } else {
4841 *res_len = sprintf(res_resp, "+OK=%hhu%s", cmdrsp->stalist.sta_num, cmdrsp->stalist.data);
4842 }
4843 #endif
4844 } else if (strcmp("PING", at_name) == 0) {
4845 if (cmdrsp->ping.ext) {
4846 *res_len = atcmd_ok_resp(res_resp);
4847 } else {
4848 *res_len = sprintf(res_resp, "+OK=%u", cmdrsp->ping.ttl);
4849 }
4850 } else if (strcmp("CPUSTA", at_name) == 0) {
4851 *res_len = atcmd_ok_resp(res_resp);
4852 } else if (strcmp("CPUDIV", at_name) == 0) {
4853 *res_len = sprintf(res_resp, "+OK=%hhu", cmdrsp->pass.length);
4854 } else if (strcmp("SETTOKEN", at_name) == 0) {
4855 *res_len = atcmd_ok_resp(res_resp);
4856 }
4857
4858 return 0;
4859 }
4860
ri_parse_func(s16 ri_cmd_id,char * buf,u32 length,union HOSTIF_CMD_PARAMS_UNION * cmd)4861 int ri_parse_func(s16 ri_cmd_id, char *buf, u32 length, union HOSTIF_CMD_PARAMS_UNION *cmd)
4862 {
4863 if (ri_cmd_id == HOSTIF_CMD_REGR || ri_cmd_id == HOSTIF_CMD_FLSR) {
4864 if (length > NINE) {
4865 return CMD_ERR_INV_PARAMS;
4866 }
4867 } else if (ri_cmd_id == HOSTIF_CMD_RFR) {
4868 if (length > SEVEN) {
4869 return CMD_ERR_INV_PARAMS;
4870 }
4871 } else if (ri_cmd_id == HOSTIF_CMD_REGW || ri_cmd_id == HOSTIF_CMD_FLSW) {
4872 if (length > (FORTY + 1)) {
4873 return CMD_ERR_INV_PARAMS;
4874 }
4875 } else if (ri_cmd_id == HOSTIF_CMD_RFW) {
4876 if (length > (TWENTY + THREE)) {
4877 return CMD_ERR_INV_PARAMS;
4878 }
4879 } else if (ri_cmd_id == HOSTIF_CMD_UPDM) {
4880 cmd->updm.src = 1;
4881 } else if (ri_cmd_id == HOSTIF_CMD_UPDD) {
4882 cmd->updd.data[0] = 1; /* 鏍囪瘑鏄痳i鎸囦护 */
4883 }
4884 return 0;
4885 }
4886
ri_format_func(s16 ri_cmd_id,u8 set_opt,u8 update_flash,union HOSTIF_CMDRSP_PARAMS_UNION * cmdrsp,char * res_resp,u32 * res_len)4887 int ri_format_func(s16 ri_cmd_id, u8 set_opt, u8 update_flash, union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp,
4888 char *res_resp, u32 *res_len)
4889 {
4890 if (ri_cmd_id == HOSTIF_CMD_MAC
4891 #if TLS_CONFIG_AP
4892 || ri_cmd_id == HOSTIF_CMD_AP_MAC
4893 #endif
4894 ) {
4895 *res_len = sizeof(struct tls_hostif_cmd_hdr) + SIX;
4896 } else if (ri_cmd_id == HOSTIF_CMD_VER) {
4897 *res_len = sizeof(struct tls_hostif_cmd_hdr) + TEN;
4898 #if TLS_CONFIG_RI_CMD
4899 } else if (ri_cmd_id == HOSTIF_CMD_PS || ri_cmd_id == HOSTIF_CMD_DBG || ri_cmd_id == HOSTIF_CMD_UPDP) {
4900 ;
4901 } else if (ri_cmd_id == HOSTIF_CMD_RESET_FLASH || ri_cmd_id == HOSTIF_CMD_RESET || ri_cmd_id == HOSTIF_CMD_PMTF ||
4902 ri_cmd_id == HOSTIF_CMD_GPIO || ri_cmd_id == HOSTIF_CMD_WLEAVE || ri_cmd_id == HOSTIF_CMD_WSCAN ||
4903 ri_cmd_id == HOSTIF_CMD_AOLM || ri_cmd_id == HOSTIF_CMD_DDNS ||
4904 ri_cmd_id == HOSTIF_CMD_UPNP || ri_cmd_id == HOSTIF_CMD_DNAME) {
4905 struct tls_hostif_cmdrsp *cmd_rsp = (struct tls_hostif_cmdrsp *)res_resp;
4906 cmd_rsp->cmd_hdr.ext = 0x00;
4907 } else if (ri_cmd_id == HOSTIF_CMD_WJOIN) {
4908 if (cmdrsp->join.result == 1) {
4909 u8 *p = cmdrsp->join.ssid + cmdrsp->join.ssid_len;
4910 *p = cmdrsp->join.rssi;
4911 *res_len = sizeof(struct tls_hostif_cmd_hdr) + TEN + 1 + cmdrsp->join.ssid_len;
4912 } else {
4913 struct tls_hostif_cmdrsp *cmd_rsp = (struct tls_hostif_cmdrsp *)res_resp;
4914 cmd_rsp->cmd_hdr.ext = 0x00;
4915 }
4916 } else if (ri_cmd_id == HOSTIF_CMD_LINK_STATUS
4917 #if TLS_CONFIG_AP
4918 || ri_cmd_id == HOSTIF_CMD_AP_LINK_STATUS
4919 #endif
4920 ) {
4921 if (cmdrsp->lkstt.status == 1) {
4922 *res_len = sizeof(struct tls_hostif_cmd_hdr) +
4923 sizeof(struct _HOSTIF_CMDRSP_PARAMS_LKSTT);
4924 } else {
4925 *res_len = sizeof(struct tls_hostif_cmd_hdr) + 1;
4926 }
4927 } else if (ri_cmd_id == HOSTIF_CMD_SSID || ri_cmd_id == HOSTIF_CMD_DNS
4928 #if TLS_CONFIG_AP
4929 || ri_cmd_id == HOSTIF_CMD_AP_SSID
4930 #endif
4931 ) {
4932 if (!set_opt) {
4933 *res_len = sizeof(struct tls_hostif_cmd_hdr) + 1 + cmdrsp->ssid.ssid_len;
4934 }
4935 } else if (ri_cmd_id == HOSTIF_CMD_WPRT || ri_cmd_id == HOSTIF_CMD_ENCRYPT || ri_cmd_id == HOSTIF_CMD_BRD_SSID ||
4936 ri_cmd_id == HOSTIF_CMD_WATC || ri_cmd_id == HOSTIF_CMD_WPSM || ri_cmd_id == HOSTIF_CMD_WARM ||
4937 ri_cmd_id == HOSTIF_CMD_ATM || ri_cmd_id == HOSTIF_CMD_PORTM || ri_cmd_id == HOSTIF_CMD_ONESHOT ||
4938 ri_cmd_id == HOSTIF_CMD_WARC || ri_cmd_id == HOSTIF_CMD_IOM || ri_cmd_id == HOSTIF_CMD_CMDM
4939 #if TLS_CONFIG_AP
4940 || ri_cmd_id == HOSTIF_CMD_AP_ENCRYPT
4941 #endif
4942 ) {
4943 if (!set_opt) {
4944 *res_len = sizeof(struct tls_hostif_cmd_hdr) + 1;
4945 }
4946 } else if (ri_cmd_id == HOSTIF_CMD_KEY
4947 #if TLS_CONFIG_AP
4948 || ri_cmd_id == HOSTIF_CMD_AP_KEY
4949 #endif
4950 ) {
4951 if (!set_opt) {
4952 *res_len = sizeof(struct tls_hostif_cmd_hdr) + THREE + cmdrsp->key.key_len;
4953 }
4954 } else if (ri_cmd_id == HOSTIF_CMD_BSSID || ri_cmd_id == HOSTIF_CMD_UART || ri_cmd_id == HOSTIF_CMD_PASS) {
4955 if (!set_opt) {
4956 u8 baud_rate[THREE];
4957 memcpy(baud_rate, cmdrsp->uart.baud_rate, THREE);
4958 cmdrsp->uart.baud_rate[0] = baud_rate[TWO];
4959 cmdrsp->uart.baud_rate[1] = baud_rate[1];
4960 cmdrsp->uart.baud_rate[TWO] = baud_rate[0];
4961 *res_len = sizeof(struct tls_hostif_cmd_hdr) + SEVEN;
4962 }
4963 } else if (ri_cmd_id == HOSTIF_CMD_CHNL || ri_cmd_id == HOSTIF_CMD_WBGR
4964 #if TLS_CONFIG_AP
4965 || ri_cmd_id == HOSTIF_CMD_AP_CHL || ri_cmd_id == HOSTIF_CMD_AP_WBGR
4966 #endif
4967 ) {
4968 if (!set_opt) {
4969 *res_len = sizeof(struct tls_hostif_cmd_hdr) + TWO;
4970 }
4971 } else if (ri_cmd_id == HOSTIF_CMD_WREG || ri_cmd_id == HOSTIF_CMD_ATLT ||
4972 ri_cmd_id == HOSTIF_CMD_CHLL || ri_cmd_id == HOSTIF_CMD_ATPT) {
4973 if (!set_opt) {
4974 cmdrsp->wreg.region = host_to_be16(cmdrsp->wreg.region);
4975 *res_len = sizeof(struct tls_hostif_cmd_hdr) + TWO;
4976 }
4977 } else if (ri_cmd_id == HOSTIF_CMD_NIP
4978 #if TLS_CONFIG_AP
4979 || ri_cmd_id == HOSTIF_CMD_AP_NIP
4980 #endif
4981 ) {
4982 if (!set_opt) {
4983 *res_len = sizeof(struct tls_hostif_cmd_hdr) + TEN + SEVEN;
4984 }
4985 } else if (ri_cmd_id == HOSTIF_CMD_WEBS) {
4986 if (!set_opt) {
4987 cmdrsp->webs.portnum = host_to_be16(cmdrsp->webs.portnum);
4988 *res_len = sizeof(struct tls_hostif_cmd_hdr) + THREE;
4989 }
4990 } else if (ri_cmd_id == HOSTIF_CMD_ATRM) {
4991 u8 *p = (u8 *)res_resp + sizeof(struct tls_hostif_hdr) + sizeof(struct tls_hostif_cmd_hdr);
4992 u8 proto, cs, host_len;
4993 u16 port;
4994 char host_name[THIRTY + TWO];
4995
4996 if (!set_opt) {
4997 proto = cmdrsp->atrm.proto;
4998 cs = cmdrsp->atrm.client ? 0: 1;
4999 host_len = cmdrsp->atrm.host_len;
5000 if (cmdrsp->atrm.client && cmdrsp->atrm.host_len == FOUR) {
5001 memcpy(host_name, cmdrsp->atrm.ip_addr, cmdrsp->atrm.host_len);
5002 } else if (cmdrsp->atrm.client) {
5003 memcpy(host_name, cmdrsp->atrm.host_name, cmdrsp->atrm.host_len);
5004 } else if (!cmdrsp->atrm.client && cmdrsp->atrm.proto == 0) {
5005 put_unaligned_be32(cmdrsp->atrm.timeout, (u8 *)host_name);
5006 }
5007 port = cmdrsp->atrm.port;
5008
5009 *p = proto;
5010 p += 1;
5011 *p = cs;
5012 p += 1;
5013 *p = host_len;
5014 p += 1;
5015 memcpy(p, host_name, host_len);
5016 p += host_len;
5017 put_unaligned_be16(port, (u8 *)p);
5018
5019 *res_len = sizeof(struct tls_hostif_cmd_hdr) + FIVE + cmdrsp->atrm.host_len;
5020 }
5021 } else if (ri_cmd_id == HOSTIF_CMD_CNTPARAM) {
5022 if (!set_opt) {
5023 if (cmdrsp->cntparam_bssid_en.bssid_enable) {
5024 *res_len = sizeof(struct tls_hostif_cmd_hdr) + EIGHT + cmdrsp->cntparam_bssid_en.key_len;
5025 } else {
5026 *res_len = sizeof(struct tls_hostif_cmd_hdr) + THREE + cmdrsp->cntparam_bssid_dis.ssid_len +
5027 cmdrsp->cntparam_bssid_dis.key_len;
5028 }
5029 }
5030 #if TLS_CONFIG_SOCKET_RAW || TLS_CONFIG_SOCKET_STD
5031 } else if (ri_cmd_id == HOSTIF_CMD_SKCT) {
5032 struct tls_hostif_cmdrsp *cmd_rsp = (struct tls_hostif_cmdrsp *)res_resp;
5033 cmd_rsp->cmd_hdr.ext = 0x01;
5034 *res_len = sizeof(struct tls_hostif_cmd_hdr) + 1;
5035 } else if (ri_cmd_id == HOSTIF_CMD_SKSTT) {
5036 struct tls_hostif_cmdrsp *cmd_rsp = (struct tls_hostif_cmdrsp *)res_resp;
5037 cmd_rsp->cmd_hdr.ext = 0x01;
5038 for (int i = 0; i < cmdrsp->skstt.number; i++) {
5039 put_unaligned_le32(get_unaligned_le32(cmdrsp->skstt.ext[i].host_ipaddr),
5040 (u8 *)cmdrsp->skstt.ext[i].host_ipaddr);
5041 put_unaligned_be16(get_unaligned_le16((u8 *)&cmdrsp->skstt.ext[i].remote_port),
5042 (u8 *)&cmdrsp->skstt.ext[i].remote_port);
5043 put_unaligned_be16(get_unaligned_le16((u8 *)&cmdrsp->skstt.ext[i].local_port),
5044 (u8 *)&cmdrsp->skstt.ext[i].local_port);
5045 }
5046 *res_len = sizeof(struct tls_hostif_cmd_hdr) + 1 +
5047 cmdrsp->skstt.number * sizeof(struct hostif_cmdrsp_skstt_ext);
5048 } else if (ri_cmd_id == HOSTIF_CMD_SKCLOSE || ri_cmd_id ==HOSTIF_CMD_SKSDF) {
5049 ;
5050 } else if (ri_cmd_id == HOSTIF_CMD_SKSRCIP) {
5051 if (!set_opt) {
5052 *res_len = sizeof(struct tls_hostif_cmd_hdr) + FOUR;
5053 }
5054 } else if (ri_cmd_id == HOSTIF_CMD_SKGHBN) {
5055 struct tls_hostif_cmdrsp *cmd_rsp = (struct tls_hostif_cmdrsp *)res_resp;
5056 cmd_rsp->cmd_hdr.ext = 0x01;
5057 *res_len = sizeof(struct tls_hostif_cmd_hdr) + FOUR;
5058
5059 #endif
5060 #if TLS_CONFIG_HTTP_CLIENT_TASK
5061 } else if (ri_cmd_id == HOSTIF_CMD_HTTPC) {
5062 ;
5063 } else if (ri_cmd_id == HOSTIF_CMD_FWUP) {
5064 ;
5065 #endif
5066 #endif
5067 } else if (ri_cmd_id == HOSTIF_CMD_UPDM || ri_cmd_id == HOSTIF_CMD_UPDD ||
5068 ri_cmd_id == HOSTIF_CMD_REGW || ri_cmd_id == HOSTIF_CMD_RFW ||
5069 ri_cmd_id == HOSTIF_CMD_FLSW) {
5070 struct tls_hostif_cmdrsp *cmd_rsp = (struct tls_hostif_cmdrsp *)res_resp;
5071 cmd_rsp->cmd_hdr.ext = 0x00;
5072 } else if (ri_cmd_id == HOSTIF_CMD_REGR || ri_cmd_id == HOSTIF_CMD_FLSR) {
5073 struct tls_hostif_cmdrsp *cmd_rsp = (struct tls_hostif_cmdrsp *)res_resp;
5074 cmd_rsp->cmd_hdr.ext = 0x01;
5075 for (int i = 0; i < cmdrsp->regr.length; i++) {
5076 cmdrsp->regr.value[i] = host_to_be32(cmdrsp->regr.value[i]);
5077 }
5078 *res_len = sizeof(struct tls_hostif_cmd_hdr) + 1 + cmdrsp->regr.length * FOUR;
5079 } else if (ri_cmd_id == HOSTIF_CMD_RFR) {
5080 struct tls_hostif_cmdrsp *cmd_rsp = (struct tls_hostif_cmdrsp *)res_resp;
5081 cmd_rsp->cmd_hdr.ext = 0x01;
5082 for (int i = 0; i < cmdrsp->rfr.length; i++) {
5083 cmdrsp->rfr.value[i] = host_to_be16(cmdrsp->rfr.value[i]);
5084 }
5085 *res_len = sizeof(struct tls_hostif_cmd_hdr) + 1 + cmdrsp->regr.length * TWO;
5086 } else if (ri_cmd_id == HOSTIF_CMD_CUSTDATA) {
5087 if (!set_opt) {
5088 *res_len = sizeof(struct tls_hostif_cmd_hdr) + 1 + cmdrsp->custdata.length;
5089 }
5090 #if TLS_CONFIG_WPS
5091 } else if (ri_cmd_id == HOSTIF_CMD_WPS) {
5092 if (cmdrsp->wps.result == 1) {
5093 struct tls_hostif_cmdrsp *cmd_rsp = (struct tls_hostif_cmdrsp *)res_resp;
5094 cmd_rsp->cmd_hdr.ext = 0x01;
5095 memcpy((u8 *)&cmdrsp->wps.result, (u8 *)&cmdrsp->wps.pin_len, cmdrsp->wps.pin_len + 1);
5096 *res_len = sizeof(struct tls_hostif_cmd_hdr) + TWO + cmdrsp->custdata.length;
5097 }
5098 #endif
5099 #if TLS_CONFIG_AP
5100 } else if (ri_cmd_id == HOSTIF_CMD_STA_LIST) {
5101 if (cmdrsp->stalist.sta_num == 0) {
5102 *res_len = sizeof(struct tls_hostif_cmd_hdr) + 1 + cmdrsp->stalist.sta_num;
5103 } else {
5104 *res_len = sizeof(struct tls_hostif_cmd_hdr) + cmdrsp->stalist.sta_num +
5105 strlen((char *)cmdrsp->stalist.data);
5106 }
5107 #endif
5108 } else if (ri_cmd_id == HOSTIF_CMD_TEM) {
5109 *res_len = sizeof(struct tls_hostif_cmd_hdr) + strlen((char *)cmdrsp->mac.addr);
5110 } else {
5111 return CMD_ERR_UNSUPP;
5112 }
5113 return 0;
5114 }
5115
atcmd_err_resp(char * buf,int err_code)5116 int atcmd_err_resp(char *buf, int err_code)
5117 {
5118 int len;
5119 len = sprintf(buf, "+ERR=%d", -err_code);
5120 return len;
5121 }
5122
atcmd_ok_resp(char * buf)5123 int atcmd_ok_resp(char *buf)
5124 {
5125 int len;
5126 len = sprintf(buf, "+OK");
5127 return len;
5128 }
5129
atcmd_nop_proc(struct tls_atcmd_token_t * tok,char * res_resp,u32 * res_len)5130 int atcmd_nop_proc(struct tls_atcmd_token_t *tok, char *res_resp, u32 *res_len)
5131 {
5132 if (!tok->arg_found && (tok->op == ATCMD_OP_NULL)) {
5133 *res_len = atcmd_ok_resp(res_resp);
5134 } else {
5135 *res_len = atcmd_err_resp(res_resp, CMD_ERR_OPS);
5136 }
5137
5138 return 0;
5139 }
5140
hostif_check_atcmd_opt(u8 op,u8 arg_found,u8 opt_flag,u8 arg_len,u8 * set_opt,u8 * update_flash)5141 static int hostif_check_atcmd_opt(u8 op, u8 arg_found, u8 opt_flag, u8 arg_len,
5142 u8 *set_opt, u8 *update_flash)
5143 {
5144 u8 r = opt_flag&op;
5145 if (r == 0) {
5146 return -CMD_ERR_UNSUPP;
5147 }
5148 if (r == ATCMD_OP_EQ || r == ATCMD_OP_EP) {
5149 if (arg_len > arg_found) {
5150 return -CMD_ERR_UNSUPP;
5151 }
5152 *set_opt = 1;
5153 if (op == ATCMD_OP_EP) {
5154 *update_flash = 1;
5155 }
5156 }
5157 return 0;
5158 }
5159
get_first_comma(char * buf,int len)5160 char* get_first_comma(char* buf, int len)
5161 {
5162 char prec = '\0', curc;
5163 int n = 0;
5164 if (len <= 0) {
5165 return NULL;
5166 }
5167 if (*buf == '"') {
5168 for (n = 1; n < len; n++) {
5169 curc = *(buf + n);
5170 if (curc == ',' && prec == '"') {
5171 if (n < THREE || *(buf + n - TWO) != '\\') {
5172 return buf + n;
5173 }
5174 }
5175 prec = curc;
5176 }
5177 return NULL;
5178 } else {
5179 return strchr(buf, ',');
5180 }
5181 }
5182
tls_atcmd_parse(struct tls_atcmd_token_t * tok,char * buf,u32 len)5183 int tls_atcmd_parse(struct tls_atcmd_token_t *tok, char *buf, u32 len)
5184 {
5185 char *c, *end_line, *comma;
5186 int remain_len, ret = 0;
5187 char *buf_start = buf;
5188
5189 /* at command "AT+", NULL OP */
5190 if (len == 0) {
5191 *tok->name = '\0';
5192 tok->arg_found = 0;
5193 return -1;
5194 }
5195
5196 /* parse command name */
5197 c = strchr(buf, '=');
5198 if (!c) {
5199 /* format : at+wprt */
5200 c = strchr(buf, '\n');
5201 if (!c) {
5202 return -CMD_ERR_INV_FMT;
5203 }
5204 if ((c - buf) > (ATCMD_NAME_MAX_LEN - 1)) {
5205 return -CMD_ERR_UNSUPP;
5206 }
5207 MEMCPY(tok->name, buf, c-buf);
5208 *(tok->name + (c-buf)) = '\0';
5209 tok->op = ATCMD_OP_NULL;
5210 tok->arg_found = 0;
5211 return 0;
5212 } else {
5213 /* format : at+wprt=0
5214 * at+skct=0,0,192.168.1.4,80 */
5215 if ((c - buf) > (ATCMD_NAME_MAX_LEN - 1)) {
5216 return -CMD_ERR_UNSUPP;
5217 }
5218 MEMCPY(tok->name, buf, c-buf);
5219 *(tok->name + (c-buf)) = '\0';
5220 tok->op = ATCMD_OP_NULL;
5221 buf += (c-buf + 1);
5222 switch (*buf) {
5223 case '!':
5224 tok->op = ATCMD_OP_EP;
5225 buf++;
5226 break;
5227 case '?':
5228 tok->op = ATCMD_OP_QU;
5229 buf++;
5230 break;
5231 default:
5232 tok->op = ATCMD_OP_EQ;
5233 break;
5234 }
5235 tok->arg[0]= buf;
5236 tok->arg_found = 0;
5237 if (tok->op & 0x9) {
5238 return 0;
5239 }
5240 remain_len = len - (buf - buf_start);
5241 end_line = strchr(buf, '\n');
5242 if (!end_line) {
5243 return -CMD_ERR_INV_FMT;
5244 }
5245 while (remain_len > 0) {
5246 comma = get_first_comma(buf, remain_len);
5247 if (end_line && !comma) {
5248 if (tok->arg_found >= (ATCMD_MAX_ARG - 1)) {
5249 return -CMD_ERR_INV_PARAMS;
5250 }
5251 /* last parameter */
5252 *(u8 *)end_line = '\0';
5253 if (end_line != buf) {
5254 tok->arg_found++;
5255 }
5256 tok->arg[tok->arg_found] = end_line + 1;
5257 remain_len -= (end_line - buf);
5258 if (remain_len > 1) {
5259 return -CMD_ERR_NOT_ALLOW;
5260 } else {
5261 return 0;
5262 }
5263 } else {
5264 if (tok->arg_found >= (ATCMD_MAX_ARG - 1)) {
5265 return -CMD_ERR_INV_PARAMS;
5266 }
5267 *(u8 *)comma = '\0';
5268 if (ret) {
5269 return -CMD_ERR_INV_PARAMS;
5270 }
5271 tok->arg_found++;
5272 tok->arg[tok->arg_found] = comma + 1;
5273 remain_len -= (comma - buf + 1);
5274 buf = comma + 1;
5275 }
5276 }
5277 return 0;
5278 }
5279 }
5280
tls_hostif_atcmd_exec(struct tls_atcmd_token_t * tok,char * res_rsp,u32 * res_len)5281 int tls_hostif_atcmd_exec(struct tls_atcmd_token_t *tok,
5282 char *res_rsp, u32 *res_len)
5283 {
5284 int err = 0;
5285 struct tls_cmd_t *atcmd, *match = NULL;
5286 u8 set_opt = 0, update_flash = 0;
5287 union HOSTIF_CMD_PARAMS_UNION *cmd = NULL;
5288 union HOSTIF_CMDRSP_PARAMS_UNION *cmdrsp = NULL;
5289
5290 if (strlen(tok->name) == 0) {
5291 err = atcmd_nop_proc(tok, res_rsp, res_len);
5292 return err;
5293 }
5294
5295 /* look for AT CMD handle table */
5296 atcmd = at_ri_cmd_tbl;
5297 while (atcmd->at_name) {
5298 if (strcmp(atcmd->at_name, tok->name) == 0) {
5299 match = atcmd;
5300 break;
5301 }
5302 atcmd++;
5303 }
5304 /* at command handle */
5305 if (match) {
5306 cmd = tls_mem_alloc(sizeof(union HOSTIF_CMD_PARAMS_UNION));
5307 if (cmd == NULL) {
5308 err = -CMD_ERR_MEM;
5309 goto err;
5310 }
5311 cmdrsp = tls_mem_alloc(sizeof(union HOSTIF_CMDRSP_PARAMS_UNION));
5312 if (cmdrsp == NULL) {
5313 err = -CMD_ERR_MEM;
5314 goto err;
5315 }
5316
5317 err = hostif_check_atcmd_opt(tok->op, tok->arg_found, match->op_flag,
5318 match->at_arg_len, &set_opt, &update_flash);
5319 if (err) {
5320 goto err;
5321 }
5322 memset(cmd, 0, sizeof(union HOSTIF_CMD_PARAMS_UNION));
5323 err = at_parse_func(match->at_name, tok, cmd);
5324 if (err) {
5325 goto err;
5326 }
5327 memset(cmdrsp, 0, sizeof(union HOSTIF_CMDRSP_PARAMS_UNION));
5328 err = match->proc_func(set_opt, update_flash, cmd, cmdrsp);
5329 if (err) {
5330 goto err;
5331 }
5332 err = at_format_func(match->at_name, set_opt, update_flash, cmdrsp, res_rsp, res_len);
5333 if (err) {
5334 if (err != -CMD_ERR_SKT_RPT) {
5335 goto err;
5336 }
5337 }
5338 if (cmd != NULL) {
5339 tls_mem_free(cmd);
5340 }
5341 if (cmdrsp != NULL) {
5342 tls_mem_free(cmdrsp);
5343 return err;
5344 }
5345 } else {
5346 err = -CMD_ERR_UNSUPP;
5347 }
5348 err:
5349 /* at command not found */
5350 *res_len = sprintf(res_rsp, "+ERR=%d", err);
5351 if (cmd != NULL) {
5352 tls_mem_free(cmd);
5353 }
5354 if (cmdrsp != NULL) {
5355 tls_mem_free(cmdrsp);
5356 }
5357 return err;
5358 }
5359
ricmd_default_proc(char * buf,u32 length,int err,char * cmdrsp_buf,u32 * cmdrsp_size)5360 int ricmd_default_proc(char *buf, u32 length, int err,
5361 char *cmdrsp_buf, u32 *cmdrsp_size)
5362 {
5363 #if TLS_CONFIG_HOSTIF
5364 struct tls_hostif_cmdrsp *cmdrsp = (struct tls_hostif_cmdrsp *)cmdrsp_buf;
5365 struct tls_hostif_cmd *cmd = (struct tls_hostif_cmd *)buf;
5366
5367 /* if cmd is not suppost, return this cmd and err code */
5368 tls_hostif_fill_cmdrsp_hdr(cmdrsp, cmd->cmd_hdr.code, err,
5369 ((err || (cmd->cmd_hdr.ext & 0x1)) ? 0 : 1));
5370 *cmdrsp_size = sizeof(struct tls_hostif_cmd_hdr);
5371 #endif
5372 return 0;
5373 }
5374
tls_hostif_ricmd_exec(char * buf,u32 length,char * cmdrsp_buf,u32 * cmdrsp_size)5375 int tls_hostif_ricmd_exec(char *buf, u32 length, char *cmdrsp_buf, u32 *cmdrsp_size)
5376 {
5377 struct tls_hostif_cmd *cmd = (struct tls_hostif_cmd *)buf;
5378 struct tls_hostif_cmdrsp *cmdrsp = (struct tls_hostif_cmdrsp *)cmdrsp_buf;
5379 int err = 0;
5380 struct tls_cmd_t *match = NULL;
5381 int cmdcnt = sizeof(at_ri_cmd_tbl) / sizeof(struct tls_cmd_t);
5382 int i = 0, set_opt = 0, update_flash = 0;
5383
5384 int cmd_code = cmd->cmd_hdr.code;
5385
5386 /* find cmdId */
5387 if (cmd_code == 0) {
5388 cmd->cmd_hdr.ext = 1;
5389 goto erred;
5390 }
5391 for (i = 0; i< cmdcnt; i++) {
5392 if (cmd_code == at_ri_cmd_tbl[i].ri_cmd_id) {
5393 match = &at_ri_cmd_tbl[i];
5394 break;
5395 }
5396 }
5397 if (match) {
5398 if (cmd->cmd_hdr.ext & 0x2) {
5399 if ((cmd->cmd_hdr.ext & 0x1) == 0 || (match->op_flag & 0x40) == 0) {
5400 err = CMD_ERR_INV_PARAMS;
5401 goto erred;
5402 }
5403 update_flash = 1;
5404 set_opt = 1;
5405 } else if (cmd->cmd_hdr.ext & 0x1) {
5406 if ((match->op_flag & 0x20) == 0) {
5407 err = CMD_ERR_INV_PARAMS;
5408 goto erred;
5409 }
5410 set_opt = 1;
5411 } else if ((match->op_flag & 0x10) == 0) {
5412 err = CMD_ERR_INV_PARAMS;
5413 goto erred;
5414 }
5415 if ((cmd->cmd_hdr.msg_type != 0x01) ||
5416 ((set_opt == 0) && (length != sizeof(struct tls_hostif_cmd_hdr))) ||
5417 ((set_opt == 1) && (length < sizeof(struct tls_hostif_cmd_hdr) + match->ri_set_len))) {
5418 err = CMD_ERR_INV_PARAMS;
5419 goto erred;
5420 }
5421
5422 err = ri_parse_func(cmd_code, buf, length, &cmd->params);
5423 if (err) {
5424 goto erred;
5425 }
5426 err = match->proc_func(set_opt, update_flash, &cmd->params, &cmdrsp->params);
5427 if (err) {
5428 err = -err;
5429 goto erred;
5430 }
5431 ricmd_default_proc(buf, length, err, cmdrsp_buf, cmdrsp_size);
5432 err = ri_format_func(cmd_code, set_opt, update_flash, &cmdrsp->params, cmdrsp_buf, cmdrsp_size);
5433 if (err) {
5434 goto erred;
5435 }
5436 return err;
5437 } else
5438 err = CMD_ERR_OPS;
5439 erred:
5440 ricmd_default_proc(buf, length, err, cmdrsp_buf, cmdrsp_size);
5441 return err;
5442 }
5443
5444 #endif /* TLS_CONFIG_HOSTIF */
5445