Modified for W5500 Ethernet initialize

Dependencies:   GMMP_mbed_Ethernet_Reinit NTPClient WIZnet_Library mbed

Fork of ThingPlug_Ethernet_Example by SKTelecom_ThingPlug

Committer:
lesmin
Date:
Sun Aug 09 14:24:15 2015 +0000
Revision:
0:fdbd2c6947ea
Child:
1:468ac9167975
ThingPlug_WiFi_Example_2

Who changed what in which revision?

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