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