62 #include <boost/python.hpp>
63namespace bp = boost::python;
73void rpb::CombinerV2::setup_python() {
75 bp::class_<rpb::CombinerV2, rpb::CombinerV2Ptr, bp::bases<ris::Master, ris::Slave>, boost::noncopyable>(
78 .def(
"sendBatch", &rpb::CombinerV2::sendBatch)
79 .def(
"getCount", &rpb::CombinerV2::getCount);
84rpb::CombinerV2::CombinerV2() :
ris::Master(),
ris::Slave() {
90rpb::CombinerV2::~CombinerV2() {}
97 std::lock_guard<std::mutex> guard(mtx_);
98 queue_.push_back(frame);
102uint32_t rpb::CombinerV2::getCount() {
103 std::lock_guard<std::mutex> guard(mtx_);
104 return queue_.size();
108void rpb::CombinerV2::sendBatch() {
109 const uint32_t headerSize = 2;
110 const uint32_t tailSize = 7;
112 std::vector<ris::FramePtr> frames;
115 std::lock_guard<std::mutex> guard(mtx_);
116 if (queue_.empty())
return;
121 uint32_t totalSize = headerSize;
122 for (
auto& f : frames) {
123 totalSize += f->getPayload() + tailSize;
130 sFrame->setPayload(totalSize);
135 uint8_t byte0 = 0x02;
140 for (
auto& f : frames) {
142 uint32_t payloadSize = f->getPayload();
153 uint8_t dest = f->getChannel();
154 uint8_t fUser = f->getFirstUser();
155 uint8_t lUser = f->getLastUser();
RAII helper that releases the Python GIL for a scope.
static std::shared_ptr< rogue::Logging > create(const std::string &name, bool quiet=false)
Creates a logger instance.
Random-access byte iterator across a Frame payload.
static void copyFrame(rogue::interfaces::stream::FrameIterator &srcIter, uint32_t size, rogue::interfaces::stream::FrameIterator &dstIter)
Copies bytes between frame iterators.
std::shared_ptr< rogue::interfaces::stream::Frame > FramePtr
Shared pointer alias for Frame.
static void toFrame(rogue::interfaces::stream::FrameIterator &iter, uint32_t size, void *src)
Copies bytes from a source pointer into a frame iterator.
std::shared_ptr< rogue::interfaces::stream::FrameLock > FrameLockPtr
Shared pointer alias for FrameLock.
std::shared_ptr< rogue::protocols::batcher::CombinerV2 > CombinerV2Ptr