36 #ifndef _LibMultiSense_details_channel_hh 37 #define _LibMultiSense_details_channel_hh 54 #ifndef WIN32_LEAN_AND_MEAN 55 #define WIN32_LEAN_AND_MEAN 1 62 #include <netinet/ip.h> 65 #ifndef INVALID_SOCKET 66 #define INVALID_SOCKET (-1) 79 namespace multisense {
205 std::vector<imu::Info>& info);
207 std::vector<imu::Config>& c);
209 uint32_t samplesPerMessage,
210 const std::vector<imu::Config>& c);
213 uint32_t& bufferSize);
215 uint32_t bufferSize);
224 const uint8_t *dataP,
228 template <
typename T>
231 uint32_t µSeconds)
const 233 const T oneBillion =
static_cast<T
>(1e9);
235 seconds =
static_cast<uint32_t
>(nanoSeconds / oneBillion);
236 microSeconds =
static_cast<uint32_t
>((nanoSeconds % oneBillion) /
237 static_cast<T>(1000));
240 template <
class WireT>
243 uint32_t µSeconds)
247 toHeaderTime(wire->ptpNanoSeconds, seconds, microSeconds);
253 seconds = wire->timeSeconds;
254 microSeconds = wire->timeMicroSeconds;
259 static_cast<int32_t>(wire->timeMicroSeconds)),
260 seconds, microSeconds);
292 #if __cplusplus > 199711L 293 static_assert(RX_POOL_LARGE_BUFFER_COUNT > IMAGE_META_CACHE_DEPTH,
"Image metadata depth cache too large");
294 static_assert(RX_POOL_LARGE_BUFFER_COUNT > UDP_TRACKER_CACHE_DEPTH,
"UDP depth cache too large");
295 static_assert(RX_POOL_SMALL_BUFFER_COUNT > UDP_TRACKER_CACHE_DEPTH,
"UDP depth cache too large");
309 #if __cplusplus > 199711L 310 static_assert(RX_POOL_LARGE_BUFFER_COUNT > MAX_USER_IMAGE_QUEUE_SIZE,
"Image queue too large");
311 static_assert(RX_POOL_LARGE_BUFFER_COUNT > MAX_USER_LASER_QUEUE_SIZE,
"Laser queue too large");
312 static_assert(RX_POOL_LARGE_BUFFER_COUNT > MAX_USER_COMPRESSED_IMAGE_QUEUE_SIZE,
"Compressed image queue too large");
350 const uint8_t *dataP) {
412 typedef std::vector<utility::BufferStreamWriter*>
BufferPool;
510 int32_t attempts=DEFAULT_ACK_ATTEMPTS);
511 #if defined (_MSC_VER) 514 const double& timeout,
523 int32_t attempts=DEFAULT_ACK_ATTEMPTS);
526 template<
class T>
void publish (
const T& message);
557 uint32_t& microseconds);
560 void bind (
const std::string& ifName);
573 static DWORD WINAPI
rxThread (
void *userDataP);
576 static void *
rxThread (
void *userDataP);
584 #endif // LibMultiSense_details_channel_hh
std::list< ImageListener * > m_imageListeners
static uint32_t imagerWireToApi(uint32_t h)
virtual Status setNetworkConfig(const system::NetworkConfig &c)
int64_t m_unWrappedRxSeqId
#define CRL_EXCEPTION(fmt,...)
static uint32_t hardwareWireToApi(uint32_t h)
virtual Status getPtpStatus(int64_t frameId, system::PtpStatus &ptpStatus)
BufferPool m_rxLargeBufferPool
virtual Status getMtu(int32_t &mtu)
virtual Status verifyBitstream(const std::string &file)
virtual Status getLocalUdpPort(uint16_t &port)
virtual Status setImuConfig(bool storeSettingsInFlash, uint32_t samplesPerMessage, const std::vector< imu::Config > &c)
void dispatchCompressedImage(utility::BufferStream &buffer, compressed_image::Header &header)
virtual Status verifyFirmware(const std::string &file)
virtual Status setTriggerSource(TriggerSource s)
virtual Status getMotorPos(int32_t &mtu)
virtual Status getExternalCalibration(system::ExternalCalibration &calibration)
bool assemble(uint32_t bytes, uint32_t offset, const uint8_t *dataP)
static CRL_CONSTEXPR uint32_t MAX_DIRECTED_STREAMS
virtual Status getLightingSensorStatus(lighting::SensorStatus &status)
struct sockaddr_in m_sensorAddress
void applySensorTimeOffset(const utility::TimeStamp &offset)
virtual Status networkTimeSynchronization(bool enabled)
virtual Status removeIsolatedCallback(image::Callback callback)
virtual Status setRemoteHeadConfig(const image::RemoteHeadConfig &c)
UdpTracker(uint32_t t, UdpAssembler a, utility::BufferStreamWriter &s)
void(* Callback)(const Header &header, void *userDataP)
void dispatchGroundSurfaceSpline(ground_surface::Header &header)
UdpAssemblerMap m_udpAssemblerMap
virtual Status ptpTimeSynchronization(bool enabled)
virtual Status setExternalCalibration(const system::ExternalCalibration &calibration)
virtual Status getLightingConfig(lighting::Config &c)
virtual Status getImageConfig(image::Config &c)
wire::StatusResponse m_statusResponseMessage
virtual Status setLidarCalibration(const lidar::Calibration &c)
static wire::SourceType sourceApiToWire(DataSource mask)
virtual Status setGroundSurfaceParams(const system::GroundSurfaceParams ¶ms)
std::list< PpsListener * > m_ppsListeners
virtual Status getLargeBufferDetails(uint32_t &bufferCount, uint32_t &bufferSize)
virtual Status setMotorSpeed(float rpm)
std::list< AprilTagDetectionListener * > m_aprilTagDetectionListeners
DepthCache< int64_t, wire::ImageMeta > m_imageMetaCache
impl(const std::string &address, const RemoteHeadChannel &cameraId, const std::string &ifName)
void(* Callback)(const Header &header, void *userDataP)
virtual Status getAuxImageConfig(image::AuxConfig &c)
void dispatch(utility::BufferStreamWriter &buffer)
virtual Status setMtu(int32_t mtu)
DepthCache< int64_t, UdpTracker > m_udpTrackerCache
virtual Status getDeviceStatus(system::StatusMessage &status)
utility::Thread * m_rxThreadP
void dispatchAprilTagDetections(apriltag::Header &header)
uint32_t m_bytesAssembled
UdpAssembler getUdpAssembler(const uint8_t *udpDatagramP, uint32_t length)
void(* Callback)(const Header &header, void *userDataP)
virtual Status stopStreams(DataSource mask)
virtual Status getNetworkConfig(system::NetworkConfig &c)
bool m_ptpTimeSyncEnabled
static CRL_CONSTEXPR uint32_t MAX_USER_APRILTAG_QUEUE_SIZE
void eraseFlashRegion(uint32_t region)
void getImageTime(const WireT *wire, uint32_t &seconds, uint32_t µSeconds)
std::vector< uint8_t > m_incomingBuffer
static CRL_CONSTEXPR uint32_t RX_POOL_SMALL_BUFFER_COUNT
void(* Callback)(const Header &header, void *userDataP)
static CRL_CONSTEXPR uint32_t RX_POOL_SMALL_BUFFER_SIZE
int16_t RemoteHeadChannel
static CRL_CONSTEXPR uint32_t MAX_USER_GROUND_SURFACE_QUEUE_SIZE
virtual Status addIsolatedCallback(image::Callback callback, DataSource imageSourceMask, void *userDataP)
static CRL_CONSTEXPR uint32_t MAX_USER_COMPRESSED_IMAGE_QUEUE_SIZE
void(* UdpAssembler)(utility::BufferStreamWriter &stream, const uint8_t *dataP, uint32_t offset, uint32_t length)
utility::Mutex m_dispatchLock
static CRL_CONSTEXPR uint32_t MAX_USER_PPS_QUEUE_SIZE
virtual Status getVersionInfo(system::VersionInfo &v)
virtual Status setApriltagParams(const system::ApriltagParams ¶ms)
static double DEFAULT_ACK_TIMEOUT()
static CRL_CONSTEXPR uint32_t IMAGE_META_CACHE_DEPTH
virtual Status getSensorVersion(VersionType &version)
static CRL_CONSTEXPR VersionType API_VERSION
static CRL_CONSTEXPR uint16_t DEFAULT_SENSOR_TX_PORT
virtual Status getImuConfig(uint32_t &samplesPerMessage, std::vector< imu::Config > &c)
static CRL_CONSTEXPR uint32_t MAX_BUFFER_ALLOCATION_RETRIES
uint16_t m_serverSocketPort
static CRL_CONSTEXPR uint32_t RX_POOL_LARGE_BUFFER_COUNT
void bind(const std::string &ifName)
virtual Status getEnabledStreams(DataSource &mask)
wire::VersionResponse m_sensorVersion
utility::BufferStreamWriter & stream()
static CRL_CONSTEXPR uint32_t MAX_USER_IMU_QUEUE_SIZE
std::list< CompressedImageListener * > m_compressedImageListeners
const int64_t & unwrapSequenceId(uint16_t id)
utility::BufferStreamWriter & findFreeBuffer(uint32_t messageLength)
bool m_networkTimeSyncEnabled
static CRL_CONSTEXPR uint32_t DEFAULT_ACK_ATTEMPTS
virtual Status getImageHistogram(int64_t frameId, image::Histogram &histogram)
std::list< GroundSurfaceSplineListener * > m_groundSurfaceSplineListeners
static uint32_t imagerApiToWire(uint32_t h)
utility::Mutex m_streamLock
static CRL_CONSTEXPR uint32_t MAX_MTU_SIZE
void toHeaderTime(T nanoSeconds, uint32_t &seconds, uint32_t µSeconds) const
static CRL_CONSTEXPR uint32_t UDP_TRACKER_CACHE_DEPTH
virtual Status startStreams(DataSource mask)
utility::TimeStamp m_timeOffset
virtual Status setDeviceInfo(const std::string &key, const system::DeviceInfo &i)
virtual void * reserveCallbackBuffer()
virtual Status getApiVersion(VersionType &version)
virtual Status setImageCalibration(const image::Calibration &c)
static CRL_CONSTEXPR uint32_t MAX_USER_LASER_QUEUE_SIZE
void dispatchImu(imu::Header &header)
Status waitAck(const T &msg, wire::IdType id=MSG_ID(T::ID), const double &timeout=DEFAULT_ACK_TIMEOUT(), int32_t attempts=DEFAULT_ACK_ATTEMPTS)
void dispatchPps(pps::Header &header)
utility::Mutex m_timeLock
virtual Status getImageCalibration(image::Calibration &c)
static CRL_CONSTEXPR uint32_t RX_POOL_LARGE_BUFFER_SIZE
uint32_t m_totalBytesInMessage
BufferPool m_rxSmallBufferPool
std::list< LidarListener * > m_lidarListeners
virtual Status getImuInfo(uint32_t &maxSamplesPerMessage, std::vector< imu::Info > &info)
utility::TimeStamp sensorToLocalTime(const utility::TimeStamp &sensorTime)
virtual Status getDeviceModes(std::vector< system::DeviceMode > &modes)
virtual Status getRemoteHeadConfig(image::RemoteHeadConfig &c)
static uint32_t hardwareApiToWire(uint32_t h)
void(* Callback)(const Header &header, void *userDataP)
virtual Status flashBitstream(const std::string &file)
Status m_getStatusReturnStatus
void publish(const T &message)
void(* Callback)(const Header &header, void *userDataP)
virtual Status setLargeBuffers(const std::vector< uint8_t *> &buffers, uint32_t bufferSize)
static void * rxThread(void *userDataP)
virtual Status setTransmitDelay(const image::TransmitDelay &c)
void dispatchLidar(utility::BufferStream &buffer, lidar::Header &header)
std::list< ImuListener * > m_imuListeners
std::vector< utility::BufferStreamWriter * > BufferPool
static CRL_CONSTEXPR uint32_t TIME_SYNC_OFFSET_DECAY
virtual Status getLidarCalibration(lidar::Calibration &c)
virtual Status getTransmitDelay(image::TransmitDelay &c)
uint32_t m_packetsAssembled
utility::BufferStreamWriter m_stream
std::map< wire::IdType, UdpAssembler > UdpAssemblerMap
static CRL_CONSTEXPR uint32_t MAX_USER_IMAGE_QUEUE_SIZE
Status waitData(const T &command, U &data, const double &timeout=DEFAULT_ACK_TIMEOUT(), int32_t attempts=DEFAULT_ACK_ATTEMPTS)
static void * statusThread(void *userDataP)
virtual Status flashFirmware(const std::string &file)
DataSource m_streamsEnabled
virtual Status setLightingConfig(const lighting::Config &c)
void programOrVerifyFlashRegion(std::ifstream &file, uint32_t operation, uint32_t region)
virtual Status setAuxImageConfig(const image::AuxConfig &c)
virtual Status setImageConfig(const image::Config &c)
utility::Thread * m_statusThreadP
static DataSource sourceWireToApi(wire::SourceType mask)
Status doFlashOp(const std::string &filename, uint32_t operation, uint32_t region)
virtual Status getDeviceInfo(system::DeviceInfo &info)
void(* Callback)(const Header &header, void *userDataP)
void dispatchImage(utility::BufferStream &buffer, image::Header &header)
virtual Status releaseCallbackBuffer(void *referenceP)