ECE420 Project

Dependencies:   mbed

Fork of FONA_CellPhone by Dream Team

Committer:
nakita94
Date:
Wed Jun 22 01:33:03 2016 +0000
Revision:
18:a4f1b2947109
Parent:
17:b01377595122
6/21/2106 changes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
George windoge T 11:eb8938e62739 1 /***************************************************
George windoge T 11:eb8938e62739 2 This is an example for our Adafruit FONA Cellular Module
George windoge T 11:eb8938e62739 3
George windoge T 11:eb8938e62739 4 Designed specifically to work with the Adafruit FONA
George windoge T 11:eb8938e62739 5 ----> http://www.adafruit.com/products/1946
George windoge T 11:eb8938e62739 6 ----> http://www.adafruit.com/products/1963
George windoge T 11:eb8938e62739 7 ----> http://www.adafruit.com/products/2468
George windoge T 11:eb8938e62739 8 ----> http://www.adafruit.com/products/2542
George windoge T 11:eb8938e62739 9
George windoge T 11:eb8938e62739 10 These cellular modules use TTL Serial to communicate, 2 pins are
George windoge T 11:eb8938e62739 11 required to interface
George windoge T 11:eb8938e62739 12 Adafruit invests time and resources providing this open source code,
George windoge T 11:eb8938e62739 13 please support Adafruit and open-source hardware by purchasing
George windoge T 11:eb8938e62739 14 products from Adafruit!
George windoge T 11:eb8938e62739 15
George windoge T 11:eb8938e62739 16 Written by Limor Fried/Ladyada for Adafruit Industries.
George windoge T 11:eb8938e62739 17 BSD license, all text above must be included in any redistribution
George windoge T 11:eb8938e62739 18 ****************************************************/
George windoge T 11:eb8938e62739 19
George windoge T 11:eb8938e62739 20 /*
jbaker66 17:b01377595122 21 * Modified by Jesse Baker & George Tzintzarov 03/30/2016 for use in mbed LPC1768
George windoge T 11:eb8938e62739 22 */
George windoge T 11:eb8938e62739 23
George windoge T 11:eb8938e62739 24 /*
George windoge T 11:eb8938e62739 25 THIS CODE IS STILL IN PROGRESS!
George windoge T 11:eb8938e62739 26
George windoge T 11:eb8938e62739 27 Open up the serial console on the Arduino at 4800 baud to interact with FONA
George windoge T 11:eb8938e62739 28
George windoge T 11:eb8938e62739 29 Note that if you need to set a GPRS APN, username, and password scroll down to
George windoge T 11:eb8938e62739 30 the commented section below just before the main "while (true)" loop.
George windoge T 11:eb8938e62739 31 */
George windoge T 11:eb8938e62739 32
George windoge T 11:eb8938e62739 33
George windoge T 11:eb8938e62739 34 #include <ctype.h>
George windoge T 11:eb8938e62739 35 //#include "SoftSerial.h" I dont think we need this
George windoge T 11:eb8938e62739 36 #include "Adafruit_FONA.h"
George windoge T 11:eb8938e62739 37
George windoge T 11:eb8938e62739 38 #define FONA_RST p12
George windoge T 11:eb8938e62739 39 #define FONA_TX p13
George windoge T 11:eb8938e62739 40 #define FONA_RX p14
George windoge T 11:eb8938e62739 41 #define FONA_RI p11
George windoge T 11:eb8938e62739 42
George windoge T 11:eb8938e62739 43 // this is a large buffer for replies
George windoge T 11:eb8938e62739 44 char replybuffer[255];
George windoge T 11:eb8938e62739 45
George windoge T 11:eb8938e62739 46
George windoge T 11:eb8938e62739 47 Serial pcSerial(USBTX, USBRX);
George windoge T 11:eb8938e62739 48 Adafruit_FONA fona(FONA_TX, FONA_RX, FONA_RST, FONA_RI);
jbaker66 14:0c0bbca5ac26 49 //uLCD_4DGL uLCD(p28,p27,p30);
George windoge T 11:eb8938e62739 50
George windoge T 11:eb8938e62739 51 // Turn on a LED when somebody call the FONA
George windoge T 11:eb8938e62739 52 DigitalOut led1(LED1);
George windoge T 11:eb8938e62739 53 class FonaEventListener : public Adafruit_FONA::EventListener {
George windoge T 11:eb8938e62739 54 virtual void onRing() {
George windoge T 11:eb8938e62739 55 led1 = 1;
George windoge T 11:eb8938e62739 56 }
George windoge T 11:eb8938e62739 57
nakita94 18:a4f1b2947109 58
George windoge T 11:eb8938e62739 59 virtual void onNoCarrier() {
George windoge T 11:eb8938e62739 60 led1 = 0;
George windoge T 11:eb8938e62739 61 }
George windoge T 11:eb8938e62739 62 };
George windoge T 11:eb8938e62739 63 FonaEventListener fonaEventListener;
George windoge T 11:eb8938e62739 64
George windoge T 11:eb8938e62739 65 // Functions defined after main()
George windoge T 11:eb8938e62739 66 uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout = 0);
George windoge T 11:eb8938e62739 67 void printMenu(void);
George windoge T 11:eb8938e62739 68 void flushSerial();
George windoge T 11:eb8938e62739 69 char readBlocking();
George windoge T 11:eb8938e62739 70 uint16_t readnumber();
George windoge T 11:eb8938e62739 71 long map(long x, long in_min, long in_max, long out_min, long out_max);
George windoge T 11:eb8938e62739 72
George windoge T 11:eb8938e62739 73 int main() {
George windoge T 11:eb8938e62739 74 pcSerial.baud(9600);
George windoge T 11:eb8938e62739 75 wait(1);
George windoge T 11:eb8938e62739 76 pcSerial.printf("\r\n");
George windoge T 11:eb8938e62739 77
George windoge T 11:eb8938e62739 78 pcSerial.printf("FONA basic test\r\n");
George windoge T 11:eb8938e62739 79 pcSerial.printf("Initializing....(May take 3 seconds)\r\n");
George windoge T 11:eb8938e62739 80
George windoge T 11:eb8938e62739 81 // See if the FONA is responding
George windoge T 11:eb8938e62739 82 if (! fona.begin(9600)) {
George windoge T 11:eb8938e62739 83 pcSerial.printf("Couldn't find FONA\r\n");
George windoge T 11:eb8938e62739 84 while (1);
George windoge T 11:eb8938e62739 85 }
George windoge T 11:eb8938e62739 86 fona.setEventListener(&fonaEventListener);
George windoge T 11:eb8938e62739 87 pcSerial.printf("FONA is OK\r\n");
George windoge T 11:eb8938e62739 88
George windoge T 11:eb8938e62739 89 // Print SIM card IMEI number.
George windoge T 11:eb8938e62739 90 char imei[15] = {0}; // MUST use a 16 character buffer for IMEI!
George windoge T 11:eb8938e62739 91 uint8_t imeiLen = fona.getIMEI(imei);
George windoge T 11:eb8938e62739 92 if (imeiLen > 0) {
George windoge T 11:eb8938e62739 93 pcSerial.printf("SIM card IMEI: %s\r\n", imei);
George windoge T 11:eb8938e62739 94 }
George windoge T 11:eb8938e62739 95
George windoge T 11:eb8938e62739 96 // Optionally configure a GPRS APN, username, and password.
George windoge T 11:eb8938e62739 97 // You might need to do this to access your network's GPRS/data
George windoge T 11:eb8938e62739 98 // network. Contact your provider for the exact APN, username,
George windoge T 11:eb8938e62739 99 // and password values. Username and password are optional and
George windoge T 11:eb8938e62739 100 // can be removed, but APN is required.
George windoge T 11:eb8938e62739 101 //fona.setGPRSNetworkSettings("your APN", "your username", "your password");
George windoge T 11:eb8938e62739 102 //fona.setGPRSNetworkSettings("web.pt.lu", "", "");
George windoge T 11:eb8938e62739 103
George windoge T 11:eb8938e62739 104 // Optionally configure HTTP gets to follow redirects over SSL.
George windoge T 11:eb8938e62739 105 // Default is not to follow SSL redirects, however if you uncomment
George windoge T 11:eb8938e62739 106 // the following line then redirects over SSL will be followed.
George windoge T 11:eb8938e62739 107 //fona.setHTTPSRedirect(true);
George windoge T 11:eb8938e62739 108
George windoge T 11:eb8938e62739 109 printMenu();
George windoge T 11:eb8938e62739 110
George windoge T 11:eb8938e62739 111 while (true) {
George windoge T 11:eb8938e62739 112 pcSerial.printf("FONA> ");
George windoge T 11:eb8938e62739 113 // if nothing is available on the pcSearial port but there is something on the fona serial, then print it (flush it) to the pc Serial
George windoge T 11:eb8938e62739 114 while (! pcSerial.readable() ) {
George windoge T 11:eb8938e62739 115 if (fona.readable()) {
George windoge T 11:eb8938e62739 116 pcSerial.putc(fona.getc());
George windoge T 11:eb8938e62739 117 }
George windoge T 11:eb8938e62739 118 }
George windoge T 11:eb8938e62739 119
George windoge T 11:eb8938e62739 120 // get the input command from the terminal
George windoge T 11:eb8938e62739 121 char command = pcSerial.getc();
George windoge T 11:eb8938e62739 122 pcSerial.printf("%c\r\n", command); //loops back to COM port
George windoge T 11:eb8938e62739 123
George windoge T 11:eb8938e62739 124
George windoge T 11:eb8938e62739 125 switch (command) {
George windoge T 11:eb8938e62739 126 case '?': {
George windoge T 11:eb8938e62739 127 printMenu();
George windoge T 11:eb8938e62739 128 break;
George windoge T 11:eb8938e62739 129 }
George windoge T 11:eb8938e62739 130
George windoge T 11:eb8938e62739 131 case 'a': {
George windoge T 11:eb8938e62739 132 // read the ADC
George windoge T 11:eb8938e62739 133 uint16_t adc;
George windoge T 11:eb8938e62739 134 if (! fona.getADCVoltage(&adc)) {
George windoge T 11:eb8938e62739 135 pcSerial.printf("Failed to read ADC\r\n");
George windoge T 11:eb8938e62739 136 } else {
George windoge T 11:eb8938e62739 137 pcSerial.printf("ADC = %d mV\r\n", adc);
George windoge T 11:eb8938e62739 138 }
George windoge T 11:eb8938e62739 139 break;
George windoge T 11:eb8938e62739 140 }
George windoge T 11:eb8938e62739 141
George windoge T 11:eb8938e62739 142 case 'b': {
George windoge T 11:eb8938e62739 143 // read the battery voltage and percentage
George windoge T 11:eb8938e62739 144 uint16_t vbat;
George windoge T 11:eb8938e62739 145 if (! fona.getBattVoltage(&vbat)) {
George windoge T 11:eb8938e62739 146 pcSerial.printf("Failed to read Batt\r\n");
George windoge T 11:eb8938e62739 147 } else {
George windoge T 11:eb8938e62739 148 pcSerial.printf("VBat = %d mV\r\n", vbat);
George windoge T 11:eb8938e62739 149 }
George windoge T 11:eb8938e62739 150
George windoge T 11:eb8938e62739 151 if (! fona.getBattPercent(&vbat)) {
George windoge T 11:eb8938e62739 152 pcSerial.printf("Failed to read Batt\r\n");
George windoge T 11:eb8938e62739 153 } else {
George windoge T 11:eb8938e62739 154 pcSerial.printf("VPct = %d%%\r\n", vbat);
George windoge T 11:eb8938e62739 155 }
George windoge T 11:eb8938e62739 156
George windoge T 11:eb8938e62739 157 break;
George windoge T 11:eb8938e62739 158 }
George windoge T 11:eb8938e62739 159
George windoge T 11:eb8938e62739 160 case 'U': {
George windoge T 11:eb8938e62739 161 // Unlock the SIM with a PIN code
George windoge T 11:eb8938e62739 162 char PIN[5];
George windoge T 11:eb8938e62739 163 flushSerial();
George windoge T 11:eb8938e62739 164 pcSerial.printf("Enter 4-digit PIN\r\n");
George windoge T 11:eb8938e62739 165 readline(PIN, 3);
George windoge T 11:eb8938e62739 166 pcSerial.printf("%s\r\n", PIN);
George windoge T 11:eb8938e62739 167 pcSerial.printf("Unlocking SIM card: ");
George windoge T 11:eb8938e62739 168 if (! fona.unlockSIM(PIN)) {
George windoge T 11:eb8938e62739 169 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 170 } else {
George windoge T 11:eb8938e62739 171 pcSerial.printf("OK!\r\n");
George windoge T 11:eb8938e62739 172 }
George windoge T 11:eb8938e62739 173 break;
George windoge T 11:eb8938e62739 174 }
George windoge T 11:eb8938e62739 175
George windoge T 11:eb8938e62739 176 case 'C': {
George windoge T 11:eb8938e62739 177 // read the CCID
George windoge T 11:eb8938e62739 178 fona.getSIMCCID(replybuffer); // make sure replybuffer is at least 21 bytes!
George windoge T 11:eb8938e62739 179 pcSerial.printf("SIM CCID = %s\r\n", replybuffer);
George windoge T 11:eb8938e62739 180 break;
George windoge T 11:eb8938e62739 181 }
George windoge T 11:eb8938e62739 182
George windoge T 11:eb8938e62739 183 case 'i': {
George windoge T 11:eb8938e62739 184 // read the RSSI
George windoge T 11:eb8938e62739 185 uint8_t n = fona.getRSSI();
George windoge T 11:eb8938e62739 186 int8_t r = 0;
George windoge T 11:eb8938e62739 187
George windoge T 11:eb8938e62739 188 pcSerial.printf("RSSI = %d: ", n);
George windoge T 11:eb8938e62739 189 if (n == 0) r = -115;
George windoge T 11:eb8938e62739 190 if (n == 1) r = -111;
George windoge T 11:eb8938e62739 191 if (n == 31) r = -52;
George windoge T 11:eb8938e62739 192 if ((n >= 2) && (n <= 30)) {
George windoge T 11:eb8938e62739 193 r = map(n, 2, 30, -110, -54);
George windoge T 11:eb8938e62739 194 }
George windoge T 11:eb8938e62739 195 pcSerial.printf("%d dBm\r\n", r);
George windoge T 11:eb8938e62739 196
George windoge T 11:eb8938e62739 197 break;
George windoge T 11:eb8938e62739 198 }
George windoge T 11:eb8938e62739 199
George windoge T 11:eb8938e62739 200 case 'n': {
George windoge T 11:eb8938e62739 201 // read the network/cellular status
George windoge T 11:eb8938e62739 202 uint8_t n = fona.getNetworkStatus();
George windoge T 11:eb8938e62739 203 pcSerial.printf("Network status %d: ", n);
George windoge T 11:eb8938e62739 204 if (n == 0) pcSerial.printf("Not registered\r\n");
George windoge T 11:eb8938e62739 205 if (n == 1) pcSerial.printf("Registered (home)\r\n");
George windoge T 11:eb8938e62739 206 if (n == 2) pcSerial.printf("Not registered (searching)\r\n");
George windoge T 11:eb8938e62739 207 if (n == 3) pcSerial.printf("Denied\r\n");
George windoge T 11:eb8938e62739 208 if (n == 4) pcSerial.printf("Unknown\r\n");
George windoge T 11:eb8938e62739 209 if (n == 5) pcSerial.printf("Registered roaming\r\n");
George windoge T 11:eb8938e62739 210 break;
George windoge T 11:eb8938e62739 211 }
George windoge T 11:eb8938e62739 212
George windoge T 11:eb8938e62739 213 /*** Audio ***/
George windoge T 11:eb8938e62739 214 case 'v': {
George windoge T 11:eb8938e62739 215 // set volume
George windoge T 11:eb8938e62739 216 flushSerial();
George windoge T 11:eb8938e62739 217 pcSerial.printf("Set Vol %%");
George windoge T 11:eb8938e62739 218 uint8_t vol = readnumber();
George windoge T 11:eb8938e62739 219 pcSerial.printf("\r\n");
George windoge T 11:eb8938e62739 220 if (! fona.setVolume(vol)) {
George windoge T 11:eb8938e62739 221 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 222 } else {
George windoge T 11:eb8938e62739 223 pcSerial.printf("OK!\r\n");
George windoge T 11:eb8938e62739 224 }
George windoge T 11:eb8938e62739 225 break;
George windoge T 11:eb8938e62739 226 }
George windoge T 11:eb8938e62739 227
George windoge T 11:eb8938e62739 228 case 'V': {
George windoge T 11:eb8938e62739 229 uint8_t v = fona.getVolume();
George windoge T 11:eb8938e62739 230 pcSerial.printf("%d%%\r\n", v);
George windoge T 11:eb8938e62739 231
George windoge T 11:eb8938e62739 232 break;
George windoge T 11:eb8938e62739 233 }
George windoge T 11:eb8938e62739 234
George windoge T 11:eb8938e62739 235 case 'H': {
George windoge T 11:eb8938e62739 236 // Set Headphone output
George windoge T 11:eb8938e62739 237 if (! fona.setAudio(FONA_HEADSETAUDIO)) {
George windoge T 11:eb8938e62739 238 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 239 } else {
George windoge T 11:eb8938e62739 240 pcSerial.printf("OK!\r\n");
George windoge T 11:eb8938e62739 241 }
George windoge T 11:eb8938e62739 242 fona.setMicVolume(FONA_HEADSETAUDIO, 15);
George windoge T 11:eb8938e62739 243 break;
George windoge T 11:eb8938e62739 244 }
George windoge T 11:eb8938e62739 245 case 'e': {
George windoge T 11:eb8938e62739 246 // Set External output
George windoge T 11:eb8938e62739 247 if (! fona.setAudio(FONA_EXTAUDIO)) {
George windoge T 11:eb8938e62739 248 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 249 } else {
George windoge T 11:eb8938e62739 250 pcSerial.printf("OK!\r\n");
George windoge T 11:eb8938e62739 251 }
George windoge T 11:eb8938e62739 252
George windoge T 11:eb8938e62739 253 fona.setMicVolume(FONA_EXTAUDIO, 10);
George windoge T 11:eb8938e62739 254 break;
George windoge T 11:eb8938e62739 255 }
George windoge T 11:eb8938e62739 256
George windoge T 11:eb8938e62739 257 case 'T': {
George windoge T 11:eb8938e62739 258 // play tone
George windoge T 11:eb8938e62739 259 flushSerial();
George windoge T 11:eb8938e62739 260 pcSerial.printf("Play tone #");
George windoge T 11:eb8938e62739 261 uint8_t kittone = readnumber();
George windoge T 11:eb8938e62739 262 pcSerial.printf("\r\n");
George windoge T 11:eb8938e62739 263 // play for 1 second (1000 ms)
George windoge T 11:eb8938e62739 264 if (! fona.playToolkitTone(kittone, 1000)) {
George windoge T 11:eb8938e62739 265 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 266 } else {
George windoge T 11:eb8938e62739 267 pcSerial.printf("OK!\r\n");
George windoge T 11:eb8938e62739 268 }
George windoge T 11:eb8938e62739 269 break;
George windoge T 11:eb8938e62739 270 }
George windoge T 11:eb8938e62739 271
George windoge T 11:eb8938e62739 272 /*** FM Radio ***/
George windoge T 11:eb8938e62739 273
George windoge T 11:eb8938e62739 274 case 'f': {
George windoge T 11:eb8938e62739 275 // get freq
George windoge T 11:eb8938e62739 276 flushSerial();
George windoge T 11:eb8938e62739 277 pcSerial.printf("FM Freq (eg 1011 == 101.1 MHz): ");
George windoge T 11:eb8938e62739 278 uint16_t station = readnumber();
George windoge T 11:eb8938e62739 279 pcSerial.printf("\r\n");
George windoge T 11:eb8938e62739 280 // FM radio ON using headset
George windoge T 11:eb8938e62739 281 if (fona.FMradio(true, FONA_HEADSETAUDIO)) {
George windoge T 11:eb8938e62739 282 pcSerial.printf("Opened\r\n");
George windoge T 11:eb8938e62739 283 }
George windoge T 11:eb8938e62739 284 if (! fona.tuneFMradio(station)) {
George windoge T 11:eb8938e62739 285 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 286 } else {
George windoge T 11:eb8938e62739 287 pcSerial.printf("Tuned\r\n");
George windoge T 11:eb8938e62739 288 }
George windoge T 11:eb8938e62739 289 break;
George windoge T 11:eb8938e62739 290 }
George windoge T 11:eb8938e62739 291 case 'F': {
George windoge T 11:eb8938e62739 292 // FM radio off
George windoge T 11:eb8938e62739 293 if (! fona.FMradio(false)) {
George windoge T 11:eb8938e62739 294 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 295 } else {
George windoge T 11:eb8938e62739 296 pcSerial.printf("OK!\r\n");
George windoge T 11:eb8938e62739 297 }
George windoge T 11:eb8938e62739 298 break;
George windoge T 11:eb8938e62739 299 }
George windoge T 11:eb8938e62739 300 case 'm': {
George windoge T 11:eb8938e62739 301 // Set FM volume.
George windoge T 11:eb8938e62739 302 flushSerial();
George windoge T 11:eb8938e62739 303 pcSerial.printf("Set FM Vol [0-6]:");
George windoge T 11:eb8938e62739 304 uint8_t vol = readnumber();
George windoge T 11:eb8938e62739 305 pcSerial.printf("\r\n");
George windoge T 11:eb8938e62739 306 if (!fona.setFMVolume(vol)) {
George windoge T 11:eb8938e62739 307 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 308 } else {
George windoge T 11:eb8938e62739 309 pcSerial.printf("OK!\r\n");
George windoge T 11:eb8938e62739 310 }
George windoge T 11:eb8938e62739 311 break;
George windoge T 11:eb8938e62739 312 }
George windoge T 11:eb8938e62739 313 case 'M': {
George windoge T 11:eb8938e62739 314 // Get FM volume.
George windoge T 11:eb8938e62739 315 int8_t fmvol = fona.getFMVolume();
George windoge T 11:eb8938e62739 316 if (fmvol < 0) {
George windoge T 11:eb8938e62739 317 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 318 } else {
George windoge T 11:eb8938e62739 319 pcSerial.printf("FM volume: %d\r\n", fmvol);
George windoge T 11:eb8938e62739 320 }
George windoge T 11:eb8938e62739 321 break;
George windoge T 11:eb8938e62739 322 }
George windoge T 11:eb8938e62739 323 case 'q': {
George windoge T 11:eb8938e62739 324 // Get FM station signal level (in decibels).
George windoge T 11:eb8938e62739 325 flushSerial();
George windoge T 11:eb8938e62739 326 pcSerial.printf("FM Freq (eg 1011 == 101.1 MHz): ");
George windoge T 11:eb8938e62739 327 uint16_t station = readnumber();
George windoge T 11:eb8938e62739 328 pcSerial.printf("\r\n");
George windoge T 11:eb8938e62739 329 int8_t level = fona.getFMSignalLevel(station);
George windoge T 11:eb8938e62739 330 if (level < 0) {
George windoge T 11:eb8938e62739 331 pcSerial.printf("Failed! Make sure FM radio is on (tuned to station).\r\n");
George windoge T 11:eb8938e62739 332 } else {
George windoge T 11:eb8938e62739 333 pcSerial.printf("Signal level (dB): %d\r\n", level);
George windoge T 11:eb8938e62739 334 }
George windoge T 11:eb8938e62739 335 break;
George windoge T 11:eb8938e62739 336 }
George windoge T 11:eb8938e62739 337
George windoge T 11:eb8938e62739 338 /*** PWM ***/
George windoge T 11:eb8938e62739 339
George windoge T 11:eb8938e62739 340 case 'P': {
George windoge T 11:eb8938e62739 341 // PWM Buzzer output @ 2KHz max
George windoge T 11:eb8938e62739 342 flushSerial();
George windoge T 11:eb8938e62739 343 pcSerial.printf("PWM Freq, 0 = Off, (1-2000): ");
George windoge T 11:eb8938e62739 344 uint16_t freq = readnumber();
George windoge T 11:eb8938e62739 345 pcSerial.printf("\r\n");
George windoge T 11:eb8938e62739 346 if (! fona.setPWM(freq)) {
George windoge T 11:eb8938e62739 347 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 348 } else {
George windoge T 11:eb8938e62739 349 pcSerial.printf("OK!\r\n");
George windoge T 11:eb8938e62739 350 }
George windoge T 11:eb8938e62739 351 break;
George windoge T 11:eb8938e62739 352 }
George windoge T 11:eb8938e62739 353
George windoge T 11:eb8938e62739 354 /*** Call ***/
George windoge T 11:eb8938e62739 355 case 'c': {
George windoge T 11:eb8938e62739 356 // call a phone!
George windoge T 11:eb8938e62739 357 char number[30];
George windoge T 11:eb8938e62739 358 flushSerial();
George windoge T 11:eb8938e62739 359 pcSerial.printf("Call #");
George windoge T 11:eb8938e62739 360 readline(number, 30);
George windoge T 11:eb8938e62739 361 pcSerial.printf("\r\n");
George windoge T 11:eb8938e62739 362 pcSerial.printf("Calling %s\r\n", number);
George windoge T 11:eb8938e62739 363 if (!fona.callPhone(number)) {
George windoge T 11:eb8938e62739 364 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 365 } else {
George windoge T 11:eb8938e62739 366 pcSerial.printf("Sent!\r\n");
George windoge T 11:eb8938e62739 367 }
George windoge T 11:eb8938e62739 368
George windoge T 11:eb8938e62739 369 break;
George windoge T 11:eb8938e62739 370 }
George windoge T 11:eb8938e62739 371 case 'h': {
George windoge T 11:eb8938e62739 372 // hang up!
George windoge T 11:eb8938e62739 373 if (! fona.hangUp()) {
George windoge T 11:eb8938e62739 374 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 375 } else {
George windoge T 11:eb8938e62739 376 pcSerial.printf("OK!\r\n");
George windoge T 11:eb8938e62739 377 }
George windoge T 11:eb8938e62739 378 break;
George windoge T 11:eb8938e62739 379 }
George windoge T 11:eb8938e62739 380
George windoge T 11:eb8938e62739 381 case 'p': {
George windoge T 11:eb8938e62739 382 // pick up!
George windoge T 11:eb8938e62739 383 if (! fona.pickUp()) {
George windoge T 11:eb8938e62739 384 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 385 } else {
George windoge T 11:eb8938e62739 386 pcSerial.printf("OK!\r\n");
George windoge T 11:eb8938e62739 387 }
George windoge T 11:eb8938e62739 388 break;
George windoge T 11:eb8938e62739 389 }
George windoge T 11:eb8938e62739 390
George windoge T 11:eb8938e62739 391 /*** SMS ***/
George windoge T 11:eb8938e62739 392
George windoge T 11:eb8938e62739 393 case 'N': {
George windoge T 11:eb8938e62739 394 // read the number of SMS's!
George windoge T 11:eb8938e62739 395 int8_t smsnum = fona.getNumSMS();
George windoge T 11:eb8938e62739 396 if (smsnum < 0) {
George windoge T 11:eb8938e62739 397 pcSerial.printf("Could not read # SMS\r\n");
George windoge T 11:eb8938e62739 398 } else {
George windoge T 11:eb8938e62739 399 pcSerial.printf("%d SMS's on SIM card!\r\n", smsnum);
George windoge T 11:eb8938e62739 400 }
George windoge T 11:eb8938e62739 401 break;
George windoge T 11:eb8938e62739 402 }
George windoge T 11:eb8938e62739 403 case 'r': {
George windoge T 11:eb8938e62739 404 // read an SMS
George windoge T 11:eb8938e62739 405 flushSerial();
George windoge T 11:eb8938e62739 406 pcSerial.printf("Read #");
George windoge T 11:eb8938e62739 407 uint8_t smsn = readnumber();
George windoge T 11:eb8938e62739 408 pcSerial.printf("\r\nReading SMS #%d\r\n", smsn);
George windoge T 11:eb8938e62739 409
George windoge T 11:eb8938e62739 410 // Retrieve SMS sender address/phone number.
George windoge T 11:eb8938e62739 411 if (! fona.getSMSSender(smsn, replybuffer, 250)) {
George windoge T 11:eb8938e62739 412 pcSerial.printf("Failed!\r\n");
George windoge T 11:eb8938e62739 413 break;
George windoge T 11:eb8938e62739 414 }
George windoge T 11:eb8938e62739 415 pcSerial.printf("FROM: %s\r\n", replybuffer);
George windoge T 11:eb8938e62739 416
George windoge T 11:eb8938e62739 417 // Retrieve SMS value.
George windoge T 11:eb8938e62739 418 uint16_t smslen;
George windoge T 11:eb8938e62739 419 if (! fona.readSMS(smsn, replybuffer, 250, &smslen)) { // pass in buffer and max len!
George windoge T 11:eb8938e62739 420 pcSerial.printf("Failed!\r\n");
George windoge T 11:eb8938e62739 421 break;
George windoge T 11:eb8938e62739 422 }
George windoge T 11:eb8938e62739 423 pcSerial.printf("***** SMS #%d (%d) bytes *****\r\n", smsn, smslen);
George windoge T 11:eb8938e62739 424 pcSerial.printf("%s\r\n", replybuffer);
George windoge T 11:eb8938e62739 425 pcSerial.printf("*****\r\n");
George windoge T 11:eb8938e62739 426
George windoge T 11:eb8938e62739 427 break;
George windoge T 11:eb8938e62739 428 }
George windoge T 11:eb8938e62739 429 case 'R': {
George windoge T 11:eb8938e62739 430 // read all SMS
George windoge T 11:eb8938e62739 431 int8_t smsnum = fona.getNumSMS();
George windoge T 11:eb8938e62739 432 uint16_t smslen;
George windoge T 11:eb8938e62739 433 for (int8_t smsn=1; smsn<=smsnum; smsn++) {
George windoge T 11:eb8938e62739 434 pcSerial.printf("\r\nReading SMS #%d\r\n", smsn);
George windoge T 11:eb8938e62739 435 if (!fona.readSMS(smsn, replybuffer, 250, &smslen)) { // pass in buffer and max len!
George windoge T 11:eb8938e62739 436 pcSerial.printf("Failed!\r\n");
George windoge T 11:eb8938e62739 437 break;
George windoge T 11:eb8938e62739 438 }
George windoge T 11:eb8938e62739 439 // if the length is zero, its a special case where the index number is higher
George windoge T 11:eb8938e62739 440 // so increase the max we'll look at!
George windoge T 11:eb8938e62739 441 if (smslen == 0) {
George windoge T 11:eb8938e62739 442 pcSerial.printf("[empty slot]\r\n");
George windoge T 11:eb8938e62739 443 smsnum++;
George windoge T 11:eb8938e62739 444 continue;
George windoge T 11:eb8938e62739 445 }
George windoge T 11:eb8938e62739 446
George windoge T 11:eb8938e62739 447 pcSerial.printf("***** SMS #%d (%d) bytes *****\r\n", smsn, smslen);
George windoge T 11:eb8938e62739 448 pcSerial.printf("%s\r\n", replybuffer);
George windoge T 11:eb8938e62739 449 pcSerial.printf("*****\r\n");
George windoge T 11:eb8938e62739 450 }
George windoge T 11:eb8938e62739 451 break;
George windoge T 11:eb8938e62739 452 }
George windoge T 11:eb8938e62739 453
George windoge T 11:eb8938e62739 454 case 'd': {
George windoge T 11:eb8938e62739 455 // delete an SMS
George windoge T 11:eb8938e62739 456 flushSerial();
George windoge T 11:eb8938e62739 457 pcSerial.printf("Delete #");
George windoge T 11:eb8938e62739 458 uint8_t smsn = readnumber();
George windoge T 11:eb8938e62739 459
George windoge T 11:eb8938e62739 460 pcSerial.printf("\r\nDeleting SMS #%d\r\n", smsn);
George windoge T 11:eb8938e62739 461 if (fona.deleteSMS(smsn)) {
George windoge T 11:eb8938e62739 462 pcSerial.printf("OK!\r\n");
George windoge T 11:eb8938e62739 463 } else {
George windoge T 11:eb8938e62739 464 pcSerial.printf("Couldn't delete\r\n");
George windoge T 11:eb8938e62739 465 }
George windoge T 11:eb8938e62739 466 break;
George windoge T 11:eb8938e62739 467 }
George windoge T 11:eb8938e62739 468
George windoge T 11:eb8938e62739 469 case 's': {
George windoge T 11:eb8938e62739 470 // send an SMS!
George windoge T 11:eb8938e62739 471 char sendto[21], message[141];
George windoge T 11:eb8938e62739 472 flushSerial();
George windoge T 11:eb8938e62739 473 pcSerial.printf("Send to #");
George windoge T 11:eb8938e62739 474 readline(sendto, 20);
George windoge T 11:eb8938e62739 475 pcSerial.printf("%s\r\n", sendto);
George windoge T 11:eb8938e62739 476 pcSerial.printf("Type out one-line message (140 char): ");
George windoge T 11:eb8938e62739 477 readline(message, 140);
George windoge T 11:eb8938e62739 478 pcSerial.printf("%s\r\n", message);
George windoge T 11:eb8938e62739 479 if (!fona.sendSMS(sendto, message)) {
George windoge T 11:eb8938e62739 480 pcSerial.printf("Failed\r\n");
George windoge T 11:eb8938e62739 481 } else {
George windoge T 11:eb8938e62739 482 pcSerial.printf("Sent!\r\n");
George windoge T 11:eb8938e62739 483 }
George windoge T 11:eb8938e62739 484
George windoge T 11:eb8938e62739 485 break;
George windoge T 11:eb8938e62739 486 }
George windoge T 11:eb8938e62739 487
George windoge T 11:eb8938e62739 488 /*** Time ***/
George windoge T 11:eb8938e62739 489
George windoge T 11:eb8938e62739 490 case 'y': {
George windoge T 11:eb8938e62739 491 // enable network time sync
George windoge T 11:eb8938e62739 492 if (!fona.enableNetworkTimeSync(true))
George windoge T 11:eb8938e62739 493 pcSerial.printf("Failed to enable\r\n");
George windoge T 11:eb8938e62739 494 break;
George windoge T 11:eb8938e62739 495 }
George windoge T 11:eb8938e62739 496
George windoge T 11:eb8938e62739 497 case 'Y': {
George windoge T 11:eb8938e62739 498 // enable NTP time sync
George windoge T 11:eb8938e62739 499 if (!fona.enableNTPTimeSync(true, "pool.ntp.org"))
George windoge T 11:eb8938e62739 500 pcSerial.printf("Failed to enable\r\n");
George windoge T 11:eb8938e62739 501 break;
George windoge T 11:eb8938e62739 502 }
George windoge T 11:eb8938e62739 503
George windoge T 11:eb8938e62739 504 case 't': {
George windoge T 11:eb8938e62739 505 // read the time
George windoge T 11:eb8938e62739 506 char buffer[23];
George windoge T 11:eb8938e62739 507
George windoge T 11:eb8938e62739 508 fona.getTime(buffer, 23); // make sure replybuffer is at least 23 bytes!
George windoge T 11:eb8938e62739 509 pcSerial.printf("Time = %s\r\n", buffer);
George windoge T 11:eb8938e62739 510 break;
George windoge T 11:eb8938e62739 511 }
George windoge T 11:eb8938e62739 512
George windoge T 11:eb8938e62739 513 /*********************************** GPS (SIM808 only) */
George windoge T 11:eb8938e62739 514
George windoge T 11:eb8938e62739 515 case 'o': {
George windoge T 11:eb8938e62739 516 // turn GPS off
George windoge T 11:eb8938e62739 517 if (!fona.enableGPS(false))
George windoge T 11:eb8938e62739 518 pcSerial.printf("Failed to turn off\r\n");
George windoge T 11:eb8938e62739 519 break;
George windoge T 11:eb8938e62739 520 }
George windoge T 11:eb8938e62739 521 case 'O': {
George windoge T 11:eb8938e62739 522 // turn GPS on
George windoge T 11:eb8938e62739 523 if (!fona.enableGPS(true))
George windoge T 11:eb8938e62739 524 pcSerial.printf("Failed to turn on\r\n");
George windoge T 11:eb8938e62739 525 break;
George windoge T 11:eb8938e62739 526 }
George windoge T 11:eb8938e62739 527 case 'x': {
George windoge T 11:eb8938e62739 528 int8_t stat;
George windoge T 11:eb8938e62739 529 // check GPS fix
George windoge T 11:eb8938e62739 530 stat = fona.GPSstatus();
George windoge T 11:eb8938e62739 531 if (stat < 0)
George windoge T 11:eb8938e62739 532 pcSerial.printf("Failed to query\r\n");
George windoge T 11:eb8938e62739 533 if (stat == 0) pcSerial.printf("GPS off\r\n");
George windoge T 11:eb8938e62739 534 if (stat == 1) pcSerial.printf("No fix\r\n");
George windoge T 11:eb8938e62739 535 if (stat == 2) pcSerial.printf("2D fix\r\n");
George windoge T 11:eb8938e62739 536 if (stat == 3) pcSerial.printf("3D fix\r\n");
George windoge T 11:eb8938e62739 537 break;
George windoge T 11:eb8938e62739 538 }
George windoge T 11:eb8938e62739 539
George windoge T 11:eb8938e62739 540 case 'L': {
George windoge T 11:eb8938e62739 541 // check for GPS location
George windoge T 11:eb8938e62739 542 char gpsdata[80];
George windoge T 11:eb8938e62739 543 fona.getGPS(0, gpsdata, 80);
George windoge T 11:eb8938e62739 544 pcSerial.printf("Reply in format: mode,longitude,latitude,altitude,utctime(yyyymmddHHMMSS),ttff,satellites,speed,course\r\n");
George windoge T 11:eb8938e62739 545 pcSerial.printf("%s\r\n", gpsdata);
George windoge T 11:eb8938e62739 546
George windoge T 11:eb8938e62739 547 break;
George windoge T 11:eb8938e62739 548 }
George windoge T 11:eb8938e62739 549
George windoge T 11:eb8938e62739 550 case 'E': {
George windoge T 11:eb8938e62739 551 flushSerial();
George windoge T 11:eb8938e62739 552 pcSerial.printf("GPS NMEA output sentences (0 = off, 34 = RMC+GGA, 255 = all)\r\n");
George windoge T 11:eb8938e62739 553 uint8_t nmeaout = readnumber();
George windoge T 11:eb8938e62739 554
George windoge T 11:eb8938e62739 555 // turn on NMEA output
George windoge T 11:eb8938e62739 556 fona.enableGPSNMEA(nmeaout);
George windoge T 11:eb8938e62739 557
George windoge T 11:eb8938e62739 558 break;
George windoge T 11:eb8938e62739 559 }
George windoge T 11:eb8938e62739 560
George windoge T 11:eb8938e62739 561 /*********************************** GPRS */
George windoge T 11:eb8938e62739 562
George windoge T 11:eb8938e62739 563 case 'g': {
George windoge T 11:eb8938e62739 564 // turn GPRS off
George windoge T 11:eb8938e62739 565 if (!fona.enableGPRS(false))
George windoge T 11:eb8938e62739 566 pcSerial.printf("Failed to turn off\r\n");
George windoge T 11:eb8938e62739 567 break;
George windoge T 11:eb8938e62739 568 }
George windoge T 11:eb8938e62739 569 case 'G': {
George windoge T 11:eb8938e62739 570 // turn GPRS on
George windoge T 11:eb8938e62739 571 if (!fona.enableGPRS(true))
George windoge T 11:eb8938e62739 572 pcSerial.printf("Failed to turn on\r\n");
George windoge T 11:eb8938e62739 573 break;
George windoge T 11:eb8938e62739 574 }
George windoge T 11:eb8938e62739 575 case 'l': {
George windoge T 11:eb8938e62739 576 // check for GSMLOC (requires GPRS)
George windoge T 11:eb8938e62739 577 uint16_t returncode;
George windoge T 11:eb8938e62739 578
George windoge T 11:eb8938e62739 579 if (!fona.getGSMLoc(&returncode, replybuffer, 250))
George windoge T 11:eb8938e62739 580 pcSerial.printf("Failed!\r\n");
George windoge T 11:eb8938e62739 581 if (returncode == 0) {
George windoge T 11:eb8938e62739 582 pcSerial.printf("%s\r\n", replybuffer);
George windoge T 11:eb8938e62739 583 } else {
George windoge T 11:eb8938e62739 584 pcSerial.printf("Fail code #%d\r\n", returncode);
George windoge T 11:eb8938e62739 585 }
George windoge T 11:eb8938e62739 586
George windoge T 11:eb8938e62739 587 break;
George windoge T 11:eb8938e62739 588 }
George windoge T 11:eb8938e62739 589 case 'w': {
George windoge T 11:eb8938e62739 590 // read website URL
George windoge T 11:eb8938e62739 591 uint16_t statuscode;
George windoge T 11:eb8938e62739 592 int16_t length;
George windoge T 11:eb8938e62739 593 char url[80];
George windoge T 11:eb8938e62739 594
George windoge T 11:eb8938e62739 595 flushSerial();
George windoge T 11:eb8938e62739 596 pcSerial.printf("NOTE: in beta! Use small webpages to read!\r\n");
George windoge T 11:eb8938e62739 597 pcSerial.printf("URL to read (e.g. www.adafruit.com/testwifi/index.html):\r\n");
George windoge T 11:eb8938e62739 598 pcSerial.printf("http://"); readline(url, 79);
George windoge T 11:eb8938e62739 599 pcSerial.printf("%s\r\n", url);
George windoge T 11:eb8938e62739 600
George windoge T 11:eb8938e62739 601 pcSerial.printf("****\r\n");
George windoge T 11:eb8938e62739 602 if (!fona.HTTP_GET_start(url, &statuscode, (uint16_t *)&length)) {
George windoge T 11:eb8938e62739 603 pcSerial.printf("Failed!\r\n");
George windoge T 11:eb8938e62739 604 break;
George windoge T 11:eb8938e62739 605 }
George windoge T 11:eb8938e62739 606 while (length > 0) {
George windoge T 11:eb8938e62739 607 while (fona.readable()) {
George windoge T 11:eb8938e62739 608 char c = fona.getc();
George windoge T 11:eb8938e62739 609 pcSerial.putc(c);
George windoge T 11:eb8938e62739 610 length--;
George windoge T 11:eb8938e62739 611 if (! length) break;
George windoge T 11:eb8938e62739 612 }
George windoge T 11:eb8938e62739 613 }
George windoge T 11:eb8938e62739 614 pcSerial.printf("\r\n****\r\n");
George windoge T 11:eb8938e62739 615 fona.HTTP_GET_end();
George windoge T 11:eb8938e62739 616 break;
George windoge T 11:eb8938e62739 617 }
George windoge T 11:eb8938e62739 618
George windoge T 11:eb8938e62739 619 case 'W': {
George windoge T 11:eb8938e62739 620 // Post data to website
George windoge T 11:eb8938e62739 621 uint16_t statuscode;
George windoge T 11:eb8938e62739 622 int16_t length;
George windoge T 11:eb8938e62739 623 char url[80];
George windoge T 11:eb8938e62739 624 char data[80];
George windoge T 11:eb8938e62739 625
George windoge T 11:eb8938e62739 626 flushSerial();
George windoge T 11:eb8938e62739 627 pcSerial.printf("NOTE: in beta! Use simple websites to post!\r\n");
George windoge T 11:eb8938e62739 628 pcSerial.printf("URL to post (e.g. httpbin.org/post):\r\n");
George windoge T 11:eb8938e62739 629 pcSerial.printf("http://"); readline(url, 79);
George windoge T 11:eb8938e62739 630 pcSerial.printf("%s\r\n", url);
George windoge T 11:eb8938e62739 631 pcSerial.printf("Data to post (e.g. \"foo\" or \"{\"simple\":\"json\"}\"):\r\n");
George windoge T 11:eb8938e62739 632 readline(data, 79);
George windoge T 11:eb8938e62739 633 pcSerial.printf("%s\r\n", data);
George windoge T 11:eb8938e62739 634
George windoge T 11:eb8938e62739 635 pcSerial.printf("****\r\n");
George windoge T 11:eb8938e62739 636 if (!fona.HTTP_POST_start(url, "text/plain", (uint8_t *) data, strlen(data), &statuscode, (uint16_t *)&length)) {
George windoge T 11:eb8938e62739 637 pcSerial.printf("Failed!\r\n");
George windoge T 11:eb8938e62739 638 break;
George windoge T 11:eb8938e62739 639 }
George windoge T 11:eb8938e62739 640 while (length > 0) {
George windoge T 11:eb8938e62739 641 while (fona.readable()) {
George windoge T 11:eb8938e62739 642 char c = fona.getc();
George windoge T 11:eb8938e62739 643 pcSerial.putc(c);
George windoge T 11:eb8938e62739 644 length--;
George windoge T 11:eb8938e62739 645 if (! length) break;
George windoge T 11:eb8938e62739 646 }
George windoge T 11:eb8938e62739 647 }
George windoge T 11:eb8938e62739 648 pcSerial.printf("\r\n****\r\n");
George windoge T 11:eb8938e62739 649 fona.HTTP_POST_end();
George windoge T 11:eb8938e62739 650 break;
George windoge T 11:eb8938e62739 651 }
George windoge T 11:eb8938e62739 652 /*****************************************/
George windoge T 11:eb8938e62739 653
George windoge T 11:eb8938e62739 654 case 'S': {
George windoge T 11:eb8938e62739 655 pcSerial.printf("Creating SERIAL TUBE\r\n");
George windoge T 11:eb8938e62739 656 while (1) {
George windoge T 11:eb8938e62739 657 while (pcSerial.readable()) {
George windoge T 11:eb8938e62739 658 wait_ms(1);
George windoge T 11:eb8938e62739 659 fona.putc(pcSerial.getc());
George windoge T 11:eb8938e62739 660 }
George windoge T 11:eb8938e62739 661 if (fona.readable()) {
George windoge T 11:eb8938e62739 662 pcSerial.putc(fona.getc());
George windoge T 11:eb8938e62739 663 }
George windoge T 11:eb8938e62739 664 }
George windoge T 11:eb8938e62739 665 }
George windoge T 11:eb8938e62739 666
George windoge T 11:eb8938e62739 667 default: {
George windoge T 11:eb8938e62739 668 pcSerial.printf("Unknown command\r\n");
George windoge T 11:eb8938e62739 669 printMenu();
George windoge T 11:eb8938e62739 670 break;
George windoge T 11:eb8938e62739 671 }
George windoge T 11:eb8938e62739 672 }
George windoge T 11:eb8938e62739 673 // flush input
George windoge T 11:eb8938e62739 674 flushSerial();
George windoge T 11:eb8938e62739 675 while (fona.readable()) {
George windoge T 11:eb8938e62739 676 pcSerial.putc(fona.getc());
George windoge T 11:eb8938e62739 677 }
George windoge T 11:eb8938e62739 678 }
George windoge T 11:eb8938e62739 679 }
George windoge T 11:eb8938e62739 680
George windoge T 11:eb8938e62739 681 void printMenu(void) {
George windoge T 11:eb8938e62739 682 pcSerial.printf("-------------------------------------\r\n");
George windoge T 11:eb8938e62739 683 pcSerial.printf("[?] Print this menu\r\n");
George windoge T 11:eb8938e62739 684 pcSerial.printf("[a] read the ADC (2.8V max)\r\n");
George windoge T 11:eb8938e62739 685 pcSerial.printf("[b] read the Battery V and %% charged\r\n");
George windoge T 11:eb8938e62739 686 pcSerial.printf("[C] read the SIM CCID\r\n");
George windoge T 11:eb8938e62739 687 pcSerial.printf("[U] Unlock SIM with PIN code\r\n");
George windoge T 11:eb8938e62739 688 pcSerial.printf("[i] read RSSI\r\n");
George windoge T 11:eb8938e62739 689 pcSerial.printf("[n] get Network status\r\n");
George windoge T 11:eb8938e62739 690 pcSerial.printf("[v] set audio Volume\r\n");
George windoge T 11:eb8938e62739 691 pcSerial.printf("[V] get Volume\r\n");
George windoge T 11:eb8938e62739 692 pcSerial.printf("[H] set Headphone audio\r\n");
George windoge T 11:eb8938e62739 693 pcSerial.printf("[e] set External audio\r\n");
George windoge T 11:eb8938e62739 694 pcSerial.printf("[T] play audio Tone\r\n");
George windoge T 11:eb8938e62739 695 pcSerial.printf("[P] PWM/Buzzer out\r\n");
George windoge T 11:eb8938e62739 696
George windoge T 11:eb8938e62739 697 // FM (SIM800 only)
George windoge T 11:eb8938e62739 698 pcSerial.printf("[f] tune FM radio\r\n");
George windoge T 11:eb8938e62739 699 pcSerial.printf("[F] turn off FM\r\n");
George windoge T 11:eb8938e62739 700 pcSerial.printf("[m] set FM volume\r\n");
George windoge T 11:eb8938e62739 701 pcSerial.printf("[M] get FM volume\r\n");
George windoge T 11:eb8938e62739 702 pcSerial.printf("[q] get FM station signal level\r\n");
George windoge T 11:eb8938e62739 703
George windoge T 11:eb8938e62739 704 // Phone
George windoge T 11:eb8938e62739 705 pcSerial.printf("[c] make phone Call\r\n");
George windoge T 11:eb8938e62739 706 pcSerial.printf("[h] Hang up phone\r\n");
George windoge T 11:eb8938e62739 707 pcSerial.printf("[p] Pick up phone\r\n");
George windoge T 11:eb8938e62739 708
George windoge T 11:eb8938e62739 709 // SMS
George windoge T 11:eb8938e62739 710 pcSerial.printf("[N] Number of SMSs\r\n");
George windoge T 11:eb8938e62739 711 pcSerial.printf("[r] Read SMS #\r\n");
George windoge T 11:eb8938e62739 712 pcSerial.printf("[R] Read All SMS\r\n");
George windoge T 11:eb8938e62739 713 pcSerial.printf("[d] Delete SMS #\r\n");
George windoge T 11:eb8938e62739 714 pcSerial.printf("[s] Send SMS\r\n");
George windoge T 11:eb8938e62739 715
George windoge T 11:eb8938e62739 716 // Time
George windoge T 11:eb8938e62739 717 pcSerial.printf("[y] Enable network time sync\r\n");
George windoge T 11:eb8938e62739 718 pcSerial.printf("[Y] Enable NTP time sync (GPRS)\r\n");
George windoge T 11:eb8938e62739 719 pcSerial.printf("[t] Get network time\r\n");
George windoge T 11:eb8938e62739 720
George windoge T 11:eb8938e62739 721 // GPRS
George windoge T 11:eb8938e62739 722 pcSerial.printf("[G] Enable GPRS\r\n");
George windoge T 11:eb8938e62739 723 pcSerial.printf("[g] Disable GPRS\r\n");
George windoge T 11:eb8938e62739 724 pcSerial.printf("[l] Query GSMLOC (GPRS)\r\n");
George windoge T 11:eb8938e62739 725 pcSerial.printf("[w] Read webpage (GPRS)\r\n");
George windoge T 11:eb8938e62739 726 pcSerial.printf("[W] Post to website (GPRS)\r\n");
George windoge T 11:eb8938e62739 727
George windoge T 11:eb8938e62739 728 // GPS
George windoge T 11:eb8938e62739 729 pcSerial.printf("[O] Turn GPS on (SIM808)\r\n");
George windoge T 11:eb8938e62739 730 pcSerial.printf("[o] Turn GPS off (SIM808)\r\n");
George windoge T 11:eb8938e62739 731 pcSerial.printf("[x] GPS fix status (SIM808)\r\n");
George windoge T 11:eb8938e62739 732 pcSerial.printf("[L] Query GPS location (SIM808)\r\n");
George windoge T 11:eb8938e62739 733 pcSerial.printf("[E] Raw NMEA out (SIM808)\r\n");
George windoge T 11:eb8938e62739 734
George windoge T 11:eb8938e62739 735 pcSerial.printf("[S] create Serial passthru tunnel\r\n");
George windoge T 11:eb8938e62739 736 pcSerial.printf("-------------------------------------\r\n");
George windoge T 11:eb8938e62739 737 pcSerial.printf("\r\n");
George windoge T 11:eb8938e62739 738 }
George windoge T 11:eb8938e62739 739
George windoge T 11:eb8938e62739 740 void flushSerial() {
George windoge T 11:eb8938e62739 741 while (pcSerial.readable())
George windoge T 11:eb8938e62739 742 pcSerial.getc();
George windoge T 11:eb8938e62739 743 }
George windoge T 11:eb8938e62739 744
George windoge T 11:eb8938e62739 745 char readBlocking() {
George windoge T 11:eb8938e62739 746 while (!pcSerial.readable());
George windoge T 11:eb8938e62739 747 return pcSerial.getc();
George windoge T 11:eb8938e62739 748 }
George windoge T 11:eb8938e62739 749
George windoge T 11:eb8938e62739 750 uint16_t readnumber() {
George windoge T 11:eb8938e62739 751 uint16_t x = 0;
George windoge T 11:eb8938e62739 752 char c;
George windoge T 11:eb8938e62739 753 while (! isdigit(c = readBlocking())) {
George windoge T 11:eb8938e62739 754 //pcSerial.putc(c);
George windoge T 11:eb8938e62739 755 }
George windoge T 11:eb8938e62739 756 pcSerial.putc(c);
George windoge T 11:eb8938e62739 757 x = c - '0';
George windoge T 11:eb8938e62739 758 while (isdigit(c = readBlocking())) {
George windoge T 11:eb8938e62739 759 pcSerial.putc(c);
George windoge T 11:eb8938e62739 760 x *= 10;
George windoge T 11:eb8938e62739 761 x += c - '0';
George windoge T 11:eb8938e62739 762 }
George windoge T 11:eb8938e62739 763 return x;
George windoge T 11:eb8938e62739 764 }
George windoge T 11:eb8938e62739 765
George windoge T 11:eb8938e62739 766 uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout) {
George windoge T 11:eb8938e62739 767 uint16_t buffidx = 0;
George windoge T 11:eb8938e62739 768 bool timeoutvalid = true;
George windoge T 11:eb8938e62739 769 if (timeout == 0) timeoutvalid = false;
George windoge T 11:eb8938e62739 770
George windoge T 11:eb8938e62739 771 while (true) {
George windoge T 11:eb8938e62739 772 if (buffidx > maxbuff) {
George windoge T 11:eb8938e62739 773 //pcSerial.printf("SPACE\r\n");
George windoge T 11:eb8938e62739 774 break;
George windoge T 11:eb8938e62739 775 }
George windoge T 11:eb8938e62739 776
George windoge T 11:eb8938e62739 777 while(pcSerial.readable()) {
George windoge T 11:eb8938e62739 778 char c = pcSerial.getc();
George windoge T 11:eb8938e62739 779
George windoge T 11:eb8938e62739 780 //pcSerial.printf("%02x#%c\r\n", c, c);
George windoge T 11:eb8938e62739 781
George windoge T 11:eb8938e62739 782 if (c == '\r') continue;
George windoge T 11:eb8938e62739 783 if (c == 0xA) {
George windoge T 11:eb8938e62739 784 if (buffidx == 0) // the first 0x0A is ignored
George windoge T 11:eb8938e62739 785 continue;
George windoge T 11:eb8938e62739 786
George windoge T 11:eb8938e62739 787 timeout = 0; // the second 0x0A is the end of the line
George windoge T 11:eb8938e62739 788 timeoutvalid = true;
George windoge T 11:eb8938e62739 789 break;
George windoge T 11:eb8938e62739 790 }
George windoge T 11:eb8938e62739 791 buff[buffidx] = c;
George windoge T 11:eb8938e62739 792 buffidx++;
George windoge T 11:eb8938e62739 793 }
George windoge T 11:eb8938e62739 794
George windoge T 11:eb8938e62739 795 if (timeoutvalid && timeout == 0) {
George windoge T 11:eb8938e62739 796 //pcSerial.printf("TIMEOUT\r\n");
George windoge T 11:eb8938e62739 797 break;
George windoge T 11:eb8938e62739 798 }
George windoge T 11:eb8938e62739 799 wait_ms(1);
George windoge T 11:eb8938e62739 800 }
George windoge T 11:eb8938e62739 801 buff[buffidx] = 0; // null term
George windoge T 11:eb8938e62739 802 return buffidx;
George windoge T 11:eb8938e62739 803 }
George windoge T 11:eb8938e62739 804
George windoge T 11:eb8938e62739 805 long map(long x, long in_min, long in_max, long out_min, long out_max)
George windoge T 11:eb8938e62739 806 {
George windoge T 11:eb8938e62739 807 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
George windoge T 11:eb8938e62739 808 }