rogue
Loading...
Searching...
No Matches
InverterV2.cpp
Go to the documentation of this file.
1
17#include "rogue/Directives.h"
18
20
21#include <stdint.h>
22
23#include <cmath>
24#include <memory>
25#include <thread>
26
27#include "rogue/GilRelease.h"
28#include "rogue/Logging.h"
36
39
40#ifndef NO_PYTHON
41 #include <boost/python.hpp>
42namespace bp = boost::python;
43#endif
44
46rpb::InverterV2Ptr rpb::InverterV2::create() {
47 rpb::InverterV2Ptr p = std::make_shared<rpb::InverterV2>();
48 return (p);
49}
50
52void rpb::InverterV2::setup_python() {
53#ifndef NO_PYTHON
54 bp::class_<rpb::InverterV2, rpb::InverterV2Ptr, bp::bases<ris::Master, ris::Slave>, boost::noncopyable>(
55 "InverterV2",
56 bp::init<>());
57#endif
58}
59
61rpb::InverterV2::InverterV2() : ris::Master(), ris::Slave() {}
62
64rpb::InverterV2::~InverterV2() {}
65
67void rpb::InverterV2::acceptFrame(ris::FramePtr frame) {
68 rpb::CoreV2 core;
69 rpb::DataPtr data;
70 uint32_t x;
71
72 // Lock frame
74 ris::FrameLockPtr lock = frame->lock();
75
76 core.processFrame(frame);
77
78 // Must have at least one record
79 if (core.count() == 0) return;
80
81 // Copy first tail to head
82 std::memcpy(core.beginHeader().ptr(), core.beginTail(0).ptr(), core.headerSize());
83
84 // Copy remaining tails
85 for (x = 1; x < core.count(); x++)
86 std::memcpy(core.beginTail(x - 1).ptr(), core.beginTail(x).ptr(), core.headerSize());
87
88 // Remove last tail from frame
89 frame->adjustPayload(-1 * core.headerSize());
90
91 // Send the frame
92 lock->unlock();
93 sendFrame(frame);
94}
RAII helper that releases the Python GIL for a scope.
Definition GilRelease.h:36
uint8_t * ptr() const
Returns pointer to byte at current iterator position.
Parser for SLAC AXI Batcher v2 super-frames.
Definition CoreV2.h:58
uint32_t count()
Returns number of parsed records.
Definition CoreV2.cpp:83
rogue::interfaces::stream::FrameIterator beginTail(uint32_t index)
Returns iterator to beginning of a parsed record tail.
Definition CoreV2.cpp:108
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
rogue::interfaces::stream::FrameIterator beginHeader()
Returns iterator to beginning of parsed header.
Definition CoreV2.cpp:93
std::shared_ptr< rogue::interfaces::stream::Frame > FramePtr
Shared pointer alias for Frame.
Definition Frame.h:549
std::shared_ptr< rogue::interfaces::stream::FrameLock > FrameLockPtr
Shared pointer alias for FrameLock.
Definition FrameLock.h:110
std::shared_ptr< rogue::protocols::batcher::InverterV2 > InverterV2Ptr
Definition InverterV2.h:93
std::shared_ptr< rogue::protocols::batcher::Data > DataPtr
Definition Data.h:148