From ceb9710b3e321974fdb9afc0473f12ad13ef8913 Mon Sep 17 00:00:00 2001 From: Alexandre Abadie <alexandre.abadie@inria.fr> Date: Mon, 4 Jun 2018 17:05:11 +0200 Subject: [PATCH] drivers/at: make OK and ERROR replies configurable --- drivers/at/at.c | 14 +++++++++++--- drivers/include/at.h | 10 ++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/drivers/at/at.c b/drivers/at/at.c index 402286b775..f74b5e3702 100644 --- a/drivers/at/at.c +++ b/drivers/at/at.c @@ -141,11 +141,17 @@ ssize_t at_send_cmd_get_lines(at_dev_t *dev, const char *command, } else if (res > 0) { bytes_left -= res; - if ((res == (2 + keep_eol)) && (strncmp(pos, "OK", 2) == 0)) { + size_t len_ok = sizeof(AT_RECV_OK) - 1; + size_t len_error = sizeof(AT_RECV_ERROR) - 1; + if (((size_t )res == (len_ok + keep_eol)) && + (len_ok != 0) && + (strncmp(pos, AT_RECV_OK, len_ok) == 0)) { res = len - bytes_left; break; } - else if ((res == (5 + keep_eol)) && (strncmp(pos, "ERROR", 5) == 0)) { + else if (((size_t )res == (len_error + keep_eol)) && + (len_error != 0) && + (strncmp(pos, AT_RECV_ERROR, len_error) == 0)) { return -1; } else if (strncmp(pos, "+CME ERROR:", 11) == 0) { @@ -204,8 +210,10 @@ int at_send_cmd_wait_ok(at_dev_t *dev, const char *command, uint32_t timeout) char resp_buf[64]; res = at_send_cmd_get_resp(dev, command, resp_buf, sizeof(resp_buf), timeout); + if (res > 0) { - if (strcmp(resp_buf, "OK") == 0) { + ssize_t len_ok = sizeof(AT_RECV_OK) - 1; + if ((len_ok != 0) && (strcmp(resp_buf, AT_RECV_OK) == 0)) { res = 0; } else { diff --git a/drivers/include/at.h b/drivers/include/at.h index 2b6a6ca1b2..7f8d02848f 100644 --- a/drivers/include/at.h +++ b/drivers/include/at.h @@ -67,6 +67,16 @@ extern "C" { #define AT_RECV_EOL_2 "\n" #endif +#ifndef AT_RECV_OK +/** default OK reply of an AT device */ +#define AT_RECV_OK "OK" +#endif + +#ifndef AT_RECV_ERROR +/** default ERROR reply of an AT device */ +#define AT_RECV_ERROR "ERROR" +#endif + /** * @brief AT device structure */ -- GitLab