From 6aa1548c2b8b100515a476f459b5a1313235e8c3 Mon Sep 17 00:00:00 2001 From: myles-parfeniuk Date: Sun, 17 Nov 2024 13:41:19 -0800 Subject: [PATCH] More MultiReportTests --- include/BNO08xTestHelper.hpp | 2 +- test/CMakeLists.txt | 5 +- test/MultiReportTests.cpp | 708 ++++++++++++++++++++++++++++++++++- test/SingleReportTests.cpp | 4 +- 4 files changed, 712 insertions(+), 7 deletions(-) diff --git a/include/BNO08xTestHelper.hpp b/include/BNO08xTestHelper.hpp index 3ad2337..6364131 100644 --- a/include/BNO08xTestHelper.hpp +++ b/include/BNO08xTestHelper.hpp @@ -472,7 +472,7 @@ class BNO08xTestHelper * * @return True if new data was received for respective report. */ - static bool step_detector_data_is_new(imu_report_data_t* report_data, imu_report_data_t* default_report_data) + static bool step_counter_data_is_new(imu_report_data_t* report_data, imu_report_data_t* default_report_data) { bool new_data = false; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 967612e..c832d06 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,3 +1,6 @@ idf_component_register(SRC_DIRS "." INCLUDE_DIRS "." - REQUIRES cmock esp32_BNO08x) \ No newline at end of file + REQUIRES cmock esp32_BNO08x) + +# supress unused var warnings from test_imu +idf_build_set_property(COMPILE_OPTIONS "-Wno-unused-but-set-variable" APPEND) \ No newline at end of file diff --git a/test/MultiReportTests.cpp b/test/MultiReportTests.cpp index 50e47f3..37d298b 100644 --- a/test/MultiReportTests.cpp +++ b/test/MultiReportTests.cpp @@ -22,7 +22,7 @@ TEST_CASE("Dual Report Enable/Disable", "[MultiReportEnableDisable]") BNO08xTestHelper::imu_report_data_t prev_report_data; char msg_buff[200] = {}; const constexpr uint8_t ENABLED_REPORT_CNT = 2; - const constexpr uint8_t RX_REPORT_TRIAL_CNT = ENABLED_REPORT_CNT + 1; + const constexpr uint8_t RX_REPORT_TRIAL_CNT = 2 * ENABLED_REPORT_CNT; const constexpr uint32_t REPORT_PERIOD = 100000UL; // 100ms bool new_data[ENABLED_REPORT_CNT] = {false, false}; @@ -84,7 +84,7 @@ TEST_CASE("Dual Report Enable/Disable", "[MultiReportEnableDisable]") BNO08xTestHelper::reset_all_imu_data_to_test_defaults(); BNO08xTestHelper::update_report_data(&report_data); - BNO08xTestHelper::print_test_msg(TEST_TAG, "Test completed, disabling only Linear Accelerometer report and checking for new data on both."); + BNO08xTestHelper::print_test_msg(TEST_TAG, "Disabling only Linear Accelerometer report and checking for new data on both."); imu->disable_linear_accelerometer(); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) @@ -128,10 +128,712 @@ TEST_CASE("Dual Report Enable/Disable", "[MultiReportEnableDisable]") TEST_ASSERT_EQUAL(true, new_data[0]); TEST_ASSERT_NOT_EQUAL(true, new_data[1]); - BNO08xTestHelper::print_test_msg(TEST_TAG, "Test completed, disabling Accelerometer and Linear Accelerometer report"); + BNO08xTestHelper::print_test_msg(TEST_TAG, "Test completed, disabling Accelerometer report"); imu->disable_accelerometer(); } +TEST_CASE("Tri Report Enable/Disable", "[MultiReportEnableDisable]") +{ + const constexpr char* TEST_TAG = "Tri Report Enable/Disable"; + BNO08x* imu = nullptr; + BNO08xTestHelper::imu_report_data_t report_data; + BNO08xTestHelper::imu_report_data_t prev_report_data; + char msg_buff[200] = {}; + const constexpr uint8_t ENABLED_REPORT_CNT = 3; + const constexpr uint8_t RX_REPORT_TRIAL_CNT = 2 * ENABLED_REPORT_CNT; + const constexpr uint32_t REPORT_PERIOD = 100000UL; // 100ms + + bool new_data[ENABLED_REPORT_CNT] = {false, false, false}; + + imu = BNO08xTestHelper::get_test_imu(); + + // reset all data used in report test + BNO08xTestHelper::reset_all_imu_data_to_test_defaults(); + BNO08xTestHelper::update_report_data(&report_data); + + BNO08xTestHelper::print_test_msg( + TEST_TAG, "Enabling Accelerometer, Linear Accelerometer, and Magnetometer reports, checking for new data on all."); + + imu->enable_accelerometer(REPORT_PERIOD); + imu->enable_linear_accelerometer(REPORT_PERIOD); + imu->enable_magnetometer(REPORT_PERIOD); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + if (imu->data_available()) + { + prev_report_data = report_data; + BNO08xTestHelper::update_report_data(&report_data); + + // check if any default values have been overwritten, implying new data from respective report + if (BNO08xTestHelper::accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[0] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: AngularAccel: aX: %.2lf accel aY: %.2lf accel aZ: " + "%.2lf Accuracy %s", + (i + 1), report_data.accel_x, report_data.accel_y, report_data.accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::linear_accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[1] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: LinearAccel: laX: %.2lf laY: %.2lf laZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.lin_accel_x, report_data.lin_accel_y, report_data.lin_accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.lin_accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::magnetometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[2] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: Magf: mX: %.2lf mY: %.2lf mZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.magf_x, report_data.magf_y, report_data.magf_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.magf_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + } + } + + // check that new data was received for each report + TEST_ASSERT_EQUAL(true, new_data[0]); + TEST_ASSERT_EQUAL(true, new_data[1]); + TEST_ASSERT_EQUAL(true, new_data[2]); + + // reset all data used in report test + new_data[0] = false; + new_data[1] = false; + new_data[2] = false; + BNO08xTestHelper::reset_all_imu_data_to_test_defaults(); + BNO08xTestHelper::update_report_data(&report_data); + + BNO08xTestHelper::print_test_msg(TEST_TAG, "Disabling Magnetometer report and checking for new data on remaining reports."); + imu->disable_magnetometer(); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + if (imu->data_available()) + { + prev_report_data = report_data; + BNO08xTestHelper::update_report_data(&report_data); + + // check if any default values have been overwritten, implying new data from respective report + if (BNO08xTestHelper::accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[0] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: AngularAccel: aX: %.2lf accel aY: %.2lf accel aZ: " + "%.2lf Accuracy %s", + (i + 1), report_data.accel_x, report_data.accel_y, report_data.accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::linear_accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[1] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: LinearAccel: laX: %.2lf laY: %.2lf laZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.lin_accel_x, report_data.lin_accel_y, report_data.lin_accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.lin_accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::magnetometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[2] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Failure (REPORT DISABLED): Magf: mX: %.2lf mY: %.2lf mZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.magf_x, report_data.magf_y, report_data.magf_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.magf_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + } + } + + // check that new data was received for only enabled reports + TEST_ASSERT_EQUAL(true, new_data[0]); + TEST_ASSERT_EQUAL(true, new_data[1]); + TEST_ASSERT_NOT_EQUAL(true, new_data[2]); + + // reset all data used in report test + new_data[0] = false; + new_data[1] = false; + new_data[2] = false; + BNO08xTestHelper::reset_all_imu_data_to_test_defaults(); + BNO08xTestHelper::update_report_data(&report_data); + + BNO08xTestHelper::print_test_msg(TEST_TAG, "Disabling Linear Accelerometer report and checking for new data on remaining reports."); + imu->disable_linear_accelerometer(); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + if (imu->data_available()) + { + prev_report_data = report_data; + BNO08xTestHelper::update_report_data(&report_data); + + // check if any default values have been overwritten, implying new data from respective report + if (BNO08xTestHelper::accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[0] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: AngularAccel: aX: %.2lf accel aY: %.2lf accel aZ: " + "%.2lf Accuracy %s", + (i + 1), report_data.accel_x, report_data.accel_y, report_data.accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::linear_accelerometer_data_is_new(&report_data, &prev_report_data)) + { + // no new data should be detected here, report is disabled. + new_data[1] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Failure (REPORT DISABLED): LinearAccel: laX: %.2lf laY: %.2lf laZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.lin_accel_x, report_data.lin_accel_y, report_data.lin_accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.lin_accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::magnetometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[2] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Failure (REPORT DISABLED): Magf: mX: %.2lf mY: %.2lf mZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.magf_x, report_data.magf_y, report_data.magf_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.magf_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + } + } + + // check that new data was received for only enabled reports + TEST_ASSERT_EQUAL(true, new_data[0]); + TEST_ASSERT_NOT_EQUAL(true, new_data[1]); + TEST_ASSERT_NOT_EQUAL(true, new_data[2]); + + BNO08xTestHelper::print_test_msg(TEST_TAG, "Test completed, disabling Accelerometer report"); + imu->disable_accelerometer(); +} + +TEST_CASE("Quad Report Enable/Disable", "[MultiReportEnableDisable]") +{ + const constexpr char* TEST_TAG = "Quad Report Enable/Disable"; + BNO08x* imu = nullptr; + BNO08xTestHelper::imu_report_data_t report_data; + BNO08xTestHelper::imu_report_data_t prev_report_data; + char msg_buff[200] = {}; + const constexpr uint8_t ENABLED_REPORT_CNT = 4; + const constexpr uint8_t RX_REPORT_TRIAL_CNT = 2 * ENABLED_REPORT_CNT; + const constexpr uint32_t REPORT_PERIOD = 100000UL; // 100ms + + bool new_data[ENABLED_REPORT_CNT] = {false, false, false, false}; + + imu = BNO08xTestHelper::get_test_imu(); + + // reset all data used in report test + BNO08xTestHelper::reset_all_imu_data_to_test_defaults(); + BNO08xTestHelper::update_report_data(&report_data); + + BNO08xTestHelper::print_test_msg( + TEST_TAG, "Enabling Accelerometer, Linear Accelerometer, Magnetometer, and Rotation Vector reports, checking for new data on all."); + + imu->enable_accelerometer(REPORT_PERIOD); + imu->enable_linear_accelerometer(REPORT_PERIOD); + imu->enable_magnetometer(REPORT_PERIOD); + imu->enable_rotation_vector(REPORT_PERIOD); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + if (imu->data_available()) + { + prev_report_data = report_data; + BNO08xTestHelper::update_report_data(&report_data); + + // check if any default values have been overwritten, implying new data from respective report + if (BNO08xTestHelper::accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[0] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: AngularAccel: aX: %.2lf accel aY: %.2lf accel aZ: " + "%.2lf Accuracy %s", + (i + 1), report_data.accel_x, report_data.accel_y, report_data.accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::linear_accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[1] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: LinearAccel: laX: %.2lf laY: %.2lf laZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.lin_accel_x, report_data.lin_accel_y, report_data.lin_accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.lin_accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::magnetometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[2] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: Magf: mX: %.2lf mY: %.2lf mZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.magf_x, report_data.magf_y, report_data.magf_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.magf_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::rotation_vector_data_is_new(&report_data, &prev_report_data)) + { + new_data[3] = true; + + sprintf(msg_buff, "Rx Data Trial %d Success: Quat: I: %.2lf J: %.2lf K: %.2lf real: %.2lf Accuracy: %s", (i + 1), report_data.quat_I, + report_data.quat_J, report_data.quat_K, report_data.quat_real, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.quat_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + } + } + + // check that new data was received for each report + TEST_ASSERT_EQUAL(true, new_data[0]); + TEST_ASSERT_EQUAL(true, new_data[1]); + TEST_ASSERT_EQUAL(true, new_data[2]); + TEST_ASSERT_EQUAL(true, new_data[3]); + + // reset all data used in report test + new_data[0] = false; + new_data[1] = false; + new_data[2] = false; + new_data[3] = false; + BNO08xTestHelper::reset_all_imu_data_to_test_defaults(); + BNO08xTestHelper::update_report_data(&report_data); + + BNO08xTestHelper::print_test_msg(TEST_TAG, "Disabling Rotation Vector report and checking for new data on remaining reports."); + imu->disable_rotation_vector(); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + if (imu->data_available()) + { + prev_report_data = report_data; + BNO08xTestHelper::update_report_data(&report_data); + + // check if any default values have been overwritten, implying new data from respective report + if (BNO08xTestHelper::accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[0] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: AngularAccel: aX: %.2lf accel aY: %.2lf accel aZ: " + "%.2lf Accuracy %s", + (i + 1), report_data.accel_x, report_data.accel_y, report_data.accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::linear_accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[1] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: LinearAccel: laX: %.2lf laY: %.2lf laZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.lin_accel_x, report_data.lin_accel_y, report_data.lin_accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.lin_accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::magnetometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[2] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: Magf: mX: %.2lf mY: %.2lf mZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.magf_x, report_data.magf_y, report_data.magf_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.magf_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::rotation_vector_data_is_new(&report_data, &prev_report_data)) + { + new_data[3] = true; + + sprintf(msg_buff, "Rx Data Trial %d Failure (REPORT DISABLED): Quat: I: %.2lf J: %.2lf K: %.2lf real: %.2lf Accuracy: %s", (i + 1), + report_data.quat_I, report_data.quat_J, report_data.quat_K, report_data.quat_real, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.quat_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + } + } + + // check that new data was received for only enabled reports + TEST_ASSERT_EQUAL(true, new_data[0]); + TEST_ASSERT_EQUAL(true, new_data[1]); + TEST_ASSERT_EQUAL(true, new_data[2]); + TEST_ASSERT_NOT_EQUAL(true, new_data[3]); + + // reset all data used in report test + new_data[0] = false; + new_data[1] = false; + new_data[2] = false; + new_data[3] = false; + BNO08xTestHelper::reset_all_imu_data_to_test_defaults(); + BNO08xTestHelper::update_report_data(&report_data); + + BNO08xTestHelper::print_test_msg(TEST_TAG, "Disabling Magnetometer report and checking for new data on remaining reports."); + imu->disable_magnetometer(); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + if (imu->data_available()) + { + prev_report_data = report_data; + BNO08xTestHelper::update_report_data(&report_data); + + // check if any default values have been overwritten, implying new data from respective report + if (BNO08xTestHelper::accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[0] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: AngularAccel: aX: %.2lf accel aY: %.2lf accel aZ: " + "%.2lf Accuracy %s", + (i + 1), report_data.accel_x, report_data.accel_y, report_data.accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::linear_accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[1] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: LinearAccel: laX: %.2lf laY: %.2lf laZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.lin_accel_x, report_data.lin_accel_y, report_data.lin_accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.lin_accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::magnetometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[2] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Failure (REPORT DISABLED): Magf: mX: %.2lf mY: %.2lf mZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.magf_x, report_data.magf_y, report_data.magf_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.magf_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::rotation_vector_data_is_new(&report_data, &prev_report_data)) + { + new_data[3] = true; + + sprintf(msg_buff, "Rx Data Trial %d Failure (REPORT DISABLED): Quat: I: %.2lf J: %.2lf K: %.2lf real: %.2lf Accuracy: %s", (i + 1), + report_data.quat_I, report_data.quat_J, report_data.quat_K, report_data.quat_real, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.quat_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + } + } + + BNO08xTestHelper::print_test_msg(TEST_TAG, "Disabling Linear Accelerometer report and checking for new data on remaining reports."); + imu->disable_linear_accelerometer(); + + // check that new data was received for only enabled reports + TEST_ASSERT_EQUAL(true, new_data[0]); + TEST_ASSERT_EQUAL(true, new_data[1]); + TEST_ASSERT_NOT_EQUAL(true, new_data[2]); + TEST_ASSERT_NOT_EQUAL(true, new_data[3]); + + // reset all data used in report test + new_data[0] = false; + new_data[1] = false; + new_data[2] = false; + new_data[3] = false; + BNO08xTestHelper::reset_all_imu_data_to_test_defaults(); + BNO08xTestHelper::update_report_data(&report_data); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + if (imu->data_available()) + { + prev_report_data = report_data; + BNO08xTestHelper::update_report_data(&report_data); + + // check if any default values have been overwritten, implying new data from respective report + if (BNO08xTestHelper::accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[0] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: AngularAccel: aX: %.2lf accel aY: %.2lf accel aZ: " + "%.2lf Accuracy %s", + (i + 1), report_data.accel_x, report_data.accel_y, report_data.accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::linear_accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[1] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Failure (REPORT DISABLED): LinearAccel: laX: %.2lf laY: %.2lf laZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.lin_accel_x, report_data.lin_accel_y, report_data.lin_accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.lin_accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::magnetometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[2] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Failure (REPORT DISABLED): Magf: mX: %.2lf mY: %.2lf mZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.magf_x, report_data.magf_y, report_data.magf_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.magf_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::rotation_vector_data_is_new(&report_data, &prev_report_data)) + { + new_data[3] = true; + + sprintf(msg_buff, "Rx Data Trial %d Failure (REPORT DISABLED): Quat: I: %.2lf J: %.2lf K: %.2lf real: %.2lf Accuracy: %s", (i + 1), + report_data.quat_I, report_data.quat_J, report_data.quat_K, report_data.quat_real, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.quat_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + } + } + + // check that new data was received for only enabled reports + TEST_ASSERT_EQUAL(true, new_data[0]); + TEST_ASSERT_NOT_EQUAL(true, new_data[1]); + TEST_ASSERT_NOT_EQUAL(true, new_data[2]); + TEST_ASSERT_NOT_EQUAL(true, new_data[3]); + + BNO08xTestHelper::print_test_msg(TEST_TAG, "Test completed, disabling Accelerometer report"); + imu->disable_accelerometer(); +} + +TEST_CASE("Hex Report Enable", "[MultiReportEnableDisable]") +{ + const constexpr char* TEST_TAG = "Hex Report Enable"; + BNO08x* imu = nullptr; + BNO08xTestHelper::imu_report_data_t report_data; + BNO08xTestHelper::imu_report_data_t prev_report_data; + char msg_buff[200] = {}; + const constexpr uint8_t ENABLED_REPORT_CNT = 8; + const constexpr uint8_t RX_REPORT_TRIAL_CNT = 2 * ENABLED_REPORT_CNT; + const constexpr uint32_t REPORT_PERIOD = 100000UL; // 100ms + + bool new_data[ENABLED_REPORT_CNT] = {false, false, false, false, false, false, false, false}; + + imu = BNO08xTestHelper::get_test_imu(); + + // reset all data used in report test + BNO08xTestHelper::reset_all_imu_data_to_test_defaults(); + BNO08xTestHelper::update_report_data(&report_data); + + BNO08xTestHelper::print_test_msg(TEST_TAG, "Enabling Accelerometer, Linear Accelerometer, Magnetometer, Rotation Vector, Uncalibrated Gyro, " + "Calibrated Gyro, Gravity, and Step Counter " + "reports, checking for new data on all."); + + imu->enable_accelerometer(REPORT_PERIOD); + imu->enable_linear_accelerometer(REPORT_PERIOD); + imu->enable_magnetometer(REPORT_PERIOD); + imu->enable_rotation_vector(REPORT_PERIOD); + imu->enable_uncalibrated_gyro(REPORT_PERIOD); + imu->enable_calibrated_gyro(REPORT_PERIOD); + imu->enable_gravity(REPORT_PERIOD); + imu->enable_step_counter(REPORT_PERIOD); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + if (imu->data_available()) + { + prev_report_data = report_data; + BNO08xTestHelper::update_report_data(&report_data); + + // check if any default values have been overwritten, implying new data from respective report + if (BNO08xTestHelper::accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[0] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: AngularAccel: aX: %.2lf accel aY: %.2lf accel aZ: " + "%.2lf Accuracy %s", + (i + 1), report_data.accel_x, report_data.accel_y, report_data.accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::linear_accelerometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[1] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: LinearAccel: laX: %.2lf laY: %.2lf laZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.lin_accel_x, report_data.lin_accel_y, report_data.lin_accel_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.lin_accel_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::magnetometer_data_is_new(&report_data, &prev_report_data)) + { + new_data[2] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: Magf: mX: %.2lf mY: %.2lf mZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.magf_x, report_data.magf_y, report_data.magf_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.magf_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::rotation_vector_data_is_new(&report_data, &prev_report_data)) + { + new_data[3] = true; + + sprintf(msg_buff, "Rx Data Trial %d Success: Quat: I: %.2lf J: %.2lf K: %.2lf real: %.2lf Accuracy: %s", (i + 1), report_data.quat_I, + report_data.quat_J, report_data.quat_K, report_data.quat_real, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.quat_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::uncalibrated_gyro_data_is_new(&report_data, &prev_report_data)) + { + new_data[4] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: UncalibratedGyro: vX: %.2lf vY: %.2lf vZ: %.2lf driftX: %.2lf driftY: %.2lf driftZ: " + "%.2lf", + (i + 1), report_data.uncalib_gyro_vel_x, report_data.uncalib_gyro_vel_y, report_data.uncalib_gyro_vel_z, + report_data.uncalib_gyro_drift_x, report_data.uncalib_gyro_drift_y, report_data.uncalib_gyro_drift_z); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::calibrated_gyro_data_is_new(&report_data, &prev_report_data)) + { + new_data[5] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: CalibratedGyro: vX: %.2lf vY: %.2lf vZ: " + "%.2lf", + (i + 1), report_data.calib_gyro_vel_x, report_data.calib_gyro_vel_y, report_data.calib_gyro_vel_z); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::gravity_data_is_new(&report_data, &prev_report_data)) + { + new_data[6] = true; + + sprintf(msg_buff, + "Rx Data Trial %d Success: Gravity: gX: %.2lf gY: %.2lf gZ: " + "%.2lf Accuracy: %s", + (i + 1), report_data.grav_x, report_data.grav_y, report_data.grav_z, + BNO08xTestHelper::BNO08xAccuracy_to_str(report_data.grav_accuracy)); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + if (BNO08xTestHelper::step_counter_data_is_new(&report_data, &prev_report_data)) + { + new_data[7] = true; + + sprintf(msg_buff, "Rx Data Trial %d Success: StepCounter: %d steps", (i + 1), report_data.step_count); + + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + } + } + + // check that new data was received for each report + TEST_ASSERT_EQUAL(true, new_data[0]); + TEST_ASSERT_EQUAL(true, new_data[1]); + TEST_ASSERT_EQUAL(true, new_data[2]); + TEST_ASSERT_EQUAL(true, new_data[3]); + TEST_ASSERT_EQUAL(true, new_data[4]); + TEST_ASSERT_EQUAL(true, new_data[5]); + TEST_ASSERT_EQUAL(true, new_data[6]); + TEST_ASSERT_EQUAL(true, new_data[7]); + + BNO08xTestHelper::print_test_msg(TEST_TAG, "Test completed, disabling all reports."); + + imu->disable_accelerometer(); + imu->disable_linear_accelerometer(); + imu->disable_magnetometer(); + imu->disable_rotation_vector(); + imu->disable_uncalibrated_gyro(); + imu->disable_calibrated_gyro(); + imu->disable_gravity(); + imu->disable_step_counter(); +} + TEST_CASE("BNO08x Driver Cleanup for [MultiReportEnableDisable] Tests", "[MultiReportEnableDisable]") { const constexpr char* TEST_TAG = "BNO08x Driver Cleanup for [MultiReportEnableDisable] Tests"; diff --git a/test/SingleReportTests.cpp b/test/SingleReportTests.cpp index 2112e7d..310ee75 100644 --- a/test/SingleReportTests.cpp +++ b/test/SingleReportTests.cpp @@ -1063,7 +1063,7 @@ TEST_CASE("Enable/Disable Step Counter", "[SingleReportEnableDisable]") BNO08xTestHelper::update_report_data(&report_data); // check if any default values have been overwritten, implying new data from respective report - new_data = BNO08xTestHelper::step_detector_data_is_new(&report_data, &prev_report_data); + new_data = BNO08xTestHelper::step_counter_data_is_new(&report_data, &prev_report_data); } // assert that new data from respective report has been received @@ -1093,7 +1093,7 @@ TEST_CASE("Enable/Disable Step Counter", "[SingleReportEnableDisable]") BNO08xTestHelper::update_report_data(&report_data); // check if any default values have been overwritten, implying new data from respective report - new_data = BNO08xTestHelper::step_detector_data_is_new(&report_data, &prev_report_data); + new_data = BNO08xTestHelper::step_counter_data_is_new(&report_data, &prev_report_data); } // assert that no new data from respective report has been received