Parser for AT commands and similar protocols

Dependencies:   BufferedSerial

Revision:
0:c741e144517c
Child:
1:66a14afe650a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ATParser.h	Wed Jul 15 22:39:25 2015 +0000
@@ -0,0 +1,88 @@
+/* Copyright (c) 2015 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @section DESCRIPTION
+ *
+ * Parser for the AT command syntax
+ *
+ */
+ 
+#include "mbed.h"
+
+ 
+/**
+* The ATParser class wraps information about the serial in use
+*/
+class ATParser {
+private:
+    // Serial information
+    RawSerial *_serial;
+    int _buffer_size;
+    char *_buffer;
+    int _timeout;
+    
+    // Helper methods for putc/getc with timeout
+    int _putc(char c);
+    int _getc();
+    
+    // Flush used to clear serial connection
+    void _flush();
+    
+    // Helper methods for reading/writing lines with 
+    // timeout and buffer limitations
+    bool _putline(const char *line);
+    bool _getline(int size, char *line);
+
+public:
+    /**
+    * Constructor
+    *
+    * @param serial serial interface to use for AT commands
+    * @param timeout timeout of the connection
+    */
+    ATParser(RawSerial *serial, int buffer_size = 256, int timeout = 3000) :
+            _serial(serial),
+            _buffer_size(buffer_size),
+            _timeout(timeout) {
+        _buffer = new char[buffer_size];
+    }
+    
+    /**
+    * Destructor
+    */
+    ~ATParser() {
+        delete [] _buffer;
+    }
+    
+    /**
+    * Allows timeout to be changed between commands
+    *
+    * @param timeout timeout of the connection
+    */
+    void setTimeout(int timeout) {
+        _timeout = timeout;
+    }
+            
+    /**
+    * Issue AT commands with specified command and expected response
+    *
+    * @param command printf-like format string of command to send
+    * @param response scanf-like format string of response to parse
+    * @param ... all printf-like arguments to insert into command followed by 
+    *            all scanf-like pointers to destinations for response values
+    * @return true if response is successfully matched
+    */
+    bool command(const char *command, const char *response, ...);
+};
+    
\ No newline at end of file