7 #ifndef IFM3D_DESERIALIZE_STRUCT_TOF_INFO_V3_HPP
8 #define IFM3D_DESERIALIZE_STRUCT_TOF_INFO_V3_HPP
11 #include <ifm3d/deserialize/deserialize_utils.hpp>
12 #include <ifm3d/deserialize/struct_calibration.hpp>
13 #include <ifm3d/device/device.h>
14 #include <ifm3d/device/err.h>
15 #include <ifm3d/fg/buffer.h>
16 #include <ifm3d/fg/organizer_utils.h>
23 constexpr
auto TOF_INFO_VERSION_INDEX = 0x0000;
24 constexpr
auto TOF_INFO_DISTANCE_RESOLUTION_INDEX = 0x0004;
25 constexpr
auto TOF_INFO_AMPLITUDE_RESOLUTION_INDEX = 0x0008;
26 constexpr
auto TOF_INFO_AMPLITUDE_NORM_FACTOR_INDEX = 0x000C;
27 constexpr
auto TOF_INFO_EXTRINSIC_OPTICAL_TO_USER_INDEX = 0x0018;
28 constexpr
auto TOF_INFO_INTRINSIC_CALIBRATION_INDEX = 0x0030;
29 constexpr
auto TOF_INFO_INVERSE_INTRINSIC_CALIBRATION_INDEX = 0x00B4;
30 constexpr
auto TOF_INFO_EXPOSURE_TIMESTAMPS_INDEX = 0x0138;
31 constexpr
auto TOF_INFO_EXPOSURE_TIMES_INDEX = 0x0150;
32 constexpr
auto TOF_INFO_ILLUTEMPERATURE_INDEX = 0x015C;
33 constexpr
auto TOF_INFO_MODE_INDEX = 0x0160;
34 constexpr
auto TOF_INFO_IMAGER_INDEX = 0x0180;
42 using Ptr = std::shared_ptr<TOFInfoV3>;
45 IsValid(
const uint8_t* data,
size_t size)
47 auto version = mkval<std::uint32_t>(data + TOF_INFO_VERSION_INDEX);
49 return size >= TOF_INFO_V3_SIZE && version >= 3;
53 Read(
const uint8_t* data,
size_t size)
55 if (!IsValid(data, size))
59 const uint8_t* start_ptr = data;
60 std::array<char, 32> buff{};
61 version = mkval<std::uint32_t>(start_ptr + TOF_INFO_VERSION_INDEX);
63 mkval<float>(start_ptr + TOF_INFO_DISTANCE_RESOLUTION_INDEX);
64 amplitude_resolution =
65 mkval<float>(start_ptr + TOF_INFO_AMPLITUDE_RESOLUTION_INDEX);
66 mkarray<float, 3>(start_ptr + TOF_INFO_AMPLITUDE_NORM_FACTOR_INDEX,
67 amp_normalization_factors);
68 extrinsic_optic_to_user.Read(start_ptr +
69 TOF_INFO_EXTRINSIC_OPTICAL_TO_USER_INDEX);
70 intrinsic_calibration.Read(start_ptr +
71 TOF_INFO_INTRINSIC_CALIBRATION_INDEX);
72 inverse_intrinsic_calibration.Read(
73 start_ptr + TOF_INFO_INVERSE_INTRINSIC_CALIBRATION_INDEX);
74 mkarray<uint64_t, 3>(start_ptr + TOF_INFO_EXPOSURE_TIMESTAMPS_INDEX,
75 exposure_timestamps_ns);
76 mkarray<float, 3>(start_ptr + TOF_INFO_EXPOSURE_TIMES_INDEX,
79 mkval<float>(start_ptr + TOF_INFO_ILLUTEMPERATURE_INDEX);
80 mkarray<char, 32>(start_ptr + TOF_INFO_MODE_INDEX, buff);
81 mode = std::string(buff.begin(), buff.end());
83 mkarray<char, 32>(start_ptr + TOF_INFO_IMAGER_INDEX, buff);
84 imager = std::string(buff.begin(), buff.end());
90 float distance_resolution;
92 float amplitude_resolution;
95 std::array<float, 3> amp_normalization_factors;
103 std::array<uint64_t, 3> exposure_timestamps_ns;
105 std::array<float, 3> exposure_times_s;
107 float illu_temperature;
113 static constexpr
size_t TOF_INFO_V3_SIZE = 416;
116 Deserialize(
const Buffer& tof_info_buffer)
120 tof_info_v3.Read(tof_info_buffer.
Ptr<uint8_t>(0),
121 tof_info_buffer.
Size());
127 #endif // IFM3D_DESERIALIZE_STRUCT_TOF_INFO_V3_HPP