Modified for W5500 Ethernet initialize

Dependencies:   GMMP_mbed_Ethernet_Reinit NTPClient WIZnet_Library mbed

Fork of ThingPlug_Ethernet_Example by SKTelecom_ThingPlug

Committer:
hkjung
Date:
Wed Aug 12 08:59:27 2015 +0000
Revision:
6:639c17cf11a6
Parent:
5:dc12a979116c
Ethernet interface reinitialize code added

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