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