MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / server_parser

Function server_parser

components/net/at/src/at_server.c:448–519  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

446}
447
448static void server_parser(at_server_t server)
449{
450#define ESC_KEY 0x1B
451#define BACKSPACE_KEY 0x08
452#define DELECT_KEY 0x7F
453
454 char cur_cmd_name[AT_CMD_NAME_LEN] = { 0 };
455 at_cmd_t cur_cmd = RT_NULL;
456 char *cur_cmd_args = RT_NULL, ch, last_ch;
457 at_result_t result;
458
459 RT_ASSERT(server);
460 RT_ASSERT(server->status != AT_STATUS_UNINITIALIZED);
461
462 while (1)
463 {
464 server->get_char(server, &ch, RT_WAITING_FOREVER);
465 if (ESC_KEY == ch)
466 {
467 break;
468 }
469
470 if (ch == BACKSPACE_KEY || ch == DELECT_KEY)
471 {
472 if (server->cur_recv_len)
473 server->cur_recv_len--;
474 if (server->echo_mode)
475 at_server_printf("\b \b");
476 }
477 else if (ch == AT_CMD_LF && last_ch == AT_CMD_CR)
478 {
479 /* skip '\n' if we get "\r\n" */
480 }
481 else
482 {
483 if (server->cur_recv_len < sizeof(server->recv_buffer) - 1)
484 {
485 server->recv_buffer[server->cur_recv_len++] = ch;
486 if (ch == AT_CMD_CR || ch == AT_CMD_LF)
487 {
488 if (server->echo_mode)
489 at_server_printf("%c%c", AT_CMD_CR, AT_CMD_LF);
490 server->recv_buffer[server->cur_recv_len] = '\0';
491 result = AT_RESULT_FAILE;
492 if (at_cmd_get_name(server->recv_buffer, cur_cmd_name) == RT_EOK)
493 {
494 cur_cmd = at_find_cmd(cur_cmd_name);
495 if (cur_cmd)
496 {
497 cur_cmd_args = server->recv_buffer + strlen(cur_cmd_name);
498 result = at_cmd_process(cur_cmd, cur_cmd_args);
499 }
500 }
501
502 at_server_print_result(result);
503 server->cur_recv_len = 0;
504 }
505 else

Callers

nothing calls this directly

Calls 5

at_server_printfFunction · 0.85
at_cmd_get_nameFunction · 0.85
at_find_cmdFunction · 0.85
at_cmd_processFunction · 0.85
at_server_print_resultFunction · 0.85

Tested by

no test coverage detected