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 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 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 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 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 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 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 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