Beamlib  3.0.1
This is the Beam C++ class library.
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 
27 class BFifoCircPos {
28 public:
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);
42 private:
43  uint32_t osize;
44  uint32_t opos;
45 };
46 
48 template <class Type> class BFifoCirc {
49 public:
50  enum { defaultSize = 1024 };
51 
52  BFifoCirc(uint32_t size = defaultSize);
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 
78 protected:
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
BFifoCircPos(uint32_t size)
Definition: BFifoCirc.cpp:19
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)
uint32_t size()
Return the buffers actual size.
Type * odata
Definition: BFifoCirc.h:86
Type * readData()
Pointer to raw data.
@ defaultSize
Definition: BFifoCirc.h:50
BError write(const Type *data, uint32_t numFifoSamples)
Writes the data to the buffer. Blocks until complete.
Type * writeData()
Return a pointer to the current start of the buffer.
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.
uint32_t readAvailable()
Returns the number of bytes of data available.
Type & operator[](int pos)
Direct access to read samples in buffer.
Mutex class. Note these are recursive Mutexes and so you need to make sure the number of unlocks equa...
Definition: BMutex.h:14