ATCmdParser
ATCmdParser class hierarchy
ATCmdParser is an Mbed OS AT command parser and serializer. AT commands are instructions used to communicate with a communication device such as a modem, phone or Wi-Fi module. Each command is a text string in ASCII format, and every command starts with "AT" characters followed by a command specifying the operation to be carried out.
The ATCmdParser class implements functionality to send and receive AT commands to the devices capable of communicating using AT commands. The ATCmdParser internally uses the driver for the communication channel to talk to the device. It expects the driver to implement the FileHandle interface to invoke the functions on the driver.
For example, the UARTSerial communication driver implements the FileHandle interface, and you can use it with ATCmdParser to send and receive AT commands to a device connected through UART. ATCmdParser also does AT command parsing, which validates the data format and separates command and data portion of AT transactions. The actual command set and the format of AT commands used depends on the communication device used. The vendor of the device you are communcating with specifies this command set and format.
To use the ATCmdParser, the entity creating the ATCmdParser object passes a reference of object implementing FileHandle interface as an argument to the ATCmdParser constructor. The ATCmdParser also supports configuring a specific output delimiter character sequence, depending on the interface or device connected to the communication interface.
ATCmdParser class reference
Public Member Functions | |
ATCmdParser (FileHandle *fh, const char *output_delimiter="\r", int buffer_size=256, int timeout=8000, bool debug=false) | |
Constructor. More... | |
~ATCmdParser () | |
Destructor. More... | |
void | set_timeout (int timeout) |
Allows timeout to be changed between commands. More... | |
void | set_delimiter (const char *output_delimiter) |
Sets string of characters to use as line delimiters. More... | |
void | debug_on (uint8_t on) |
Allows traces from modem to be turned on or off. More... | |
bool | send (const char *command,...) MBED_PRINTF_METHOD(1 |
Sends an AT command. More... | |
bool | recv (const char *response,...) MBED_SCANF_METHOD(1 |
Receive an AT response. More... | |
int | putc (char c) |
Write a single byte to the underlying stream. More... | |
int | getc () |
Get a single byte from the underlying stream. More... | |
int | write (const char *data, int size) |
Write an array of bytes to the underlying stream. More... | |
int | read (char *data, int size) |
Read an array of bytes from the underlying stream. More... | |
int | printf (const char *format,...) MBED_PRINTF_METHOD(1 |
Direct printf to underlying stream. More... | |
int | scanf (const char *format,...) MBED_SCANF_METHOD(1 |
Direct scanf on underlying stream This function does not itself match whitespace in its format string, so is not significant to it. More... | |
void | oob (const char *prefix, mbed::Callback< void()> func) |
Attach a callback for out-of-band data. More... | |
void | remove_oob (const char *prefix) |
remove_oob Removes oob callback handler More... | |
void | flush () |
Flushes the underlying stream. More... | |
void | abort () |
Abort current recv. More... | |
bool | process_oob (void) |
Process out-of-band data. More... |
ATCmdParser Example
The following is a program that uses the ATCmdParser
class to communicate with a ESP8266 Wi-Fi module. ESP8266 is a Wi-Fi module that can be connected to an SoC over UART for Wi-Fi support.
This program retrieves the FW version of the module using AT commands.
The output of the application can be viewed in a serial terminal with the following settings:
- Baud rate: 9600
- Data bits: 8
- Stop bits: 1
- Parity: None
/* ATCmdParser usage example
* Copyright (c) 2016 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.
*/
#include "mbed.h"
#define ESP8266_DEFAULT_BAUD_RATE 115200
int main()
{
BufferedSerial *_serial;
ATCmdParser *_parser;
printf("\nATCmdParser with ESP8266 example");
_serial = new BufferedSerial(D1, D0, ESP8266_DEFAULT_BAUD_RATE);
_parser = new ATCmdParser(_serial, "\r\n");
_parser->debug_on(true);
//Now get the FW version number of ESP8266 by sending an AT command
printf("\nATCmdParser: Retrieving FW version");
_parser->send("AT+GMR");
int version;
if (_parser->recv("OK") && _parser->recv("SDK version:%d", &version)) {
printf("\nATCmdParser: FW version: %d", version);
printf("\nATCmdParser: Retrieving FW version successful");
} else {
printf("\nATCmdParser: Retrieving FW version failed");
return -1;
}
}
The diagram below shows how the ESP8266 Wi-Fi driver uses the ATCmdParser
class to communicate with an ESP8266 device.