SKTelecom_ThingPlug / Mbed 2 deprecated ThingPlug_WiFi_Example_2

Dependencies:   GMMP_mbed NTPClient SNICInterface mbed-rtos mbed

Fork of ThingPlug_WiFi_Example2 by Sangmin Lee

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