88 namespace multisense {
95 void defaultUdpAssembler(utility::BufferStreamWriter& stream,
101 stream.write(dataP, length);
114 std::list<ImageListener*>::const_iterator it;
119 (*it)->dispatch(buffer, header);
130 std::list<LidarListener*>::const_iterator it;
135 (*it)->dispatch(buffer, header);
144 std::list<PpsListener*>::const_iterator it;
149 (*it)->dispatch(header);
159 std::list<ImuListener*>::const_iterator it;
164 (*it)->dispatch(header);
175 std::list<CompressedImageListener*>::const_iterator it;
180 (*it)->dispatch(buffer, header);
190 std::list<GroundSurfaceSplineListener*>::const_iterator it;
195 (*it)->dispatch(header);
205 std::list<AprilTagDetectionListener*>::const_iterator it;
210 (*it)->dispatch(header);
248 const uint32_t maxRange =
static_cast<uint32_t
> (30.0 * 1e3);
403 for(uint32_t i=0; i<imu.
samples.size(); i++) {
429 a.
x = w.
x; a.
y = w.
y; a.
z = w.
z;
479 for (
unsigned int i = 0; i < 2; i++)
487 for (
unsigned int i = 0; i < 6; i++)
509 for (
size_t index = 0 ; index < apriltag.
detections.size() ; ++index)
513 apriltag::Header::ApriltagDetection outgoing;
515 outgoing.family = std::string(incoming.
family);
516 outgoing.id = incoming.
id;
517 outgoing.hamming = incoming.
hamming;
520 for (
unsigned int i = 0; i < 3; i++)
522 for (
unsigned int j = 0; j < 3; j++)
528 outgoing.center[0] = incoming.
center[0];
529 outgoing.center[1] = incoming.
center[1];
531 for (
unsigned int i = 0; i < 4; i++)
533 for (
unsigned int j = 0; j < 2; j++)
535 outgoing.corners[i][j] = incoming.
corners[i][j];
615 CRL_DEBUG(
"unknown message received: id=%d, version=%d\n",
651 stream & messageType;
661 return defaultUdpAssembler;
682 BufferPool::const_iterator it = bP->begin();
683 for(; it != bP->end(); it++)
684 if (
false == (*it)->shared())
687 CRL_EXCEPTION(
"no free RX buffers (%d in use by consumers)\n", bP->size());
700 CRL_CONSTEXPR uint16_t ID_MAX = std::numeric_limits<uint16_t>::max();
714 else if (((wireId & ID_MASK) == ID_LOW) &&
748 #pragma warning (push) 749 #pragma warning (disable : 4267) 756 #pragma warning (pop) 775 const uint8_t *inP =
reinterpret_cast<const uint8_t*
>(
m_incomingBuffer.data());
808 if (0 != header.byteOffset)
842 }
else if (1 == trP->
packets()) {
862 impl *selfP =
reinterpret_cast<impl*
>(userDataP);
875 FD_SET(server, &readSet);
880 struct timeval tv = {0, 200000};
883 const int result = select (1, &readSet, NULL, NULL, &tv);
885 const int result = select (server + 1, &readSet, NULL, NULL, &tv);
897 }
catch (
const std::exception& e) {
899 CRL_DEBUG(
"exception while decoding packet: %s\n", e.what());
std::list< ImageListener * > m_imageListeners
int64_t m_unWrappedRxSeqId
#define CRL_EXCEPTION(fmt,...)
static CRL_CONSTEXPR Type Type_Accelerometer
#define CRL_DEBUG_RAW(fmt)
static CRL_CONSTEXPR IdType ID
static CRL_CONSTEXPR IdType ID
BufferPool m_rxLargeBufferPool
static CRL_CONSTEXPR IdType ID
static CRL_CONSTEXPR IdType ID
void dispatchCompressedImage(utility::BufferStream &buffer, compressed_image::Header &header)
static CRL_CONSTEXPR IdType ID
static CRL_CONSTEXPR DataSource Source_Disparity
std::vector< ApriltagDetection > detections
bool assemble(uint32_t bytes, uint32_t offset, const uint8_t *dataP)
void dispatchGroundSurfaceSpline(ground_surface::Header &header)
UdpAssemblerMap m_udpAssemblerMap
static CRL_CONSTEXPR IdType ID
std::list< PpsListener * > m_ppsListeners
static CRL_CONSTEXPR IdType ID
static CRL_CONSTEXPR IdType ID
std_msgs::Header * header(M &m)
std::list< AprilTagDetectionListener * > m_aprilTagDetectionListeners
DepthCache< int64_t, wire::ImageMeta > m_imageMetaCache
static CRL_CONSTEXPR Type Type_Magnetometer
void dispatch(utility::BufferStreamWriter &buffer)
DepthCache< int64_t, UdpTracker > m_udpTrackerCache
static CRL_CONSTEXPR IdType ID
void dispatchAprilTagDetections(apriltag::Header &header)
UdpAssembler getUdpAssembler(const uint8_t *udpDatagramP, uint32_t length)
bool m_ptpTimeSyncEnabled
static CRL_CONSTEXPR uint16_t HEADER_VERSION
void getImageTime(const WireT *wire, uint32_t &seconds, uint32_t µSeconds)
std::vector< uint8_t > m_incomingBuffer
static CRL_CONSTEXPR IdType ID
static CRL_CONSTEXPR uint32_t RX_POOL_SMALL_BUFFER_SIZE
void signal(wire::IdType id, Status status=Status_Ok)
static CRL_CONSTEXPR IdType ID
void(* UdpAssembler)(utility::BufferStreamWriter &stream, const uint8_t *dataP, uint32_t offset, uint32_t length)
utility::Mutex m_dispatchLock
#define CRL_EXCEPTION_RAW(fmt)
static CRL_CONSTEXPR IdType ID
static CRL_CONSTEXPR uint16_t TYPE_GYRO
static CRL_CONSTEXPR IdType ID
void seek(std::size_t idx)
static CRL_CONSTEXPR uint16_t TYPE_ACCEL
utility::BufferStreamWriter & stream()
static CRL_CONSTEXPR IdType ID
std::list< CompressedImageListener * > m_compressedImageListeners
const int64_t & unwrapSequenceId(uint16_t id)
utility::BufferStreamWriter & findFreeBuffer(uint32_t messageLength)
bool m_networkTimeSyncEnabled
static CRL_CONSTEXPR IdType ID
static CRL_CONSTEXPR IdType ID
std::list< GroundSurfaceSplineListener * > m_groundSurfaceSplineListeners
void toHeaderTime(T nanoSeconds, uint32_t &seconds, uint32_t µSeconds) const
static CRL_CONSTEXPR IdType ID
static CRL_CONSTEXPR uint16_t HEADER_MAGIC
double tagToImageHomography[3][3]
static CRL_CONSTEXPR IdType ID
void dispatchImu(imu::Header &header)
void dispatchPps(pps::Header &header)
Type degreesToRadians(Type const &value)
#define CRL_DEBUG(fmt,...)
std::vector< ImuSample > samples
static CRL_CONSTEXPR uint32_t RX_POOL_LARGE_BUFFER_SIZE
BufferPool m_rxSmallBufferPool
std::list< LidarListener * > m_lidarListeners
utility::TimeStamp sensorToLocalTime(const utility::TimeStamp &sensorTime)
static CRL_CONSTEXPR IdType ID
uint32_t timeMicroSeconds
void * controlPointsDataP
static CRL_CONSTEXPR uint16_t HEADER_GROUP
static CRL_CONSTEXPR IdType ID
static void * rxThread(void *userDataP)
void dispatchLidar(utility::BufferStream &buffer, lidar::Header &header)
std::list< ImuListener * > m_imuListeners
std::vector< utility::BufferStreamWriter * > BufferPool
static CRL_CONSTEXPR IdType ID
static CRL_CONSTEXPR IdType ID
static CRL_CONSTEXPR IdType ID
static CRL_CONSTEXPR uint16_t TYPE_MAG
static CRL_CONSTEXPR IdType ID
static CRL_CONSTEXPR Type Type_Gyroscope
static DataSource sourceWireToApi(wire::SourceType mask)
void dispatchImage(utility::BufferStream &buffer, image::Header &header)
static CRL_CONSTEXPR IdType ID