mbed-os5 only for TYBLE16
Dependents: TYBLE16_simple_data_logger TYBLE16_MP3_Air
Diff: drivers/internal/ByteBuffer.h
- Revision:
- 1:9db0e321a9f4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/drivers/internal/ByteBuffer.h Tue Dec 31 06:02:27 2019 +0000 @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2018-2019, Arm Limited and affiliates. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef BYTE_BUFFER_H +#define BYTE_BUFFER_H + +#include <stdint.h> + +/** + * \defgroup drivers_ByteBuffer ByteBuffer class + * \ingroup drivers-internal-api-usb + * @{ + */ +class ByteBuffer { +public: + + /** + * Create a byte buffer of the given size + * + * @param size Number of bytes this buffer can hold + */ + ByteBuffer(uint32_t size = 0); + + /** + * Delete this byte buffer + */ + ~ByteBuffer(); + + /** + * Set the size of the buffer + * + * Buffer contents are reset. + * + * @param size New buffer size + */ + void resize(uint32_t size); + + /** + * Add a single byte to this buffer + * + * There must be enough space in the buffer or the behavior is undefined. + * + * @param data byte to add + */ + void push(uint8_t data); + + /** + * Write a block of data to this ByteBuffer + * + * There must be enough space in the ByteBuffer or the behavior is undefined. + * + * @param data Block of data to write + * @param size Size of data to write + */ + void write(uint8_t *data, uint32_t size); + + /** + * Remove a byte from this buffer + * + * @return data byte + */ + uint8_t pop(); + + /** + * Read a block of data from this ByteBuffer into a buffer pointed by 'data' + * + * There must be enough data in the ByteBuffer or the behavior is undefined. + * + * @param data Block of data to read + * @param size Size of data to read + */ + void read(uint8_t *data, uint32_t size); + + /** + * Return the number bytes in this byte buffer + * + * @return Number of used bytes + */ + uint32_t size(); + + /** + * Return the number of additional bytes this buffer can hold + * + * @return Number of free bytes + */ + uint32_t free(); + + /** + * Check if this byte buffer is full + * + * @return true if full, false otherwise + */ + bool full(); + + /** + * Check if this byte buffer is empty + * + * @return true if empty, false otherwise + */ + bool empty(); + +private: + + uint32_t _head; + uint32_t _tail; + uint32_t _size; + uint8_t *_buf; +}; + +/** @}*/ + +#endif