ThingPlug GMMP library WiFi Example on Nucleo and muRata

Dependencies:   GMMP NTPClient SNICInterface mbed-rtos mbed

Committer:
lesmin
Date:
Thu Jul 23 14:29:34 2015 +0000
Revision:
1:a861abaa7e3b
Parent:
0:b111abbea470
Child:
4:ff11a6ae5845
arduino define removed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lesmin 0:b111abbea470 1 #include "mbed.h"
lesmin 0:b111abbea470 2
lesmin 0:b111abbea470 3 #if defined(TARGET_LPC1768)
lesmin 0:b111abbea470 4 #include "C12832.h" //for LCD
lesmin 0:b111abbea470 5 #include "LM75B.h" //for Temperature Sensor
lesmin 0:b111abbea470 6 #elif defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F303RE) || defined(TARGET_NUCLEO_F334R8) || defined(TARGET_NUCLEO_L152RE)
lesmin 0:b111abbea470 7 //Sensor N/A for Nucleo
lesmin 0:b111abbea470 8 #endif
lesmin 0:b111abbea470 9
lesmin 1:a861abaa7e3b 10 DigitalOut myled(LED1);
lesmin 0:b111abbea470 11
lesmin 0:b111abbea470 12 #if defined(TARGET_LPC1768)
lesmin 0:b111abbea470 13 C12832 lcd(p5, p7, p6, p8, p11);
lesmin 0:b111abbea470 14 LM75B sensor(p28,p27);
lesmin 0:b111abbea470 15
lesmin 0:b111abbea470 16 Serial pc(USBTX, USBRX);
lesmin 0:b111abbea470 17 #endif
lesmin 0:b111abbea470 18
lesmin 0:b111abbea470 19 /**
lesmin 0:b111abbea470 20 * GMMP Test Code
lesmin 0:b111abbea470 21 */
lesmin 0:b111abbea470 22
lesmin 0:b111abbea470 23 #include "GMMP.h"
lesmin 0:b111abbea470 24
lesmin 0:b111abbea470 25 #define USER_CONTROL_LED 0x80
lesmin 0:b111abbea470 26
lesmin 0:b111abbea470 27 #define HIGH 0x1
lesmin 0:b111abbea470 28 #define LOW 0x0
lesmin 0:b111abbea470 29
lesmin 1:a861abaa7e3b 30
lesmin 0:b111abbea470 31 byte serverIp[] = {61, 250, 21, 211}; //ThingPlug GMMP
lesmin 0:b111abbea470 32 const int nServerPort = 31015; //ThingPlug GMMP
lesmin 0:b111abbea470 33 const char* pszDomainCode = "hackth0001";
lesmin 0:b111abbea470 34 #if defined(TARGET_LPC1768)
lesmin 0:b111abbea470 35 const char* pszGWAuthID = "0002F7F1CE5A";
lesmin 0:b111abbea470 36 const char* pszGWMFID = "NXP";
lesmin 0:b111abbea470 37 const char* pszDeviceMFID = "NXP";
lesmin 0:b111abbea470 38 #elif defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F303RE) || defined(TARGET_NUCLEO_F334R8) || defined(TARGET_NUCLEO_L152RE)
lesmin 0:b111abbea470 39 const char* pszGWAuthID = "98F170674DC3";
lesmin 0:b111abbea470 40 const char* pszGWMFID = "STMicro";
lesmin 0:b111abbea470 41 const char* pszDeviceMFID = "STMicro";
lesmin 0:b111abbea470 42 #endif
lesmin 0:b111abbea470 43 char* deviceId[LEN_DEVICE_ID];
lesmin 0:b111abbea470 44
lesmin 0:b111abbea470 45 #if defined(TARGET_LPC1768)
lesmin 0:b111abbea470 46 byte mac[] = {0x00, 0x02, 0xF7, 0xF1, 0xCE, 0x5A}; //mbed Application Board Ethernet
lesmin 0:b111abbea470 47 #elif defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F303RE) || defined(TARGET_NUCLEO_F334R8) || defined(TARGET_NUCLEO_L152RE)
lesmin 0:b111abbea470 48 byte mac[] = {0x98, 0xF1, 0x70, 0x67, 0x4D, 0xC3}; //MURATA WIFI
lesmin 0:b111abbea470 49 #endif
lesmin 0:b111abbea470 50
lesmin 0:b111abbea470 51 uint32_t lastDeliverMilli = 0;
lesmin 0:b111abbea470 52 uint32_t reportPeriodMilli = 3000;
lesmin 0:b111abbea470 53 uint32_t lastHeartbeatMilli = 0;
lesmin 0:b111abbea470 54 uint32_t heartbeatPeriodMilli = 10000;
lesmin 0:b111abbea470 55 byte regDevCount = 0;
lesmin 0:b111abbea470 56 byte regGwCount = 0;
lesmin 0:b111abbea470 57
lesmin 0:b111abbea470 58 void startSensingTemp();
lesmin 0:b111abbea470 59 void delay(int d);
lesmin 0:b111abbea470 60
lesmin 0:b111abbea470 61 int Recv(GMMPHeader* pstGMMPHeader, void* pBody)
lesmin 0:b111abbea470 62 {
lesmin 0:b111abbea470 63 U8 cMessageType = pstGMMPHeader->ucMessageType;
lesmin 0:b111abbea470 64
lesmin 0:b111abbea470 65 //info(F("MsgType: "));
lesmin 0:b111abbea470 66 //infoln(cMessageType);
lesmin 0:b111abbea470 67 INFO("MsgType: %d", cMessageType);
lesmin 0:b111abbea470 68
lesmin 0:b111abbea470 69 if (cMessageType == OPERATION_GW_REG_RSP) {
lesmin 0:b111abbea470 70 stGwRegistrationRspHdr* pstRspHdr = (stGwRegistrationRspHdr*) pBody;
lesmin 0:b111abbea470 71
lesmin 0:b111abbea470 72 if (pstRspHdr->ucResultCode != 0x00) {
lesmin 0:b111abbea470 73 //error(F("GWRegRes Error: "));
lesmin 0:b111abbea470 74 //errorln(pstRspHdr->ucResultCode);
lesmin 0:b111abbea470 75 ERR("GWRegRes Error: %d", pstRspHdr->ucResultCode);
lesmin 0:b111abbea470 76 free(pBody);
lesmin 0:b111abbea470 77 return 1;
lesmin 0:b111abbea470 78 }
lesmin 0:b111abbea470 79
lesmin 0:b111abbea470 80 SetAuthKey((char*) pstGMMPHeader->usAuthKey);
lesmin 0:b111abbea470 81 SetGWID((char*) pstRspHdr->usGWID);
lesmin 0:b111abbea470 82 infoln(("GWRegRes has been received:"));
lesmin 0:b111abbea470 83 infoln(g_szAuthKey);
lesmin 0:b111abbea470 84 infoln(GetGWID());
lesmin 0:b111abbea470 85 INFO("GWRegRes has been received:\r\n%s\r\n%s", g_szAuthKey, GetGWID());
lesmin 0:b111abbea470 86 regGwCount++;
lesmin 0:b111abbea470 87
lesmin 0:b111abbea470 88 int ret = GO_Profile(GetGWID(), NULL, 0);
lesmin 0:b111abbea470 89
lesmin 0:b111abbea470 90 if (ret != GMMP_SUCCESS) {
lesmin 0:b111abbea470 91 errorln("ReqProfile Err!!");
lesmin 0:b111abbea470 92 free(pBody);
lesmin 0:b111abbea470 93 return 1;
lesmin 0:b111abbea470 94 }
lesmin 0:b111abbea470 95
lesmin 0:b111abbea470 96 infoln("ProfileReq has been sent.");
lesmin 0:b111abbea470 97 } else if (cMessageType == OPERATION_PROFILE_RSP) {
lesmin 0:b111abbea470 98 stProfileRspHdr* pstRspHdr = (stProfileRspHdr*) pBody;
lesmin 0:b111abbea470 99
lesmin 0:b111abbea470 100 if (pstRspHdr->ucResultCode != 0x00) {
lesmin 0:b111abbea470 101 errorln("ProfileRes Error!");
lesmin 0:b111abbea470 102 free(pBody);
lesmin 0:b111abbea470 103 return 1;
lesmin 0:b111abbea470 104 }
lesmin 0:b111abbea470 105
lesmin 0:b111abbea470 106 //infoln(F("ProfileRes has been received:"));
lesmin 0:b111abbea470 107 //infoln(Char2int(pstRspHdr->unHeartbeatPeriod, 4));
lesmin 0:b111abbea470 108 //infoln(Char2int(pstRspHdr->unReportOffset, 4));
lesmin 0:b111abbea470 109 //infoln(Char2int(pstRspHdr->unReportPeriod, 4));
lesmin 0:b111abbea470 110 //infoln(Char2int(pstRspHdr->unResponseTimeout, 4));
lesmin 0:b111abbea470 111 INFO("ProfileRes has been received:\r\n%d\r\n%d\r\n%d\r\n%d",
lesmin 0:b111abbea470 112 Char2int(pstRspHdr->unHeartbeatPeriod, 4),
lesmin 0:b111abbea470 113 Char2int(pstRspHdr->unReportOffset, 4),
lesmin 0:b111abbea470 114 Char2int(pstRspHdr->unReportPeriod, 4),
lesmin 0:b111abbea470 115 Char2int(pstRspHdr->unResponseTimeout,4) );
lesmin 0:b111abbea470 116 /* 주기값 재설정
lesmin 0:b111abbea470 117 pstRspHdr->unHeartbeatPeriod;
lesmin 0:b111abbea470 118 pstRspHdr->unReportOffset;
lesmin 0:b111abbea470 119 pstRspHdr->unReportPeriod;
lesmin 0:b111abbea470 120 pstRspHdr->unResponseTimeout;
lesmin 0:b111abbea470 121 */
lesmin 0:b111abbea470 122
lesmin 0:b111abbea470 123 reportPeriodMilli = Char2int(pstRspHdr->unReportPeriod, 4) * 1000 * 60;
lesmin 0:b111abbea470 124 //reportPeriodMilli = Char2int(pstRspHdr->unReportPeriod, 4) * 300;
lesmin 0:b111abbea470 125 heartbeatPeriodMilli = Char2int(pstRspHdr->unHeartbeatPeriod, 4) * 1000 * 60;
lesmin 0:b111abbea470 126
lesmin 0:b111abbea470 127 long nHeartBeat = Char2int((char*) pstRspHdr->unHeartbeatPeriod, sizeof(pstGMMPHeader->usTID)); //수신받은 Heartbeat 주기 값을 확인.
lesmin 0:b111abbea470 128
lesmin 0:b111abbea470 129 //Profile 요청 수신 값에 Heartbeat 주기 값으로 변경
lesmin 0:b111abbea470 130 if (nHeartBeat > 0) {
lesmin 0:b111abbea470 131 //nTimerSec = nHeartBeat;
lesmin 0:b111abbea470 132 }
lesmin 0:b111abbea470 133
lesmin 0:b111abbea470 134 int ret = GO_Reg(GetGWID(), pszDeviceMFID);
lesmin 0:b111abbea470 135
lesmin 0:b111abbea470 136 if (ret != GMMP_SUCCESS) {
lesmin 0:b111abbea470 137 errorln("DevRegReq Err!!");
lesmin 0:b111abbea470 138 free(pBody);
lesmin 0:b111abbea470 139 return 1;
lesmin 0:b111abbea470 140 }
lesmin 0:b111abbea470 141
lesmin 0:b111abbea470 142 infoln("DevRegReq has been sent.");
lesmin 0:b111abbea470 143 } else if (cMessageType == OPERATION_DEVICE_REG_RSP) {
lesmin 0:b111abbea470 144 stDeviceRegistrationRspHdr* pstRspHdr = (stDeviceRegistrationRspHdr*) pBody;
lesmin 0:b111abbea470 145
lesmin 0:b111abbea470 146 if (pstRspHdr->ucResultCode != 0x00) {
lesmin 0:b111abbea470 147 errorln("DevRegRes Error!");
lesmin 0:b111abbea470 148 free(pBody);
lesmin 0:b111abbea470 149 return 1;
lesmin 0:b111abbea470 150 }
lesmin 0:b111abbea470 151
lesmin 0:b111abbea470 152 if (strlen((char*) pstRspHdr->usDeviceID) <= 0) {
lesmin 0:b111abbea470 153 errorln("No DeviceID!");
lesmin 0:b111abbea470 154 free(pBody);
lesmin 0:b111abbea470 155 return 1;
lesmin 0:b111abbea470 156 }
lesmin 0:b111abbea470 157
lesmin 0:b111abbea470 158 int len = strlen((char*) pstRspHdr->usDeviceID);
lesmin 0:b111abbea470 159 memset(deviceId, 0, LEN_DEVICE_ID);
lesmin 0:b111abbea470 160 memcpy(deviceId, pstRspHdr->usDeviceID, len);
lesmin 0:b111abbea470 161 infoln("DevRegRes has been received:");
lesmin 0:b111abbea470 162 infoln((char*) deviceId);
lesmin 0:b111abbea470 163 regDevCount++;
lesmin 0:b111abbea470 164
lesmin 0:b111abbea470 165 //startSensingTemp();
lesmin 0:b111abbea470 166 } else if (cMessageType == OPERATION_DELIVERY_RSP) {
lesmin 0:b111abbea470 167 stPacketDeliveryRspHdr* pstRspHdr = (stPacketDeliveryRspHdr*) pBody;
lesmin 0:b111abbea470 168
lesmin 0:b111abbea470 169 if (pstRspHdr->ucResultCode != 0x00) {
lesmin 0:b111abbea470 170 // errorln("DeliverRes Err!!");
lesmin 0:b111abbea470 171 ERR("DeliverRes Err(0x%2x)!!", pstRspHdr->ucResultCode); //lesmin
lesmin 0:b111abbea470 172 free(pBody);
lesmin 0:b111abbea470 173 return 1;
lesmin 0:b111abbea470 174 }
lesmin 0:b111abbea470 175
lesmin 0:b111abbea470 176 infoln("DeliveryRes has been received.");
lesmin 0:b111abbea470 177 } else if (pstGMMPHeader->ucMessageType == OPERATION_HEARTBEAT_RSP) {
lesmin 0:b111abbea470 178 //stHeartBeatMsgRspHdr* pstRspHdr = (stHeartBeatMsgRspHdr*) pBody;
lesmin 0:b111abbea470 179
lesmin 0:b111abbea470 180 infoln("HeartbeatRes has been received.");
lesmin 0:b111abbea470 181 } else if (cMessageType == OPERATION_CONTROL_REQ) {
lesmin 0:b111abbea470 182 stControlReqHdr* pstReqHdr = (stControlReqHdr*) pBody;
lesmin 0:b111abbea470 183
lesmin 0:b111abbea470 184 infoln("ControlReq has been received.");
lesmin 0:b111abbea470 185
lesmin 0:b111abbea470 186 char cResult = 0x00;
lesmin 0:b111abbea470 187
lesmin 0:b111abbea470 188 int len = 0;
lesmin 0:b111abbea470 189 if (pstReqHdr->usMessageBody) {
lesmin 0:b111abbea470 190 len = strlen((char*) pstReqHdr->usMessageBody);
lesmin 0:b111abbea470 191 }
lesmin 0:b111abbea470 192 if (len > 0) {
lesmin 0:b111abbea470 193 info("Control Msg Body: ");
lesmin 0:b111abbea470 194 infoln((char*) pstReqHdr->usMessageBody);
lesmin 0:b111abbea470 195 }
lesmin 0:b111abbea470 196
lesmin 0:b111abbea470 197 long nTID = Char2int((char*) pstGMMPHeader->usTID, sizeof(pstGMMPHeader->usTID));
lesmin 0:b111abbea470 198
lesmin 0:b111abbea470 199 //debug(F("Received TID: "));
lesmin 0:b111abbea470 200 //debugln(nTID);
lesmin 0:b111abbea470 201 DBG("Received TID: %d\r\n", nTID);
lesmin 0:b111abbea470 202
lesmin 0:b111abbea470 203 int ret = GO_Control((char*) pstReqHdr->usGWID, (char*) pstReqHdr->usDeviceID, nTID,
lesmin 0:b111abbea470 204 (char)pstReqHdr->ucControlType, cResult);
lesmin 0:b111abbea470 205
lesmin 0:b111abbea470 206 if (ret != GMMP_SUCCESS) {
lesmin 0:b111abbea470 207 errorln("ControRes Err!!");
lesmin 0:b111abbea470 208 free(pBody);
lesmin 0:b111abbea470 209 return 1;
lesmin 0:b111abbea470 210 }
lesmin 0:b111abbea470 211
lesmin 0:b111abbea470 212 infoln("ControlRes has been sent.");
lesmin 0:b111abbea470 213
lesmin 0:b111abbea470 214 //infoln(pstReqHdr->ucControlType);
lesmin 0:b111abbea470 215 INFO("%d\r\n", pstReqHdr->ucControlType);
lesmin 0:b111abbea470 216
lesmin 0:b111abbea470 217 if (pstReqHdr->ucControlType != USER_CONTROL_LED) {
lesmin 0:b111abbea470 218 ERR("Unknown Control Msg: %d\r\n", pstReqHdr->ucControlType);
lesmin 0:b111abbea470 219 free(pBody);
lesmin 0:b111abbea470 220 return 1;
lesmin 0:b111abbea470 221 }
lesmin 0:b111abbea470 222
lesmin 0:b111abbea470 223 if (pstReqHdr->usMessageBody[0] == '1') {
lesmin 0:b111abbea470 224 myled = 1;
lesmin 0:b111abbea470 225 infoln("LED ON");
lesmin 0:b111abbea470 226 } else if (pstReqHdr->usMessageBody[0] == '0') {
lesmin 0:b111abbea470 227 myled = 0;
lesmin 0:b111abbea470 228 infoln("LED OFF");
lesmin 0:b111abbea470 229 } else {
lesmin 0:b111abbea470 230 errorln("Unknown Control Msg Body; it must be '1' or '0'.");
lesmin 0:b111abbea470 231 free(pBody);
lesmin 0:b111abbea470 232 return 1;
lesmin 0:b111abbea470 233 }
lesmin 0:b111abbea470 234
lesmin 0:b111abbea470 235 delay(1000); //msec
lesmin 0:b111abbea470 236
lesmin 0:b111abbea470 237 ret = GO_Notifi((char*) pstReqHdr->usGWID, (char*) pstReqHdr->usDeviceID,
lesmin 0:b111abbea470 238 (char)pstReqHdr->ucControlType, cResult, (char*) pstReqHdr->usMessageBody, 0);
lesmin 0:b111abbea470 239
lesmin 0:b111abbea470 240 if (ret != GMMP_SUCCESS) {
lesmin 0:b111abbea470 241 ERR("NotiReq Err: %d\r\n", ret);
lesmin 0:b111abbea470 242 free(pBody);
lesmin 0:b111abbea470 243 return 1;
lesmin 0:b111abbea470 244 }
lesmin 0:b111abbea470 245
lesmin 0:b111abbea470 246 infoln("Control NotiReq has been sent.");
lesmin 0:b111abbea470 247 } else if (cMessageType == OPERATION_NOTIFICATION_RSP) {
lesmin 0:b111abbea470 248 stNotificationRspHdr* pstRspHdr = (stNotificationRspHdr*) pBody;
lesmin 0:b111abbea470 249
lesmin 0:b111abbea470 250 if (pstRspHdr->ucResultCode != 0x00) {
lesmin 0:b111abbea470 251 //error(F("NotiRes Err: "));
lesmin 0:b111abbea470 252 //errorln(pstRspHdr->ucResultCode);
lesmin 0:b111abbea470 253 ERR("NotiRes Err: %d\r\n", pstRspHdr->ucResultCode);
lesmin 0:b111abbea470 254 free(pBody);
lesmin 0:b111abbea470 255 return 1;
lesmin 0:b111abbea470 256 }
lesmin 0:b111abbea470 257
lesmin 0:b111abbea470 258 infoln("NotiRes has been received.");
lesmin 0:b111abbea470 259 } else if (cMessageType == OPERATION_GW_DEREG_RSP) {
lesmin 0:b111abbea470 260 stGwRegistrationRspHdr* pstRspHdr = (stGwRegistrationRspHdr*) pBody;
lesmin 0:b111abbea470 261
lesmin 0:b111abbea470 262 if (pstRspHdr->ucResultCode != 0x00) {
lesmin 0:b111abbea470 263 //error(F("DeregGwRes Err: "));
lesmin 0:b111abbea470 264 //errorln(pstRspHdr->ucResultCode);
lesmin 0:b111abbea470 265 ERR("DeregGwRes Err: %d\r\n", pstRspHdr->ucResultCode);
lesmin 0:b111abbea470 266 free(pBody);
lesmin 0:b111abbea470 267 return 1;
lesmin 0:b111abbea470 268 }
lesmin 0:b111abbea470 269
lesmin 0:b111abbea470 270 if (strlen((char*) pstRspHdr->usGWID) <= 0) {
lesmin 0:b111abbea470 271 errorln("No GW ID!!");
lesmin 0:b111abbea470 272 free(pBody);
lesmin 0:b111abbea470 273 return 1;
lesmin 0:b111abbea470 274 }
lesmin 0:b111abbea470 275
lesmin 0:b111abbea470 276 if (strlen((char*) pstGMMPHeader->usAuthKey) <= 0) {
lesmin 0:b111abbea470 277 errorln("No Auth Key!!");
lesmin 0:b111abbea470 278 free(pBody);
lesmin 0:b111abbea470 279 return 1;
lesmin 0:b111abbea470 280 }
lesmin 0:b111abbea470 281
lesmin 0:b111abbea470 282 infoln("DeregGwRes has been received.");
lesmin 0:b111abbea470 283 } else if (cMessageType == OPERATION_DEVICE_DEREG_RSP) {
lesmin 0:b111abbea470 284 stDeviceRegistrationRspHdr* pstRspHdr = (stDeviceRegistrationRspHdr*) pBody;
lesmin 0:b111abbea470 285
lesmin 0:b111abbea470 286 if (pstRspHdr->ucResultCode != 0x00) {
lesmin 0:b111abbea470 287 //error(F("DeregDevRes Err: "));
lesmin 0:b111abbea470 288 //errorln(pstRspHdr->ucResultCode);
lesmin 0:b111abbea470 289 ERR("DeregDevRes Err: %d\r\n", pstRspHdr->ucResultCode);
lesmin 0:b111abbea470 290 free(pBody);
lesmin 0:b111abbea470 291 return 1;
lesmin 0:b111abbea470 292 }
lesmin 0:b111abbea470 293
lesmin 0:b111abbea470 294 if (strlen((char*) pstRspHdr->usDeviceID) <= 0) {
lesmin 0:b111abbea470 295 errorln("No device ID!!");
lesmin 0:b111abbea470 296 free(pBody);
lesmin 0:b111abbea470 297 return 1;
lesmin 0:b111abbea470 298 }
lesmin 0:b111abbea470 299
lesmin 0:b111abbea470 300 infoln("DeregDevRes has been received.");
lesmin 0:b111abbea470 301 }
lesmin 0:b111abbea470 302
lesmin 0:b111abbea470 303 free(pBody);
lesmin 0:b111abbea470 304 return 0;
lesmin 0:b111abbea470 305 }
lesmin 0:b111abbea470 306
lesmin 0:b111abbea470 307 byte isSensing = 0;
lesmin 0:b111abbea470 308
lesmin 0:b111abbea470 309 void startSensingTemp()
lesmin 0:b111abbea470 310 {
lesmin 0:b111abbea470 311 #if defined(TARGET_LPC1768)
lesmin 0:b111abbea470 312 if (sensor.open()) {
lesmin 0:b111abbea470 313 printf("Sensing started!\r\n");
lesmin 0:b111abbea470 314 isSensing = 1;
lesmin 0:b111abbea470 315 }
lesmin 0:b111abbea470 316 else
lesmin 0:b111abbea470 317 #endif
lesmin 0:b111abbea470 318 {
lesmin 0:b111abbea470 319 printf("Sensor not detected!\r\n");
lesmin 0:b111abbea470 320 //isSensing = 0;
lesmin 0:b111abbea470 321 isSensing = 1; //emulate sensor
lesmin 0:b111abbea470 322 }
lesmin 0:b111abbea470 323 }
lesmin 0:b111abbea470 324
lesmin 0:b111abbea470 325 #define BUF_SIZE 10
lesmin 0:b111abbea470 326 GMMPHeader header;
lesmin 0:b111abbea470 327 void *pBody = NULL;
lesmin 0:b111abbea470 328 char sendBuf[BUF_SIZE];
lesmin 0:b111abbea470 329
lesmin 0:b111abbea470 330 Timer t; //for Millis()
lesmin 0:b111abbea470 331
lesmin 0:b111abbea470 332 void setup(void) {
lesmin 1:a861abaa7e3b 333 t.start();
lesmin 0:b111abbea470 334
lesmin 0:b111abbea470 335 infoln("Start setup()");
lesmin 0:b111abbea470 336
lesmin 0:b111abbea470 337 startSensingTemp(); //lesmin
lesmin 0:b111abbea470 338
lesmin 0:b111abbea470 339 char mac_addr[19];
lesmin 0:b111abbea470 340 mbed_mac_address((char *)mac); //Use mbed mac addres
lesmin 0:b111abbea470 341 snprintf(mac_addr, 19, "%02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
lesmin 0:b111abbea470 342 printf("MAC: %s\n", mac_addr);
lesmin 0:b111abbea470 343
lesmin 0:b111abbea470 344 if ( Initialize(serverIp, nServerPort, pszDomainCode, pszGWAuthID, mac) ) {
lesmin 0:b111abbea470 345 infoln("Initialize failed!");
lesmin 0:b111abbea470 346 }
lesmin 0:b111abbea470 347
lesmin 0:b111abbea470 348 SetCallFunction(Recv);
lesmin 0:b111abbea470 349
lesmin 0:b111abbea470 350 int ret = GO_Reg(NULL, pszGWMFID);
lesmin 0:b111abbea470 351
lesmin 0:b111abbea470 352 if (ret != GMMP_SUCCESS) {
lesmin 0:b111abbea470 353 errorln("RegReq Error!!");
lesmin 0:b111abbea470 354 for(;;);
lesmin 0:b111abbea470 355 }
lesmin 0:b111abbea470 356
lesmin 0:b111abbea470 357 infoln("GW RegReq has been sent.");
lesmin 0:b111abbea470 358 }
lesmin 0:b111abbea470 359
lesmin 0:b111abbea470 360 int millis(void) {
lesmin 0:b111abbea470 361 return t.read_ms();
lesmin 0:b111abbea470 362 }
lesmin 0:b111abbea470 363
lesmin 0:b111abbea470 364 float getTemperature(void) {
lesmin 0:b111abbea470 365 #if defined(TARGET_LPC1768)
lesmin 0:b111abbea470 366 float Temp = sensor;
lesmin 0:b111abbea470 367
lesmin 0:b111abbea470 368 lcd.cls();
lesmin 0:b111abbea470 369 lcd.locate(0,3);
lesmin 0:b111abbea470 370 lcd.printf("Temp = %.3f\n", (float)Temp);
lesmin 0:b111abbea470 371
lesmin 0:b111abbea470 372 wait(1.0);
lesmin 0:b111abbea470 373 return Temp;
lesmin 0:b111abbea470 374 #else
lesmin 0:b111abbea470 375 return 33.3;
lesmin 0:b111abbea470 376 #endif
lesmin 0:b111abbea470 377 }
lesmin 0:b111abbea470 378
lesmin 0:b111abbea470 379 void delay(int d) {
lesmin 0:b111abbea470 380 float delay_time = d/1000.0;
lesmin 0:b111abbea470 381 wait(delay_time);
lesmin 0:b111abbea470 382 }
lesmin 0:b111abbea470 383
lesmin 0:b111abbea470 384 void loop(void)
lesmin 0:b111abbea470 385 {
lesmin 0:b111abbea470 386 int ret = GetReadData(&header, &pBody);
lesmin 0:b111abbea470 387 if (ret != E_WOULDBLOCK) {
lesmin 0:b111abbea470 388 infoln("******** NOT E_WOULDBLOCK *********");
lesmin 0:b111abbea470 389 //info(F("Free memory size: "));
lesmin 0:b111abbea470 390 //infoln(freeRam());
lesmin 0:b111abbea470 391 }
lesmin 0:b111abbea470 392
lesmin 0:b111abbea470 393 //byte addr[8];
lesmin 0:b111abbea470 394 float temperature;
lesmin 0:b111abbea470 395
lesmin 0:b111abbea470 396 int curMilli = millis();
lesmin 0:b111abbea470 397 byte mustDeliver = (curMilli - lastDeliverMilli) > reportPeriodMilli;
lesmin 0:b111abbea470 398 byte mustHeartbeat = (curMilli - lastHeartbeatMilli) > heartbeatPeriodMilli;
lesmin 0:b111abbea470 399
lesmin 0:b111abbea470 400 if (!isSensing) {
lesmin 0:b111abbea470 401 printf("Sensor is off...\r\n");
lesmin 0:b111abbea470 402 return;
lesmin 0:b111abbea470 403 }
lesmin 0:b111abbea470 404
lesmin 0:b111abbea470 405 #if 1
lesmin 0:b111abbea470 406 //int mustGwDereg = digitalRead(DEREGISTRATION_GW_SWITCH_PIN);
lesmin 0:b111abbea470 407 int mustGwDereg = LOW; //lesmin
lesmin 0:b111abbea470 408
lesmin 0:b111abbea470 409 if (mustGwDereg == HIGH && regGwCount > 0) {
lesmin 0:b111abbea470 410 ret = GO_DeReg(GetGWID(), NULL);
lesmin 0:b111abbea470 411
lesmin 0:b111abbea470 412 if (ret != GMMP_SUCCESS) {
lesmin 0:b111abbea470 413 errorln("DeregGwReq Error!!");
lesmin 0:b111abbea470 414 delay(1000);
lesmin 0:b111abbea470 415 return;
lesmin 0:b111abbea470 416 }
lesmin 0:b111abbea470 417
lesmin 0:b111abbea470 418 regGwCount--;
lesmin 0:b111abbea470 419 return;
lesmin 0:b111abbea470 420 }
lesmin 0:b111abbea470 421
lesmin 0:b111abbea470 422 //int mustDevDereg = digitalRead(DEREGISTRATION_DEVICE_SWITCH_PIN);
lesmin 0:b111abbea470 423 int mustDevDereg = LOW;
lesmin 0:b111abbea470 424
lesmin 0:b111abbea470 425 if (mustDevDereg == HIGH && regDevCount > 0) {
lesmin 0:b111abbea470 426 ret = GO_DeReg(GetGWID(), (char*) deviceId);
lesmin 0:b111abbea470 427
lesmin 0:b111abbea470 428 if (ret != GMMP_SUCCESS) {
lesmin 0:b111abbea470 429 errorln("DeregDevReq Error!!");
lesmin 0:b111abbea470 430 delay(1000);
lesmin 0:b111abbea470 431 return;
lesmin 0:b111abbea470 432 }
lesmin 0:b111abbea470 433
lesmin 0:b111abbea470 434 regDevCount--;
lesmin 0:b111abbea470 435 return;
lesmin 0:b111abbea470 436 }
lesmin 0:b111abbea470 437
lesmin 0:b111abbea470 438 if (mustHeartbeat) {
lesmin 0:b111abbea470 439 DBG("lastHeartbeatMilli: %d\r\ncurMilli: %d\r\n", lastHeartbeatMilli, curMilli);
lesmin 0:b111abbea470 440
lesmin 0:b111abbea470 441 ret = GO_HB(GetGWID());
lesmin 0:b111abbea470 442
lesmin 0:b111abbea470 443 if (ret != GMMP_SUCCESS) {
lesmin 0:b111abbea470 444 errorln("HeartbeatReq Error!!");
lesmin 0:b111abbea470 445 return;
lesmin 0:b111abbea470 446 }
lesmin 0:b111abbea470 447
lesmin 0:b111abbea470 448 infoln("HeartbeatReq has been sent.");
lesmin 0:b111abbea470 449
lesmin 0:b111abbea470 450 lastHeartbeatMilli = curMilli;
lesmin 0:b111abbea470 451 }
lesmin 0:b111abbea470 452
lesmin 0:b111abbea470 453 if (!mustDeliver) {
lesmin 0:b111abbea470 454 return;
lesmin 0:b111abbea470 455 }
lesmin 0:b111abbea470 456 #endif
lesmin 0:b111abbea470 457
lesmin 0:b111abbea470 458 temperature = getTemperature();
lesmin 0:b111abbea470 459
lesmin 0:b111abbea470 460 memset(sendBuf, 0, BUF_SIZE);
lesmin 0:b111abbea470 461
lesmin 0:b111abbea470 462 sprintf(sendBuf, "%.1f", temperature);
lesmin 0:b111abbea470 463
lesmin 0:b111abbea470 464 ret = GO_Delivery(GetGWID(), NULL, DELIVERY_COLLECT_DATA, 0x01, sendBuf);
lesmin 0:b111abbea470 465
lesmin 0:b111abbea470 466 info("Sent Data: ");
lesmin 0:b111abbea470 467 infoln(sendBuf);
lesmin 0:b111abbea470 468 INFO("Sent Data: %s\r\n", sendBuf);
lesmin 0:b111abbea470 469
lesmin 0:b111abbea470 470 if (ret != GMMP_SUCCESS) {
lesmin 0:b111abbea470 471 errorln("DeliveryReq Error!!");
lesmin 0:b111abbea470 472 return;
lesmin 0:b111abbea470 473 }
lesmin 0:b111abbea470 474
lesmin 0:b111abbea470 475 lastDeliverMilli = curMilli;
lesmin 0:b111abbea470 476 }
lesmin 0:b111abbea470 477
lesmin 0:b111abbea470 478 int main() {
lesmin 0:b111abbea470 479
lesmin 0:b111abbea470 480 setup();
lesmin 0:b111abbea470 481
lesmin 0:b111abbea470 482 while(1) {
lesmin 0:b111abbea470 483 loop();
lesmin 0:b111abbea470 484 }
lesmin 0:b111abbea470 485 }