Update to work with latest mBed

Dependencies:   mbed-dev

Fork of FONA_CellPhone by Dream Team

Committer:
michaelVisimid
Date:
Fri Jan 27 00:22:31 2017 +0000
Revision:
19:06dd156420a5
Parent:
18:d52017f1d087
Pre-compiled mbed libraries don't work correctly when exported

Who changed what in which revision?

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