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