Own fork of MbedSmartRestMain

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Cumulocity Official

Committer:
vwochnik
Date:
Wed Oct 29 21:09:29 2014 +0000
Revision:
62:86a04c5bda18
Parent:
60:3c822f97fc73
Child:
63:010bbbb4732a
introduced operation store

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vwochnik 59:f96be79feccd 1 #ifndef OPERATIONSTORE_H
vwochnik 59:f96be79feccd 2 #define OPERATIONSTORE_H
vwochnik 59:f96be79feccd 3
vwochnik 62:86a04c5bda18 4 #include <stddef.h>
vwochnik 62:86a04c5bda18 5 #include <stdint.h>
vwochnik 62:86a04c5bda18 6 #include "rtos.h"
vwochnik 62:86a04c5bda18 7
vwochnik 62:86a04c5bda18 8 #define OPERATION_PENDING 0
vwochnik 62:86a04c5bda18 9 #define OPERATION_EXECUTING 1
vwochnik 62:86a04c5bda18 10 #define OPERATION_SUCCESSFUL 2
vwochnik 62:86a04c5bda18 11 #define OPERATION_FAILED 3
vwochnik 59:f96be79feccd 12
vwochnik 62:86a04c5bda18 13 /**
vwochnik 62:86a04c5bda18 14 * Number of operations which can be stored in the OperationStore
vwochnik 62:86a04c5bda18 15 */
vwochnik 62:86a04c5bda18 16 #define OPERATION_STORE_SIZE 128
vwochnik 62:86a04c5bda18 17
vwochnik 62:86a04c5bda18 18 /**
vwochnik 62:86a04c5bda18 19 * OperationStore utilizing a circular buffer for storage.
vwochnik 62:86a04c5bda18 20 */
vwochnik 59:f96be79feccd 21 class OperationStore
vwochnik 59:f96be79feccd 22 {
vwochnik 59:f96be79feccd 23 public:
vwochnik 62:86a04c5bda18 24 OperationStore();
vwochnik 62:86a04c5bda18 25
vwochnik 59:f96be79feccd 26 struct Operation {
vwochnik 60:3c822f97fc73 27 long identifier;
vwochnik 62:86a04c5bda18 28 const char *descriptor;
vwochnik 59:f96be79feccd 29 uint8_t state;
vwochnik 59:f96be79feccd 30 };
vwochnik 62:86a04c5bda18 31
vwochnik 62:86a04c5bda18 32 /**
vwochnik 62:86a04c5bda18 33 * Enqueues a pending-state operation.
vwochnik 62:86a04c5bda18 34 * A defensive copy of the operation is madw.
vwochnik 62:86a04c5bda18 35 * @param operation the operation to enqueue
vwochnik 62:86a04c5bda18 36 * @return true on success, false otherwise
vwochnik 62:86a04c5bda18 37 */
vwochnik 62:86a04c5bda18 38 bool enqueue(Operation&);
vwochnik 62:86a04c5bda18 39
vwochnik 62:86a04c5bda18 40 /**
vwochnik 62:86a04c5bda18 41 * Dequeues a pending-state operation and sets its state to executing.
vwochnik 62:86a04c5bda18 42 * @param operation a reference to write the operation to
vwochnik 62:86a04c5bda18 43 * @return true on success, false otherwise
vwochnik 62:86a04c5bda18 44 */
vwochnik 62:86a04c5bda18 45 bool takePending(Operation&);
vwochnik 62:86a04c5bda18 46
vwochnik 62:86a04c5bda18 47 /**
vwochnik 62:86a04c5bda18 48 * Marks a previously dequeued operation as done.
vwochnik 62:86a04c5bda18 49 * @param operation the operation to mark as done
vwochnik 62:86a04c5bda18 50 * @param successful set whether the operation was successful
vwochnik 62:86a04c5bda18 51 * @return true on success, false otherwise
vwochnik 62:86a04c5bda18 52 */
vwochnik 62:86a04c5bda18 53 bool markAsDone(Operation&, bool);
vwochnik 62:86a04c5bda18 54
vwochnik 62:86a04c5bda18 55 /**
vwochnik 62:86a04c5bda18 56 * Dequeues a done-state operation and removes it from the store.
vwochnik 62:86a04c5bda18 57 * @param operation a reference to write the operation to
vwochnik 62:86a04c5bda18 58 * @return true on success, false otherwise
vwochnik 62:86a04c5bda18 59 */
vwochnik 62:86a04c5bda18 60 bool takeDone(Operation&);
vwochnik 62:86a04c5bda18 61
vwochnik 62:86a04c5bda18 62 /**
vwochnik 62:86a04c5bda18 63 * Retrieves whether the operation store is full.
vwochnik 62:86a04c5bda18 64 * @return true when full, false otherwise
vwochnik 62:86a04c5bda18 65 */
vwochnik 62:86a04c5bda18 66 bool full();
vwochnik 62:86a04c5bda18 67
vwochnik 62:86a04c5bda18 68 /**
vwochnik 62:86a04c5bda18 69 * Retrieves whether the operation store is empty.
vwochnik 62:86a04c5bda18 70 * @return true when empty, false otherwise
vwochnik 62:86a04c5bda18 71 */
vwochnik 62:86a04c5bda18 72 bool empty();
vwochnik 62:86a04c5bda18 73
vwochnik 62:86a04c5bda18 74 protected:
vwochnik 62:86a04c5bda18 75 Operation * get(size_t);
vwochnik 62:86a04c5bda18 76 Operation * getByIdentifier(long);
vwochnik 62:86a04c5bda18 77
vwochnik 62:86a04c5bda18 78 private:
vwochnik 62:86a04c5bda18 79 Operation _store[OPERATION_STORE_SIZE];
vwochnik 62:86a04c5bda18 80 size_t _offset, _count;
vwochnik 62:86a04c5bda18 81 Mutex _mutex;
vwochnik 59:f96be79feccd 82 };
vwochnik 59:f96be79feccd 83
vwochnik 62:86a04c5bda18 84 #endif