ThingPlug GMMP library WiFi Example v2.0 on Nucleo and muRata

Dependencies:   GMMP_mbed NTPClient SNICInterface mbed-rtos mbed

Fork of ThingPlug_WiFi_Example2 by Sangmin Lee

Committer:
lesmin
Date:
Thu Aug 13 07:13:27 2015 +0000
Revision:
9:437e8061d426
Parent:
8:c7080774d329
applied forked version of SNICInterface

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 6:d4016c23c8be 8 #ifdef USE_SNIC_WIFI
lesmin 6:d4016c23c8be 9 #include "SNIC_WifiInterface.h"
lesmin 6:d4016c23c8be 10 C_SNIC_WifiInterface wifi( D8, D2, NC, NC, D3);
lesmin 6:d4016c23c8be 11 #endif//USE_SNIC_WIFI
lesmin 6:d4016c23c8be 12
lesmin 6:d4016c23c8be 13 #ifdef USE_WIZNET_W5500
lesmin 6:d4016c23c8be 14 #include "WIZnetInterface.h"
lesmin 6:d4016c23c8be 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:d4016c23c8be 16 #endif//USE_WIZNET_W5500
lesmin 6:d4016c23c8be 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 0:fdbd2c6947ea 212 myled = 1;
lesmin 0:fdbd2c6947ea 213 infoln("LED ON");
lesmin 0:fdbd2c6947ea 214 } else if (pstReqHdr->usMessageBody[0] == '0') {
lesmin 0:fdbd2c6947ea 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 8:c7080774d329 316 infoln("\r\nStart setup()");
lesmin 0:fdbd2c6947ea 317
lesmin 6:d4016c23c8be 318 #ifdef USE_SNIC_WIFI
lesmin 8:c7080774d329 319 int ret = 0;
lesmin 8:c7080774d329 320
lesmin 8:c7080774d329 321 ret = wifi.init();
lesmin 8:c7080774d329 322 printf("wifi status: %d\r\n", ret);
lesmin 6:d4016c23c8be 323
lesmin 6:d4016c23c8be 324 wait(0.5);
lesmin 6:d4016c23c8be 325 int s = wifi.disconnect();
lesmin 6:d4016c23c8be 326 if( s != 0 ) {
lesmin 6:d4016c23c8be 327 return -1;
lesmin 6:d4016c23c8be 328 }
lesmin 6:d4016c23c8be 329
lesmin 6:d4016c23c8be 330 wait(0.3);
lesmin 6:d4016c23c8be 331 // Connect AP
lesmin 6:d4016c23c8be 332 wifi.connect( MBED_AP_SSID
lesmin 6:d4016c23c8be 333 , strlen(MBED_AP_SSID)
lesmin 6:d4016c23c8be 334 , MBED_AP_SECURITY_TYPE
lesmin 6:d4016c23c8be 335 , MBED_AP_SECUTIRY_KEY
lesmin 6:d4016c23c8be 336 , strlen(MBED_AP_SECUTIRY_KEY) );
lesmin 6:d4016c23c8be 337 wait(0.5);
lesmin 6:d4016c23c8be 338 wifi.setIPConfig( true ); //Use DHCP
lesmin 6:d4016c23c8be 339 wait(0.5);
lesmin 6:d4016c23c8be 340
lesmin 6:d4016c23c8be 341 tagWIFI_STATUS_T wifi_status;
lesmin 6:d4016c23c8be 342 if( wifi.getWifiStatus(&wifi_status) ) printf("wifi_status error!\r\n");
lesmin 6:d4016c23c8be 343
lesmin 6:d4016c23c8be 344 printf("MAC Address is %02x:%02x:%02x:%02x:%02x:%02x\r\n",
lesmin 6:d4016c23c8be 345 wifi_status.mac_address[0], wifi_status.mac_address[1], wifi_status.mac_address[2],
lesmin 6:d4016c23c8be 346 wifi_status.mac_address[3], wifi_status.mac_address[4], wifi_status.mac_address[5]);
lesmin 6:d4016c23c8be 347 printf("IP Address is %s\r\n", wifi.getIPAddress());
lesmin 6:d4016c23c8be 348 #endif//USE_SNIC_WIFI
lesmin 6:d4016c23c8be 349
lesmin 6:d4016c23c8be 350 #ifdef USE_WIZNET_W5500
lesmin 6:d4016c23c8be 351 //mbed_mac_address((char *)MAC_Addr); //Use mbed mac addres
lesmin 6:d4016c23c8be 352 printf("input MAC Address is %02x:%02x:%02x:%02x:%02x:%02x\r\n",
lesmin 6:d4016c23c8be 353 g_mac[0], g_mac[1], g_mac[2], g_mac[3], g_mac[4], g_mac[5]);
lesmin 6:d4016c23c8be 354
lesmin 7:e4d6b2fc3ba7 355 int ret = ethernet.init(g_mac);
lesmin 6:d4016c23c8be 356 //printf("SPI Initialized \r\n");
lesmin 6:d4016c23c8be 357 //wait(1); // 1 second for stable state
lesmin 6:d4016c23c8be 358
lesmin 6:d4016c23c8be 359 printf("W5500 Networking Started \r\n");
lesmin 6:d4016c23c8be 360 //wait(1); // 1 second for stable state
lesmin 6:d4016c23c8be 361
lesmin 7:e4d6b2fc3ba7 362 if (!ret) {
lesmin 6:d4016c23c8be 363 printf("Initialized, MAC: %s\r\n", ethernet.getMACAddress());
lesmin 7:e4d6b2fc3ba7 364 ret = ethernet.connect();
lesmin 7:e4d6b2fc3ba7 365 if (!ret) {
lesmin 6:d4016c23c8be 366 printf("IP: %s, MASK: %s, GW: %s\r\n",
lesmin 6:d4016c23c8be 367 ethernet.getIPAddress(), ethernet.getNetworkMask(), ethernet.getGateway());
lesmin 6:d4016c23c8be 368 } else {
lesmin 7:e4d6b2fc3ba7 369 printf("Error ethernet.connect() - ret = %d\r\n", ret);
lesmin 6:d4016c23c8be 370 //exit(0);
lesmin 6:d4016c23c8be 371 }
lesmin 6:d4016c23c8be 372 } else {
lesmin 7:e4d6b2fc3ba7 373 printf("Error ethernet.init() - ret = %d\r\n", ret);
lesmin 6:d4016c23c8be 374 //exit(0);
lesmin 6:d4016c23c8be 375 }
lesmin 6:d4016c23c8be 376
lesmin 6:d4016c23c8be 377 #endif//USE_WIZNET_W5500
lesmin 6:d4016c23c8be 378
lesmin 0:fdbd2c6947ea 379 startSensingTemp(); //lesmin
lesmin 0:fdbd2c6947ea 380
lesmin 0:fdbd2c6947ea 381 if ( Initialize(serverIp, nServerPort, pszDomainCode, pszGWAuthID, g_mac) ) {
lesmin 0:fdbd2c6947ea 382 infoln("Initialize failed!");
lesmin 0:fdbd2c6947ea 383 return -1; //lesmin
lesmin 0:fdbd2c6947ea 384 }
lesmin 0:fdbd2c6947ea 385
lesmin 0:fdbd2c6947ea 386 infoln("SetCallFunction");
lesmin 0:fdbd2c6947ea 387 SetCallFunction(Recv);
lesmin 0:fdbd2c6947ea 388
lesmin 7:e4d6b2fc3ba7 389 ret = GO_Reg(NULL, pszGWMFID);
lesmin 0:fdbd2c6947ea 390
lesmin 0:fdbd2c6947ea 391 if (ret != GMMP_SUCCESS) {
lesmin 0:fdbd2c6947ea 392 errorln("RegReq Error!!");
lesmin 0:fdbd2c6947ea 393 for(;;);
lesmin 0:fdbd2c6947ea 394 }
lesmin 0:fdbd2c6947ea 395
lesmin 0:fdbd2c6947ea 396 infoln("GW RegReq has been sent.");
lesmin 0:fdbd2c6947ea 397 return 0;
lesmin 0:fdbd2c6947ea 398 }
lesmin 0:fdbd2c6947ea 399
lesmin 0:fdbd2c6947ea 400 int millis(void) {
lesmin 0:fdbd2c6947ea 401 return g_t.read_ms();
lesmin 0:fdbd2c6947ea 402 }
lesmin 0:fdbd2c6947ea 403
lesmin 0:fdbd2c6947ea 404 float getTemperature(void) {
lesmin 0:fdbd2c6947ea 405 return 33.3;
lesmin 0:fdbd2c6947ea 406 }
lesmin 0:fdbd2c6947ea 407
lesmin 0:fdbd2c6947ea 408 void delay(int d) {
lesmin 0:fdbd2c6947ea 409 float delay_time = d/1000.0;
lesmin 0:fdbd2c6947ea 410 wait(delay_time);
lesmin 0:fdbd2c6947ea 411 }
lesmin 0:fdbd2c6947ea 412
lesmin 0:fdbd2c6947ea 413 void loop(void)
lesmin 0:fdbd2c6947ea 414 {
lesmin 0:fdbd2c6947ea 415 int ret = GetReadData(&header, &pBody);
lesmin 0:fdbd2c6947ea 416 if (ret != E_WOULDBLOCK) {
lesmin 0:fdbd2c6947ea 417 //infoln("******** NOT E_WOULDBLOCK *********");
lesmin 0:fdbd2c6947ea 418 //info(F("Free memory size: "));
lesmin 0:fdbd2c6947ea 419 //infoln(freeRam());
lesmin 0:fdbd2c6947ea 420 }
lesmin 0:fdbd2c6947ea 421
lesmin 0:fdbd2c6947ea 422 //byte addr[8];
lesmin 0:fdbd2c6947ea 423 float temperature;
lesmin 0:fdbd2c6947ea 424
lesmin 0:fdbd2c6947ea 425 int curMilli = millis();
lesmin 0:fdbd2c6947ea 426 byte mustDeliver = (curMilli - lastDeliverMilli) > reportPeriodMilli;
lesmin 0:fdbd2c6947ea 427 byte mustHeartbeat = (curMilli - lastHeartbeatMilli) > heartbeatPeriodMilli;
lesmin 0:fdbd2c6947ea 428
lesmin 0:fdbd2c6947ea 429 if (!isSensing) {
lesmin 0:fdbd2c6947ea 430 printf("Sensor is off...\r\n");
lesmin 0:fdbd2c6947ea 431 return;
lesmin 0:fdbd2c6947ea 432 }
lesmin 0:fdbd2c6947ea 433
lesmin 0:fdbd2c6947ea 434 #if 1
lesmin 0:fdbd2c6947ea 435 //int mustGwDereg = digitalRead(DEREGISTRATION_GW_SWITCH_PIN);
lesmin 0:fdbd2c6947ea 436 int mustGwDereg = LOW; //lesmin
lesmin 0:fdbd2c6947ea 437
lesmin 0:fdbd2c6947ea 438 if (mustGwDereg == HIGH && regGwCount > 0) {
lesmin 0:fdbd2c6947ea 439 ret = GO_DeReg(GetGWID(), NULL);
lesmin 0:fdbd2c6947ea 440
lesmin 0:fdbd2c6947ea 441 if (ret != GMMP_SUCCESS) {
lesmin 0:fdbd2c6947ea 442 errorln("DeregGwReq Error!!");
lesmin 0:fdbd2c6947ea 443 delay(1000);
lesmin 0:fdbd2c6947ea 444 return;
lesmin 0:fdbd2c6947ea 445 }
lesmin 0:fdbd2c6947ea 446
lesmin 0:fdbd2c6947ea 447 regGwCount--;
lesmin 0:fdbd2c6947ea 448 return;
lesmin 0:fdbd2c6947ea 449 }
lesmin 0:fdbd2c6947ea 450
lesmin 0:fdbd2c6947ea 451 //int mustDevDereg = digitalRead(DEREGISTRATION_DEVICE_SWITCH_PIN);
lesmin 0:fdbd2c6947ea 452 int mustDevDereg = LOW;
lesmin 0:fdbd2c6947ea 453
lesmin 0:fdbd2c6947ea 454 if (mustDevDereg == HIGH && regDevCount > 0) {
lesmin 0:fdbd2c6947ea 455 ret = GO_DeReg(GetGWID(), (char*) deviceId);
lesmin 0:fdbd2c6947ea 456
lesmin 0:fdbd2c6947ea 457 if (ret != GMMP_SUCCESS) {
lesmin 0:fdbd2c6947ea 458 errorln("DeregDevReq Error!!");
lesmin 0:fdbd2c6947ea 459 delay(1000);
lesmin 0:fdbd2c6947ea 460 return;
lesmin 0:fdbd2c6947ea 461 }
lesmin 0:fdbd2c6947ea 462
lesmin 0:fdbd2c6947ea 463 regDevCount--;
lesmin 0:fdbd2c6947ea 464 return;
lesmin 0:fdbd2c6947ea 465 }
lesmin 0:fdbd2c6947ea 466
lesmin 0:fdbd2c6947ea 467 if (mustHeartbeat) {
lesmin 0:fdbd2c6947ea 468 DBG("lastHeartbeatMilli: %d\r\ncurMilli: %d\r\n", lastHeartbeatMilli, curMilli);
lesmin 0:fdbd2c6947ea 469
lesmin 0:fdbd2c6947ea 470 ret = GO_HB(GetGWID());
lesmin 0:fdbd2c6947ea 471
lesmin 0:fdbd2c6947ea 472 if (ret != GMMP_SUCCESS) {
lesmin 0:fdbd2c6947ea 473 errorln("HeartbeatReq Error!!");
lesmin 0:fdbd2c6947ea 474 return;
lesmin 0:fdbd2c6947ea 475 }
lesmin 0:fdbd2c6947ea 476
lesmin 0:fdbd2c6947ea 477 infoln("HeartbeatReq has been sent.");
lesmin 0:fdbd2c6947ea 478
lesmin 0:fdbd2c6947ea 479 lastHeartbeatMilli = curMilli;
lesmin 0:fdbd2c6947ea 480 }
lesmin 0:fdbd2c6947ea 481
lesmin 0:fdbd2c6947ea 482 if (!mustDeliver) {
lesmin 0:fdbd2c6947ea 483 return;
lesmin 0:fdbd2c6947ea 484 }
lesmin 0:fdbd2c6947ea 485 #endif
lesmin 0:fdbd2c6947ea 486
lesmin 0:fdbd2c6947ea 487 temperature = getTemperature();
lesmin 0:fdbd2c6947ea 488
lesmin 0:fdbd2c6947ea 489 memset(sendBuf, 0, BUF_SIZE);
lesmin 0:fdbd2c6947ea 490
lesmin 0:fdbd2c6947ea 491 sprintf(sendBuf, "%.1f", temperature);
lesmin 0:fdbd2c6947ea 492
lesmin 0:fdbd2c6947ea 493 ret = GO_Delivery(GetGWID(), NULL, DELIVERY_COLLECT_DATA, 0x01, sendBuf);
lesmin 0:fdbd2c6947ea 494
lesmin 0:fdbd2c6947ea 495 info("Sent Data: ");
lesmin 0:fdbd2c6947ea 496 infoln(sendBuf);
lesmin 0:fdbd2c6947ea 497 INFO("Sent Data: %s\r\n", sendBuf);
lesmin 0:fdbd2c6947ea 498
lesmin 0:fdbd2c6947ea 499 if (ret != GMMP_SUCCESS) {
lesmin 0:fdbd2c6947ea 500 errorln("DeliveryReq Error!!");
lesmin 0:fdbd2c6947ea 501 return;
lesmin 0:fdbd2c6947ea 502 }
lesmin 0:fdbd2c6947ea 503
lesmin 0:fdbd2c6947ea 504 lastDeliverMilli = curMilli;
lesmin 0:fdbd2c6947ea 505 }
lesmin 0:fdbd2c6947ea 506
lesmin 0:fdbd2c6947ea 507 int main() {
lesmin 0:fdbd2c6947ea 508
lesmin 0:fdbd2c6947ea 509 if( setup() < 0 ) return 0;
lesmin 0:fdbd2c6947ea 510
lesmin 0:fdbd2c6947ea 511 while(1) {
lesmin 0:fdbd2c6947ea 512 loop();
lesmin 0:fdbd2c6947ea 513 }
lesmin 0:fdbd2c6947ea 514 }