37 #include <gtest/gtest.h>
39 #include <details/legacy/configuration.hh>
41 using namespace multisense::legacy;
46 using namespace std::chrono_literals;
84 std::make_optional(time),
85 std::make_optional(network),
105 std::vector<ImuRate> accel_rates{{1.0f, 2.0f}, {3.0f, 4.4f}, {5.5f, 6.7f}};
106 std::vector<ImuRange> accel_ranges{{1.1f, 3.0f}, {3.1f, 4.5f}, {5.6f, 6.8f}};
108 std::vector<ImuRate> gyro_rates{{1.1f, 2.1f}, {3.1f, 5.4f}, {5.6f, 7.7f}};
109 std::vector<ImuRange> gyro_ranges{{2.1f, 3.1f}, {4.1f, 5.5f}, {6.6f, 7.8f}};
111 std::vector<ImuRate> mag_rates{{2.1f, 3.1f}, {4.1f, 6.4f}, {6.6f, 8.7f}};
112 std::vector<ImuRange> mag_ranges{{3.1f, 4.1f}, {5.1f, 5.6f}, {6.7f, 8.8f}};
207 config.
configs[0].name =
"accelerometer";
209 config.
configs[0].rateTableIndex = 1;
210 config.
configs[0].rangeTableIndex = 0;
212 config.
configs[1].name =
"gyroscope";
214 config.
configs[1].rateTableIndex = 0;
215 config.
configs[1].rangeTableIndex = 1;
217 config.
configs[2].name =
"magnetometer";
219 config.
configs[2].rateTableIndex = 1;
220 config.
configs[2].rangeTableIndex = 1;
262 template <
typename ConfigT,
typename ControlT>
264 const ControlT &control)
266 ASSERT_TRUE(
static_cast<bool>(config.manual_exposure));
267 ASSERT_FLOAT_EQ(config.manual_exposure->gain, control.gain);
268 ASSERT_EQ(config.manual_exposure->exposure_time.count(), control.exposure);
270 ASSERT_TRUE(
static_cast<bool>(config.auto_exposure));
271 ASSERT_EQ(config.auto_exposure_enabled, control.autoExposure);
272 ASSERT_EQ(config.auto_exposure->max_exposure_time.count(), control.autoExposureMax);
273 ASSERT_EQ(config.auto_exposure->decay, control.autoExposureDecay);
274 ASSERT_FLOAT_EQ(config.auto_exposure->target_threshold, control.autoExposureThresh);
275 ASSERT_FLOAT_EQ(config.auto_exposure->target_intensity, control.autoExposureTargetIntensity);
276 ASSERT_FLOAT_EQ(config.auto_exposure->max_gain, control.gainMax);
278 ASSERT_EQ(config.auto_exposure->roi.top_left_x_position, control.autoExposureRoiX);
279 ASSERT_EQ(config.auto_exposure->roi.top_left_y_position, control.autoExposureRoiY);
280 ASSERT_EQ(config.auto_exposure->roi.width, control.autoExposureRoiWidth);
281 ASSERT_EQ(config.auto_exposure->roi.height, control.autoExposureRoiHeight);
283 ASSERT_TRUE(
static_cast<bool>(config.manual_white_balance));
284 ASSERT_FLOAT_EQ(config.manual_white_balance->red, control.whiteBalanceRed);
285 ASSERT_FLOAT_EQ(config.manual_white_balance->blue, control.whiteBalanceBlue);
287 ASSERT_TRUE(
static_cast<bool>(config.auto_white_balance));
288 ASSERT_EQ(config.auto_white_balance_enabled, control.autoWhiteBalance);
289 ASSERT_EQ(config.auto_white_balance->decay, control.autoWhiteBalanceDecay);
290 ASSERT_EQ(config.auto_white_balance->threshold, control.autoWhiteBalanceThresh);
292 ASSERT_EQ(config.gamma, control.gamma);
312 ASSERT_TRUE(
static_cast<bool>(config.
aux_config));
376 ASSERT_EQ(
static_cast<bool>(imu_info.
gyroscope),
static_cast<bool>(config.
gyroscope));
379 ASSERT_GT(wire_config.
configs.size(), 2);
381 for (
size_t i = 0 ; i < wire_config.
configs.size() ; ++i)
383 const auto &wire = wire_config.
configs[i];
387 const auto rate = imu_info.
accelerometer->rates[wire.rateTableIndex];
388 const auto range = imu_info.
accelerometer->ranges[wire.rangeTableIndex];
390 ASSERT_EQ(config.
accelerometer->enabled,
static_cast<bool>(wire.flags & wire::imu::Config::FLAGS_ENABLED));
397 const auto rate = imu_info.
gyroscope->rates[wire.rateTableIndex];
398 const auto range = imu_info.
gyroscope->ranges[wire.rangeTableIndex];
400 ASSERT_EQ(config.
gyroscope->enabled,
static_cast<bool>(wire.flags & wire::imu::Config::FLAGS_ENABLED));
407 const auto rate = imu_info.
magnetometer->rates[wire.rateTableIndex];
408 const auto range = imu_info.
magnetometer->ranges[wire.rangeTableIndex];
410 ASSERT_EQ(config.
magnetometer->enabled,
static_cast<bool>(wire.flags & wire::imu::Config::FLAGS_ENABLED));
429 ASSERT_FLOAT_EQ(config.
internal->intensity, wire.
intensity[0] / 255.0f * 100.0f);
438 ASSERT_FLOAT_EQ(config.
external->intensity, wire.
intensity[0] / 255.0f * 100.0f);
447 ASSERT_EQ(wire.
flash, 0);
453 ASSERT_EQ(wire.
flash, 1);
459 ASSERT_EQ(wire.
flash, 1);
477 ASSERT_FLOAT_EQ(config.
internal->intensity, wire.
intensity[i] / 255.0f * 100.0f);
478 ASSERT_EQ(wire.
mask & 1<<i, 1<<i);
491 ASSERT_FLOAT_EQ(config.
external->intensity, wire.
intensity[i] / 255.0f * 100.0f);
492 ASSERT_EQ(wire.
mask & 1<<i, 1<<i);
503 ASSERT_EQ(wire.
flash, 0);
509 ASSERT_EQ(wire.
flash, 1);
515 ASSERT_EQ(wire.
flash, 1);
535 ASSERT_TRUE(config == config);
545 ASSERT_FALSE(config0 == config1);
548 TEST(convert, cam_resolution_full_res)
555 const auto wire_resolution = convert<wire::CamSetResolution>(config);
567 const auto cam_control = convert<wire::CamControl>(config);
579 ASSERT_TRUE(
static_cast<bool>(config.aux_config));
581 const auto cam_control = convert(config.aux_config.value());
593 const auto config = convert(wire_config,
602 ASSERT_TRUE(
static_cast<bool>(config.aux_config));
605 check_equal(config.aux_config.value(), wire_aux_config);
608 TEST(convert, cam_config_invalid_aux)
613 const auto config = convert(wire_config,
622 ASSERT_FALSE(
static_cast<bool>(config.aux_config));
627 TEST(convert, cam_config_invalid_imu)
632 const auto config = convert(wire_config,
641 ASSERT_FALSE(
static_cast<bool>(config.imu_config));
645 ASSERT_TRUE(
static_cast<bool>(config.network_config));
646 check_equal(config.network_config.value(), packet_config);
649 TEST(convert, cam_config_invalid_led)
654 const auto config = convert(wire_config,
663 ASSERT_FALSE(
static_cast<bool>(config.lighting_config));
667 ASSERT_TRUE(
static_cast<bool>(config.network_config));
668 check_equal(config.network_config.value(), packet_config);
671 TEST(convert, cam_config_valid_led_but_no_ligths)
676 lighting_config.available = 0;
680 const auto config = convert(wire_config,
683 std::make_optional(lighting_config),
689 ASSERT_FALSE(
static_cast<bool>(config.lighting_config));
693 ASSERT_TRUE(
static_cast<bool>(config.network_config));
694 check_equal(config.network_config.value(), packet_config);
697 TEST(convert, imu_config_round_trip)
702 const auto round_trip = convert(convert(convert(wire_config, info), info, 10000), info);
707 TEST(convert, imu_config_limit_messages)
715 const auto round_trip = convert(convert(wire_config, info), info, wire_config.samplesPerMessage - 1);
717 ASSERT_EQ(round_trip.samplesPerMessage, wire_config.samplesPerMessage - 1);
720 TEST(convert, lighting_config_round_trip)
737 const auto config = convert(wire_config,
746 ASSERT_TRUE(
static_cast<bool>(config.network_config));
748 convert<wire::SysPacketDelay>(config.network_config.value()));