7 #ifndef IFM3D_DESERIALIZE_STRUCT_TOF_INFO_V3_HPP
8 #define IFM3D_DESERIALIZE_STRUCT_TOF_INFO_V3_HPP
12 #include <ifm3d/device/device.h>
13 #include <ifm3d/device/err.h>
14 #include <ifm3d/fg/organizer_utils.h>
15 #include <ifm3d/fg/buffer.h>
16 #include <ifm3d/deserialize/deserialize_utils.hpp>
17 #include <ifm3d/deserialize/struct_calibration.hpp>
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 uint32_t version = mkval<std::uint32_t>(data + TOF_INFO_VERSION_INDEX);
49 if (size < tof_info_v3_size || version < 3)
57 Read(
const uint8_t* data,
size_t size)
59 if (!IsValid(data, size))
63 const uint8_t* start_ptr = data;
64 std::array<char, 32> buff;
65 version = mkval<std::uint32_t>(start_ptr + TOF_INFO_VERSION_INDEX);
67 mkval<float>(start_ptr + TOF_INFO_DISTANCE_RESOLUTION_INDEX);
68 amplitude_resolution =
69 mkval<float>(start_ptr + TOF_INFO_AMPLITUDE_RESOLUTION_INDEX);
70 mkarray<float, 3>(start_ptr + TOF_INFO_AMPLITUDE_NORM_FACTOR_INDEX,
71 amp_normalization_factors);
72 extrinsic_optic_to_user.Read(start_ptr +
73 TOF_INFO_EXTRINSIC_OPTICAL_TO_USER_INDEX);
74 intrinsic_calibration.Read(start_ptr +
75 TOF_INFO_INTRINSIC_CALIBRATION_INDEX);
76 inverse_intrinsic_calibration.Read(
77 start_ptr + TOF_INFO_INVERSE_INTRINSIC_CALIBRATION_INDEX);
78 mkarray<uint64_t, 3>(start_ptr + TOF_INFO_EXPOSURE_TIMESTAMPS_INDEX,
79 exposure_timestamps_ns);
80 mkarray<float, 3>(start_ptr + TOF_INFO_EXPOSURE_TIMES_INDEX,
83 mkval<float>(start_ptr + TOF_INFO_ILLUTEMPERATURE_INDEX);
84 mkarray<char, 32>(start_ptr + TOF_INFO_MODE_INDEX, buff);
85 mode = std::string(buff.begin(), buff.end());
87 mkarray<char, 32>(start_ptr + TOF_INFO_IMAGER_INDEX, buff);
88 imager = std::string(buff.begin(), buff.end());
94 float distance_resolution;
96 float amplitude_resolution;
99 std::array<float, 3> amp_normalization_factors;
107 std::array<uint64_t, 3> exposure_timestamps_ns;
109 std::array<float, 3> exposure_times_s;
111 float illu_temperature;
117 static constexpr
size_t tof_info_v3_size = 416;
120 Deserialize(
const Buffer& tof_info_buffer)
124 tof_info_v3.Read(tof_info_buffer.
ptr<uint8_t>(0),
125 tof_info_buffer.
size());
131 #endif // IFM3D_DESERIALIZE_STRUCT_TOF_INFO_V3_HPP