CallbackHandler.cpp
Go to the documentation of this file.
2 
3 // project
6 
7 namespace dai {
8 
9 void CallbackHandler::setCallback(std::function<std::shared_ptr<RawBuffer>(std::shared_ptr<RawBuffer>)> cb) {
10  callback = std::move(cb);
11 }
12 
13 CallbackHandler::CallbackHandler(std::shared_ptr<XLinkConnection> conn,
14  const std::string& streamName,
15  std::function<std::shared_ptr<RawBuffer>(std::shared_ptr<RawBuffer>)> cb)
16  : connection(std::move(conn)), callback(std::move(cb)) {
17  // creates a thread which reads from queue and writes to xlink
18  t = std::thread([this, streamName]() {
19  try {
20  // open stream with 1B write size (no writing will happen here)
22 
23  while(running) {
24  // Blocking -- parse packet
25  auto packet = stream.readMove();
26  const auto data = StreamMessageParser::parseMessage(&packet);
27 
28  // CALLBACK
29  auto toSend = callback(std::move(data));
30 
31  auto serialized = StreamMessageParser::serializeMessage(toSend);
32 
33  // Write packet back
34  stream.write(serialized);
35  }
36 
37  } catch(const std::exception&) {
38  // TODO(themarpe) - throw an exception
39  assert(0 && "TODO");
40  }
41  });
42 }
43 
45  // detach from thread, because currently no way to unblock underlying XLinkReadData
46  running = false;
47  t.detach();
48 }
49 
50 } // namespace dai
CallbackHandler.hpp
dai::XLinkStream
Definition: XLinkStream.hpp:37
dai::StreamMessageParser::serializeMessage
static std::vector< std::uint8_t > serializeMessage(const std::shared_ptr< const RawBuffer > &data)
Definition: StreamMessageParser.cpp:384
DAI_SPAN_NAMESPACE_NAME::detail::data
constexpr auto data(C &c) -> decltype(c.data())
Definition: span.hpp:177
dai::CallbackHandler::~CallbackHandler
~CallbackHandler()
Definition: CallbackHandler.cpp:44
dai::CallbackHandler::setCallback
void setCallback(std::function< std::shared_ptr< RawBuffer >(std::shared_ptr< RawBuffer >)> cb)
Definition: CallbackHandler.cpp:9
dai::device::XLINK_USB_BUFFER_MAX_SIZE
constexpr static std::uint32_t XLINK_USB_BUFFER_MAX_SIZE
Definition: depthai-shared/include/depthai-shared/xlink/XLinkConstants.hpp:17
dai::XLinkStream::readMove
StreamPacketDesc readMove()
Definition: XLinkStream.cpp:125
StreamMessageParser.hpp
XLinkStream.hpp
dai::CallbackHandler::t
std::thread t
Definition: CallbackHandler.hpp:18
dai::CallbackHandler::connection
std::shared_ptr< XLinkConnection > connection
Definition: CallbackHandler.hpp:20
dai::CallbackHandler::callback
std::function< std::shared_ptr< RawBuffer >std::shared_ptr< RawBuffer >)> callback
Definition: CallbackHandler.hpp:21
dai::CallbackHandler::running
std::atomic< bool > running
Definition: CallbackHandler.hpp:19
dai::XLinkStream::write
void write(const void *data, std::size_t size)
Definition: XLinkStream.cpp:86
std
Definition: Node.hpp:366
dai::CallbackHandler::CallbackHandler
CallbackHandler(std::shared_ptr< XLinkConnection > conn, const std::string &streamName, std::function< std::shared_ptr< RawBuffer >(std::shared_ptr< RawBuffer >)> cb)
Definition: CallbackHandler.cpp:13
dai::StreamMessageParser::parseMessage
static std::shared_ptr< RawBuffer > parseMessage(streamPacketDesc_t *const packet)
Definition: StreamMessageParser.cpp:132
dai
Definition: CameraExposureOffset.hpp:6


depthai
Author(s): Martin Peterlin
autogenerated on Sat Mar 22 2025 02:58:18