Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: GMMP_mbed NTPClient SNICInterface mbed-rtos mbed
Fork of ThingPlug_WiFi_Example2 by
main.cpp@7:e4d6b2fc3ba7, 2015-08-12 (annotated)
- Committer:
- lesmin
- Date:
- Wed Aug 12 12:58:49 2015 +0000
- Revision:
- 7:e4d6b2fc3ba7
- Parent:
- 6:d4016c23c8be
- Child:
- 8:c7080774d329
applied recent version of GMMP_mbed
Who changed what in which revision?
| 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:d4016c23c8be | 8 | #ifdef USE_SNIC_WIFI |
| lesmin | 6:d4016c23c8be | 9 | #include "SNIC_WifiInterface.h" |
| lesmin | 6:d4016c23c8be | 10 | C_SNIC_WifiInterface wifi( D8, D2, NC, NC, D3); |
| lesmin | 6:d4016c23c8be | 11 | #endif//USE_SNIC_WIFI |
| lesmin | 6:d4016c23c8be | 12 | |
| lesmin | 6:d4016c23c8be | 13 | #ifdef USE_WIZNET_W5500 |
| lesmin | 6:d4016c23c8be | 14 | #include "WIZnetInterface.h" |
| lesmin | 6:d4016c23c8be | 15 | WIZnetInterface ethernet(PA_7, PA_6, PA_5, PB_6, PA_9);//scs(PB_6), nRESET(PA_9); // reset pin is dummy, don't affect any pin of WIZ550io |
| lesmin | 6:d4016c23c8be | 16 | #endif//USE_WIZNET_W5500 |
| lesmin | 6:d4016c23c8be | 17 | |
| lesmin | 0:fdbd2c6947ea | 18 | /** |
| lesmin | 0:fdbd2c6947ea | 19 | * GMMP Test Code |
| lesmin | 0:fdbd2c6947ea | 20 | */ |
| lesmin | 0:fdbd2c6947ea | 21 | |
| lesmin | 0:fdbd2c6947ea | 22 | #include "GMMP.h" |
| lesmin | 0:fdbd2c6947ea | 23 | |
| lesmin | 0:fdbd2c6947ea | 24 | #define USER_CONTROL_LED 0x80 |
| lesmin | 0:fdbd2c6947ea | 25 | |
| lesmin | 0:fdbd2c6947ea | 26 | #define HIGH 0x1 |
| lesmin | 0:fdbd2c6947ea | 27 | #define LOW 0x0 |
| lesmin | 0:fdbd2c6947ea | 28 | |
| lesmin | 1:468ac9167975 | 29 | byte serverIp[4] = THINGPLUG_GMMP_IP_ADDR; |
| lesmin | 0:fdbd2c6947ea | 30 | const int nServerPort = THINGPLUG_GMMP_PORT_NUM; |
| lesmin | 0:fdbd2c6947ea | 31 | const char* pszDomainCode = THINGPLUG_GMMP_SERVICE_NAME; |
| lesmin | 0:fdbd2c6947ea | 32 | const char* pszGWAuthID = THINGPLUG_GMMP_DEVICE_SERIAL_NUM; |
| lesmin | 0:fdbd2c6947ea | 33 | const char* pszGWMFID = THINGPLUG_GMMP_DEVICE_MANUFACTURER_ID; |
| lesmin | 0:fdbd2c6947ea | 34 | const char* pszDeviceMFID = THINGPLUG_GMMP_SUB_DEVICE_MANUFACTURER_ID; |
| lesmin | 0:fdbd2c6947ea | 35 | |
| lesmin | 0:fdbd2c6947ea | 36 | char* deviceId[LEN_DEVICE_ID]; |
| lesmin | 0:fdbd2c6947ea | 37 | unsigned char g_mac[6] = DEFAULT_MAC_ADDR; |
| lesmin | 0:fdbd2c6947ea | 38 | |
| lesmin | 0:fdbd2c6947ea | 39 | |
| lesmin | 0:fdbd2c6947ea | 40 | uint32_t lastDeliverMilli = 0; |
| lesmin | 0:fdbd2c6947ea | 41 | uint32_t reportPeriodMilli = 3000; |
| lesmin | 0:fdbd2c6947ea | 42 | uint32_t lastHeartbeatMilli = 0; |
| lesmin | 0:fdbd2c6947ea | 43 | uint32_t heartbeatPeriodMilli = 10000; |
| lesmin | 0:fdbd2c6947ea | 44 | byte regDevCount = 0; |
| lesmin | 0:fdbd2c6947ea | 45 | byte regGwCount = 0; |
| lesmin | 0:fdbd2c6947ea | 46 | |
| lesmin | 0:fdbd2c6947ea | 47 | void startSensingTemp(); |
| lesmin | 0:fdbd2c6947ea | 48 | void delay(int d); |
| lesmin | 0:fdbd2c6947ea | 49 | |
| lesmin | 0:fdbd2c6947ea | 50 | int Recv(GMMPHeader* pstGMMPHeader, void* pBody) |
| lesmin | 0:fdbd2c6947ea | 51 | { |
| lesmin | 0:fdbd2c6947ea | 52 | U8 cMessageType = pstGMMPHeader->ucMessageType; |
| lesmin | 0:fdbd2c6947ea | 53 | |
| lesmin | 0:fdbd2c6947ea | 54 | //info(F("MsgType: ")); |
| lesmin | 0:fdbd2c6947ea | 55 | //infoln(cMessageType); |
| lesmin | 0:fdbd2c6947ea | 56 | INFO("MsgType: %d", cMessageType); |
| lesmin | 0:fdbd2c6947ea | 57 | |
| lesmin | 0:fdbd2c6947ea | 58 | if (cMessageType == OPERATION_GW_REG_RSP) { |
| lesmin | 0:fdbd2c6947ea | 59 | stGwRegistrationRspHdr* pstRspHdr = (stGwRegistrationRspHdr*) pBody; |
| lesmin | 0:fdbd2c6947ea | 60 | |
| lesmin | 0:fdbd2c6947ea | 61 | if (pstRspHdr->ucResultCode != 0x00) { |
| lesmin | 0:fdbd2c6947ea | 62 | //error(F("GWRegRes Error: ")); |
| lesmin | 0:fdbd2c6947ea | 63 | //errorln(pstRspHdr->ucResultCode); |
| lesmin | 0:fdbd2c6947ea | 64 | ERR("GWRegRes Error: %d", pstRspHdr->ucResultCode); |
| lesmin | 0:fdbd2c6947ea | 65 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 66 | return 1; |
| lesmin | 0:fdbd2c6947ea | 67 | } |
| lesmin | 0:fdbd2c6947ea | 68 | |
| lesmin | 0:fdbd2c6947ea | 69 | SetAuthKey((char*) pstGMMPHeader->usAuthKey); |
| lesmin | 0:fdbd2c6947ea | 70 | SetGWID((char*) pstRspHdr->usGWID); |
| lesmin | 0:fdbd2c6947ea | 71 | infoln(("GWRegRes has been received:")); |
| lesmin | 0:fdbd2c6947ea | 72 | infoln(g_szAuthKey); |
| lesmin | 0:fdbd2c6947ea | 73 | infoln(GetGWID()); |
| lesmin | 0:fdbd2c6947ea | 74 | INFO("GWRegRes has been received:\r\n%s\r\n%s", g_szAuthKey, GetGWID()); |
| lesmin | 0:fdbd2c6947ea | 75 | regGwCount++; |
| lesmin | 0:fdbd2c6947ea | 76 | |
| lesmin | 0:fdbd2c6947ea | 77 | int ret = GO_Profile(GetGWID(), NULL, 0); |
| lesmin | 0:fdbd2c6947ea | 78 | |
| lesmin | 0:fdbd2c6947ea | 79 | if (ret != GMMP_SUCCESS) { |
| lesmin | 0:fdbd2c6947ea | 80 | errorln("ReqProfile Err!!"); |
| lesmin | 0:fdbd2c6947ea | 81 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 82 | return 1; |
| lesmin | 0:fdbd2c6947ea | 83 | } |
| lesmin | 0:fdbd2c6947ea | 84 | |
| lesmin | 0:fdbd2c6947ea | 85 | infoln("ProfileReq has been sent."); |
| lesmin | 0:fdbd2c6947ea | 86 | } else if (cMessageType == OPERATION_PROFILE_RSP) { |
| lesmin | 0:fdbd2c6947ea | 87 | stProfileRspHdr* pstRspHdr = (stProfileRspHdr*) pBody; |
| lesmin | 0:fdbd2c6947ea | 88 | |
| lesmin | 0:fdbd2c6947ea | 89 | if (pstRspHdr->ucResultCode != 0x00) { |
| lesmin | 0:fdbd2c6947ea | 90 | errorln("ProfileRes Error!"); |
| lesmin | 0:fdbd2c6947ea | 91 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 92 | return 1; |
| lesmin | 0:fdbd2c6947ea | 93 | } |
| lesmin | 0:fdbd2c6947ea | 94 | |
| lesmin | 0:fdbd2c6947ea | 95 | //infoln(F("ProfileRes has been received:")); |
| lesmin | 0:fdbd2c6947ea | 96 | //infoln(Char2int(pstRspHdr->unHeartbeatPeriod, 4)); |
| lesmin | 0:fdbd2c6947ea | 97 | //infoln(Char2int(pstRspHdr->unReportOffset, 4)); |
| lesmin | 0:fdbd2c6947ea | 98 | //infoln(Char2int(pstRspHdr->unReportPeriod, 4)); |
| lesmin | 0:fdbd2c6947ea | 99 | //infoln(Char2int(pstRspHdr->unResponseTimeout, 4)); |
| lesmin | 0:fdbd2c6947ea | 100 | INFO("ProfileRes has been received:\r\n%d\r\n%d\r\n%d\r\n%d", |
| lesmin | 0:fdbd2c6947ea | 101 | Char2int(pstRspHdr->unHeartbeatPeriod, 4), |
| lesmin | 0:fdbd2c6947ea | 102 | Char2int(pstRspHdr->unReportOffset, 4), |
| lesmin | 0:fdbd2c6947ea | 103 | Char2int(pstRspHdr->unReportPeriod, 4), |
| lesmin | 0:fdbd2c6947ea | 104 | Char2int(pstRspHdr->unResponseTimeout,4) ); |
| lesmin | 0:fdbd2c6947ea | 105 | /* 주기값 재설정 |
| lesmin | 0:fdbd2c6947ea | 106 | pstRspHdr->unHeartbeatPeriod; |
| lesmin | 0:fdbd2c6947ea | 107 | pstRspHdr->unReportOffset; |
| lesmin | 0:fdbd2c6947ea | 108 | pstRspHdr->unReportPeriod; |
| lesmin | 0:fdbd2c6947ea | 109 | pstRspHdr->unResponseTimeout; |
| lesmin | 0:fdbd2c6947ea | 110 | */ |
| lesmin | 0:fdbd2c6947ea | 111 | |
| lesmin | 0:fdbd2c6947ea | 112 | reportPeriodMilli = Char2int(pstRspHdr->unReportPeriod, 4) * 1000 * 60; |
| lesmin | 0:fdbd2c6947ea | 113 | //reportPeriodMilli = Char2int(pstRspHdr->unReportPeriod, 4) * 300; |
| lesmin | 0:fdbd2c6947ea | 114 | heartbeatPeriodMilli = Char2int(pstRspHdr->unHeartbeatPeriod, 4) * 1000 * 60; |
| lesmin | 0:fdbd2c6947ea | 115 | |
| lesmin | 0:fdbd2c6947ea | 116 | long nHeartBeat = Char2int((char*) pstRspHdr->unHeartbeatPeriod, sizeof(pstGMMPHeader->usTID)); //수신받은 Heartbeat 주기 값을 확인. |
| lesmin | 0:fdbd2c6947ea | 117 | |
| lesmin | 0:fdbd2c6947ea | 118 | //Profile 요청 수신 값에 Heartbeat 주기 값으로 변경 |
| lesmin | 0:fdbd2c6947ea | 119 | if (nHeartBeat > 0) { |
| lesmin | 0:fdbd2c6947ea | 120 | //nTimerSec = nHeartBeat; |
| lesmin | 0:fdbd2c6947ea | 121 | } |
| lesmin | 0:fdbd2c6947ea | 122 | |
| lesmin | 0:fdbd2c6947ea | 123 | int ret = GO_Reg(GetGWID(), pszDeviceMFID); |
| lesmin | 0:fdbd2c6947ea | 124 | |
| lesmin | 0:fdbd2c6947ea | 125 | if (ret != GMMP_SUCCESS) { |
| lesmin | 0:fdbd2c6947ea | 126 | errorln("DevRegReq Err!!"); |
| lesmin | 0:fdbd2c6947ea | 127 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 128 | return 1; |
| lesmin | 0:fdbd2c6947ea | 129 | } |
| lesmin | 0:fdbd2c6947ea | 130 | |
| lesmin | 0:fdbd2c6947ea | 131 | infoln("DevRegReq has been sent."); |
| lesmin | 0:fdbd2c6947ea | 132 | } else if (cMessageType == OPERATION_DEVICE_REG_RSP) { |
| lesmin | 0:fdbd2c6947ea | 133 | stDeviceRegistrationRspHdr* pstRspHdr = (stDeviceRegistrationRspHdr*) pBody; |
| lesmin | 0:fdbd2c6947ea | 134 | |
| lesmin | 0:fdbd2c6947ea | 135 | if (pstRspHdr->ucResultCode != 0x00) { |
| lesmin | 0:fdbd2c6947ea | 136 | errorln("DevRegRes Error!"); |
| lesmin | 0:fdbd2c6947ea | 137 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 138 | return 1; |
| lesmin | 0:fdbd2c6947ea | 139 | } |
| lesmin | 0:fdbd2c6947ea | 140 | |
| lesmin | 0:fdbd2c6947ea | 141 | if (strlen((char*) pstRspHdr->usDeviceID) <= 0) { |
| lesmin | 0:fdbd2c6947ea | 142 | errorln("No DeviceID!"); |
| lesmin | 0:fdbd2c6947ea | 143 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 144 | return 1; |
| lesmin | 0:fdbd2c6947ea | 145 | } |
| lesmin | 0:fdbd2c6947ea | 146 | |
| lesmin | 0:fdbd2c6947ea | 147 | int len = strlen((char*) pstRspHdr->usDeviceID); |
| lesmin | 0:fdbd2c6947ea | 148 | memset(deviceId, 0, LEN_DEVICE_ID); |
| lesmin | 0:fdbd2c6947ea | 149 | memcpy(deviceId, pstRspHdr->usDeviceID, len); |
| lesmin | 0:fdbd2c6947ea | 150 | infoln("DevRegRes has been received:"); |
| lesmin | 0:fdbd2c6947ea | 151 | infoln((char*) deviceId); |
| lesmin | 0:fdbd2c6947ea | 152 | regDevCount++; |
| lesmin | 0:fdbd2c6947ea | 153 | |
| lesmin | 0:fdbd2c6947ea | 154 | } else if (cMessageType == OPERATION_DELIVERY_RSP) { |
| lesmin | 0:fdbd2c6947ea | 155 | stPacketDeliveryRspHdr* pstRspHdr = (stPacketDeliveryRspHdr*) pBody; |
| lesmin | 0:fdbd2c6947ea | 156 | |
| lesmin | 0:fdbd2c6947ea | 157 | if (pstRspHdr->ucResultCode != 0x00) { |
| lesmin | 0:fdbd2c6947ea | 158 | // errorln("DeliverRes Err!!"); |
| lesmin | 0:fdbd2c6947ea | 159 | ERR("DeliverRes Err(0x%2x)!!", pstRspHdr->ucResultCode); //lesmin |
| lesmin | 0:fdbd2c6947ea | 160 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 161 | return 1; |
| lesmin | 0:fdbd2c6947ea | 162 | } |
| lesmin | 0:fdbd2c6947ea | 163 | |
| lesmin | 0:fdbd2c6947ea | 164 | infoln("DeliveryRes has been received."); |
| lesmin | 0:fdbd2c6947ea | 165 | } else if (pstGMMPHeader->ucMessageType == OPERATION_HEARTBEAT_RSP) { |
| lesmin | 0:fdbd2c6947ea | 166 | //stHeartBeatMsgRspHdr* pstRspHdr = (stHeartBeatMsgRspHdr*) pBody; |
| lesmin | 0:fdbd2c6947ea | 167 | |
| lesmin | 0:fdbd2c6947ea | 168 | infoln("HeartbeatRes has been received."); |
| lesmin | 0:fdbd2c6947ea | 169 | } else if (cMessageType == OPERATION_CONTROL_REQ) { |
| lesmin | 0:fdbd2c6947ea | 170 | stControlReqHdr* pstReqHdr = (stControlReqHdr*) pBody; |
| lesmin | 0:fdbd2c6947ea | 171 | |
| lesmin | 0:fdbd2c6947ea | 172 | infoln("ControlReq has been received."); |
| lesmin | 0:fdbd2c6947ea | 173 | |
| lesmin | 0:fdbd2c6947ea | 174 | char cResult = 0x00; |
| lesmin | 0:fdbd2c6947ea | 175 | |
| lesmin | 0:fdbd2c6947ea | 176 | int len = 0; |
| lesmin | 0:fdbd2c6947ea | 177 | if (pstReqHdr->usMessageBody) { |
| lesmin | 0:fdbd2c6947ea | 178 | len = strlen((char*) pstReqHdr->usMessageBody); |
| lesmin | 0:fdbd2c6947ea | 179 | } |
| lesmin | 0:fdbd2c6947ea | 180 | if (len > 0) { |
| lesmin | 0:fdbd2c6947ea | 181 | info("Control Msg Body: "); |
| lesmin | 0:fdbd2c6947ea | 182 | infoln((char*) pstReqHdr->usMessageBody); |
| lesmin | 0:fdbd2c6947ea | 183 | } |
| lesmin | 0:fdbd2c6947ea | 184 | |
| lesmin | 0:fdbd2c6947ea | 185 | long nTID = Char2int((char*) pstGMMPHeader->usTID, sizeof(pstGMMPHeader->usTID)); |
| lesmin | 0:fdbd2c6947ea | 186 | |
| lesmin | 0:fdbd2c6947ea | 187 | //debug(F("Received TID: ")); |
| lesmin | 0:fdbd2c6947ea | 188 | //debugln(nTID); |
| lesmin | 0:fdbd2c6947ea | 189 | DBG("Received TID: %d\r\n", nTID); |
| lesmin | 0:fdbd2c6947ea | 190 | |
| lesmin | 0:fdbd2c6947ea | 191 | int ret = GO_Control((char*) pstReqHdr->usGWID, (char*) pstReqHdr->usDeviceID, nTID, |
| lesmin | 0:fdbd2c6947ea | 192 | (char)pstReqHdr->ucControlType, cResult); |
| lesmin | 0:fdbd2c6947ea | 193 | |
| lesmin | 0:fdbd2c6947ea | 194 | if (ret != GMMP_SUCCESS) { |
| lesmin | 0:fdbd2c6947ea | 195 | errorln("ControRes Err!!"); |
| lesmin | 0:fdbd2c6947ea | 196 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 197 | return 1; |
| lesmin | 0:fdbd2c6947ea | 198 | } |
| lesmin | 0:fdbd2c6947ea | 199 | |
| lesmin | 0:fdbd2c6947ea | 200 | infoln("ControlRes has been sent."); |
| lesmin | 0:fdbd2c6947ea | 201 | |
| lesmin | 0:fdbd2c6947ea | 202 | //infoln(pstReqHdr->ucControlType); |
| lesmin | 0:fdbd2c6947ea | 203 | INFO("%d\r\n", pstReqHdr->ucControlType); |
| lesmin | 0:fdbd2c6947ea | 204 | |
| lesmin | 0:fdbd2c6947ea | 205 | if (pstReqHdr->ucControlType != USER_CONTROL_LED) { |
| lesmin | 0:fdbd2c6947ea | 206 | ERR("Unknown Control Msg: %d\r\n", pstReqHdr->ucControlType); |
| lesmin | 0:fdbd2c6947ea | 207 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 208 | return 1; |
| lesmin | 0:fdbd2c6947ea | 209 | } |
| lesmin | 0:fdbd2c6947ea | 210 | |
| lesmin | 0:fdbd2c6947ea | 211 | if (pstReqHdr->usMessageBody[0] == '1') { |
| lesmin | 0:fdbd2c6947ea | 212 | myled = 1; |
| lesmin | 0:fdbd2c6947ea | 213 | infoln("LED ON"); |
| lesmin | 0:fdbd2c6947ea | 214 | } else if (pstReqHdr->usMessageBody[0] == '0') { |
| lesmin | 0:fdbd2c6947ea | 215 | myled = 0; |
| lesmin | 0:fdbd2c6947ea | 216 | infoln("LED OFF"); |
| lesmin | 0:fdbd2c6947ea | 217 | } else { |
| lesmin | 0:fdbd2c6947ea | 218 | errorln("Unknown Control Msg Body; it must be '1' or '0'."); |
| lesmin | 0:fdbd2c6947ea | 219 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 220 | return 1; |
| lesmin | 0:fdbd2c6947ea | 221 | } |
| lesmin | 0:fdbd2c6947ea | 222 | |
| lesmin | 0:fdbd2c6947ea | 223 | delay(1000); //msec |
| lesmin | 0:fdbd2c6947ea | 224 | |
| lesmin | 0:fdbd2c6947ea | 225 | ret = GO_Notifi((char*) pstReqHdr->usGWID, (char*) pstReqHdr->usDeviceID, |
| lesmin | 0:fdbd2c6947ea | 226 | (char)pstReqHdr->ucControlType, cResult, (char*) pstReqHdr->usMessageBody, 0); |
| lesmin | 0:fdbd2c6947ea | 227 | |
| lesmin | 0:fdbd2c6947ea | 228 | if (ret != GMMP_SUCCESS) { |
| lesmin | 0:fdbd2c6947ea | 229 | ERR("NotiReq Err: %d\r\n", ret); |
| lesmin | 0:fdbd2c6947ea | 230 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 231 | return 1; |
| lesmin | 0:fdbd2c6947ea | 232 | } |
| lesmin | 0:fdbd2c6947ea | 233 | |
| lesmin | 0:fdbd2c6947ea | 234 | infoln("Control NotiReq has been sent."); |
| lesmin | 0:fdbd2c6947ea | 235 | } else if (cMessageType == OPERATION_NOTIFICATION_RSP) { |
| lesmin | 0:fdbd2c6947ea | 236 | stNotificationRspHdr* pstRspHdr = (stNotificationRspHdr*) pBody; |
| lesmin | 0:fdbd2c6947ea | 237 | |
| lesmin | 0:fdbd2c6947ea | 238 | if (pstRspHdr->ucResultCode != 0x00) { |
| lesmin | 0:fdbd2c6947ea | 239 | //error(F("NotiRes Err: ")); |
| lesmin | 0:fdbd2c6947ea | 240 | //errorln(pstRspHdr->ucResultCode); |
| lesmin | 0:fdbd2c6947ea | 241 | ERR("NotiRes Err: %d\r\n", pstRspHdr->ucResultCode); |
| lesmin | 0:fdbd2c6947ea | 242 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 243 | return 1; |
| lesmin | 0:fdbd2c6947ea | 244 | } |
| lesmin | 0:fdbd2c6947ea | 245 | |
| lesmin | 0:fdbd2c6947ea | 246 | infoln("NotiRes has been received."); |
| lesmin | 0:fdbd2c6947ea | 247 | } else if (cMessageType == OPERATION_GW_DEREG_RSP) { |
| lesmin | 0:fdbd2c6947ea | 248 | stGwRegistrationRspHdr* pstRspHdr = (stGwRegistrationRspHdr*) pBody; |
| lesmin | 0:fdbd2c6947ea | 249 | |
| lesmin | 0:fdbd2c6947ea | 250 | if (pstRspHdr->ucResultCode != 0x00) { |
| lesmin | 0:fdbd2c6947ea | 251 | //error(F("DeregGwRes Err: ")); |
| lesmin | 0:fdbd2c6947ea | 252 | //errorln(pstRspHdr->ucResultCode); |
| lesmin | 0:fdbd2c6947ea | 253 | ERR("DeregGwRes Err: %d\r\n", pstRspHdr->ucResultCode); |
| lesmin | 0:fdbd2c6947ea | 254 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 255 | return 1; |
| lesmin | 0:fdbd2c6947ea | 256 | } |
| lesmin | 0:fdbd2c6947ea | 257 | |
| lesmin | 0:fdbd2c6947ea | 258 | if (strlen((char*) pstRspHdr->usGWID) <= 0) { |
| lesmin | 0:fdbd2c6947ea | 259 | errorln("No GW ID!!"); |
| lesmin | 0:fdbd2c6947ea | 260 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 261 | return 1; |
| lesmin | 0:fdbd2c6947ea | 262 | } |
| lesmin | 0:fdbd2c6947ea | 263 | |
| lesmin | 0:fdbd2c6947ea | 264 | if (strlen((char*) pstGMMPHeader->usAuthKey) <= 0) { |
| lesmin | 0:fdbd2c6947ea | 265 | errorln("No Auth Key!!"); |
| lesmin | 0:fdbd2c6947ea | 266 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 267 | return 1; |
| lesmin | 0:fdbd2c6947ea | 268 | } |
| lesmin | 0:fdbd2c6947ea | 269 | |
| lesmin | 0:fdbd2c6947ea | 270 | infoln("DeregGwRes has been received."); |
| lesmin | 0:fdbd2c6947ea | 271 | } else if (cMessageType == OPERATION_DEVICE_DEREG_RSP) { |
| lesmin | 0:fdbd2c6947ea | 272 | stDeviceRegistrationRspHdr* pstRspHdr = (stDeviceRegistrationRspHdr*) pBody; |
| lesmin | 0:fdbd2c6947ea | 273 | |
| lesmin | 0:fdbd2c6947ea | 274 | if (pstRspHdr->ucResultCode != 0x00) { |
| lesmin | 0:fdbd2c6947ea | 275 | //error(F("DeregDevRes Err: ")); |
| lesmin | 0:fdbd2c6947ea | 276 | //errorln(pstRspHdr->ucResultCode); |
| lesmin | 0:fdbd2c6947ea | 277 | ERR("DeregDevRes Err: %d\r\n", pstRspHdr->ucResultCode); |
| lesmin | 0:fdbd2c6947ea | 278 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 279 | return 1; |
| lesmin | 0:fdbd2c6947ea | 280 | } |
| lesmin | 0:fdbd2c6947ea | 281 | |
| lesmin | 0:fdbd2c6947ea | 282 | if (strlen((char*) pstRspHdr->usDeviceID) <= 0) { |
| lesmin | 0:fdbd2c6947ea | 283 | errorln("No device ID!!"); |
| lesmin | 0:fdbd2c6947ea | 284 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 285 | return 1; |
| lesmin | 0:fdbd2c6947ea | 286 | } |
| lesmin | 0:fdbd2c6947ea | 287 | |
| lesmin | 0:fdbd2c6947ea | 288 | infoln("DeregDevRes has been received."); |
| lesmin | 0:fdbd2c6947ea | 289 | } |
| lesmin | 0:fdbd2c6947ea | 290 | |
| lesmin | 0:fdbd2c6947ea | 291 | free(pBody); |
| lesmin | 0:fdbd2c6947ea | 292 | return 0; |
| lesmin | 0:fdbd2c6947ea | 293 | } |
| lesmin | 0:fdbd2c6947ea | 294 | |
| lesmin | 0:fdbd2c6947ea | 295 | byte isSensing = 0; |
| lesmin | 0:fdbd2c6947ea | 296 | |
| lesmin | 0:fdbd2c6947ea | 297 | void startSensingTemp() |
| lesmin | 0:fdbd2c6947ea | 298 | { |
| lesmin | 0:fdbd2c6947ea | 299 | printf("Sensing started!\r\n"); |
| lesmin | 0:fdbd2c6947ea | 300 | isSensing = 1; |
| lesmin | 0:fdbd2c6947ea | 301 | } |
| lesmin | 0:fdbd2c6947ea | 302 | |
| lesmin | 0:fdbd2c6947ea | 303 | #define BUF_SIZE 10 |
| lesmin | 0:fdbd2c6947ea | 304 | GMMPHeader header; |
| lesmin | 0:fdbd2c6947ea | 305 | void *pBody = NULL; |
| lesmin | 0:fdbd2c6947ea | 306 | char sendBuf[BUF_SIZE]; |
| lesmin | 0:fdbd2c6947ea | 307 | |
| lesmin | 0:fdbd2c6947ea | 308 | Timer g_t; //for Millis() |
| lesmin | 0:fdbd2c6947ea | 309 | |
| lesmin | 0:fdbd2c6947ea | 310 | int setup(void) { |
| lesmin | 0:fdbd2c6947ea | 311 | |
| lesmin | 0:fdbd2c6947ea | 312 | pc.baud(9600); |
| lesmin | 0:fdbd2c6947ea | 313 | |
| lesmin | 0:fdbd2c6947ea | 314 | g_t.start(); |
| lesmin | 0:fdbd2c6947ea | 315 | |
| lesmin | 0:fdbd2c6947ea | 316 | infoln("Start setup()"); |
| lesmin | 0:fdbd2c6947ea | 317 | |
| lesmin | 6:d4016c23c8be | 318 | #ifdef USE_SNIC_WIFI |
| lesmin | 7:e4d6b2fc3ba7 | 319 | int ret = wifi.init(); |
| lesmin | 7:e4d6b2fc3ba7 | 320 | if(ret) { |
| lesmin | 7:e4d6b2fc3ba7 | 321 | printf("WiFi initialization failed!!!\r\n"); |
| lesmin | 7:e4d6b2fc3ba7 | 322 | return -1; |
| lesmin | 7:e4d6b2fc3ba7 | 323 | } |
| lesmin | 6:d4016c23c8be | 324 | |
| lesmin | 6:d4016c23c8be | 325 | wait(0.5); |
| lesmin | 6:d4016c23c8be | 326 | int s = wifi.disconnect(); |
| lesmin | 6:d4016c23c8be | 327 | if( s != 0 ) { |
| lesmin | 6:d4016c23c8be | 328 | return -1; |
| lesmin | 6:d4016c23c8be | 329 | } |
| lesmin | 6:d4016c23c8be | 330 | |
| lesmin | 6:d4016c23c8be | 331 | wait(0.3); |
| lesmin | 6:d4016c23c8be | 332 | // Connect AP |
| lesmin | 6:d4016c23c8be | 333 | wifi.connect( MBED_AP_SSID |
| lesmin | 6:d4016c23c8be | 334 | , strlen(MBED_AP_SSID) |
| lesmin | 6:d4016c23c8be | 335 | , MBED_AP_SECURITY_TYPE |
| lesmin | 6:d4016c23c8be | 336 | , MBED_AP_SECUTIRY_KEY |
| lesmin | 6:d4016c23c8be | 337 | , strlen(MBED_AP_SECUTIRY_KEY) ); |
| lesmin | 6:d4016c23c8be | 338 | wait(0.5); |
| lesmin | 6:d4016c23c8be | 339 | wifi.setIPConfig( true ); //Use DHCP |
| lesmin | 6:d4016c23c8be | 340 | wait(0.5); |
| lesmin | 6:d4016c23c8be | 341 | |
| lesmin | 6:d4016c23c8be | 342 | tagWIFI_STATUS_T wifi_status; |
| lesmin | 6:d4016c23c8be | 343 | if( wifi.getWifiStatus(&wifi_status) ) printf("wifi_status error!\r\n"); |
| lesmin | 6:d4016c23c8be | 344 | |
| lesmin | 6:d4016c23c8be | 345 | printf("MAC Address is %02x:%02x:%02x:%02x:%02x:%02x\r\n", |
| lesmin | 6:d4016c23c8be | 346 | wifi_status.mac_address[0], wifi_status.mac_address[1], wifi_status.mac_address[2], |
| lesmin | 6:d4016c23c8be | 347 | wifi_status.mac_address[3], wifi_status.mac_address[4], wifi_status.mac_address[5]); |
| lesmin | 6:d4016c23c8be | 348 | printf("IP Address is %s\r\n", wifi.getIPAddress()); |
| lesmin | 6:d4016c23c8be | 349 | #endif//USE_SNIC_WIFI |
| lesmin | 6:d4016c23c8be | 350 | |
| lesmin | 6:d4016c23c8be | 351 | #ifdef USE_WIZNET_W5500 |
| lesmin | 6:d4016c23c8be | 352 | //mbed_mac_address((char *)MAC_Addr); //Use mbed mac addres |
| lesmin | 6:d4016c23c8be | 353 | printf("input MAC Address is %02x:%02x:%02x:%02x:%02x:%02x\r\n", |
| lesmin | 6:d4016c23c8be | 354 | g_mac[0], g_mac[1], g_mac[2], g_mac[3], g_mac[4], g_mac[5]); |
| lesmin | 6:d4016c23c8be | 355 | |
| lesmin | 7:e4d6b2fc3ba7 | 356 | int ret = ethernet.init(g_mac); |
| lesmin | 6:d4016c23c8be | 357 | //printf("SPI Initialized \r\n"); |
| lesmin | 6:d4016c23c8be | 358 | //wait(1); // 1 second for stable state |
| lesmin | 6:d4016c23c8be | 359 | |
| lesmin | 6:d4016c23c8be | 360 | printf("W5500 Networking Started \r\n"); |
| lesmin | 6:d4016c23c8be | 361 | //wait(1); // 1 second for stable state |
| lesmin | 6:d4016c23c8be | 362 | |
| lesmin | 7:e4d6b2fc3ba7 | 363 | if (!ret) { |
| lesmin | 6:d4016c23c8be | 364 | printf("Initialized, MAC: %s\r\n", ethernet.getMACAddress()); |
| lesmin | 7:e4d6b2fc3ba7 | 365 | ret = ethernet.connect(); |
| lesmin | 7:e4d6b2fc3ba7 | 366 | if (!ret) { |
| lesmin | 6:d4016c23c8be | 367 | printf("IP: %s, MASK: %s, GW: %s\r\n", |
| lesmin | 6:d4016c23c8be | 368 | ethernet.getIPAddress(), ethernet.getNetworkMask(), ethernet.getGateway()); |
| lesmin | 6:d4016c23c8be | 369 | } else { |
| lesmin | 7:e4d6b2fc3ba7 | 370 | printf("Error ethernet.connect() - ret = %d\r\n", ret); |
| lesmin | 6:d4016c23c8be | 371 | //exit(0); |
| lesmin | 6:d4016c23c8be | 372 | } |
| lesmin | 6:d4016c23c8be | 373 | } else { |
| lesmin | 7:e4d6b2fc3ba7 | 374 | printf("Error ethernet.init() - ret = %d\r\n", ret); |
| lesmin | 6:d4016c23c8be | 375 | //exit(0); |
| lesmin | 6:d4016c23c8be | 376 | } |
| lesmin | 6:d4016c23c8be | 377 | |
| lesmin | 6:d4016c23c8be | 378 | #endif//USE_WIZNET_W5500 |
| lesmin | 6:d4016c23c8be | 379 | |
| lesmin | 0:fdbd2c6947ea | 380 | startSensingTemp(); //lesmin |
| lesmin | 0:fdbd2c6947ea | 381 | |
| lesmin | 0:fdbd2c6947ea | 382 | if ( Initialize(serverIp, nServerPort, pszDomainCode, pszGWAuthID, g_mac) ) { |
| lesmin | 0:fdbd2c6947ea | 383 | infoln("Initialize failed!"); |
| lesmin | 0:fdbd2c6947ea | 384 | return -1; //lesmin |
| lesmin | 0:fdbd2c6947ea | 385 | } |
| lesmin | 0:fdbd2c6947ea | 386 | |
| lesmin | 0:fdbd2c6947ea | 387 | infoln("SetCallFunction"); |
| lesmin | 0:fdbd2c6947ea | 388 | SetCallFunction(Recv); |
| lesmin | 0:fdbd2c6947ea | 389 | |
| lesmin | 7:e4d6b2fc3ba7 | 390 | ret = GO_Reg(NULL, pszGWMFID); |
| lesmin | 0:fdbd2c6947ea | 391 | |
| lesmin | 0:fdbd2c6947ea | 392 | if (ret != GMMP_SUCCESS) { |
| lesmin | 0:fdbd2c6947ea | 393 | errorln("RegReq Error!!"); |
| lesmin | 0:fdbd2c6947ea | 394 | for(;;); |
| lesmin | 0:fdbd2c6947ea | 395 | } |
| lesmin | 0:fdbd2c6947ea | 396 | |
| lesmin | 0:fdbd2c6947ea | 397 | infoln("GW RegReq has been sent."); |
| lesmin | 0:fdbd2c6947ea | 398 | return 0; |
| lesmin | 0:fdbd2c6947ea | 399 | } |
| lesmin | 0:fdbd2c6947ea | 400 | |
| lesmin | 0:fdbd2c6947ea | 401 | int millis(void) { |
| lesmin | 0:fdbd2c6947ea | 402 | return g_t.read_ms(); |
| lesmin | 0:fdbd2c6947ea | 403 | } |
| lesmin | 0:fdbd2c6947ea | 404 | |
| lesmin | 0:fdbd2c6947ea | 405 | float getTemperature(void) { |
| lesmin | 0:fdbd2c6947ea | 406 | return 33.3; |
| lesmin | 0:fdbd2c6947ea | 407 | } |
| lesmin | 0:fdbd2c6947ea | 408 | |
| lesmin | 0:fdbd2c6947ea | 409 | void delay(int d) { |
| lesmin | 0:fdbd2c6947ea | 410 | float delay_time = d/1000.0; |
| lesmin | 0:fdbd2c6947ea | 411 | wait(delay_time); |
| lesmin | 0:fdbd2c6947ea | 412 | } |
| lesmin | 0:fdbd2c6947ea | 413 | |
| lesmin | 0:fdbd2c6947ea | 414 | void loop(void) |
| lesmin | 0:fdbd2c6947ea | 415 | { |
| lesmin | 0:fdbd2c6947ea | 416 | int ret = GetReadData(&header, &pBody); |
| lesmin | 0:fdbd2c6947ea | 417 | if (ret != E_WOULDBLOCK) { |
| lesmin | 0:fdbd2c6947ea | 418 | //infoln("******** NOT E_WOULDBLOCK *********"); |
| lesmin | 0:fdbd2c6947ea | 419 | //info(F("Free memory size: ")); |
| lesmin | 0:fdbd2c6947ea | 420 | //infoln(freeRam()); |
| lesmin | 0:fdbd2c6947ea | 421 | } |
| lesmin | 0:fdbd2c6947ea | 422 | |
| lesmin | 0:fdbd2c6947ea | 423 | //byte addr[8]; |
| lesmin | 0:fdbd2c6947ea | 424 | float temperature; |
| lesmin | 0:fdbd2c6947ea | 425 | |
| lesmin | 0:fdbd2c6947ea | 426 | int curMilli = millis(); |
| lesmin | 0:fdbd2c6947ea | 427 | byte mustDeliver = (curMilli - lastDeliverMilli) > reportPeriodMilli; |
| lesmin | 0:fdbd2c6947ea | 428 | byte mustHeartbeat = (curMilli - lastHeartbeatMilli) > heartbeatPeriodMilli; |
| lesmin | 0:fdbd2c6947ea | 429 | |
| lesmin | 0:fdbd2c6947ea | 430 | if (!isSensing) { |
| lesmin | 0:fdbd2c6947ea | 431 | printf("Sensor is off...\r\n"); |
| lesmin | 0:fdbd2c6947ea | 432 | return; |
| lesmin | 0:fdbd2c6947ea | 433 | } |
| lesmin | 0:fdbd2c6947ea | 434 | |
| lesmin | 0:fdbd2c6947ea | 435 | #if 1 |
| lesmin | 0:fdbd2c6947ea | 436 | //int mustGwDereg = digitalRead(DEREGISTRATION_GW_SWITCH_PIN); |
| lesmin | 0:fdbd2c6947ea | 437 | int mustGwDereg = LOW; //lesmin |
| lesmin | 0:fdbd2c6947ea | 438 | |
| lesmin | 0:fdbd2c6947ea | 439 | if (mustGwDereg == HIGH && regGwCount > 0) { |
| lesmin | 0:fdbd2c6947ea | 440 | ret = GO_DeReg(GetGWID(), NULL); |
| lesmin | 0:fdbd2c6947ea | 441 | |
| lesmin | 0:fdbd2c6947ea | 442 | if (ret != GMMP_SUCCESS) { |
| lesmin | 0:fdbd2c6947ea | 443 | errorln("DeregGwReq Error!!"); |
| lesmin | 0:fdbd2c6947ea | 444 | delay(1000); |
| lesmin | 0:fdbd2c6947ea | 445 | return; |
| lesmin | 0:fdbd2c6947ea | 446 | } |
| lesmin | 0:fdbd2c6947ea | 447 | |
| lesmin | 0:fdbd2c6947ea | 448 | regGwCount--; |
| lesmin | 0:fdbd2c6947ea | 449 | return; |
| lesmin | 0:fdbd2c6947ea | 450 | } |
| lesmin | 0:fdbd2c6947ea | 451 | |
| lesmin | 0:fdbd2c6947ea | 452 | //int mustDevDereg = digitalRead(DEREGISTRATION_DEVICE_SWITCH_PIN); |
| lesmin | 0:fdbd2c6947ea | 453 | int mustDevDereg = LOW; |
| lesmin | 0:fdbd2c6947ea | 454 | |
| lesmin | 0:fdbd2c6947ea | 455 | if (mustDevDereg == HIGH && regDevCount > 0) { |
| lesmin | 0:fdbd2c6947ea | 456 | ret = GO_DeReg(GetGWID(), (char*) deviceId); |
| lesmin | 0:fdbd2c6947ea | 457 | |
| lesmin | 0:fdbd2c6947ea | 458 | if (ret != GMMP_SUCCESS) { |
| lesmin | 0:fdbd2c6947ea | 459 | errorln("DeregDevReq Error!!"); |
| lesmin | 0:fdbd2c6947ea | 460 | delay(1000); |
| lesmin | 0:fdbd2c6947ea | 461 | return; |
| lesmin | 0:fdbd2c6947ea | 462 | } |
| lesmin | 0:fdbd2c6947ea | 463 | |
| lesmin | 0:fdbd2c6947ea | 464 | regDevCount--; |
| lesmin | 0:fdbd2c6947ea | 465 | return; |
| lesmin | 0:fdbd2c6947ea | 466 | } |
| lesmin | 0:fdbd2c6947ea | 467 | |
| lesmin | 0:fdbd2c6947ea | 468 | if (mustHeartbeat) { |
| lesmin | 0:fdbd2c6947ea | 469 | DBG("lastHeartbeatMilli: %d\r\ncurMilli: %d\r\n", lastHeartbeatMilli, curMilli); |
| lesmin | 0:fdbd2c6947ea | 470 | |
| lesmin | 0:fdbd2c6947ea | 471 | ret = GO_HB(GetGWID()); |
| lesmin | 0:fdbd2c6947ea | 472 | |
| lesmin | 0:fdbd2c6947ea | 473 | if (ret != GMMP_SUCCESS) { |
| lesmin | 0:fdbd2c6947ea | 474 | errorln("HeartbeatReq Error!!"); |
| lesmin | 0:fdbd2c6947ea | 475 | return; |
| lesmin | 0:fdbd2c6947ea | 476 | } |
| lesmin | 0:fdbd2c6947ea | 477 | |
| lesmin | 0:fdbd2c6947ea | 478 | infoln("HeartbeatReq has been sent."); |
| lesmin | 0:fdbd2c6947ea | 479 | |
| lesmin | 0:fdbd2c6947ea | 480 | lastHeartbeatMilli = curMilli; |
| lesmin | 0:fdbd2c6947ea | 481 | } |
| lesmin | 0:fdbd2c6947ea | 482 | |
| lesmin | 0:fdbd2c6947ea | 483 | if (!mustDeliver) { |
| lesmin | 0:fdbd2c6947ea | 484 | return; |
| lesmin | 0:fdbd2c6947ea | 485 | } |
| lesmin | 0:fdbd2c6947ea | 486 | #endif |
| lesmin | 0:fdbd2c6947ea | 487 | |
| lesmin | 0:fdbd2c6947ea | 488 | temperature = getTemperature(); |
| lesmin | 0:fdbd2c6947ea | 489 | |
| lesmin | 0:fdbd2c6947ea | 490 | memset(sendBuf, 0, BUF_SIZE); |
| lesmin | 0:fdbd2c6947ea | 491 | |
| lesmin | 0:fdbd2c6947ea | 492 | sprintf(sendBuf, "%.1f", temperature); |
| lesmin | 0:fdbd2c6947ea | 493 | |
| lesmin | 0:fdbd2c6947ea | 494 | ret = GO_Delivery(GetGWID(), NULL, DELIVERY_COLLECT_DATA, 0x01, sendBuf); |
| lesmin | 0:fdbd2c6947ea | 495 | |
| lesmin | 0:fdbd2c6947ea | 496 | info("Sent Data: "); |
| lesmin | 0:fdbd2c6947ea | 497 | infoln(sendBuf); |
| lesmin | 0:fdbd2c6947ea | 498 | INFO("Sent Data: %s\r\n", sendBuf); |
| lesmin | 0:fdbd2c6947ea | 499 | |
| lesmin | 0:fdbd2c6947ea | 500 | if (ret != GMMP_SUCCESS) { |
| lesmin | 0:fdbd2c6947ea | 501 | errorln("DeliveryReq Error!!"); |
| lesmin | 0:fdbd2c6947ea | 502 | return; |
| lesmin | 0:fdbd2c6947ea | 503 | } |
| lesmin | 0:fdbd2c6947ea | 504 | |
| lesmin | 0:fdbd2c6947ea | 505 | lastDeliverMilli = curMilli; |
| lesmin | 0:fdbd2c6947ea | 506 | } |
| lesmin | 0:fdbd2c6947ea | 507 | |
| lesmin | 0:fdbd2c6947ea | 508 | int main() { |
| lesmin | 0:fdbd2c6947ea | 509 | |
| lesmin | 0:fdbd2c6947ea | 510 | if( setup() < 0 ) return 0; |
| lesmin | 0:fdbd2c6947ea | 511 | |
| lesmin | 0:fdbd2c6947ea | 512 | while(1) { |
| lesmin | 0:fdbd2c6947ea | 513 | loop(); |
| lesmin | 0:fdbd2c6947ea | 514 | } |
| lesmin | 0:fdbd2c6947ea | 515 | } |
