Public Repository for IoT demo, leveraging the FRDM-K64F, WNC Cellular Modem, and AT&T M2X platform. Expects GPIO input from a sensor to send a discrete value to M2X.
Dependencies: ConfigFile M2XStreamClient-JMF PinDetect SDFileSystem WNCInterface jsonlite mbed-rtos mbed
Fork of SVP_IoT_M2X_Cellular by
main.cpp@11:dc15a7897495, 2017-04-10 (annotated)
- Committer:
- geekbleek
- Date:
- Mon Apr 10 20:18:23 2017 +0000
- Revision:
- 11:dc15a7897495
- Parent:
- 10:6d7e4693dff7
Public M2X Commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JMF | 0:62feed0f1fd9 | 1 | // |
JMF | 0:62feed0f1fd9 | 2 | // This file contains an example implementation of M2X using the HTTP interface as the underlying |
JMF | 0:62feed0f1fd9 | 3 | // transport. |
JMF | 0:62feed0f1fd9 | 4 | // |
JMF | 0:62feed0f1fd9 | 5 | |
JMF | 0:62feed0f1fd9 | 6 | #include "mbed.h" |
geekbleek | 5:f03cda4a4cc9 | 7 | #include "PinDetect.h" |
JMF | 0:62feed0f1fd9 | 8 | #include "WNCInterface.h" |
geekbleek | 10:6d7e4693dff7 | 9 | #include "SDFileSystem.h" |
geekbleek | 10:6d7e4693dff7 | 10 | #include "FATFileSystem.h" |
geekbleek | 8:b18770740a4d | 11 | #include "ConfigFile.h" |
geekbleek | 8:b18770740a4d | 12 | |
JMF | 0:62feed0f1fd9 | 13 | #define MBED_PLATFORM |
JMF | 0:62feed0f1fd9 | 14 | #define M2X_ENABLE_READER |
JMF | 0:62feed0f1fd9 | 15 | |
JMF | 0:62feed0f1fd9 | 16 | #include <jsonlite.h> |
JMF | 0:62feed0f1fd9 | 17 | #include "M2XStreamClient.h" |
JMF | 0:62feed0f1fd9 | 18 | |
JMF | 0:62feed0f1fd9 | 19 | #define CRLF "\n\r" |
JMF | 0:62feed0f1fd9 | 20 | |
geekbleek | 10:6d7e4693dff7 | 21 | |
geekbleek | 10:6d7e4693dff7 | 22 | WNCInterface eth; |
geekbleek | 10:6d7e4693dff7 | 23 | Client client; |
geekbleek | 10:6d7e4693dff7 | 24 | MODSERIAL pc(USBTX,USBRX,256,256); |
geekbleek | 10:6d7e4693dff7 | 25 | |
geekbleek | 10:6d7e4693dff7 | 26 | //LocalFileSystem local("local"); Not supported on K64F |
geekbleek | 10:6d7e4693dff7 | 27 | SDFileSystem local(PTE3, PTE1, PTE2, PTE4, "local"); |
geekbleek | 10:6d7e4693dff7 | 28 | ConfigFile cfg; |
geekbleek | 10:6d7e4693dff7 | 29 | |
JMF | 0:62feed0f1fd9 | 30 | char fromTime[]= "1969-12-31T19:00:01.000Z"; // yyyy-mm-ddTHH:MM:SS.SSSZ |
JMF | 0:62feed0f1fd9 | 31 | char endTime[25]; |
JMF | 0:62feed0f1fd9 | 32 | |
geekbleek | 6:67203388294b | 33 | DigitalOut led_green(LED_GREEN); |
geekbleek | 6:67203388294b | 34 | DigitalOut led_red(LED_RED); |
geekbleek | 6:67203388294b | 35 | DigitalOut led_blue(LED_BLUE); |
geekbleek | 4:b9f2193b27cf | 36 | |
geekbleek | 10:6d7e4693dff7 | 37 | char key1[] = "deviceId"; |
geekbleek | 10:6d7e4693dff7 | 38 | char deviceId[BUFSIZ]; |
geekbleek | 10:6d7e4693dff7 | 39 | char key2[] = "m2xKey"; |
geekbleek | 10:6d7e4693dff7 | 40 | char m2xKey[BUFSIZ]; |
geekbleek | 10:6d7e4693dff7 | 41 | |
geekbleek | 10:6d7e4693dff7 | 42 | char timestamp[25]; |
geekbleek | 10:6d7e4693dff7 | 43 | int length = 25; |
geekbleek | 10:6d7e4693dff7 | 44 | |
JMF | 0:62feed0f1fd9 | 45 | M2XStreamClient m2xClient(&client, m2xKey); |
JMF | 0:62feed0f1fd9 | 46 | TimeService timeService(&m2xClient); |
geekbleek | 10:6d7e4693dff7 | 47 | |
geekbleek | 10:6d7e4693dff7 | 48 | |
geekbleek | 10:6d7e4693dff7 | 49 | |
JMF | 0:62feed0f1fd9 | 50 | |
geekbleek | 4:b9f2193b27cf | 51 | //******************************************************************************************************************************************** |
geekbleek | 4:b9f2193b27cf | 52 | //* Set the RGB LED's Color |
geekbleek | 4:b9f2193b27cf | 53 | //* LED Color 0=Off to 7=White. 3 bits represent BGR (bit0=Red, bit1=Green, bit2=Blue) |
geekbleek | 4:b9f2193b27cf | 54 | //******************************************************************************************************************************************** |
geekbleek | 6:67203388294b | 55 | void SetLedColor(unsigned char ucColor) |
geekbleek | 6:67203388294b | 56 | { |
geekbleek | 6:67203388294b | 57 | //Note that when an LED is on, you write a 0 to it: |
geekbleek | 6:67203388294b | 58 | led_red = !(ucColor & 0x1); //bit 0 |
geekbleek | 6:67203388294b | 59 | led_green = !(ucColor & 0x2); //bit 1 |
geekbleek | 6:67203388294b | 60 | led_blue = !(ucColor & 0x4); //bit 2 |
geekbleek | 6:67203388294b | 61 | } //SetLedColor() |
geekbleek | 5:f03cda4a4cc9 | 62 | |
geekbleek | 5:f03cda4a4cc9 | 63 | |
geekbleek | 5:f03cda4a4cc9 | 64 | |
geekbleek | 5:f03cda4a4cc9 | 65 | /* |
geekbleek | 5:f03cda4a4cc9 | 66 | * Note, the PinDetect can be defined thus:- |
geekbleek | 5:f03cda4a4cc9 | 67 | * PinDetect pin( p21, PullDown ); |
geekbleek | 5:f03cda4a4cc9 | 68 | * This allows you to specify the DigitalIn pinmode |
geekbleek | 5:f03cda4a4cc9 | 69 | * when you create the PinDetect object. This means |
geekbleek | 5:f03cda4a4cc9 | 70 | * using pin.mode() later is then no longer required. |
geekbleek | 5:f03cda4a4cc9 | 71 | */ |
geekbleek | 6:67203388294b | 72 | |
geekbleek | 6:67203388294b | 73 | PinDetect pin ( A4, PullUp ); |
geekbleek | 6:67203388294b | 74 | PinDetect button ( SW3, PullUp ); |
geekbleek | 10:6d7e4693dff7 | 75 | int pinState; //0 = no trigger, 1 = triggered |
geekbleek | 10:6d7e4693dff7 | 76 | int m2xOnline; //0 = offline, 1= online |
geekbleek | 6:67203388294b | 77 | |
geekbleek | 5:f03cda4a4cc9 | 78 | // C function callbacks follow. |
geekbleek | 5:f03cda4a4cc9 | 79 | |
geekbleek | 5:f03cda4a4cc9 | 80 | void keyPressed( void ) { |
geekbleek | 6:67203388294b | 81 | pinState = pinState++; |
geekbleek | 10:6d7e4693dff7 | 82 | if (m2xOnline >= 1) { |
geekbleek | 10:6d7e4693dff7 | 83 | SetLedColor(1); |
geekbleek | 10:6d7e4693dff7 | 84 | } |
geekbleek | 6:67203388294b | 85 | //pc.printf("Key Pressed\n"); |
geekbleek | 5:f03cda4a4cc9 | 86 | } |
geekbleek | 5:f03cda4a4cc9 | 87 | |
geekbleek | 5:f03cda4a4cc9 | 88 | void keyReleased( void ) { |
geekbleek | 6:67203388294b | 89 | pinState = pinState--; |
geekbleek | 10:6d7e4693dff7 | 90 | if (m2xOnline >= 1) { |
geekbleek | 6:67203388294b | 91 | SetLedColor(4); |
geekbleek | 10:6d7e4693dff7 | 92 | } |
geekbleek | 10:6d7e4693dff7 | 93 | // if(pinState == 0){ |
geekbleek | 10:6d7e4693dff7 | 94 | // SetLedColor(4); |
geekbleek | 10:6d7e4693dff7 | 95 | // }; |
geekbleek | 6:67203388294b | 96 | //pc.printf("Key Released\n"); |
geekbleek | 5:f03cda4a4cc9 | 97 | } |
geekbleek | 5:f03cda4a4cc9 | 98 | |
geekbleek | 5:f03cda4a4cc9 | 99 | void keyPressedHeld( void ) { |
geekbleek | 6:67203388294b | 100 | pinState = 2; |
geekbleek | 6:67203388294b | 101 | //led3 = 1; |
geekbleek | 6:67203388294b | 102 | //pc.printf("Key Pressed Held\n"); |
geekbleek | 5:f03cda4a4cc9 | 103 | } |
geekbleek | 5:f03cda4a4cc9 | 104 | |
geekbleek | 5:f03cda4a4cc9 | 105 | void keyReleasedHeld( void ) { |
geekbleek | 6:67203388294b | 106 | //led4 = 1; |
geekbleek | 6:67203388294b | 107 | //pc.printf("Key Released Held\n"); |
geekbleek | 5:f03cda4a4cc9 | 108 | } |
geekbleek | 7:5f9a23deaca1 | 109 | |
geekbleek | 7:5f9a23deaca1 | 110 | void initModem() { |
geekbleek | 7:5f9a23deaca1 | 111 | int response; |
geekbleek | 7:5f9a23deaca1 | 112 | pc.printf("Start m2x-demo-all by initializing the network" CRLF); |
geekbleek | 7:5f9a23deaca1 | 113 | eth.doDebug(2); |
geekbleek | 7:5f9a23deaca1 | 114 | response = eth.init(NULL, &pc); |
geekbleek | 7:5f9a23deaca1 | 115 | pc.printf("Response is: %d" CRLF, response); |
geekbleek | 7:5f9a23deaca1 | 116 | pc.printf("WNC Module %s initialized (%02X)." CRLF, response?"IS":"IS NOT", response); |
geekbleek | 7:5f9a23deaca1 | 117 | while( !response ) { |
geekbleek | 7:5f9a23deaca1 | 118 | SetLedColor(0); |
geekbleek | 7:5f9a23deaca1 | 119 | pc.printf(" - - - - - - - WAITING FOR CELL MODEM TO COME ONLINE - - - - - - - " CRLF); |
geekbleek | 7:5f9a23deaca1 | 120 | wait(30); |
geekbleek | 7:5f9a23deaca1 | 121 | response = eth.init(NULL, &pc); |
geekbleek | 7:5f9a23deaca1 | 122 | pc.printf("WNC Module %s initialized (%02X)." CRLF, response?"IS":"IS NOT", response); |
geekbleek | 7:5f9a23deaca1 | 123 | }; |
geekbleek | 7:5f9a23deaca1 | 124 | |
geekbleek | 7:5f9a23deaca1 | 125 | if(response){ |
geekbleek | 7:5f9a23deaca1 | 126 | eth.doDebug(0); |
geekbleek | 11:dc15a7897495 | 127 | SetLedColor(5); |
geekbleek | 7:5f9a23deaca1 | 128 | }; |
geekbleek | 7:5f9a23deaca1 | 129 | |
geekbleek | 7:5f9a23deaca1 | 130 | response = eth.connect(); |
geekbleek | 7:5f9a23deaca1 | 131 | pc.printf("IP Address: %s " CRLF CRLF, eth.getIPAddress()); |
geekbleek | 7:5f9a23deaca1 | 132 | |
geekbleek | 7:5f9a23deaca1 | 133 | } |
geekbleek | 7:5f9a23deaca1 | 134 | |
geekbleek | 7:5f9a23deaca1 | 135 | void initM2X() { |
geekbleek | 7:5f9a23deaca1 | 136 | pc.printf("starting M2X data push..." CRLF); |
geekbleek | 7:5f9a23deaca1 | 137 | |
geekbleek | 7:5f9a23deaca1 | 138 | pc.printf("initialize the M2X time service" CRLF); |
geekbleek | 7:5f9a23deaca1 | 139 | if (!m2x_status_is_success(timeService.init())) |
geekbleek | 7:5f9a23deaca1 | 140 | pc.printf("Cannot initialize time service!" CRLF); |
geekbleek | 7:5f9a23deaca1 | 141 | else { |
geekbleek | 7:5f9a23deaca1 | 142 | timeService.getTimestamp(timestamp, &length); |
geekbleek | 7:5f9a23deaca1 | 143 | pc.printf("Current timestamp: %s" CRLF, timestamp); |
geekbleek | 7:5f9a23deaca1 | 144 | strcpy(endTime,timestamp); |
geekbleek | 10:6d7e4693dff7 | 145 | m2xOnline = 1; |
geekbleek | 7:5f9a23deaca1 | 146 | SetLedColor(4); |
geekbleek | 7:5f9a23deaca1 | 147 | } |
geekbleek | 7:5f9a23deaca1 | 148 | } |
geekbleek | 5:f03cda4a4cc9 | 149 | |
geekbleek | 5:f03cda4a4cc9 | 150 | // The main program. |
geekbleek | 5:f03cda4a4cc9 | 151 | |
JMF | 0:62feed0f1fd9 | 152 | int main() { |
geekbleek | 8:b18770740a4d | 153 | |
geekbleek | 10:6d7e4693dff7 | 154 | pc.baud(115200); |
geekbleek | 10:6d7e4693dff7 | 155 | pc.printf("Hello World! I am here!" CRLF); |
geekbleek | 8:b18770740a4d | 156 | |
geekbleek | 10:6d7e4693dff7 | 157 | wait(5); |
geekbleek | 10:6d7e4693dff7 | 158 | |
geekbleek | 10:6d7e4693dff7 | 159 | |
geekbleek | 8:b18770740a4d | 160 | /* |
geekbleek | 8:b18770740a4d | 161 | * Read a configuration file from a mbed. |
geekbleek | 8:b18770740a4d | 162 | */ |
geekbleek | 10:6d7e4693dff7 | 163 | |
geekbleek | 8:b18770740a4d | 164 | if (!cfg.read("/local/settings.txt")) { |
geekbleek | 10:6d7e4693dff7 | 165 | pc.printf("Failure to read a configuration file." CRLF); |
geekbleek | 8:b18770740a4d | 166 | } |
geekbleek | 10:6d7e4693dff7 | 167 | |
geekbleek | 8:b18770740a4d | 168 | /* |
geekbleek | 8:b18770740a4d | 169 | * Get a configuration value. |
geekbleek | 8:b18770740a4d | 170 | */ |
geekbleek | 10:6d7e4693dff7 | 171 | |
geekbleek | 8:b18770740a4d | 172 | if (cfg.getValue(key1, &deviceId[0], sizeof(deviceId))) { |
geekbleek | 10:6d7e4693dff7 | 173 | pc.printf("'%s'='%s'" CRLF, key1, deviceId); |
geekbleek | 8:b18770740a4d | 174 | } |
geekbleek | 8:b18770740a4d | 175 | |
geekbleek | 8:b18770740a4d | 176 | if (cfg.getValue(key2, &m2xKey[0], sizeof(m2xKey))) { |
geekbleek | 10:6d7e4693dff7 | 177 | pc.printf("'%s'='%s'" CRLF, key2, m2xKey); |
geekbleek | 8:b18770740a4d | 178 | } |
geekbleek | 8:b18770740a4d | 179 | |
geekbleek | 8:b18770740a4d | 180 | |
geekbleek | 6:67203388294b | 181 | pinState = 0; |
geekbleek | 5:f03cda4a4cc9 | 182 | pin.attach_asserted( &keyPressed ); |
geekbleek | 5:f03cda4a4cc9 | 183 | pin.attach_deasserted( &keyReleased ); |
geekbleek | 6:67203388294b | 184 | button.attach_asserted( &keyPressed ); |
geekbleek | 6:67203388294b | 185 | button.attach_deasserted( &keyReleased ); |
geekbleek | 6:67203388294b | 186 | //pin.attach_asserted_held( &keyPressedHeld ); |
geekbleek | 4:b9f2193b27cf | 187 | |
geekbleek | 5:f03cda4a4cc9 | 188 | // This callback will often be of little use as it's |
geekbleek | 5:f03cda4a4cc9 | 189 | // called after every assertion/deassertion. However, |
geekbleek | 5:f03cda4a4cc9 | 190 | // it's provided for completeness. You may find a use |
geekbleek | 5:f03cda4a4cc9 | 191 | // for it. If not, just don't attach a callback and it |
geekbleek | 5:f03cda4a4cc9 | 192 | // will not activate. |
geekbleek | 6:67203388294b | 193 | //pin.attach_deasserted_held( &keyReleasedHeld ); |
JMF | 0:62feed0f1fd9 | 194 | |
geekbleek | 5:f03cda4a4cc9 | 195 | // You can define how many continuous samples must be |
geekbleek | 5:f03cda4a4cc9 | 196 | // asserted before the attach_asserted() function is called. |
geekbleek | 5:f03cda4a4cc9 | 197 | // pin.setSamplesTillAssert( 10 ); |
geekbleek | 5:f03cda4a4cc9 | 198 | // This would mean 10 * 20ms debounce time = 200ms. |
geekbleek | 5:f03cda4a4cc9 | 199 | |
geekbleek | 5:f03cda4a4cc9 | 200 | // You can define how many continuous samples must be |
geekbleek | 5:f03cda4a4cc9 | 201 | // asserted before the attach_asserted_held() function is called. |
geekbleek | 5:f03cda4a4cc9 | 202 | // pin.setSamplesTillHeld( 200 ); |
geekbleek | 5:f03cda4a4cc9 | 203 | // This would mean 200 * 20ms debounce time = 2seconds. |
geekbleek | 5:f03cda4a4cc9 | 204 | |
geekbleek | 5:f03cda4a4cc9 | 205 | // By default, "asserted" assumes the pin going high from 0volts to 5volts |
geekbleek | 5:f03cda4a4cc9 | 206 | // and deasserted assumes going from 5volts to 0volts. You can invert this |
geekbleek | 5:f03cda4a4cc9 | 207 | // logic so that going to 0volts is asserted and going to 5volts is deasserted |
geekbleek | 5:f03cda4a4cc9 | 208 | // using this setup function:- |
geekbleek | 6:67203388294b | 209 | pin.setAssertValue( 0 ); |
geekbleek | 6:67203388294b | 210 | button.setAssertValue( 0 ); |
geekbleek | 7:5f9a23deaca1 | 211 | |
geekbleek | 7:5f9a23deaca1 | 212 | int m2xresponse, cnt=1; |
geekbleek | 7:5f9a23deaca1 | 213 | int pinValue; |
geekbleek | 7:5f9a23deaca1 | 214 | |
geekbleek | 7:5f9a23deaca1 | 215 | wait(20); |
geekbleek | 7:5f9a23deaca1 | 216 | initModem(); //call function to init modem, wait till it comes online, and get IP address |
geekbleek | 10:6d7e4693dff7 | 217 | initM2X(); |
geekbleek | 7:5f9a23deaca1 | 218 | |
geekbleek | 7:5f9a23deaca1 | 219 | // //debug |
geekbleek | 7:5f9a23deaca1 | 220 | // wait(10); // wait for terminal connected |
geekbleek | 7:5f9a23deaca1 | 221 | // pc.printf("STARTING WNCInterface" CRLF); |
geekbleek | 7:5f9a23deaca1 | 222 | // eth.doDebug(0); // if you want a LOT of AT commands logged (1) |
geekbleek | 7:5f9a23deaca1 | 223 | // |
geekbleek | 7:5f9a23deaca1 | 224 | // // init and connect the WNCInterface cell modem |
geekbleek | 7:5f9a23deaca1 | 225 | // pc.printf("init() returned 0x%04X" CRLF, eth.init()); |
geekbleek | 7:5f9a23deaca1 | 226 | // response = eth.connect(); |
geekbleek | 7:5f9a23deaca1 | 227 | // |
geekbleek | 7:5f9a23deaca1 | 228 | // if(response){ |
geekbleek | 7:5f9a23deaca1 | 229 | // SetLedColor(2); |
geekbleek | 7:5f9a23deaca1 | 230 | // }; |
geekbleek | 7:5f9a23deaca1 | 231 | |
geekbleek | 7:5f9a23deaca1 | 232 | // pc.printf("IP Address: %s " CRLF, eth.getIPAddress()); |
geekbleek | 7:5f9a23deaca1 | 233 | // pc.printf("-------------------------------------" CRLF); |
geekbleek | 7:5f9a23deaca1 | 234 | |
geekbleek | 7:5f9a23deaca1 | 235 | |
geekbleek | 7:5f9a23deaca1 | 236 | // Start Pin Samping |
geekbleek | 5:f03cda4a4cc9 | 237 | // Sampling does NOT begin until you set the frequency. So, until |
geekbleek | 5:f03cda4a4cc9 | 238 | // you call this function NO callbacks will be made. With no arguments |
geekbleek | 5:f03cda4a4cc9 | 239 | // passed the default is 20000 microseconds (20ms). Specifiy the sampling |
geekbleek | 5:f03cda4a4cc9 | 240 | // period in microseconds if you want a different value to 20ms. |
geekbleek | 5:f03cda4a4cc9 | 241 | // For example, for a sampling period of 10ms do:- |
geekbleek | 5:f03cda4a4cc9 | 242 | // pin.setSampleFrequency( 10000 ); |
geekbleek | 5:f03cda4a4cc9 | 243 | // Note, if you change the sampling frequency you will probably also |
geekbleek | 5:f03cda4a4cc9 | 244 | // want to change the number of samples till assert and held as show |
geekbleek | 5:f03cda4a4cc9 | 245 | // above. |
geekbleek | 5:f03cda4a4cc9 | 246 | pin.setSampleFrequency(); // Defaults to 20ms. |
geekbleek | 6:67203388294b | 247 | button.setSampleFrequency(); |
geekbleek | 6:67203388294b | 248 | |
geekbleek | 5:f03cda4a4cc9 | 249 | while( 1 ) { |
geekbleek | 6:67203388294b | 250 | //pc.printf("Hello World! I am still here!" CRLF); |
geekbleek | 6:67203388294b | 251 | pc.printf("Pin state is: %d" CRLF, pinState); |
geekbleek | 7:5f9a23deaca1 | 252 | if(pinState >= 1){ |
geekbleek | 7:5f9a23deaca1 | 253 | pinValue = 1; |
geekbleek | 7:5f9a23deaca1 | 254 | } |
geekbleek | 7:5f9a23deaca1 | 255 | else { |
geekbleek | 7:5f9a23deaca1 | 256 | pinValue = 0; |
geekbleek | 7:5f9a23deaca1 | 257 | } |
geekbleek | 7:5f9a23deaca1 | 258 | pc.printf("Pin value is: %d" CRLF, pinValue); |
geekbleek | 6:67203388294b | 259 | pc.printf("cnt=%d\r\n",cnt++); |
geekbleek | 6:67203388294b | 260 | // post the temp value |
geekbleek | 7:5f9a23deaca1 | 261 | pc.printf("Post updateStreamValue (pinValue = %d)..." CRLF, pinState); |
geekbleek | 7:5f9a23deaca1 | 262 | m2xresponse = m2xClient.updateStreamValue(deviceId, "water-sensor", pinValue); |
geekbleek | 7:5f9a23deaca1 | 263 | pc.printf("Post response code: %d" CRLF, m2xresponse); |
geekbleek | 7:5f9a23deaca1 | 264 | if (m2xresponse != 202){ |
geekbleek | 10:6d7e4693dff7 | 265 | m2xOnline = 0; |
geekbleek | 7:5f9a23deaca1 | 266 | SetLedColor(2); |
geekbleek | 7:5f9a23deaca1 | 267 | pc.printf("Error connecting to M2X" CRLF); |
geekbleek | 7:5f9a23deaca1 | 268 | //pc.printf("IP Address: %s " CRLF CRLF, eth.getIPAddress()); |
geekbleek | 7:5f9a23deaca1 | 269 | if (m2xresponse == -1){ |
geekbleek | 11:dc15a7897495 | 270 | SetLedColor(0); |
geekbleek | 7:5f9a23deaca1 | 271 | pc.printf("Modem Error - attempting to reconnect" CRLF); |
geekbleek | 7:5f9a23deaca1 | 272 | initModem(); |
geekbleek | 7:5f9a23deaca1 | 273 | initM2X(); |
geekbleek | 7:5f9a23deaca1 | 274 | } |
geekbleek | 7:5f9a23deaca1 | 275 | } |
geekbleek | 10:6d7e4693dff7 | 276 | if (m2xresponse == 202){ |
geekbleek | 10:6d7e4693dff7 | 277 | if (m2xOnline == 0) { //first time m2x came back online |
geekbleek | 10:6d7e4693dff7 | 278 | SetLedColor(4); |
geekbleek | 10:6d7e4693dff7 | 279 | } |
geekbleek | 10:6d7e4693dff7 | 280 | m2xOnline = m2xOnline++; |
geekbleek | 10:6d7e4693dff7 | 281 | } |
geekbleek | 6:67203388294b | 282 | timeService.getTimestamp(timestamp, &length); |
geekbleek | 11:dc15a7897495 | 283 | pc.printf("Thats all folks, got to wait 1 second... (%s)" CRLF CRLF CRLF, timestamp); |
geekbleek | 6:67203388294b | 284 | |
geekbleek | 11:dc15a7897495 | 285 | // wait 1 secs and then loop |
geekbleek | 10:6d7e4693dff7 | 286 | delay(1000); |
geekbleek | 4:b9f2193b27cf | 287 | } |
geekbleek | 5:f03cda4a4cc9 | 288 | } |