demo project

Dependencies:   AX-12A Dynamixel mbed iothub_client EthernetInterface NTPClient ConfigFile SDFileSystem iothub_amqp_transport mbed-rtos proton-c-mbed wolfSSL

Committer:
henryrawas
Date:
Wed Dec 23 18:34:06 2015 +0000
Revision:
4:36a4eceb1b7f
RobotArm plus publish IoTHub status

Who changed what in which revision?

UserRevisionLine numberNew contents of line
henryrawas 4:36a4eceb1b7f 1 /*
henryrawas 4:36a4eceb1b7f 2 Copyright (c) 2015 Jonathan Pickett & Microsoft. Some appropriate open source license.
henryrawas 4:36a4eceb1b7f 3 */
henryrawas 4:36a4eceb1b7f 4
henryrawas 4:36a4eceb1b7f 5 #ifndef __SAFECIRCBUF_H__
henryrawas 4:36a4eceb1b7f 6 #define __SAFECIRCBUF_H__
henryrawas 4:36a4eceb1b7f 7
henryrawas 4:36a4eceb1b7f 8 #include "mbed.h"
henryrawas 4:36a4eceb1b7f 9 #include "rtos.h"
henryrawas 4:36a4eceb1b7f 10
henryrawas 4:36a4eceb1b7f 11 #include <CircularBuffer.h>
henryrawas 4:36a4eceb1b7f 12
henryrawas 4:36a4eceb1b7f 13 template<typename T, uint32_t BufferSize, typename CounterType = uint32_t>
henryrawas 4:36a4eceb1b7f 14 class SafeCircBuf
henryrawas 4:36a4eceb1b7f 15 {
henryrawas 4:36a4eceb1b7f 16 public:
henryrawas 4:36a4eceb1b7f 17 SafeCircBuf() {
henryrawas 4:36a4eceb1b7f 18 }
henryrawas 4:36a4eceb1b7f 19
henryrawas 4:36a4eceb1b7f 20 ~SafeCircBuf() {
henryrawas 4:36a4eceb1b7f 21 }
henryrawas 4:36a4eceb1b7f 22
henryrawas 4:36a4eceb1b7f 23 /** Push the transaction to the buffer. This overwrites the buffer if it's
henryrawas 4:36a4eceb1b7f 24 * full
henryrawas 4:36a4eceb1b7f 25 *
henryrawas 4:36a4eceb1b7f 26 * @param data Data to be pushed to the buffer
henryrawas 4:36a4eceb1b7f 27 */
henryrawas 4:36a4eceb1b7f 28 void push(const T& data) {
henryrawas 4:36a4eceb1b7f 29 _mutex.lock();
henryrawas 4:36a4eceb1b7f 30 _circBuf.push(data);
henryrawas 4:36a4eceb1b7f 31 _mutex.unlock();
henryrawas 4:36a4eceb1b7f 32 }
henryrawas 4:36a4eceb1b7f 33
henryrawas 4:36a4eceb1b7f 34 /** Pop the transaction from the buffer
henryrawas 4:36a4eceb1b7f 35 *
henryrawas 4:36a4eceb1b7f 36 * @param data Data to be pushed to the buffer
henryrawas 4:36a4eceb1b7f 37 * @return True if the buffer is not empty and data contains a transaction, false otherwise
henryrawas 4:36a4eceb1b7f 38 */
henryrawas 4:36a4eceb1b7f 39 bool pop(T& data) {
henryrawas 4:36a4eceb1b7f 40 bool rc;
henryrawas 4:36a4eceb1b7f 41 _mutex.lock();
henryrawas 4:36a4eceb1b7f 42 rc = _circBuf.pop(data);
henryrawas 4:36a4eceb1b7f 43 _mutex.unlock();
henryrawas 4:36a4eceb1b7f 44 return rc;
henryrawas 4:36a4eceb1b7f 45 }
henryrawas 4:36a4eceb1b7f 46
henryrawas 4:36a4eceb1b7f 47 /** Check if the buffer is empty
henryrawas 4:36a4eceb1b7f 48 *
henryrawas 4:36a4eceb1b7f 49 * @return True if the buffer is empty, false if not
henryrawas 4:36a4eceb1b7f 50 */
henryrawas 4:36a4eceb1b7f 51 bool empty() {
henryrawas 4:36a4eceb1b7f 52 bool rc;
henryrawas 4:36a4eceb1b7f 53 _mutex.lock();
henryrawas 4:36a4eceb1b7f 54 rc = _circBuf.empty();
henryrawas 4:36a4eceb1b7f 55 _mutex.unlock();
henryrawas 4:36a4eceb1b7f 56 return rc;
henryrawas 4:36a4eceb1b7f 57 }
henryrawas 4:36a4eceb1b7f 58
henryrawas 4:36a4eceb1b7f 59 /** Check if the buffer is full
henryrawas 4:36a4eceb1b7f 60 *
henryrawas 4:36a4eceb1b7f 61 * @return True if the buffer is full, false if not
henryrawas 4:36a4eceb1b7f 62 */
henryrawas 4:36a4eceb1b7f 63 bool full() {
henryrawas 4:36a4eceb1b7f 64 bool rc;
henryrawas 4:36a4eceb1b7f 65 _mutex.lock();
henryrawas 4:36a4eceb1b7f 66 rc = _circBuf.full();
henryrawas 4:36a4eceb1b7f 67 _mutex.unlock();
henryrawas 4:36a4eceb1b7f 68 return rc;
henryrawas 4:36a4eceb1b7f 69 }
henryrawas 4:36a4eceb1b7f 70
henryrawas 4:36a4eceb1b7f 71 /** Reset the buffer
henryrawas 4:36a4eceb1b7f 72 *
henryrawas 4:36a4eceb1b7f 73 */
henryrawas 4:36a4eceb1b7f 74 void reset() {
henryrawas 4:36a4eceb1b7f 75 _mutex.lock();
henryrawas 4:36a4eceb1b7f 76 _circBuf.reset();
henryrawas 4:36a4eceb1b7f 77 _mutex.unlock();
henryrawas 4:36a4eceb1b7f 78 }
henryrawas 4:36a4eceb1b7f 79
henryrawas 4:36a4eceb1b7f 80 private:
henryrawas 4:36a4eceb1b7f 81 Mutex _mutex;
henryrawas 4:36a4eceb1b7f 82 CircularBuffer<T, BufferSize, CounterType> _circBuf;
henryrawas 4:36a4eceb1b7f 83 };
henryrawas 4:36a4eceb1b7f 84
henryrawas 4:36a4eceb1b7f 85 #endif