rogue
Loading...
Searching...
No Matches
Frame.h
Go to the documentation of this file.
1
17#ifndef __ROGUE_INTERFACES_STREAM_FRAME_H__
18#define __ROGUE_INTERFACES_STREAM_FRAME_H__
19#include "rogue/Directives.h"
20
21#include <stdint.h>
22
23#include <memory>
24#include <mutex>
25#include <thread>
26#include <vector>
27
29
30#ifndef NO_PYTHON
31 #include <boost/python.hpp>
32#endif
33
34namespace rogue {
35namespace interfaces {
36namespace stream {
37
38class Buffer;
39class FrameIterator;
40class FrameLock;
41
56class Frame : public rogue::EnableSharedFromThis<rogue::interfaces::stream::Frame> {
57 friend class Buffer;
58 friend class FrameLock;
59
60 // Interface specific flags
61 uint16_t flags_;
62
63 // Error state
64 uint8_t error_;
65
66 // Channel
67 uint8_t chan_;
68
69 // List of buffers which hold real data
70 std::vector<std::shared_ptr<rogue::interfaces::stream::Buffer> > buffers_;
71
72 // Total size of buffers
73 uint32_t size_;
74
75 // Total payload size
76 uint32_t payload_;
77
78 // Update buffer size counts
79 void updateSizes();
80
81 // Size values dirty flags
82 bool sizeDirty_;
83
84 protected:
85 // Set size values dirty
86 void setSizeDirty();
87
88 // Frame lock
89 std::mutex lock_;
90
91 public:
93 typedef std::vector<std::shared_ptr<rogue::interfaces::stream::Buffer> >::iterator BufferIterator;
94
96 static void setup_python();
97
109 static std::shared_ptr<rogue::interfaces::stream::Frame> create();
110
118 Frame();
119
121 ~Frame();
122
138 std::shared_ptr<rogue::interfaces::stream::FrameLock> lock();
139
152 std::vector<std::shared_ptr<rogue::interfaces::stream::Buffer> >::iterator appendFrame(
153 std::shared_ptr<rogue::interfaces::stream::Frame> frame);
154
165 std::vector<std::shared_ptr<rogue::interfaces::stream::Buffer> >::iterator appendBuffer(
166 std::shared_ptr<rogue::interfaces::stream::Buffer> buff);
167
177 std::vector<std::shared_ptr<rogue::interfaces::stream::Buffer> >::iterator beginBuffer();
178
188 std::vector<std::shared_ptr<rogue::interfaces::stream::Buffer> >::iterator endBuffer();
189
199 uint32_t bufferCount();
200
207 void clear();
208
217 bool isEmpty();
218
229 uint32_t getSize();
230
241 uint32_t getAvailable();
242
250 uint32_t getPayload();
251
260 void setPayload(uint32_t size);
261
273 void minPayload(uint32_t size);
274
285 void adjustPayload(int32_t value);
286
295 void setPayloadFull();
296
298 void setPayloadEmpty();
299
313 uint16_t getFlags();
314
322 void setFlags(uint16_t flags);
323
334 uint8_t getFirstUser();
335
343 void setFirstUser(uint8_t fuser);
344
355 uint8_t getLastUser();
356
364 void setLastUser(uint8_t fuser);
365
378 uint8_t getChannel();
379
387 void setChannel(uint8_t channel);
388
400 uint8_t getError();
401
409 void setError(uint8_t error);
410
426
439
449
459
469
479
480#ifndef NO_PYTHON
481
491 void readPy(boost::python::object p, uint32_t offset);
492
503 boost::python::object getBytearrayPy(uint32_t offset, uint32_t count);
504
513 boost::python::object getMemoryviewPy();
514
524 void writePy(boost::python::object p, uint32_t offset);
525
533 boost::python::object getNumpy(uint32_t offset, uint32_t count);
534
541 void putNumpy(boost::python::object np, uint32_t offset);
542#endif
543
545 void debug();
546};
547
549typedef std::shared_ptr<rogue::interfaces::stream::Frame> FramePtr;
550} // namespace stream
551} // namespace interfaces
552} // namespace rogue
553
554#endif
Typed shared-from-this helper for Rogue classes.
Stream frame buffer container.
Definition Buffer.h:42
Random-access byte iterator across a Frame payload.
Scoped lock wrapper for stream frames.
Definition FrameLock.h:40
Container for one stream frame payload and metadata.
Definition Frame.h:56
std::shared_ptr< rogue::interfaces::stream::FrameLock > lock()
Locks the frame and returns a scoped lock object.
Definition Frame.cpp:65
void setSizeDirty()
Set size values dirty.
Definition Frame.cpp:134
void writePy(boost::python::object p, uint32_t offset)
Writes bytes from a Python bytearray/buffer into the frame.
Definition Frame.cpp:417
void setError(uint8_t error)
Sets frame error status value.
Definition Frame.cpp:307
void setLastUser(uint8_t fuser)
Sets the upper 8-bit user field in flags (SSI/Axi-Stream).
Definition Frame.cpp:296
rogue::interfaces::stream::FrameIterator beginRead()
Returns legacy read-begin iterator.
Definition Frame.cpp:332
rogue::interfaces::stream::FrameIterator endWrite()
Returns legacy write-end iterator.
Definition Frame.cpp:347
boost::python::object getBytearrayPy(uint32_t offset, uint32_t count)
Reads frame bytes into a newly allocated Python bytearray.
Definition Frame.cpp:379
Frame()
Constructs an empty frame.
Definition Frame.cpp:52
rogue::interfaces::stream::FrameIterator beginWrite()
Returns legacy write-begin iterator.
Definition Frame.cpp:342
std::vector< std::shared_ptr< rogue::interfaces::stream::Buffer > >::iterator BufferIterator
Iterator alias for the internal buffer list.
Definition Frame.h:93
uint8_t getChannel()
Returns frame channel value.
Definition Frame.cpp:312
uint32_t getPayload()
Returns current payload size in bytes.
Definition Frame.cpp:165
uint32_t bufferCount()
Returns number of underlying buffers in the frame.
Definition Frame.cpp:103
void setFlags(uint16_t flags)
Sets 16-bit frame flags field.
Definition Frame.cpp:274
uint8_t getError()
Returns frame error status value.
Definition Frame.cpp:302
std::vector< std::shared_ptr< rogue::interfaces::stream::Buffer > >::iterator appendBuffer(std::shared_ptr< rogue::interfaces::stream::Buffer > buff)
Appends one buffer to the end of the frame.
Definition Frame.cpp:70
static void setup_python()
Registers Python bindings for this class.
Definition Frame.cpp:544
uint32_t getAvailable()
Returns remaining available payload space in bytes.
Definition Frame.cpp:154
uint8_t getLastUser()
Returns the upper 8-bit user field from flags (SSI/Axi-Stream).
Definition Frame.cpp:290
void putNumpy(boost::python::object np, uint32_t offset)
Writes NumPy array data into the frame payload.
Definition Frame.cpp:492
static std::shared_ptr< rogue::interfaces::stream::Frame > create()
Creates an empty frame.
Definition Frame.cpp:46
rogue::interfaces::stream::FrameIterator endRead()
Returns legacy read-end iterator.
Definition Frame.cpp:337
std::vector< std::shared_ptr< rogue::interfaces::stream::Buffer > >::iterator beginBuffer()
Returns iterator to first underlying buffer.
Definition Frame.cpp:93
void setPayloadEmpty()
Sets the frame payload size to zero bytes.
Definition Frame.cpp:253
rogue::interfaces::stream::FrameIterator begin()
Returns begin iterator over frame payload.
Definition Frame.cpp:322
std::vector< std::shared_ptr< rogue::interfaces::stream::Buffer > >::iterator appendFrame(std::shared_ptr< rogue::interfaces::stream::Frame > frame)
Appends another frame's buffers to the end of this frame.
Definition Frame.cpp:80
void setPayload(uint32_t size)
Sets payload size in bytes.
Definition Frame.cpp:175
void setPayloadFull()
Sets payload size to full available frame capacity.
Definition Frame.cpp:237
void clear()
Removes all buffers from the frame.
Definition Frame.cpp:108
rogue::interfaces::stream::FrameIterator end()
Returns end iterator over frame payload.
Definition Frame.cpp:327
bool isEmpty()
Returns whether the frame contains no buffers.
Definition Frame.cpp:115
void adjustPayload(int32_t value)
Adjusts payload size by a signed delta.
Definition Frame.cpp:224
void minPayload(uint32_t size)
Expands payload size to at least the passed value.
Definition Frame.cpp:219
std::vector< std::shared_ptr< rogue::interfaces::stream::Buffer > >::iterator endBuffer()
Returns end iterator for underlying buffer list.
Definition Frame.cpp:98
uint8_t getFirstUser()
Returns the lower 8-bit user field from flags (SSI/Axi-Stream).
Definition Frame.cpp:279
~Frame()
Destroys the frame instance.
Definition Frame.cpp:62
void setFirstUser(uint8_t fuser)
Sets the lower 8-bit user field in flags (SSI/Axi-Stream).
Definition Frame.cpp:285
uint32_t getSize()
Returns total raw frame capacity in bytes.
Definition Frame.cpp:144
void setChannel(uint8_t channel)
Sets frame channel value.
Definition Frame.cpp:317
boost::python::object getNumpy(uint32_t offset, uint32_t count)
Reads frame data and returns it as a NumPy uint8 array.
Definition Frame.cpp:446
void debug()
Prints debug information for this frame.
Definition Frame.cpp:584
uint16_t getFlags()
Returns 16-bit frame flags field.
Definition Frame.cpp:269
void readPy(boost::python::object p, uint32_t offset)
Reads frame bytes into a passed Python bytearray/buffer.
Definition Frame.cpp:354
boost::python::object getMemoryviewPy()
Returns a Python memoryview of frame payload data.
Definition Frame.cpp:397
std::shared_ptr< rogue::interfaces::stream::Frame > FramePtr
Shared pointer alias for Frame.
Definition Frame.h:549