Official reference client implementation for Cumulocity SmartREST on u-blox C027.

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Vincent Wochnik

Committer:
xinlei
Date:
Wed May 13 13:54:17 2015 +0000
Revision:
109:2ec12f10ebf4
Parent:
106:c61f0d62b625
Child:
122:68217ccb8cd1
ReportThread now merges pending state before report.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xinlei 94:61d44636f020 1 #include "ReportThread.h"
xinlei 94:61d44636f020 2 #include "logging.h"
xinlei 94:61d44636f020 3
xinlei 106:c61f0d62b625 4 static const char *fmt2 = "111,%ld,%s\r\n";
xinlei 94:61d44636f020 5
xinlei 94:61d44636f020 6 void ReportThread::threadFunc()
xinlei 94:61d44636f020 7 {
xinlei 106:c61f0d62b625 8 sock.setBlocking(3000);
xinlei 94:61d44636f020 9 while (true) {
xinlei 109:2ec12f10ebf4 10 dict.clear();
xinlei 94:61d44636f020 11 osEvent e = ipool.get();
xinlei 94:61d44636f020 12 if (e.status == osEventMail) {
xinlei 94:61d44636f020 13 Operation *op = (Operation*)e.value.p;
xinlei 109:2ec12f10ebf4 14 dict.set(op->identifier, op->state);
xinlei 94:61d44636f020 15 ipool.free(op);
xinlei 109:2ec12f10ebf4 16 while (!dict.full()) {
xinlei 95:010b0f7a0a1a 17 osEvent e = ipool.get(200);
xinlei 95:010b0f7a0a1a 18 if (e.status == osEventMail) {
xinlei 95:010b0f7a0a1a 19 op = (Operation*)e.value.p;
xinlei 109:2ec12f10ebf4 20 dict.set(op->identifier, op->state);
xinlei 95:010b0f7a0a1a 21 ipool.free(op);
xinlei 95:010b0f7a0a1a 22 } else {
xinlei 95:010b0f7a0a1a 23 break;
xinlei 95:010b0f7a0a1a 24 }
xinlei 95:010b0f7a0a1a 25 }
xinlei 109:2ec12f10ebf4 26 int l = 0;
xinlei 109:2ec12f10ebf4 27 for (unsigned short i = 0; i < dict.size(); ++i) {
xinlei 109:2ec12f10ebf4 28 const long id = dict[i].identifier;
xinlei 109:2ec12f10ebf4 29 const OperationState state = dict[i].state;
xinlei 109:2ec12f10ebf4 30 l += snprintf(buf2+l, sizeof(buf2)-l, fmt2, id, strOperationState(state));
xinlei 109:2ec12f10ebf4 31 }
xinlei 99:e369fc75c000 32 l = snprintf(buf, sizeof(buf), fmtSmartRest, uri, l, buf2);
xinlei 109:2ec12f10ebf4 33 for (unsigned i = 0; i < 3; ++i) {
xinlei 109:2ec12f10ebf4 34 int l2 = sock.sendOnly(buf, l);
xinlei 109:2ec12f10ebf4 35 if (l2 < 0) {
xinlei 109:2ec12f10ebf4 36 aError("Report: op state\n");
xinlei 109:2ec12f10ebf4 37 Thread::wait(3000);
xinlei 109:2ec12f10ebf4 38 } else
xinlei 109:2ec12f10ebf4 39 break;
xinlei 94:61d44636f020 40 }
xinlei 94:61d44636f020 41 }
xinlei 94:61d44636f020 42 }
xinlei 94:61d44636f020 43 }