rogue
Loading...
Searching...
No Matches
CoreV2.h
Go to the documentation of this file.
1
17#ifndef __ROGUE_PROTOCOLS_BATCHER_CORE_V2_H__
18#define __ROGUE_PROTOCOLS_BATCHER_CORE_V2_H__
19#include "rogue/Directives.h"
20
21#include <stdint.h>
22
23#include <memory>
24#include <thread>
25#include <vector>
26
27#include "rogue/Logging.h"
29
30namespace rogue {
31namespace protocols {
32namespace batcher {
33
34class Data;
35
58class CoreV2 {
59 std::shared_ptr<rogue::Logging> log_;
60
61 // Most recently parsed frame.
62 std::shared_ptr<rogue::interfaces::stream::Frame> frame_;
63
64 // Parsed record descriptors.
65 std::vector<std::shared_ptr<rogue::protocols::batcher::Data> > list_;
66
67 // Parsed super-header size in bytes.
68 uint32_t headerSize_;
69
70 // Parsed per-record tail size in bytes.
71 uint32_t tailSize_;
72
73 // Iterators pointing to each parsed tail.
74 std::vector<rogue::interfaces::stream::FrameIterator> tails_;
75
76 // Parsed frame sequence number.
77 uint32_t seq_;
78
79 public:
81 static void setup_python();
82
93 static std::shared_ptr<rogue::protocols::batcher::CoreV2> create();
94
102 CoreV2();
103
105 ~CoreV2();
106
111 void initSize(uint32_t size);
112
117 uint32_t count();
118
123 uint32_t headerSize();
124
130
136
141 uint32_t tailSize();
142
149
156
162 std::shared_ptr<rogue::protocols::batcher::Data>& record(uint32_t index);
163
168 uint32_t sequence();
169
181 bool processFrame(std::shared_ptr<rogue::interfaces::stream::Frame> frame);
182
184 void reset();
185};
186
187// Convienence
188typedef std::shared_ptr<rogue::protocols::batcher::CoreV2> CoreV2Ptr;
189} // namespace batcher
190} // namespace protocols
191} // namespace rogue
192#endif
Random-access byte iterator across a Frame payload.
Parser for SLAC AXI Batcher v2 super-frames.
Definition CoreV2.h:58
static std::shared_ptr< rogue::protocols::batcher::CoreV2 > create()
Creates a CoreV2 parser instance.
Definition CoreV2.cpp:56
rogue::interfaces::stream::FrameIterator endHeader()
Returns iterator to end of parsed header.
Definition CoreV2.cpp:98
uint32_t count()
Returns number of parsed records.
Definition CoreV2.cpp:83
static void setup_python()
Registers Python bindings for this class.
Definition CoreV2.cpp:62
uint32_t tailSize()
Returns parsed tail size per record.
Definition CoreV2.cpp:103
void initSize(uint32_t size)
Pre-reserves internal record/tail container capacity.
Definition CoreV2.cpp:77
void reset()
Clears parsed frame state and record lists.
Definition CoreV2.cpp:246
CoreV2()
Constructs a CoreV2 parser.
Definition CoreV2.cpp:65
rogue::interfaces::stream::FrameIterator beginTail(uint32_t index)
Returns iterator to beginning of a parsed record tail.
Definition CoreV2.cpp:108
uint32_t sequence()
Returns parsed batch sequence number.
Definition CoreV2.cpp:144
uint32_t headerSize()
Returns parsed super-header size.
Definition CoreV2.cpp:88
bool processFrame(std::shared_ptr< rogue::interfaces::stream::Frame > frame)
Parses a batched frame and populates parser state.
Definition CoreV2.cpp:149
~CoreV2()
Destroys the parser.
Definition CoreV2.cpp:74
rogue::interfaces::stream::FrameIterator endTail(uint32_t index)
Returns iterator to end of a parsed record tail.
Definition CoreV2.cpp:120
std::shared_ptr< rogue::protocols::batcher::Data > & record(uint32_t index)
Returns parsed data record descriptor by index.
Definition CoreV2.cpp:132
rogue::interfaces::stream::FrameIterator beginHeader()
Returns iterator to beginning of parsed header.
Definition CoreV2.cpp:93
std::shared_ptr< rogue::protocols::batcher::CoreV2 > CoreV2Ptr
Definition CoreV2.h:188