ThingPlug GMMP library Ethernet Example on Nucleo and W5500

Dependencies:   GMMP_mbed NTPClient WIZnet_Library mbed

Fork of ThingPlug_Ethernet_Example by Sangmin Lee

Committer:
lesmin
Date:
Fri Aug 14 09:12:20 2015 +0000
Revision:
10:cf405a9d5c23
Parent:
9:9179158a0fef
applied recent version of GMMP_mbed

Who changed what in which revision?

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