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 | setTimeout (int timeout) |
For backward compatibility. More... | |
void | set_delimiter (const char *output_delimiter) |
Sets string of characters to use as line delimiters. More... | |
void | setDelimiter (const char *output_delimiter) |
For backwards compatibility. More... | |
void | debug_on (uint8_t on) |
Allows traces from modem to be turned on or off. More... | |
void | debugOn (uint8_t on) |
For backward compatibility. 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 | flush () |
Flushes the underlying stream. More... | |
void | abort () |
Abort current recv. More... | |
bool | process_oob (void) |
Process out-of-band data. More... |
ATCmdParser examples
Example 1
/* 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"
#include "platform\ATCmdParser.h"
#include "drivers\UARTSerial.h"
#define ESP8266_DEFAULT_BAUD_RATE 115200
UARTSerial *_serial;
ATCmdParser *_parser;
int main()
{
printf("\nATCmdParser with ESP8266 example");
_serial = new UARTSerial(D1, D0, ESP8266_DEFAULT_BAUD_RATE);
_parser = new ATCmdParser(_serial);
_parser->debug_on( 1 );
_parser->set_delimiter( "\r\n" );
//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("SDK version:%d", &version) && _parser->recv("OK")) {
printf("\nATCmdParser: FW version: %d", version);
printf("\nATCmdParser: Retrieving FW version success");
} else {
printf("\nATCmdParser: Retrieving FW version failed");
return -1;
}
printf("\nDone\n");
}
Example 2
You can find another real world example in the Wi-Fi driver implementation for an ESP8266 device. ESP8266 is a Wi-Fi module that you can connect to an SoC over UART for Wi-Fi support.
The above diagram shows how the ESP8266 Wi-Fi driver uses ATCmdParser to communicate with an ESP8266 device.