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