Own fork of MbedSmartRestMain
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
operation/OperationStore.h@62:86a04c5bda18, 2014-10-29 (annotated)
- 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?
User | Revision | Line number | New 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 |