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