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