mbed support for STM32F103C8T6 (Blue Pill) boards

at_commands.cpp

Committer:
faydrus
Date:
2018-09-28
Revision:
14:900adc64ed43

File content as of revision 14:900adc64ed43:

#include <ATCmdParser.h>


// The AT command parser for the serial interface.


// AT commands we'd like to have:
//
// AT+Freq? -- get the frequency
// -- <value> -- current frequency
//
// AT+Freq -- set the frequency
// -- OK -- response
// <data> -- frequency value
// -- OK -- response
//
// AT+SF? -- get the spreading factor
// -- <value> -- current spreading factor
//
// AT+SF -- set the spreading factor
// -- OK -- response
// <value> -- spreading factor
// -- OK -- response
//
// AT+BW? -- get the bandwidth
// -- <value> -- current bandwidth
//
// AT+BW -- set the bandwidth
// -- OK -- response
// <value> -- bandwidth value
// -- OK -- response 
//
// AT+RXDEQ? -- Dequeue the RX queue
// -- <value> -- RX frame 
//
// AT+RXCNT? -- get the number of RX frames waiting in the queue
// -- <value> -- number of RX frames
//
// AT+RXCLR -- clear the RX queue
// -- OK -- response
//
// AT+TXENQ -- Load the TX queue with another frame
// -- OK -- response
// <data> -- TX frame data
// -- OK -- response
//
// AT+TXCNT? -- get the number of TX frames waiting in the queue
// -- <value> -- number of TX frames
//
// AT+TXCLR -- clear the TX queue
// -- OK -- response
//
// AT+NVS -- save settings to Non-Volatile Storage (NVS)
// -- OK -- response
//
// 

char response[64];
char recv_data[256];
#if 0
void processATCmds(ATCmdParser *at) {
    at->recv("AT+%s", response);
    if(!strcmp(response, "Freq?")) {
        at->send(radio->freq);
    } 
    else if(!strcmp(response, "Freq")) {
        at->send("OK");
        int32_t new_freq;
        at->recv("%d", new_freq);
        if(new_freq > 450000000 || new_freq < 420000000) {
            at->send("ERR OUT_OF_RANGE");   
        }
        else {
            radio->freq = new_freq;
            at->send("OK");   
        }
    }
    else if(!strcmp(response, "SF?")) {
        at->send(radio->sf);
    }
    else if(!strcmp(response, "SF")) {
        at->send("OK");
        int32_t new_sf;
        at->recv("%d", new_sf);
        if(new_sf < 6 || new_sf > 12) {
            at->send("ERR INVALID");
        }
        else {
            radio->sf = new_sf;
            at->send("OK");   
        }
    }
    else if(!strcmp(response, "BW?")) {
        at->send(radio->bw);
    }
    else if(!strcmp(response, "BW")) {
        at->send("OK");
        int32_t new_bw;
        at->recv("%d", new_bw);
        if(new_bw == 125000 || new_bw == 250000 || new_bw == 500000) {
            radio->bw = new_bw;
            at->send("OK");
        }
        else {
            at->send("ERR INVALID");   
        }
    }
    else if(!strcmp(response, "RXDEQ?")) {
        int errcode = rx_queue->dequeue();
        if(!errcode) {
            at->send(rx_queue->dequeue());
        }
        else {
            at->send("ERR %d", errcode);
        }
    }
    else if(!strcmp(response, "RXCNT?")) {
        at->send(rx_queue->getCount());
    }
    else if(!strcmp(response, "RXCLR")) {
        tx_queue->clear();
        at->send("OK");
    }
    else if(!strcmp(response, "TXENQ")) {
        at->send("OK");
        at->recv("%s", recv_data);
        int errcode = tx_queue->enqueue(recv_data);
        if(!errcode) {
            at->send("OK");
        }
        else {
            at->send("ERR %d", errcode);
        }
    }
    else if(!strcmp(response, "TXCNT?")) {
        at->send(tx_queue->getSize());
    }
    else if(!strcmp(response, "TXCLR")) {
        int errcode = tx_queue->clear();
        if(!errcode) {
            at->send("OK");
        else {
            at->send("ERR %d", errcode);   
        }
    }
    else if(!strcmp(response, "NVS")) {
        int errcode = nv_settings->save();
        if(!errcode) {
            at->send("OK");
        }
        else {
            at->send("ERR %d", errcode);   
        }
    }
}

#endif