xref: /nrf52832-nimble/rt-thread/components/net/at/src/at_base_cmd.c (revision 104654410c56c573564690304ae786df310c91fc)
1 /*
2  * Copyright (c) 2006-2018, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2018-04-01     armink       first version
9  * 2018-04-04     chenyong     add base commands
10  */
11 
12 #include <at.h>
13 #include <stdlib.h>
14 #include <string.h>
15 
16 #include <rtdevice.h>
17 
18 #ifdef AT_USING_SERVER
19 
20 #define AT_ECHO_MODE_CLOSE             0
21 #define AT_ECHO_MODE_OPEN              1
22 
23 extern at_server_t at_get_server(void);
24 
at_exec(void)25 static at_result_t at_exec(void)
26 {
27     return AT_RESULT_OK;
28 }
29 AT_CMD_EXPORT("AT", RT_NULL, RT_NULL, RT_NULL, RT_NULL, at_exec);
30 
atz_exec(void)31 static at_result_t atz_exec(void)
32 {
33     at_server_printfln("OK");
34 
35     at_port_factory_reset();
36 
37     return AT_RESULT_NULL;
38 }
39 AT_CMD_EXPORT("ATZ", RT_NULL, RT_NULL, RT_NULL, RT_NULL, atz_exec);
40 
at_rst_exec(void)41 static at_result_t at_rst_exec(void)
42 {
43     at_server_printfln("OK");
44 
45     at_port_reset();
46 
47     return AT_RESULT_NULL;
48 }
49 AT_CMD_EXPORT("AT+RST", RT_NULL, RT_NULL, RT_NULL, RT_NULL, at_rst_exec);
50 
ate_setup(const char * args)51 static at_result_t ate_setup(const char *args)
52 {
53     int echo_mode = atoi(args);
54 
55     if(echo_mode == AT_ECHO_MODE_CLOSE || echo_mode == AT_ECHO_MODE_OPEN)
56     {
57         at_get_server()->echo_mode = echo_mode;
58     }
59     else
60     {
61         return AT_RESULT_FAILE;
62     }
63 
64     return AT_RESULT_OK;
65 }
66 AT_CMD_EXPORT("ATE", "<value>", RT_NULL, RT_NULL, ate_setup, RT_NULL);
67 
at_show_cmd_exec(void)68 static at_result_t at_show_cmd_exec(void)
69 {
70     extern void rt_at_server_print_all_cmd(void);
71 
72     rt_at_server_print_all_cmd();
73 
74     return AT_RESULT_OK;
75 }
76 AT_CMD_EXPORT("AT&L", RT_NULL, RT_NULL, RT_NULL, RT_NULL, at_show_cmd_exec);
77 
at_uart_query(void)78 static at_result_t at_uart_query(void)
79 {
80     struct rt_serial_device *serial = (struct rt_serial_device *)at_get_server()->device;
81 
82     at_server_printfln("AT+UART=%d,%d,%d,%d,%d", serial->config.baud_rate, serial->config.data_bits,
83             serial->config.stop_bits, serial->config.parity, 1);
84 
85     return AT_RESULT_OK;
86 }
87 
at_uart_setup(const char * args)88 static at_result_t at_uart_setup(const char *args)
89 {
90     struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
91     int baudrate, databits, stopbits, parity, flow_control, argc;
92     const char *req_expr = "=%d,%d,%d,%d,%d";
93 
94     argc = at_req_parse_args(args, req_expr, &baudrate, &databits, &stopbits, &parity, &flow_control);
95     if (argc != 5)
96     {
97         return AT_RESULT_PARSE_FAILE;
98     }
99 
100     at_server_printfln("UART baudrate : %d", baudrate);
101     at_server_printfln("UART databits : %d", databits);
102     at_server_printfln("UART stopbits : %d", stopbits);
103     at_server_printfln("UART parity   : %d", parity);
104     at_server_printfln("UART control  : %d", flow_control);
105 
106     config.baud_rate = baudrate;
107     config.data_bits = databits;
108     config.stop_bits = stopbits;
109     config.parity = parity;
110 
111     if(rt_device_control(at_get_server()->device, RT_DEVICE_CTRL_CONFIG, &config) != RT_EOK)
112     {
113         return AT_RESULT_FAILE;
114     }
115 
116     return AT_RESULT_OK;
117 }
118 
119 AT_CMD_EXPORT("AT+UART", "=<baudrate>,<databits>,<stopbits>,<parity>,<flow_control>", RT_NULL, at_uart_query, at_uart_setup, RT_NULL);
120 
121 #endif /* AT_USING_SERVER */
122