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:
116:4eb3c7e945cf
Etisalat and Teleena APN.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xinlei 94:61d44636f020 1 #ifndef REPORTTHREAD_H
xinlei 94:61d44636f020 2 #define REPORTTHREAD_H
xinlei 94:61d44636f020 3 #include "Operation.h"
xinlei 94:61d44636f020 4 #include "SmartRestConf.h"
xinlei 109:2ec12f10ebf4 5 #include "SmartRestSocket.h"
xinlei 109:2ec12f10ebf4 6 #define OPERATION_DICT_SIZE 10
xinlei 109:2ec12f10ebf4 7
xinlei 109:2ec12f10ebf4 8 class OperationDict
xinlei 109:2ec12f10ebf4 9 {
xinlei 109:2ec12f10ebf4 10 public:
xinlei 109:2ec12f10ebf4 11 OperationDict(): count(0) {}
xinlei 109:2ec12f10ebf4 12 const Operation& operator [](unsigned short i) const { return opl[i]; }
xinlei 109:2ec12f10ebf4 13 Operation *set(long id, OperationState state) {
xinlei 116:4eb3c7e945cf 14 short i = count-1;
xinlei 116:4eb3c7e945cf 15 for (; i >= 0; --i) {
xinlei 109:2ec12f10ebf4 16 if (opl[i].identifier == id)
xinlei 109:2ec12f10ebf4 17 break;
xinlei 109:2ec12f10ebf4 18 }
xinlei 116:4eb3c7e945cf 19 if (i >= 0) {
xinlei 109:2ec12f10ebf4 20 opl[i].identifier = id;
xinlei 109:2ec12f10ebf4 21 opl[i].state = state;
xinlei 109:2ec12f10ebf4 22 return &opl[i];
xinlei 109:2ec12f10ebf4 23 } else if (count < OPERATION_DICT_SIZE) {
xinlei 116:4eb3c7e945cf 24 i = count++;
xinlei 109:2ec12f10ebf4 25 opl[i].identifier = id;
xinlei 109:2ec12f10ebf4 26 opl[i].state = state;
xinlei 109:2ec12f10ebf4 27 return &opl[i];
xinlei 109:2ec12f10ebf4 28 } else
xinlei 109:2ec12f10ebf4 29 return NULL;
xinlei 109:2ec12f10ebf4 30 }
xinlei 109:2ec12f10ebf4 31 void clear() { count = 0; }
xinlei 109:2ec12f10ebf4 32 bool full() const { return count >= OPERATION_DICT_SIZE; }
xinlei 109:2ec12f10ebf4 33 unsigned short size() const { return count; }
xinlei 109:2ec12f10ebf4 34 virtual ~OperationDict() {}
xinlei 109:2ec12f10ebf4 35 private:
xinlei 109:2ec12f10ebf4 36 unsigned short count;
xinlei 109:2ec12f10ebf4 37 Operation opl[OPERATION_DICT_SIZE];
xinlei 109:2ec12f10ebf4 38 };
xinlei 94:61d44636f020 39
xinlei 94:61d44636f020 40 class ReportThread
xinlei 94:61d44636f020 41 {
xinlei 94:61d44636f020 42 public:
xinlei 109:2ec12f10ebf4 43 ReportThread(OperationPool& pool) : ipool(pool), dict(), sock(),
xinlei 94:61d44636f020 44 thread(ReportThread::threadWrapper, this) {
xinlei 94:61d44636f020 45 strncpy(uri, "/s", sizeof(uri));
xinlei 94:61d44636f020 46 }
xinlei 101:dbcd3bc51758 47 virtual ~ReportThread() { }
xinlei 94:61d44636f020 48 void threadFunc();
xinlei 94:61d44636f020 49 static void threadWrapper(const void *p) { ((ReportThread*)p)->threadFunc(); }
xinlei 94:61d44636f020 50 private:
xinlei 94:61d44636f020 51 char uri[4];
xinlei 94:61d44636f020 52 OperationPool& ipool;
xinlei 109:2ec12f10ebf4 53 OperationDict dict;
xinlei 94:61d44636f020 54 char buf[SMARTREST_SIZE];
xinlei 106:c61f0d62b625 55 char buf2[SMARTREST_BODY_SIZE];
xinlei 94:61d44636f020 56 SmartRestSocket sock;
xinlei 94:61d44636f020 57 Thread thread;
xinlei 94:61d44636f020 58 };
xinlei 94:61d44636f020 59
xinlei 94:61d44636f020 60 #endif /* REPORTTHREAD_H */