mbed support for STM32F103C8T6 (Blue Pill) boards
at_commands.cpp@14:900adc64ed43, 2018-09-28 (annotated)
- 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?
User | Revision | Line number | New 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 |