Mistake on this page?
Report an issue in GitHub or email us

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,...)
 Sends an AT command. More...
bool recv (const char *response,...)
 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,...)
 Direct printf to underlying stream. More...
int scanf (const char *format,...)
 Direct scanf on underlying stream. 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.

Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.