mbed support for STM32F103C8T6 (Blue Pill) boards

Committer:
faydrus
Date:
Fri Sep 28 13:28:09 2018 +0000
Revision:
14:900adc64ed43
Added in custom SX1276 driver

Who changed what in which revision?

UserRevisionLine numberNew contents of line
faydrus 14:900adc64ed43 1 #include <ATCmdParser.h>
faydrus 14:900adc64ed43 2
faydrus 14:900adc64ed43 3
faydrus 14:900adc64ed43 4 // The AT command parser for the serial interface.
faydrus 14:900adc64ed43 5
faydrus 14:900adc64ed43 6
faydrus 14:900adc64ed43 7 // AT commands we'd like to have:
faydrus 14:900adc64ed43 8 //
faydrus 14:900adc64ed43 9 // AT+Freq? -- get the frequency
faydrus 14:900adc64ed43 10 // -- <value> -- current frequency
faydrus 14:900adc64ed43 11 //
faydrus 14:900adc64ed43 12 // AT+Freq -- set the frequency
faydrus 14:900adc64ed43 13 // -- OK -- response
faydrus 14:900adc64ed43 14 // <data> -- frequency value
faydrus 14:900adc64ed43 15 // -- OK -- response
faydrus 14:900adc64ed43 16 //
faydrus 14:900adc64ed43 17 // AT+SF? -- get the spreading factor
faydrus 14:900adc64ed43 18 // -- <value> -- current spreading factor
faydrus 14:900adc64ed43 19 //
faydrus 14:900adc64ed43 20 // AT+SF -- set the spreading factor
faydrus 14:900adc64ed43 21 // -- OK -- response
faydrus 14:900adc64ed43 22 // <value> -- spreading factor
faydrus 14:900adc64ed43 23 // -- OK -- response
faydrus 14:900adc64ed43 24 //
faydrus 14:900adc64ed43 25 // AT+BW? -- get the bandwidth
faydrus 14:900adc64ed43 26 // -- <value> -- current bandwidth
faydrus 14:900adc64ed43 27 //
faydrus 14:900adc64ed43 28 // AT+BW -- set the bandwidth
faydrus 14:900adc64ed43 29 // -- OK -- response
faydrus 14:900adc64ed43 30 // <value> -- bandwidth value
faydrus 14:900adc64ed43 31 // -- OK -- response
faydrus 14:900adc64ed43 32 //
faydrus 14:900adc64ed43 33 // AT+RXDEQ? -- Dequeue the RX queue
faydrus 14:900adc64ed43 34 // -- <value> -- RX frame
faydrus 14:900adc64ed43 35 //
faydrus 14:900adc64ed43 36 // AT+RXCNT? -- get the number of RX frames waiting in the queue
faydrus 14:900adc64ed43 37 // -- <value> -- number of RX frames
faydrus 14:900adc64ed43 38 //
faydrus 14:900adc64ed43 39 // AT+RXCLR -- clear the RX queue
faydrus 14:900adc64ed43 40 // -- OK -- response
faydrus 14:900adc64ed43 41 //
faydrus 14:900adc64ed43 42 // AT+TXENQ -- Load the TX queue with another frame
faydrus 14:900adc64ed43 43 // -- OK -- response
faydrus 14:900adc64ed43 44 // <data> -- TX frame data
faydrus 14:900adc64ed43 45 // -- OK -- response
faydrus 14:900adc64ed43 46 //
faydrus 14:900adc64ed43 47 // AT+TXCNT? -- get the number of TX frames waiting in the queue
faydrus 14:900adc64ed43 48 // -- <value> -- number of TX frames
faydrus 14:900adc64ed43 49 //
faydrus 14:900adc64ed43 50 // AT+TXCLR -- clear the TX queue
faydrus 14:900adc64ed43 51 // -- OK -- response
faydrus 14:900adc64ed43 52 //
faydrus 14:900adc64ed43 53 // AT+NVS -- save settings to Non-Volatile Storage (NVS)
faydrus 14:900adc64ed43 54 // -- OK -- response
faydrus 14:900adc64ed43 55 //
faydrus 14:900adc64ed43 56 //
faydrus 14:900adc64ed43 57
faydrus 14:900adc64ed43 58 char response[64];
faydrus 14:900adc64ed43 59 char recv_data[256];
faydrus 14:900adc64ed43 60 #if 0
faydrus 14:900adc64ed43 61 void processATCmds(ATCmdParser *at) {
faydrus 14:900adc64ed43 62 at->recv("AT+%s", response);
faydrus 14:900adc64ed43 63 if(!strcmp(response, "Freq?")) {
faydrus 14:900adc64ed43 64 at->send(radio->freq);
faydrus 14:900adc64ed43 65 }
faydrus 14:900adc64ed43 66 else if(!strcmp(response, "Freq")) {
faydrus 14:900adc64ed43 67 at->send("OK");
faydrus 14:900adc64ed43 68 int32_t new_freq;
faydrus 14:900adc64ed43 69 at->recv("%d", new_freq);
faydrus 14:900adc64ed43 70 if(new_freq > 450000000 || new_freq < 420000000) {
faydrus 14:900adc64ed43 71 at->send("ERR OUT_OF_RANGE");
faydrus 14:900adc64ed43 72 }
faydrus 14:900adc64ed43 73 else {
faydrus 14:900adc64ed43 74 radio->freq = new_freq;
faydrus 14:900adc64ed43 75 at->send("OK");
faydrus 14:900adc64ed43 76 }
faydrus 14:900adc64ed43 77 }
faydrus 14:900adc64ed43 78 else if(!strcmp(response, "SF?")) {
faydrus 14:900adc64ed43 79 at->send(radio->sf);
faydrus 14:900adc64ed43 80 }
faydrus 14:900adc64ed43 81 else if(!strcmp(response, "SF")) {
faydrus 14:900adc64ed43 82 at->send("OK");
faydrus 14:900adc64ed43 83 int32_t new_sf;
faydrus 14:900adc64ed43 84 at->recv("%d", new_sf);
faydrus 14:900adc64ed43 85 if(new_sf < 6 || new_sf > 12) {
faydrus 14:900adc64ed43 86 at->send("ERR INVALID");
faydrus 14:900adc64ed43 87 }
faydrus 14:900adc64ed43 88 else {
faydrus 14:900adc64ed43 89 radio->sf = new_sf;
faydrus 14:900adc64ed43 90 at->send("OK");
faydrus 14:900adc64ed43 91 }
faydrus 14:900adc64ed43 92 }
faydrus 14:900adc64ed43 93 else if(!strcmp(response, "BW?")) {
faydrus 14:900adc64ed43 94 at->send(radio->bw);
faydrus 14:900adc64ed43 95 }
faydrus 14:900adc64ed43 96 else if(!strcmp(response, "BW")) {
faydrus 14:900adc64ed43 97 at->send("OK");
faydrus 14:900adc64ed43 98 int32_t new_bw;
faydrus 14:900adc64ed43 99 at->recv("%d", new_bw);
faydrus 14:900adc64ed43 100 if(new_bw == 125000 || new_bw == 250000 || new_bw == 500000) {
faydrus 14:900adc64ed43 101 radio->bw = new_bw;
faydrus 14:900adc64ed43 102 at->send("OK");
faydrus 14:900adc64ed43 103 }
faydrus 14:900adc64ed43 104 else {
faydrus 14:900adc64ed43 105 at->send("ERR INVALID");
faydrus 14:900adc64ed43 106 }
faydrus 14:900adc64ed43 107 }
faydrus 14:900adc64ed43 108 else if(!strcmp(response, "RXDEQ?")) {
faydrus 14:900adc64ed43 109 int errcode = rx_queue->dequeue();
faydrus 14:900adc64ed43 110 if(!errcode) {
faydrus 14:900adc64ed43 111 at->send(rx_queue->dequeue());
faydrus 14:900adc64ed43 112 }
faydrus 14:900adc64ed43 113 else {
faydrus 14:900adc64ed43 114 at->send("ERR %d", errcode);
faydrus 14:900adc64ed43 115 }
faydrus 14:900adc64ed43 116 }
faydrus 14:900adc64ed43 117 else if(!strcmp(response, "RXCNT?")) {
faydrus 14:900adc64ed43 118 at->send(rx_queue->getCount());
faydrus 14:900adc64ed43 119 }
faydrus 14:900adc64ed43 120 else if(!strcmp(response, "RXCLR")) {
faydrus 14:900adc64ed43 121 tx_queue->clear();
faydrus 14:900adc64ed43 122 at->send("OK");
faydrus 14:900adc64ed43 123 }
faydrus 14:900adc64ed43 124 else if(!strcmp(response, "TXENQ")) {
faydrus 14:900adc64ed43 125 at->send("OK");
faydrus 14:900adc64ed43 126 at->recv("%s", recv_data);
faydrus 14:900adc64ed43 127 int errcode = tx_queue->enqueue(recv_data);
faydrus 14:900adc64ed43 128 if(!errcode) {
faydrus 14:900adc64ed43 129 at->send("OK");
faydrus 14:900adc64ed43 130 }
faydrus 14:900adc64ed43 131 else {
faydrus 14:900adc64ed43 132 at->send("ERR %d", errcode);
faydrus 14:900adc64ed43 133 }
faydrus 14:900adc64ed43 134 }
faydrus 14:900adc64ed43 135 else if(!strcmp(response, "TXCNT?")) {
faydrus 14:900adc64ed43 136 at->send(tx_queue->getSize());
faydrus 14:900adc64ed43 137 }
faydrus 14:900adc64ed43 138 else if(!strcmp(response, "TXCLR")) {
faydrus 14:900adc64ed43 139 int errcode = tx_queue->clear();
faydrus 14:900adc64ed43 140 if(!errcode) {
faydrus 14:900adc64ed43 141 at->send("OK");
faydrus 14:900adc64ed43 142 else {
faydrus 14:900adc64ed43 143 at->send("ERR %d", errcode);
faydrus 14:900adc64ed43 144 }
faydrus 14:900adc64ed43 145 }
faydrus 14:900adc64ed43 146 else if(!strcmp(response, "NVS")) {
faydrus 14:900adc64ed43 147 int errcode = nv_settings->save();
faydrus 14:900adc64ed43 148 if(!errcode) {
faydrus 14:900adc64ed43 149 at->send("OK");
faydrus 14:900adc64ed43 150 }
faydrus 14:900adc64ed43 151 else {
faydrus 14:900adc64ed43 152 at->send("ERR %d", errcode);
faydrus 14:900adc64ed43 153 }
faydrus 14:900adc64ed43 154 }
faydrus 14:900adc64ed43 155 }
faydrus 14:900adc64ed43 156
faydrus 14:900adc64ed43 157 #endif