Parser for AT commands and similar protocols
ATParser.h
- Committer:
- geky
- Date:
- 2015-07-16
- Revision:
- 1:66a14afe650a
- Parent:
- 0:c741e144517c
- Child:
- 2:4d68f546861c
File content as of revision 1:66a14afe650a:
/* 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" #include <stdarg.h> #include "BufferedSerial.h" /** * The ATParser class wraps information about the serial in use */ class ATParser { private: // Serial information BufferedSerial *_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(char *line, int size); public: /** * Constructor * * @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 */ ATParser(BufferedSerial *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 * Uses printf/scanf like format strings to be able to parse the results * * Here are some examples: * @code * at.command("AT", "OK"); * at.command("AT+CWMODE=%d", "OK", 3); * at.command("AT+CWMODE?", "+CWMODE:%d OK", &result); * @endcode * * @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 only if response is successfully matched */ bool command(const char *command, const char *response, ...); };