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