ThingPlug GMMP library WiFi Example on Nucleo and muRata

Dependencies:   GMMP NTPClient SNICInterface mbed-rtos mbed

Committer:
lesmin
Date:
Thu Jul 23 01:03:16 2015 +0000
Revision:
0:b111abbea470
Child:
1:a861abaa7e3b
initial commit

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