t3

Dependencies:   C027_Support

Fork of C027_SupportTest by u-blox

Committer:
PetriI2
Date:
Fri Sep 23 11:39:17 2016 +0000
Revision:
34:bc82b26ec43b
Parent:
33:e27f40fada64
Child:
35:ead6b88cebeb
t1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lawliet 0:4e3cb26f6019 1 #include "mbed.h"
mazgch 9:26f694bc31b4 2
mazgch 19:f022ff746eb8 3 //------------------------------------------------------------------------------------
mazgch 11:b8505cbbd55c 4 /* This example was tested on C027-U20 and C027-G35 with the on board modem.
mazgch 11:b8505cbbd55c 5
mazgch 18:50e6c4ed8a4a 6 Additionally it was tested with a shield where the SARA-G350/U260/U270 RX/TX/PWRON
mazgch 11:b8505cbbd55c 7 is connected to D0/D1/D4 and the GPS SCL/SDA is connected D15/D15. In this
mazgch 11:b8505cbbd55c 8 configuration the following platforms were tested (it is likely that others
mazgch 11:b8505cbbd55c 9 will work as well)
mazgch 19:f022ff746eb8 10 - U-BLOX: C027-G35, C027-U20, C027-C20 (for shield set define C027_FORCE_SHIELD)
mazgch 18:50e6c4ed8a4a 11 - NXP: LPC1549v2, LPC4088qsb
mazgch 18:50e6c4ed8a4a 12 - Freescale: FRDM-KL05Z, FRDM-KL25Z, FRDM-KL46Z, FRDM-K64F
mazgch 12:96c7b62c7aaf 13 - STM: NUCLEO-F401RE, NUCLEO-F030R8
mazgch 18:50e6c4ed8a4a 14 mount resistors SB13/14 1k, SB62/63 0R
mazgch 11:b8505cbbd55c 15 */
mazgch 19:f022ff746eb8 16 #include "GPS.h"
mazgch 19:f022ff746eb8 17 #include "MDM.h"
mazgch 19:f022ff746eb8 18 //------------------------------------------------------------------------------------
mazgch 19:f022ff746eb8 19 // You need to configure these cellular modem / SIM parameters.
mazgch 19:f022ff746eb8 20 // These parameters are ignored for LISA-C200 variants and can be left NULL.
mazgch 19:f022ff746eb8 21 //------------------------------------------------------------------------------------
mazgch 19:f022ff746eb8 22 //! Set your secret SIM pin here (e.g. "1234"). Check your SIM manual.
PetriI2 34:bc82b26ec43b 23 #define SIMPIN "1234"
mazgch 19:f022ff746eb8 24 /*! The APN of your network operator SIM, sometimes it is "internet" check your
mazgch 19:f022ff746eb8 25 contract with the network operator. You can also try to look-up your settings in
mazgch 19:f022ff746eb8 26 google: https://www.google.de/search?q=APN+list */
PetriI2 34:bc82b26ec43b 27 #define APN "internet"
mazgch 19:f022ff746eb8 28 //! Set the user name for your APN, or NULL if not needed
PetriI2 34:bc82b26ec43b 29 #define USERNAME "dna"
mazgch 19:f022ff746eb8 30 //! Set the password for your APN, or NULL if not needed
PetriI2 34:bc82b26ec43b 31 #define PASSWORD "internet"
mazgch 19:f022ff746eb8 32 //------------------------------------------------------------------------------------
lawliet 0:4e3cb26f6019 33
msinig 29:16f1037626e3 34 //#define CELLOCATE
msinig 29:16f1037626e3 35
PetriI2 34:bc82b26ec43b 36 AnalogIn temperature(A5);
PetriI2 34:bc82b26ec43b 37 DigitalOut led1(LED1);
PetriI2 34:bc82b26ec43b 38
PetriI2 34:bc82b26ec43b 39
lawliet 0:4e3cb26f6019 40 int main(void)
lawliet 0:4e3cb26f6019 41 {
mazgch 2:b77151f111a9 42 int ret;
mazgch 19:f022ff746eb8 43 #ifdef LARGE_DATA
mazgch 16:43f6de7bc38b 44 char buf[2048] = "";
mazgch 17:c293780a40ac 45 #else
mazgch 17:c293780a40ac 46 char buf[512] = "";
mazgch 17:c293780a40ac 47 #endif
lawliet 0:4e3cb26f6019 48
PetriI2 34:bc82b26ec43b 49 char buffer[500];
PetriI2 34:bc82b26ec43b 50 char csrfMiddleware[40]={0};
PetriI2 34:bc82b26ec43b 51 char csrfMiddleware2[50]={0};
PetriI2 34:bc82b26ec43b 52 char* buff;
PetriI2 34:bc82b26ec43b 53
PetriI2 34:bc82b26ec43b 54 unsigned int macAddr[6] = {0x00,0x1d,0xc9,0x1b,0x94,0x3d};
PetriI2 34:bc82b26ec43b 55 int tlsData[256];
PetriI2 34:bc82b26ec43b 56 unsigned int TLSdata[2] = {1000,2000};
PetriI2 34:bc82b26ec43b 57 float lat=65.3256, lon=27.462;
PetriI2 34:bc82b26ec43b 58 unsigned int dataLen=0;
PetriI2 34:bc82b26ec43b 59 int contentLenStr[10];
PetriI2 34:bc82b26ec43b 60 int len=0, opcode=0, sleepTime=0;
PetriI2 34:bc82b26ec43b 61 char a[2];
PetriI2 34:bc82b26ec43b 62 char http_cmd[700] = {""};
PetriI2 34:bc82b26ec43b 63
PetriI2 34:bc82b26ec43b 64 double la = 0, lo = 0;
PetriI2 34:bc82b26ec43b 65 bool mdmOk;
PetriI2 34:bc82b26ec43b 66
PetriI2 34:bc82b26ec43b 67 printf("Temperature1: %f \r\n", temperature.read());
PetriI2 34:bc82b26ec43b 68 printf("Temperature2: %3.3f \r\n", temperature.read()*100.0f);
PetriI2 34:bc82b26ec43b 69 led1 = (temperature > 0.5f) ? 1 : 0;
PetriI2 34:bc82b26ec43b 70
PetriI2 34:bc82b26ec43b 71 printf("Voltage1: 0x%04X \r\n", temperature.read_u16());
PetriI2 34:bc82b26ec43b 72 printf("Voltage2: %f \r\n", temperature.read_u16()*(3.3/65536));
PetriI2 34:bc82b26ec43b 73 //float voltage = (f*(3.3/4096.0));
PetriI2 34:bc82b26ec43b 74
mazgch 19:f022ff746eb8 75 // Create the GPS object
mazgch 19:f022ff746eb8 76 #if 1 // use GPSI2C class
mazgch 19:f022ff746eb8 77 GPSI2C gps;
mazgch 19:f022ff746eb8 78 #else // or GPSSerial class
mazgch 19:f022ff746eb8 79 GPSSerial gps;
mazgch 10:d2da2028a233 80 #endif
mazgch 10:d2da2028a233 81 // Create the modem object
mazgch 32:b838fcaba45e 82 MDMSerial mdm; // use mdm(D1,D0) if you connect the cellular shield to a C027
PetriI2 34:bc82b26ec43b 83 // mdm.setDebug(4); // enable this for debugging issues
PetriI2 34:bc82b26ec43b 84 // mdm.setDebug(1); // enable this for debugging issues
mazgch 2:b77151f111a9 85 // initialize the modem
mazgch 19:f022ff746eb8 86 MDMParser::DevStatus devStatus = {};
mazgch 19:f022ff746eb8 87 MDMParser::NetStatus netStatus = {};
PetriI2 34:bc82b26ec43b 88
PetriI2 34:bc82b26ec43b 89 do {
PetriI2 34:bc82b26ec43b 90 mdmOk = mdm.init(SIMPIN, &devStatus);
PetriI2 34:bc82b26ec43b 91 wait(5);
PetriI2 34:bc82b26ec43b 92 mdm.dumpDevStatus(&devStatus);
PetriI2 34:bc82b26ec43b 93
PetriI2 34:bc82b26ec43b 94 printf("mdmOk status=%d\r\n", mdmOk);
PetriI2 34:bc82b26ec43b 95 //wait(2);
PetriI2 34:bc82b26ec43b 96 }while (!mdmOk);
PetriI2 34:bc82b26ec43b 97
mazgch 19:f022ff746eb8 98 if (mdmOk) {
mazgch 20:52f0e5de8c3d 99 // wait until we are connected
mazgch 20:52f0e5de8c3d 100 mdmOk = mdm.registerNet(&netStatus);
mazgch 20:52f0e5de8c3d 101 mdm.dumpNetStatus(&netStatus);
mazgch 20:52f0e5de8c3d 102 }
mazgch 20:52f0e5de8c3d 103 if (mdmOk)
mazgch 20:52f0e5de8c3d 104 {
mazgch 4:90ab1ec64b0e 105 // join the internet connection
mazgch 19:f022ff746eb8 106 MDMParser::IP ip = mdm.join(APN,USERNAME,PASSWORD);
mazgch 32:b838fcaba45e 107 if (ip == NOIP)
mazgch 32:b838fcaba45e 108 printf("Not able to join network");
mazgch 32:b838fcaba45e 109 else
mazgch 2:b77151f111a9 110 {
mazgch 19:f022ff746eb8 111 mdm.dumpIp(ip);
mazgch 19:f022ff746eb8 112 printf("Make a Http Post Request\r\n");
mazgch 4:90ab1ec64b0e 113 int socket = mdm.socketSocket(MDMParser::IPPROTO_TCP);
PetriI2 34:bc82b26ec43b 114 printf("Socket created: %d\r\n", socket);
mazgch 4:90ab1ec64b0e 115 if (socket >= 0)
mazgch 2:b77151f111a9 116 {
PetriI2 34:bc82b26ec43b 117 mdm.socketSetBlocking(socket, 10000);
PetriI2 34:bc82b26ec43b 118 //if (mdm.socketConnect(socket, "mbed.org", 80))
PetriI2 34:bc82b26ec43b 119 if (mdm.socketConnect(socket, "212.116.37.180", 81))
mazgch 4:90ab1ec64b0e 120 {
PetriI2 34:bc82b26ec43b 121 //const char http[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\r\n\r\n";
PetriI2 34:bc82b26ec43b 122 //mdm.socketSend(socket, http, sizeof(http)-1);
PetriI2 34:bc82b26ec43b 123
PetriI2 34:bc82b26ec43b 124 char http_cmdg[100] = "GET /cloudmgr/sensor/data/";
PetriI2 34:bc82b26ec43b 125 strcat(http_cmdg, " HTTP/1.1");
PetriI2 34:bc82b26ec43b 126 strcat(http_cmdg, "\r\n");
PetriI2 34:bc82b26ec43b 127 strcat(http_cmdg, "Connection: keep-alive");
PetriI2 34:bc82b26ec43b 128 strcat(http_cmdg, "\r\n");
PetriI2 34:bc82b26ec43b 129 strcat(http_cmdg, "Host: 212.116.37.180:81");
PetriI2 34:bc82b26ec43b 130 strcat(http_cmdg, "\r\n\r\n");
PetriI2 34:bc82b26ec43b 131 strcat(http_cmdg, "\0");
PetriI2 34:bc82b26ec43b 132 int leng = strlen(http_cmdg);
PetriI2 34:bc82b26ec43b 133 printf("Sending %d chars to server:\r\n%s\r\n", leng, http_cmdg);
PetriI2 34:bc82b26ec43b 134 //sock.send_all(http_cmdg, leng);
PetriI2 34:bc82b26ec43b 135 mdm.socketSend(socket, http_cmdg, leng);
mazgch 4:90ab1ec64b0e 136
PetriI2 34:bc82b26ec43b 137 ret = mdm.socketRecv(socket, buffer, sizeof(buffer)-1);
PetriI2 34:bc82b26ec43b 138 if (ret > 0) {
PetriI2 34:bc82b26ec43b 139 buffer[ret] = '\0';
PetriI2 34:bc82b26ec43b 140 printf("Socket Recv \"%*s\"\r\n", ret, buffer);
PetriI2 34:bc82b26ec43b 141 if(ret > 100) {
PetriI2 34:bc82b26ec43b 142 buff=strstr(buffer, "csrftoken=");
PetriI2 34:bc82b26ec43b 143 strncpy(csrfMiddleware, &buff[10], 32);
PetriI2 34:bc82b26ec43b 144 strncpy(csrfMiddleware2, &buff[0], 42);
PetriI2 34:bc82b26ec43b 145 printf("Received csrfMiddleware= %s\r\n", csrfMiddleware);
PetriI2 34:bc82b26ec43b 146 printf("Received csrfMiddleware2= %s\r\n", csrfMiddleware2);
PetriI2 34:bc82b26ec43b 147 //break;
PetriI2 34:bc82b26ec43b 148 }
PetriI2 34:bc82b26ec43b 149 }
PetriI2 34:bc82b26ec43b 150
PetriI2 34:bc82b26ec43b 151 /*Prepare data to send to server*/
PetriI2 34:bc82b26ec43b 152 printf("Prepare to POST\r\n");
PetriI2 34:bc82b26ec43b 153 sprintf((char *)tlsData, "csrfmiddlewaretoken=%s&serial=%x%x%x%x%x%x&value=%d&gpslat=%f&gpslon=%f",
PetriI2 34:bc82b26ec43b 154 csrfMiddleware, macAddr[0],macAddr[1],macAddr[2],macAddr[3],macAddr[4],macAddr[5], 4096-TLSdata[1], lat, lon); //req_value for POST
PetriI2 34:bc82b26ec43b 155
PetriI2 34:bc82b26ec43b 156 dataLen = strlen((char const*)tlsData);
PetriI2 34:bc82b26ec43b 157 sprintf((char *)&contentLenStr[0],"%d", dataLen);
PetriI2 34:bc82b26ec43b 158 memset(buffer, 0, sizeof(buffer));
PetriI2 34:bc82b26ec43b 159
PetriI2 34:bc82b26ec43b 160 /*Send a POST message to server*/
PetriI2 34:bc82b26ec43b 161 //char http_cmd[700] = "POST /cloudmgr/sensor/data/";
PetriI2 34:bc82b26ec43b 162 strcat(http_cmd, "POST /cloudmgr/sensor/data/");
PetriI2 34:bc82b26ec43b 163 strcat(http_cmd, " HTTP/1.1");
PetriI2 34:bc82b26ec43b 164 strcat(http_cmd, "\r\n");
PetriI2 34:bc82b26ec43b 165 strcat(http_cmd, "Connection: keep-alive");
PetriI2 34:bc82b26ec43b 166 strcat(http_cmd, "\r\n");
PetriI2 34:bc82b26ec43b 167 strcat(http_cmd, "Host: 212.116.37.180:81");
PetriI2 34:bc82b26ec43b 168 strcat(http_cmd, "\r\n");
PetriI2 34:bc82b26ec43b 169 strcat(http_cmd, "Content-Type: application/x-www-form-urlencoded");
PetriI2 34:bc82b26ec43b 170 strcat(http_cmd, "\r\n");
PetriI2 34:bc82b26ec43b 171 strcat(http_cmd, "Content-Length: ");
PetriI2 34:bc82b26ec43b 172 strcat(http_cmd, (char const*)contentLenStr);
PetriI2 34:bc82b26ec43b 173 strcat(http_cmd, "\r\n");
PetriI2 34:bc82b26ec43b 174 strcat(http_cmd, "Cookie: ");
PetriI2 34:bc82b26ec43b 175 strcat(http_cmd, csrfMiddleware2);
PetriI2 34:bc82b26ec43b 176 strcat(http_cmd, "\r\n\r\n");
PetriI2 34:bc82b26ec43b 177 strcat(http_cmd, (char const*)tlsData);
PetriI2 34:bc82b26ec43b 178 strcat(http_cmd, "\0");
PetriI2 34:bc82b26ec43b 179 len = strlen(http_cmd);
PetriI2 34:bc82b26ec43b 180 printf("Sending %d chars to server:\n%s\r\n", len, http_cmd);
PetriI2 34:bc82b26ec43b 181 //sock.send_all(http_cmd, len);
PetriI2 34:bc82b26ec43b 182 mdm.socketSend(socket, http_cmd, len);
PetriI2 34:bc82b26ec43b 183 ret=1;
PetriI2 34:bc82b26ec43b 184
PetriI2 34:bc82b26ec43b 185 /*reveive answer message (sleeptime) from server*/
PetriI2 34:bc82b26ec43b 186 while (true) {
PetriI2 34:bc82b26ec43b 187 ret = mdm.socketRecv(socket, buffer, sizeof(buffer)-1);
PetriI2 34:bc82b26ec43b 188 if (ret <= 0) {
PetriI2 34:bc82b26ec43b 189 printf("Received %d chars from server:\r\n%s\r\n", ret, buffer);
PetriI2 34:bc82b26ec43b 190 break;
PetriI2 34:bc82b26ec43b 191 }
PetriI2 34:bc82b26ec43b 192 buffer[ret] = '\0';
PetriI2 34:bc82b26ec43b 193
PetriI2 34:bc82b26ec43b 194 printf("Received %d chars from server:\r\n%s\r\n", ret, buffer);
PetriI2 34:bc82b26ec43b 195
PetriI2 34:bc82b26ec43b 196 if((strncmp((char const*)buffer, "200", 3))) {
PetriI2 34:bc82b26ec43b 197 strncpy(a, &buffer[ret-1], 1);
PetriI2 34:bc82b26ec43b 198 opcode = atoi(a);
PetriI2 34:bc82b26ec43b 199 //printf("Received opcode= %d, %s\r\n", opcode, a);
PetriI2 34:bc82b26ec43b 200 switch (opcode) {
PetriI2 34:bc82b26ec43b 201 case 1 :
PetriI2 34:bc82b26ec43b 202 sleepTime = 5;
PetriI2 34:bc82b26ec43b 203 break;
PetriI2 34:bc82b26ec43b 204 case 2 :
PetriI2 34:bc82b26ec43b 205 sleepTime = 30;
PetriI2 34:bc82b26ec43b 206 break;
PetriI2 34:bc82b26ec43b 207 case 3 :
PetriI2 34:bc82b26ec43b 208 sleepTime = 300;
PetriI2 34:bc82b26ec43b 209 break;
PetriI2 34:bc82b26ec43b 210 default :
PetriI2 34:bc82b26ec43b 211 sleepTime = 5;
PetriI2 34:bc82b26ec43b 212 break;
PetriI2 34:bc82b26ec43b 213 }
PetriI2 34:bc82b26ec43b 214 printf("Received sleeptime= %d\r\n", sleepTime);
PetriI2 34:bc82b26ec43b 215 break;
PetriI2 34:bc82b26ec43b 216
PetriI2 34:bc82b26ec43b 217 }
PetriI2 34:bc82b26ec43b 218 else {
PetriI2 34:bc82b26ec43b 219 break;
PetriI2 34:bc82b26ec43b 220 }
PetriI2 34:bc82b26ec43b 221 }
PetriI2 34:bc82b26ec43b 222
mazgch 4:90ab1ec64b0e 223 mdm.socketClose(socket);
mazgch 4:90ab1ec64b0e 224 }
mazgch 4:90ab1ec64b0e 225 mdm.socketFree(socket);
mazgch 4:90ab1ec64b0e 226 }
mazgch 4:90ab1ec64b0e 227 // disconnect
mazgch 4:90ab1ec64b0e 228 mdm.disconnect();
mazgch 2:b77151f111a9 229 }
PetriI2 34:bc82b26ec43b 230
mazgch 10:d2da2028a233 231 }
PetriI2 34:bc82b26ec43b 232
PetriI2 34:bc82b26ec43b 233
mazgch 30:062717f25e41 234
mazgch 19:f022ff746eb8 235 printf("SMS and GPS Loop\r\n");
mazgch 10:d2da2028a233 236 char link[128] = "";
mazgch 10:d2da2028a233 237 unsigned int i = 0xFFFFFFFF;
mazgch 10:d2da2028a233 238 const int wait = 100;
mazgch 10:d2da2028a233 239 bool abort = false;
PetriI2 34:bc82b26ec43b 240
mazgch 11:b8505cbbd55c 241 //DigitalOut led(LED1);
mazgch 10:d2da2028a233 242 while (!abort) {
mazgch 19:f022ff746eb8 243 // led = !led;
msinig 29:16f1037626e3 244 #ifndef CELLOCATE
mazgch 10:d2da2028a233 245 while ((ret = gps.getMessage(buf, sizeof(buf))) > 0)
mazgch 10:d2da2028a233 246 {
mazgch 10:d2da2028a233 247 int len = LENGTH(ret);
mazgch 19:f022ff746eb8 248 //printf("NMEA: %.*s\r\n", len-2, msg);
mazgch 19:f022ff746eb8 249 if ((PROTOCOL(ret) == GPSParser::NMEA) && (len > 6))
mazgch 4:90ab1ec64b0e 250 {
mazgch 27:fe3b383dd4ec 251 // talker is $GA=Galileo $GB=Beidou $GL=Glonass $GN=Combined $GP=GPS
mazgch 27:fe3b383dd4ec 252 if ((buf[0] == '$') || buf[1] == 'G') {
mazgch 27:fe3b383dd4ec 253 #define _CHECK_TALKER(s) ((buf[3] == s[0]) && (buf[4] == s[1]) && (buf[5] == s[2]))
mazgch 27:fe3b383dd4ec 254 if (_CHECK_TALKER("GLL")) {
PetriI2 34:bc82b26ec43b 255
mazgch 27:fe3b383dd4ec 256 char ch;
mazgch 27:fe3b383dd4ec 257 if (gps.getNmeaAngle(1,buf,len,la) &&
mazgch 27:fe3b383dd4ec 258 gps.getNmeaAngle(3,buf,len,lo) &&
mazgch 27:fe3b383dd4ec 259 gps.getNmeaItem(6,buf,len,ch) && ch == 'A')
mazgch 27:fe3b383dd4ec 260 {
mazgch 27:fe3b383dd4ec 261 printf("GPS Location: %.5f %.5f\r\n", la, lo);
mazgch 27:fe3b383dd4ec 262 sprintf(link, "I am here!\n"
mazgch 27:fe3b383dd4ec 263 "https://maps.google.com/?q=%.5f,%.5f", la, lo);
mazgch 27:fe3b383dd4ec 264 }
mazgch 27:fe3b383dd4ec 265 } else if (_CHECK_TALKER("GGA") || _CHECK_TALKER("GNS") ) {
mazgch 27:fe3b383dd4ec 266 double a = 0;
mazgch 27:fe3b383dd4ec 267 if (gps.getNmeaItem(9,buf,len,a)) // altitude msl [m]
mazgch 27:fe3b383dd4ec 268 printf("GPS Altitude: %.1f\r\n", a);
mazgch 27:fe3b383dd4ec 269 } else if (_CHECK_TALKER("VTG")) {
mazgch 27:fe3b383dd4ec 270 double s = 0;
mazgch 27:fe3b383dd4ec 271 if (gps.getNmeaItem(7,buf,len,s)) // speed [km/h]
mazgch 27:fe3b383dd4ec 272 printf("GPS Speed: %.1f\r\n", s);
mazgch 19:f022ff746eb8 273 }
mazgch 4:90ab1ec64b0e 274 }
mazgch 4:90ab1ec64b0e 275 }
mazgch 10:d2da2028a233 276 }
msinig 29:16f1037626e3 277 #endif
PetriI2 34:bc82b26ec43b 278
mazgch 19:f022ff746eb8 279 if (mdmOk && (i++ == 5000/wait)) {
mazgch 10:d2da2028a233 280 i = 0;
mazgch 10:d2da2028a233 281 // check the network status
mazgch 15:ea10b6cf8c85 282 if (mdm.checkNetStatus(&netStatus)) {
mazgch 19:f022ff746eb8 283 mdm.dumpNetStatus(&netStatus, fprintf, stdout);
mazgch 15:ea10b6cf8c85 284 }
mazgch 10:d2da2028a233 285
PetriI2 34:bc82b26ec43b 286
PetriI2 34:bc82b26ec43b 287 printf("Voltage A5: %f \r\n", temperature.read_u16()*(3.3/65536));
PetriI2 34:bc82b26ec43b 288 led1 = (temperature > 0.5f) ? 1 : 0;
PetriI2 34:bc82b26ec43b 289
PetriI2 34:bc82b26ec43b 290
PetriI2 34:bc82b26ec43b 291
PetriI2 34:bc82b26ec43b 292 if (mdmOk)
mazgch 10:d2da2028a233 293 {
PetriI2 34:bc82b26ec43b 294 // join the internet connection
PetriI2 34:bc82b26ec43b 295 MDMParser::IP ip = mdm.join(APN,USERNAME,PASSWORD);
PetriI2 34:bc82b26ec43b 296 if (ip == NOIP)
PetriI2 34:bc82b26ec43b 297 printf("Not able to join network");
PetriI2 34:bc82b26ec43b 298 else
PetriI2 34:bc82b26ec43b 299 {
PetriI2 34:bc82b26ec43b 300 mdm.dumpIp(ip);
PetriI2 34:bc82b26ec43b 301 printf("Make a Http Post Request\r\n");
PetriI2 34:bc82b26ec43b 302 int socket = mdm.socketSocket(MDMParser::IPPROTO_TCP);
PetriI2 34:bc82b26ec43b 303 printf("Socket created: %d\r\n", socket);
PetriI2 34:bc82b26ec43b 304 if (socket >= 0)
PetriI2 34:bc82b26ec43b 305 {
PetriI2 34:bc82b26ec43b 306 mdm.socketSetBlocking(socket, 10000);
PetriI2 34:bc82b26ec43b 307 //if (mdm.socketConnect(socket, "mbed.org", 80))
PetriI2 34:bc82b26ec43b 308 if (mdm.socketConnect(socket, "212.116.37.180", 81))
PetriI2 34:bc82b26ec43b 309 {
PetriI2 34:bc82b26ec43b 310
PetriI2 34:bc82b26ec43b 311 printf("Prepare to POST\r\n");
PetriI2 34:bc82b26ec43b 312 sprintf((char *)tlsData, "csrfmiddlewaretoken=%s&serial=%x%x%x%x%x%x&value=%d&gpslat=%f&gpslon=%f",
PetriI2 34:bc82b26ec43b 313 csrfMiddleware, macAddr[0],macAddr[1],macAddr[2],macAddr[3],macAddr[4],macAddr[5], 65536-temperature.read_u16(), la, lo); //req_value for POST
PetriI2 34:bc82b26ec43b 314
PetriI2 34:bc82b26ec43b 315 dataLen = strlen((char const*)tlsData);
PetriI2 34:bc82b26ec43b 316 sprintf((char *)&contentLenStr[0],"%d", dataLen);
PetriI2 34:bc82b26ec43b 317 memset(buffer, 0, sizeof(buffer));
PetriI2 34:bc82b26ec43b 318 memset(http_cmd, 0, sizeof(http_cmd));
PetriI2 34:bc82b26ec43b 319
PetriI2 34:bc82b26ec43b 320 /*Send a POST message to server*/
PetriI2 34:bc82b26ec43b 321 strcat(http_cmd, "POST /cloudmgr/sensor/data/");
PetriI2 34:bc82b26ec43b 322 strcat(http_cmd, " HTTP/1.1");
PetriI2 34:bc82b26ec43b 323 strcat(http_cmd, "\r\n");
PetriI2 34:bc82b26ec43b 324 strcat(http_cmd, "Connection: keep-alive");
PetriI2 34:bc82b26ec43b 325 strcat(http_cmd, "\r\n");
PetriI2 34:bc82b26ec43b 326 strcat(http_cmd, "Host: 212.116.37.180:81");
PetriI2 34:bc82b26ec43b 327 strcat(http_cmd, "\r\n");
PetriI2 34:bc82b26ec43b 328 strcat(http_cmd, "Content-Type: application/x-www-form-urlencoded");
PetriI2 34:bc82b26ec43b 329 strcat(http_cmd, "\r\n");
PetriI2 34:bc82b26ec43b 330 strcat(http_cmd, "Content-Length: ");
PetriI2 34:bc82b26ec43b 331 strcat(http_cmd, (char const*)contentLenStr);
PetriI2 34:bc82b26ec43b 332 strcat(http_cmd, "\r\n");
PetriI2 34:bc82b26ec43b 333 strcat(http_cmd, "Cookie: ");
PetriI2 34:bc82b26ec43b 334 strcat(http_cmd, csrfMiddleware2);
PetriI2 34:bc82b26ec43b 335 strcat(http_cmd, "\r\n\r\n");
PetriI2 34:bc82b26ec43b 336 strcat(http_cmd, (char const*)tlsData);
PetriI2 34:bc82b26ec43b 337 strcat(http_cmd, "\0");
PetriI2 34:bc82b26ec43b 338 len = strlen(http_cmd);
PetriI2 34:bc82b26ec43b 339 printf("Sending %d chars to server:\r\n%s\r\n", len, http_cmd);
PetriI2 34:bc82b26ec43b 340 //sock.send_all(http_cmd, len);
PetriI2 34:bc82b26ec43b 341 mdm.socketSend(socket, http_cmd, len);
PetriI2 34:bc82b26ec43b 342 ret=1;
PetriI2 34:bc82b26ec43b 343
PetriI2 34:bc82b26ec43b 344 /*reveive answer message (sleeptime) from server*/
PetriI2 34:bc82b26ec43b 345 while (true) {
PetriI2 34:bc82b26ec43b 346 ret = mdm.socketRecv(socket, buffer, sizeof(buffer)-1);
PetriI2 34:bc82b26ec43b 347 if (ret <= 0) {
PetriI2 34:bc82b26ec43b 348 printf("Received %d chars from server:\r\n%s\r\n", ret, buffer);
PetriI2 34:bc82b26ec43b 349 break;
PetriI2 34:bc82b26ec43b 350 }
PetriI2 34:bc82b26ec43b 351 buffer[ret] = '\0';
PetriI2 34:bc82b26ec43b 352
PetriI2 34:bc82b26ec43b 353 printf("Received %d chars from server:\r\n%s\r\n", ret, buffer);
PetriI2 34:bc82b26ec43b 354
PetriI2 34:bc82b26ec43b 355 if((strncmp((char const*)buffer, "200", 3))) {
PetriI2 34:bc82b26ec43b 356 strncpy(a, &buffer[ret-1], 1);
PetriI2 34:bc82b26ec43b 357 opcode = atoi(a);
PetriI2 34:bc82b26ec43b 358 //printf("Received opcode= %d, %s\r\n", opcode, a);
PetriI2 34:bc82b26ec43b 359 switch (opcode) {
PetriI2 34:bc82b26ec43b 360 case 1 :
PetriI2 34:bc82b26ec43b 361 sleepTime = 5;
PetriI2 34:bc82b26ec43b 362 break;
PetriI2 34:bc82b26ec43b 363 case 2 :
PetriI2 34:bc82b26ec43b 364 sleepTime = 30;
PetriI2 34:bc82b26ec43b 365 break;
PetriI2 34:bc82b26ec43b 366 case 3 :
PetriI2 34:bc82b26ec43b 367 sleepTime = 300;
PetriI2 34:bc82b26ec43b 368 break;
PetriI2 34:bc82b26ec43b 369 default :
PetriI2 34:bc82b26ec43b 370 sleepTime = 5;
PetriI2 34:bc82b26ec43b 371 break;
PetriI2 34:bc82b26ec43b 372 }
PetriI2 34:bc82b26ec43b 373 printf("Received sleeptime= %d\r\n", sleepTime);
PetriI2 34:bc82b26ec43b 374 break;
PetriI2 34:bc82b26ec43b 375
PetriI2 34:bc82b26ec43b 376 }
PetriI2 34:bc82b26ec43b 377 else {
PetriI2 34:bc82b26ec43b 378 break;
PetriI2 34:bc82b26ec43b 379 }
PetriI2 34:bc82b26ec43b 380 }
PetriI2 34:bc82b26ec43b 381
PetriI2 34:bc82b26ec43b 382 mdm.socketClose(socket);
PetriI2 34:bc82b26ec43b 383 }
PetriI2 34:bc82b26ec43b 384 mdm.socketFree(socket);
PetriI2 34:bc82b26ec43b 385 }
PetriI2 34:bc82b26ec43b 386 // disconnect
PetriI2 34:bc82b26ec43b 387 mdm.disconnect();
mazgch 4:90ab1ec64b0e 388 }
PetriI2 34:bc82b26ec43b 389
mazgch 4:90ab1ec64b0e 390 }
PetriI2 34:bc82b26ec43b 391
PetriI2 34:bc82b26ec43b 392
PetriI2 34:bc82b26ec43b 393
mazgch 9:26f694bc31b4 394 }
mazgch 31:a07d0f76dc81 395 #ifdef RTOS_H
mazgch 31:a07d0f76dc81 396 Thread::wait(wait);
mazgch 31:a07d0f76dc81 397 #else
mazgch 31:a07d0f76dc81 398 ::wait_ms(wait);
mazgch 31:a07d0f76dc81 399 #endif
lawliet 0:4e3cb26f6019 400 }
mazgch 19:f022ff746eb8 401 gps.powerOff();
mazgch 10:d2da2028a233 402 mdm.powerOff();
lawliet 0:4e3cb26f6019 403 return 0;
lawliet 0:4e3cb26f6019 404 }