46 const std::optional<crl::multisense::details::wire::AuxCamConfig> &aux_config,
47 const std::optional<crl::multisense::details::wire::ImuConfig> &imu_config,
48 const std::optional<crl::multisense::details::wire::LedStatus> &led_config,
52 const std::optional<MultiSenseInfo::ImuInfo> &imu_info)
60 ms_config::ManualExposureConfig manual_exposure{config.
gain,
61 std::chrono::microseconds{config.
exposure}};
68 ms_config::AutoExposureConfig auto_exposure{std::chrono::microseconds{config.
autoExposureMax},
73 std::move(auto_exposure_roi)};
81 ms_config::ImageConfig image{config.
gamma,
83 std::move(manual_exposure),
84 std::move(auto_exposure),
86 (main_color ? std::make_optional(std::move(manual_white_balance)) : std::nullopt),
87 (main_color ? std::make_optional(std::move(auto_white_balance)) : std::nullopt)};
95 (aux_config ? std::make_optional(
convert(aux_config.value())) : std::nullopt),
96 ms_config::TimeConfig{ptp_enabled},
98 (imu_config && imu_info) ?
99 std::make_optional(
convert(imu_config.value(), imu_info.value())) :
101 (led_config && led_config->available) ?
111 ms_config::ManualExposureConfig manual_exposure{config.
gain,
112 std::chrono::microseconds{config.
exposure}};
119 ms_config::AutoExposureConfig auto_exposure{std::chrono::microseconds{config.
autoExposureMax},
124 std::move(auto_exposure_roi)};
130 ms_config::ImageConfig image{config.
gamma,
132 std::move(manual_exposure),
133 std::move(auto_exposure),
135 std::move(manual_white_balance),
136 std::move(auto_white_balance)};
138 return ms_config::AuxConfig{std::move(image),
149 int32_t disparities = 256;
173 output.
gain = manual_exposure.gain;
174 output.
exposure =
static_cast<uint32_t
>(manual_exposure.exposure_time.count());
181 output.
autoExposureMax =
static_cast<uint32_t
>(auto_exposure.max_exposure_time.count());
185 output.
gainMax = auto_exposure.max_gain;
223 output.
gain = manual_exposure.gain;
224 output.
exposure =
static_cast<uint32_t
>(manual_exposure.exposure_time.count());
231 output.
autoExposureMax =
static_cast<uint32_t
>(auto_exposure.max_exposure_time.count());
235 output.
gainMax = auto_exposure.max_gain;
287 std::optional<ImuConfig::OperatingMode> accelerometer = std::nullopt;
288 std::optional<ImuConfig::OperatingMode> gyroscope = std::nullopt;
289 std::optional<ImuConfig::OperatingMode> magnetometer = std::nullopt;
290 for (
const auto &element : imu.
configs)
294 accelerometer = ImuConfig::OperatingMode{
static_cast<bool>(element.flags & wire::imu::Config::FLAGS_ENABLED),
300 gyroscope = ImuConfig::OperatingMode{
static_cast<bool>(element.flags & wire::imu::Config::FLAGS_ENABLED),
301 imu_info.
gyroscope->rates[element.rateTableIndex],
302 imu_info.
gyroscope->ranges[element.rangeTableIndex]};
306 magnetometer = ImuConfig::OperatingMode{
static_cast<bool>(element.flags & wire::imu::Config::FLAGS_ENABLED),
308 imu_info.
magnetometer->ranges[element.rangeTableIndex]};
312 CRL_EXCEPTION(
"Unknown imu name: %s\n", element.name.c_str());
316 return ImuConfig{imu.
samplesPerMessage, std::move(accelerometer), std::move(gyroscope), std::move(magnetometer)};
321 uint32_t max_samples_per_message)
329 std::vector<wire::imu::Config> configs;
340 configs.emplace_back(std::move(config));
347 config.
flags = imu.
gyroscope->enabled ? wire::imu::Config::FLAGS_ENABLED : 0;
352 configs.emplace_back(std::move(config));
364 configs.emplace_back(std::move(config));
368 output.
configs= std::move(configs);
378 const auto intensity =
static_cast<float>(led.
intensity[0]) * 100.0
f / 255.0
f;
380 std::optional<lighting::InternalConfig>
internal = std::nullopt;
381 std::optional<lighting::ExternalConfig> external = std::nullopt;
392 internal = lighting::InternalConfig{intensity, led.
flash != 0};
400 lighting::ExternalConfig::FlashMode mode = lighting::ExternalConfig::FlashMode::NONE;
404 mode = lighting::ExternalConfig::FlashMode::SYNC_WITH_AUX;
408 mode = lighting::ExternalConfig::FlashMode::SYNC_WITH_MAIN_STEREO;
435 output.
mask |= (1<<i);
436 output.
intensity[i] =
static_cast<uint8_t
> (255.0f * (std::clamp(led.
internal->intensity, 0.0f, 100.0f) / 100.0f));
450 output.
mask |= (1<<i);
451 output.
intensity[i] =
static_cast<uint8_t
> (255.0f * (std::clamp(led.
external->intensity, 0.0f, 100.0f) / 100.0f));