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:
Mon Aug 08 11:05:57 2016 +0000
Revision:
139:f8ab852e83e7
Parent:
135:c4009ecaf5c0
Etisalat and Teleena APN.

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 94:61d44636f020 8 while (true) {
xinlei 109:2ec12f10ebf4 9 dict.clear();
xinlei 94:61d44636f020 10 osEvent e = ipool.get();
xinlei 94:61d44636f020 11 if (e.status == osEventMail) {
xinlei 94:61d44636f020 12 Operation *op = (Operation*)e.value.p;
xinlei 109:2ec12f10ebf4 13 dict.set(op->identifier, op->state);
xinlei 94:61d44636f020 14 ipool.free(op);
xinlei 109:2ec12f10ebf4 15 while (!dict.full()) {
xinlei 95:010b0f7a0a1a 16 osEvent e = ipool.get(200);
xinlei 95:010b0f7a0a1a 17 if (e.status == osEventMail) {
xinlei 95:010b0f7a0a1a 18 op = (Operation*)e.value.p;
xinlei 109:2ec12f10ebf4 19 dict.set(op->identifier, op->state);
xinlei 95:010b0f7a0a1a 20 ipool.free(op);
xinlei 95:010b0f7a0a1a 21 } else {
xinlei 95:010b0f7a0a1a 22 break;
xinlei 95:010b0f7a0a1a 23 }
xinlei 95:010b0f7a0a1a 24 }
xinlei 109:2ec12f10ebf4 25 int l = 0;
xinlei 109:2ec12f10ebf4 26 for (unsigned short i = 0; i < dict.size(); ++i) {
xinlei 109:2ec12f10ebf4 27 const long id = dict[i].identifier;
xinlei 109:2ec12f10ebf4 28 const OperationState state = dict[i].state;
xinlei 109:2ec12f10ebf4 29 l += snprintf(buf2+l, sizeof(buf2)-l, fmt2, id, strOperationState(state));
xinlei 109:2ec12f10ebf4 30 }
xinlei 99:e369fc75c000 31 l = snprintf(buf, sizeof(buf), fmtSmartRest, uri, l, buf2);
xinlei 109:2ec12f10ebf4 32 for (unsigned i = 0; i < 3; ++i) {
xinlei 122:68217ccb8cd1 33 sock.setBlocking(3000);
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 135:c4009ecaf5c0 38 } else {
xinlei 109:2ec12f10ebf4 39 break;
xinlei 135:c4009ecaf5c0 40 }
xinlei 94:61d44636f020 41 }
xinlei 94:61d44636f020 42 }
xinlei 94:61d44636f020 43 }
xinlei 94:61d44636f020 44 }