/* * File : at_sample_client.c * This file is part of RT-Thread RTOS * COPYRIGHT (C) 2006 - 2018, RT-Thread Development Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * Change Logs: * Date Author Notes * 2018-07-06 chenyong first version */ #include #include #include #include #define LOG_TAG "at.sample" #include /* AT+CIFSR Query local IP address and MAC */ int at_client_test(int argc, char **argv) { at_response_t resp = RT_NULL; int result = 0; if (argc != 1) { LOG_E("at_client_test - AT client send commands to AT server."); return -1; } resp = at_create_resp(256, 0, rt_tick_from_millisecond(5000)); if (resp == RT_NULL) { LOG_E("No memory for response structure!"); return -2; } /* close echo */ at_exec_cmd(resp, "ATE0"); result = at_exec_cmd(resp, "AT+CIFSR"); if (result != RT_EOK) { LOG_E("AT client send commands failed or return response error!"); goto __exit; } /* Print response line buffer */ { const char *line_buffer = RT_NULL; LOG_D("Response buffer"); for(rt_size_t line_num = 1; line_num <= resp->line_counts; line_num++) { if((line_buffer = at_resp_get_line(resp, line_num)) != RT_NULL) { LOG_D("line %d buffer : %s", line_num, line_buffer); } else { LOG_E("Parse line buffer error!"); } } } { char resp_arg[AT_CMD_MAX_LEN] = { 0 }; const char * resp_expr = "%*[^\"]\"%[^\"]\""; LOG_D(" Parse arguments"); if (at_resp_parse_line_args(resp, 1, resp_expr, resp_arg) == 1) { LOG_D("Station IP : %s", resp_arg); memset(resp_arg, 0x00, AT_CMD_MAX_LEN); } else { LOG_E("Parse error, current line buff : %s", at_resp_get_line(resp, 4)); } if (at_resp_parse_line_args(resp, 2, resp_expr, resp_arg) == 1) { LOG_D("Station MAC : %s", resp_arg); } else { LOG_E("Parse error, current line buff : %s", at_resp_get_line(resp, 5)); goto __exit; } } __exit: if(resp) { at_delete_resp(resp); } return result; } int at_client_test_init(int argc, char **argv) { #define AT_CLIENT_RECV_BUFF_LEN 512 if (argc != 2) { rt_kprintf("at_client_init -- AT client initialize.\n"); return -RT_ERROR; } at_client_init(argv[1], AT_CLIENT_RECV_BUFF_LEN); return RT_EOK; } #ifdef FINSH_USING_MSH #include MSH_CMD_EXPORT(at_client_test, AT client send cmd and get response); MSH_CMD_EXPORT_ALIAS(at_client_test_init, at_client_init, initialize AT client); #endif