ATParser for X-NUCLEO-IDW01M1 module

Dependencies:   BufferedSerial

Dependents:   SPWF01SA-lapi-1 SPWF01SA Nucleo-AWS-IoT-mbed

Fork of ATParser by ST Expansion SW Team

Revision:
5:26bc9255b751
Parent:
4:38acbd6f9d9e
Child:
6:51f1171b5ebc
--- a/ATParser.h	Fri Jul 17 16:38:44 2015 +0000
+++ b/ATParser.h	Fri Jul 17 17:23:57 2015 +0000
@@ -19,7 +19,7 @@
  */
  
 #include "mbed.h"
-#include <stdarg.h>
+#include <cstdarg>
 
 #include "BufferedSerial.h"
 
@@ -51,10 +51,9 @@
     * @param serial serial interface to use for AT commands
     * @param buffer_size size of internal buffer for transaction
     * @param timeout timeout of the connection
-    * @param echo flag to indicate if an echo of sent characters should be expected
     * @param delimiter string of characters to use as line delimiters
     */
-    ATParser(BufferedSerial *serial, int buffer_size = 256, int timeout = 3000,
+    ATParser(BufferedSerial *serial, int buffer_size = 256, int timeout = 8000,
              const char *delimiter = "\r\n") :
             _serial(serial),
             _buffer_size(buffer_size) {
@@ -88,22 +87,44 @@
         _delimiter = delimiter;
         _delim_size = strlen(delimiter);
     }
+    
+    /**
+    * Sends an AT command
+    *
+    * Sends a formatted command using printf style formatting
+    * @see printf
+    *
+    * @param command printf-like format string of command to send which 
+    *                is appended with the specified delimiter
+    * @param ... all printf-like arguments to insert into command
+    * @return true only if command is successfully sent
+    */
+    bool send(const char *command, ...);
+    bool vsend(const char *command, va_list args);
+    
+    /**
+    * Recieve an AT response
+    *
+    * Recieves a formatted response using scanf style formatting
+    * @see scanf
+    *
+    * Responses are parsed line at a time using the specified delimiter.
+    * Any recieved data that does not match the response is ignored until
+    * a timeout occurs.
+    *
+    * @param response scanf-like format string of response to expect
+    * @param ... all scanf-like arguments to extract from response
+    * @return true only if response is successfully matched
+    */
+    bool recv(const char *response, ...);
+    bool vrecv(const char *response, va_list args);
             
     /**
     * Issue AT commands
     *
-    * Sends formatted command and waits for formatted response.
-    * Any recieved data that does not match the specified response 
-    * is ignored until the timeout has passed.
-    *
-    * Both the command and response use format strings that are internally
-    * passed to printf and scanf respectively.
-    * @see printf
-    * @see scanf
-    *
-    * Commands are expected to be formatted with specified delimiters.
-    * Sent commands are appended with the delimiter, and responses are
-    * seperated by delimiters before attempting to parse.
+    * Issues formatted commands and parses formatted responses.
+    * A command call is identical to a send call followed by a recv call.
+    * @see send, recv
     *
     * Here are some examples:
     * @code
@@ -113,31 +134,32 @@
     * @endcode
     *
     * @param command printf-like format string of command to send
-    * @param response scanf-like format string of response to parse
+    * @param response scanf-like format string of response to expect
     * @param ... all printf-like arguments to insert into command followed by 
-    *            all scanf-like pointers to destinations for response values
+    *            all scanf-like arguments to extract from response
     * @return true only if response is successfully matched
     */
     bool command(const char *command, const char *response, ...);
+    bool vcommand(const char *command, const char *response, va_list args);
     
     /** 
-     * Write a single byte to the underlying stream
-     *
-     * @param c The byte to write
-     * @return The byte that was written or -1 during a timeout
-     */
+    * Write a single byte to the underlying stream
+    *
+    * @param c The byte to write
+    * @return The byte that was written or -1 during a timeout
+    */
     int putc(char c);
     
     /** 
-     * Get a single byte from the underlying stream
-     *
-     * @return The byte that was read or -1 during a timeout
-     */
+    * Get a single byte from the underlying stream
+    *
+    * @return The byte that was read or -1 during a timeout
+    */
     int getc();
     
     /**
-     * Flushes the underlying stream
-     */
+    * Flushes the underlying stream
+    */
     void flush();
 };