mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Wed Sep 30 17:00:09 2015 +0100
Revision:
635:a11c0372f0ba
Parent:
561:f26bb522183d
Synchronized with git revision d29c98dae61be0946ddf3a3c641c7726056f9452

Full URL: https://github.com/mbedmicro/mbed/commit/d29c98dae61be0946ddf3a3c641c7726056f9452/

Added support for SAMW25

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 525:c320967f86b9 1 /* mbed Microcontroller Library
mbed_official 525:c320967f86b9 2 * Copyright (c) 2015 ARM Limited
mbed_official 525:c320967f86b9 3 *
mbed_official 525:c320967f86b9 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 525:c320967f86b9 5 * you may not use this file except in compliance with the License.
mbed_official 525:c320967f86b9 6 * You may obtain a copy of the License at
mbed_official 525:c320967f86b9 7 *
mbed_official 525:c320967f86b9 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 525:c320967f86b9 9 *
mbed_official 525:c320967f86b9 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 525:c320967f86b9 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 525:c320967f86b9 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 525:c320967f86b9 13 * See the License for the specific language governing permissions and
mbed_official 525:c320967f86b9 14 * limitations under the License.
mbed_official 525:c320967f86b9 15 */
mbed_official 525:c320967f86b9 16 #ifndef MBED_CIRCULARBUFFER_H
mbed_official 525:c320967f86b9 17 #define MBED_CIRCULARBUFFER_H
mbed_official 525:c320967f86b9 18
mbed_official 525:c320967f86b9 19 namespace mbed {
mbed_official 525:c320967f86b9 20
mbed_official 525:c320967f86b9 21 /** Templated Circular buffer class
mbed_official 525:c320967f86b9 22 */
mbed_official 525:c320967f86b9 23 template<typename T, uint32_t BufferSize, typename CounterType = uint32_t>
mbed_official 525:c320967f86b9 24 class CircularBuffer {
mbed_official 525:c320967f86b9 25 public:
mbed_official 525:c320967f86b9 26 CircularBuffer() : _head(0), _tail(0), _full(false) {
mbed_official 525:c320967f86b9 27 }
mbed_official 525:c320967f86b9 28
mbed_official 525:c320967f86b9 29 ~CircularBuffer() {
mbed_official 525:c320967f86b9 30 }
mbed_official 525:c320967f86b9 31
mbed_official 525:c320967f86b9 32 /** Push the transaction to the buffer. This overwrites the buffer if it's
mbed_official 525:c320967f86b9 33 * full
mbed_official 525:c320967f86b9 34 *
mbed_official 525:c320967f86b9 35 * @param data Data to be pushed to the buffer
mbed_official 525:c320967f86b9 36 */
mbed_official 525:c320967f86b9 37 void push(const T& data) {
mbed_official 525:c320967f86b9 38 if (full()) {
mbed_official 525:c320967f86b9 39 _tail++;
mbed_official 525:c320967f86b9 40 _tail %= BufferSize;
mbed_official 525:c320967f86b9 41 }
mbed_official 525:c320967f86b9 42 _pool[_head++] = data;
mbed_official 525:c320967f86b9 43 _head %= BufferSize;
mbed_official 525:c320967f86b9 44 if (_head == _tail) {
mbed_official 525:c320967f86b9 45 _full = true;
mbed_official 525:c320967f86b9 46 }
mbed_official 525:c320967f86b9 47 }
mbed_official 525:c320967f86b9 48
mbed_official 525:c320967f86b9 49 /** Pop the transaction from the buffer
mbed_official 525:c320967f86b9 50 *
mbed_official 525:c320967f86b9 51 * @param data Data to be pushed to the buffer
mbed_official 525:c320967f86b9 52 * @return True if the buffer is not empty and data contains a transaction, false otherwise
mbed_official 525:c320967f86b9 53 */
mbed_official 525:c320967f86b9 54 bool pop(T& data) {
mbed_official 525:c320967f86b9 55 if (!empty()) {
mbed_official 525:c320967f86b9 56 data = _pool[_tail++];
mbed_official 525:c320967f86b9 57 _tail %= BufferSize;
mbed_official 525:c320967f86b9 58 _full = false;
mbed_official 525:c320967f86b9 59 return true;
mbed_official 525:c320967f86b9 60 }
mbed_official 525:c320967f86b9 61 return false;
mbed_official 525:c320967f86b9 62 }
mbed_official 525:c320967f86b9 63
mbed_official 525:c320967f86b9 64 /** Check if the buffer is empty
mbed_official 525:c320967f86b9 65 *
mbed_official 525:c320967f86b9 66 * @return True if the buffer is empty, false if not
mbed_official 525:c320967f86b9 67 */
mbed_official 525:c320967f86b9 68 bool empty() {
mbed_official 525:c320967f86b9 69 return (_head == _tail) && !_full;
mbed_official 525:c320967f86b9 70 }
mbed_official 525:c320967f86b9 71
mbed_official 525:c320967f86b9 72 /** Check if the buffer is full
mbed_official 525:c320967f86b9 73 *
mbed_official 525:c320967f86b9 74 * @return True if the buffer is full, false if not
mbed_official 525:c320967f86b9 75 */
mbed_official 525:c320967f86b9 76 bool full() {
mbed_official 525:c320967f86b9 77 return _full;
mbed_official 525:c320967f86b9 78 }
mbed_official 525:c320967f86b9 79
mbed_official 525:c320967f86b9 80 /** Reset the buffer
mbed_official 525:c320967f86b9 81 *
mbed_official 525:c320967f86b9 82 */
mbed_official 525:c320967f86b9 83 void reset() {
mbed_official 525:c320967f86b9 84 _head = 0;
mbed_official 525:c320967f86b9 85 _tail = 0;
mbed_official 525:c320967f86b9 86 _full = false;
mbed_official 525:c320967f86b9 87 }
mbed_official 525:c320967f86b9 88
mbed_official 525:c320967f86b9 89 private:
mbed_official 525:c320967f86b9 90 T _pool[BufferSize];
mbed_official 561:f26bb522183d 91 volatile CounterType _head;
mbed_official 561:f26bb522183d 92 volatile CounterType _tail;
mbed_official 561:f26bb522183d 93 volatile bool _full;
mbed_official 525:c320967f86b9 94 };
mbed_official 525:c320967f86b9 95
mbed_official 525:c320967f86b9 96 }
mbed_official 525:c320967f86b9 97
mbed_official 525:c320967f86b9 98 #endif