Beamlib 3.1.1
This is the Beam C++ class library.
Loading...
Searching...
No Matches
BFifoCirc.h
Go to the documentation of this file.
1/*******************************************************************************
2 * BFifoCirc.h FIFO Buffer Class
3 * T.Barnaby, BEAM Ltd, 2006-02-22
4 * Copyright (c) 2022 All Right Reserved, Beam Ltd, https://www.beam.ltd.uk
5 * For license see LICENSE.txt at the root of the beamlib source tree.
6 *******************************************************************************
7 */
18#ifndef BFifoCirc_H
19#define BFifoCirc_H 1
20
21#include <stdint.h>
22#include <BError.h>
23#include <BCondInt.h>
24#include <BMutex.h>
25
28public:
29 BFifoCircPos(uint32_t size);
30 void setSize(uint32_t size);
31
32 void set(uint32_t pos);
33 uint32_t pos();
34
35 void increment(uint32_t numFifoSamples);
36 uint32_t difference(const BFifoCircPos& pos);
37
38 operator int();
39 void operator+=(uint32_t numFifoSamples);
40 int operator==(const BFifoCircPos& pos);
41 int operator!=(const BFifoCircPos& pos);
42private:
43 uint32_t osize;
44 uint32_t opos;
45};
46
48template <class Type> class BFifoCirc {
49public:
50 enum { defaultSize = 1024 };
51
54
55 uint32_t size();
56 void clear();
57
58 // Data write functions
59 uint32_t writeAvailable();
60 BError writeWaitAvailable(uint32_t numFifoSamples);
61
62 BError write(const Type* data, uint32_t numFifoSamples);
63
64 Type* writeData();
65 void writeDone(uint32_t numFifoSamples);
66
67 // Data read functions
68 uint32_t readAvailable();
69 BError readWaitAvailable(uint32_t numFifoSamples);
70
71 BError read(Type* data, uint32_t numFifoSamples);
72
73 Type* readData();
74 BError readDone(uint32_t numFifoSamples);
75
76 Type& operator[](int pos);
77
78protected:
79 // Functions for internal use
82
84 uint32_t ovmSize;
85 uint32_t osize;
86 Type* odata;
90};
91
92#include <BFifoCirc.inc>
93
94#endif
char data[8]
Definition: BoapMc1.h:2
Thread conditional value.
Definition: BCondInt.h:60
Error return class. This class is used to return the error status from a function....
Definition: BError.h:31
This class implements a pointer into the Fifo's circular buffer.
Definition: BFifoCirc.h:27
void setSize(uint32_t size)
Definition: BFifoCirc.cpp:22
void set(uint32_t pos)
Sets the position.
Definition: BFifoCirc.cpp:26
uint32_t pos()
The current position.
Definition: BFifoCirc.cpp:30
int operator!=(const BFifoCircPos &pos)
Definition: BFifoCirc.cpp:57
void operator+=(uint32_t numFifoSamples)
Definition: BFifoCirc.cpp:49
int operator==(const BFifoCircPos &pos)
Definition: BFifoCirc.cpp:53
uint32_t difference(const BFifoCircPos &pos)
Return the difference between the two pointers.
Definition: BFifoCirc.cpp:38
void increment(uint32_t numFifoSamples)
Increment the pointer by the given value.
Definition: BFifoCirc.cpp:34
This class implements a thread safe FIFO buffer using a binary sized circular memory.
Definition: BFifoCirc.h:48
BCondValue owriteNumFifoSamples
The number of samples in the FIFO.
Definition: BFifoCirc.h:88
void writeDone(uint32_t numFifoSamples)
Update the write pointer.
BMutex olock
Definition: BFifoCirc.h:83
BFifoCircPos oreadPos
Current read position.
Definition: BFifoCirc.h:89
BFifoCirc(uint32_t size=defaultSize)
BError readDone(uint32_t numFifoSamples)
Updates read pointer.
BError mapCircularBuffer(uint32_t size)
Type & operator[](int pos)
Direct access to read samples in buffer.
uint32_t size()
Return the buffers actual size.
Type * odata
Definition: BFifoCirc.h:86
@ defaultSize
Definition: BFifoCirc.h:50
BError write(const Type *data, uint32_t numFifoSamples)
Writes the data to the buffer. Blocks until complete.
BError writeWaitAvailable(uint32_t numFifoSamples)
Wait for the given number of samples.
void unmapCircularBuffer()
uint32_t osize
Definition: BFifoCirc.h:85
BError read(Type *data, uint32_t numFifoSamples)
uint32_t writeAvailable()
Returns the space available to write.
BError readWaitAvailable(uint32_t numFifoSamples)
Wait for given number of samples.
uint32_t ovmSize
Definition: BFifoCirc.h:84
BFifoCircPos owritePos
Current write position.
Definition: BFifoCirc.h:87
void clear()
Clear all of the data in the buffer.
Type * readData()
Pointer to raw data.
uint32_t readAvailable()
Returns the number of bytes of data available.
Type * writeData()
Return a pointer to the current start of the buffer.
Mutex class. Note these are recursive Mutexes and so you need to make sure the number of unlocks equa...
Definition: BMutex.h:14