ThingPlug GMMP for W5500 Ethernet Shield

Dependencies:   GMMP_W5500 LM75B NTPClient WIZnet_Library mbed-src

Committer:
hkjung
Date:
Mon Aug 10 02:14:08 2015 +0000
Revision:
0:4a49b42d3ccb
ThingPlug GMMP for W5500 Ethernet Shield

Who changed what in which revision?

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