diff --git a/.clang-format b/.clang-format index 2eaf0c7..790d488 100644 --- a/.clang-format +++ b/.clang-format @@ -26,7 +26,10 @@ SpaceAfterCStyleCast: true CommentPragmas: '^[/!]<' -ColumnLimit: 150 +ColumnLimit: 100 +WrapComments: true +AllowShortCommentsOnASingleLine: true +AlignConsecutiveComments: true BreakBeforeBraces: Allman IndentAccessModifiers: true diff --git a/include/BNO08x.hpp b/include/BNO08x.hpp index d913ead..9fb4d8a 100644 --- a/include/BNO08x.hpp +++ b/include/BNO08x.hpp @@ -43,7 +43,16 @@ class BNO08x bool on(); bool sleep(); + // sh2_startCal (cmd id 12, calibration) + bool enable_dynamic_calibration(BNO08xCalSel sensor); + bool disable_dynamic_calibration(BNO08xCalSel sensor); + bool enable_autosave_dynamic_calibration(); + bool disable_autosave_dynamic_calibration(); + bool save_dynamic_calibration(); + bool clear_dynamic_calibration(); + bool get_frs(uint16_t frs_ID, uint32_t (&data)[16], uint16_t& rx_data_sz); + sh2_ProductIds_t get_product_IDs(); bool data_available(); bool register_cb(std::function cb_fxn); @@ -56,27 +65,27 @@ class BNO08x static const char* stability_to_str(BNO08xStability stability); static const char* accuracy_to_str(BNO08xAccuracy accuracy); - BNO08xRptAcceleration accelerometer; - BNO08xRptLinearAcceleration linear_accelerometer; - BNO08xRptGravity gravity; - BNO08xRptCalMagnetometer cal_magnetometer; - BNO08xRptUncalMagnetometer uncal_magnetometer; - BNO08xRptCalGyro cal_gyro; - BNO08xRptUncalGyro uncal_gyro; - BNO08xRptRV rv; - BNO08xRptGameRV rv_game; - BNO08xRptARVRStabilizedRV rv_ARVR_stabilized; - BNO08xRptARVRStabilizedGameRV rv_ARVR_stabilized_game; - BNO08xRptIGyroRV rv_gyro_integrated; - BNO08xRptRVGeomag rv_geomagnetic; - BNO08xRptRawMEMSGyro raw_gyro; - BNO08xRptRawMEMSAccelerometer raw_accelerometer; - BNO08xRptRawMEMSMagnetometer raw_magnetometer; - BNO08xRptStepCounter step_counter; - BNO08xRptActivityClassifier activity_classifier; - BNO08xStabilityClassifier stability_classifier; - BNO08xShakeDetector shake_detector; - BNO08xTapDetector tap_detector; + BNO08xRptAcceleration rpt_accelerometer; + BNO08xRptLinearAcceleration rpt_linear_accelerometer; + BNO08xRptGravity rpt_gravity; + BNO08xRptCalMagnetometer rpt_cal_magnetometer; + BNO08xRptUncalMagnetometer rpt_uncal_magnetometer; + BNO08xRptCalGyro rpt_cal_gyro; + BNO08xRptUncalGyro rpt_uncal_gyro; + BNO08xRptRV rpt_rv; + BNO08xRptGameRV rpt_rv_game; + BNO08xRptARVRStabilizedRV rpt_rv_ARVR_stabilized; + BNO08xRptARVRStabilizedGameRV rpt_rv_ARVR_stabilized_game; + BNO08xRptIGyroRV rpt_rv_gyro_integrated; + BNO08xRptRVGeomag rpt_rv_geomagnetic; + BNO08xRptRawMEMSGyro rpt_raw_gyro; + BNO08xRptRawMEMSAccelerometer rpt_raw_accelerometer; + BNO08xRptRawMEMSMagnetometer rpt_raw_magnetometer; + BNO08xRptStepCounter rpt_step_counter; + BNO08xRptActivityClassifier rpt_activity_classifier; + BNO08xStabilityClassifier rpt_stability_classifier; + BNO08xShakeDetector rpt_shake_detector; + BNO08xTapDetector rpt_tap_detector; private: // data processing task @@ -94,13 +103,16 @@ class BNO08x void sh2_HAL_service_task(); // callback task - static const constexpr configSTACK_DEPTH_TYPE CB_TASK_SZ = CONFIG_ESP32_BNO08X_CB_TASK_SZ; ///< Size of sh2_HAL_service_task() stack in bytes - TaskHandle_t cb_task_hdl; /// en_report_ids; ///< Vector to contain IDs of currently enabled reports + etl::vector + en_report_ids; ///< Vector to contain IDs of currently enabled reports // clang-format off etl::map> usr_reports = { - {SH2_ACCELEROMETER, &accelerometer}, - {SH2_LINEAR_ACCELERATION, &linear_accelerometer}, - {SH2_GRAVITY, &gravity}, - {SH2_MAGNETIC_FIELD_CALIBRATED, &cal_magnetometer}, - {SH2_MAGNETIC_FIELD_UNCALIBRATED, &uncal_magnetometer}, - {SH2_GYROSCOPE_CALIBRATED, &cal_gyro}, - {SH2_GYROSCOPE_UNCALIBRATED, &uncal_gyro}, - {SH2_ROTATION_VECTOR, &rv}, - {SH2_GAME_ROTATION_VECTOR, &rv_game}, - {SH2_ARVR_STABILIZED_RV, &rv_ARVR_stabilized}, - {SH2_ARVR_STABILIZED_GRV, &rv_ARVR_stabilized_game}, - {SH2_GYRO_INTEGRATED_RV, &rv_gyro_integrated}, - {SH2_GEOMAGNETIC_ROTATION_VECTOR, &rv_geomagnetic}, - {SH2_RAW_GYROSCOPE, &raw_gyro}, - {SH2_RAW_ACCELEROMETER, &raw_accelerometer}, - {SH2_RAW_MAGNETOMETER, &raw_magnetometer}, - {SH2_STEP_COUNTER, &step_counter}, - {SH2_PERSONAL_ACTIVITY_CLASSIFIER, &activity_classifier}, - {SH2_STABILITY_CLASSIFIER, &stability_classifier}, - {SH2_SHAKE_DETECTOR, &shake_detector}, - {SH2_TAP_DETECTOR, &tap_detector}, + {SH2_ACCELEROMETER, &rpt_accelerometer}, + {SH2_LINEAR_ACCELERATION, &rpt_linear_accelerometer}, + {SH2_GRAVITY, &rpt_gravity}, + {SH2_MAGNETIC_FIELD_CALIBRATED, &rpt_cal_magnetometer}, + {SH2_MAGNETIC_FIELD_UNCALIBRATED, &rpt_uncal_magnetometer}, + {SH2_GYROSCOPE_CALIBRATED, &rpt_cal_gyro}, + {SH2_GYROSCOPE_UNCALIBRATED, &rpt_uncal_gyro}, + {SH2_ROTATION_VECTOR, &rpt_rv}, + {SH2_GAME_ROTATION_VECTOR, &rpt_rv_game}, + {SH2_ARVR_STABILIZED_RV, &rpt_rv_ARVR_stabilized}, + {SH2_ARVR_STABILIZED_GRV, &rpt_rv_ARVR_stabilized_game}, + {SH2_GYRO_INTEGRATED_RV, &rpt_rv_gyro_integrated}, + {SH2_GEOMAGNETIC_ROTATION_VECTOR, &rpt_rv_geomagnetic}, + {SH2_RAW_GYROSCOPE, &rpt_raw_gyro}, + {SH2_RAW_ACCELEROMETER, &rpt_raw_accelerometer}, + {SH2_RAW_MAGNETOMETER, &rpt_raw_magnetometer}, + {SH2_STEP_COUNTER, &rpt_step_counter}, + {SH2_PERSONAL_ACTIVITY_CLASSIFIER, &rpt_activity_classifier}, + {SH2_STABILITY_CLASSIFIER, &rpt_stability_classifier}, + {SH2_SHAKE_DETECTOR, &rpt_shake_detector}, + {SH2_TAP_DETECTOR, &rpt_tap_detector}, // not implemented, see include/report for existing implementations to add your own {SH2_PRESSURE, nullptr}, // requires auxilary i2c sensor @@ -208,7 +225,8 @@ class BNO08x static void IRAM_ATTR hint_handler(void* arg); - static const constexpr uint16_t RX_DATA_LENGTH = 300U; ///x = atan2(2.0f * (source.real * source.i + source.j * source.k), 1.0f - 2.0f * (source.i * source.i + source.j * source.j)); + this->x = atan2(2.0f * (source.real * source.i + source.j * source.k), + 1.0f - 2.0f * (source.i * source.i + source.j * source.j)); this->y = asin(2.0f * (source.real * source.j - source.k * source.i)); - this->z = atan2(2.0f * (source.real * source.k + source.i * source.j), 1.0f - 2.0f * (source.j * source.j + source.k * source.k)); + this->z = atan2(2.0f * (source.real * source.k + source.i * source.j), + 1.0f - 2.0f * (source.j * source.j + source.k * source.k)); this->rad_accuracy = source.rad_accuracy; this->accuracy = source.accuracy; return *this; @@ -429,7 +442,8 @@ typedef struct bno08x_activity_classifier_t } } bno08x_activity_classifier_t; -/// @brief Struct to represent tap detector data (flag meaning: 0 = no tap, 1 = positive tap on axis, -1 = negative tap on axis) +/// @brief Struct to represent tap detector data (flag meaning: 0 = no tap, 1 = positive tap on +/// axis, -1 = negative tap on axis) typedef struct bno08x_tap_detector_t { int8_t x_flag; @@ -523,7 +537,8 @@ typedef struct bno08x_shake_detector_t } bno08x_shake_detector_t; -/// @brief Struct to represent acceleration data from acceleration, linear acceleration, and gravity reports. +/// @brief Struct to represent acceleration data from acceleration, linear acceleration, and gravity +/// reports. typedef struct bno08x_accel_t { float x; @@ -604,7 +619,8 @@ typedef struct bno08x_raw_gyro_t } } bno08x_raw_gyro_t; -/// @brief Struct to represent raw mems accelerometer data from raw accelerometer reports (units in ADC counts). +/// @brief Struct to represent raw mems accelerometer data from raw accelerometer reports (units in +/// ADC counts). typedef struct bno08x_raw_accel_t { int16_t x; @@ -633,7 +649,8 @@ typedef struct bno08x_raw_accel_t } } bno08x_raw_accel_t; -/// @brief Struct to represent raw mems magnetometer data from raw magnetometer reports (units in ADC counts). +/// @brief Struct to represent raw mems magnetometer data from raw magnetometer reports (units in +/// ADC counts). typedef struct bno08x_raw_magf_t { int16_t x; @@ -686,10 +703,11 @@ typedef struct bno08x_stability_classifier_t /// @brief Struct to represent sample counts, returned from BNO08xRpt::get_sample_counts() typedef struct bno08x_sample_counts_t { - uint32_t offered; ///< Number of samples produced by underlying data source. - uint32_t on; ///< Number of "offered" samples while this sensor was requested by host. - uint32_t accepted; ///< Number of "on" samples that passed decimation filter. - uint32_t attempted; ///< Number of "accepted" samples that passed threshold requirements and had transmission to the host attempted. + uint32_t offered; ///< Number of samples produced by underlying data source. + uint32_t on; ///< Number of "offered" samples while this sensor was requested by host. + uint32_t accepted; ///< Number of "on" samples that passed decimation filter. + uint32_t + attempted; ///< Number of "accepted" samples that passed threshold requirements and had transmission to the host attempted. bno08x_sample_counts_t() : offered(0UL) @@ -783,4 +801,5 @@ typedef struct bno08x_meta_data_t } } bno08x_meta_data_t; -static const constexpr uint8_t TOTAL_RPT_COUNT = 38; ///< Amount of possible reports returned from BNO08x. +static const constexpr uint8_t TOTAL_RPT_COUNT = + 38; ///< Amount of possible reports returned from BNO08x. diff --git a/include/BNO08xPrivateTypes.hpp b/include/BNO08xPrivateTypes.hpp index 76327bc..00e8570 100644 --- a/include/BNO08xPrivateTypes.hpp +++ b/include/BNO08xPrivateTypes.hpp @@ -22,19 +22,20 @@ namespace BNO08xPrivateTypes using bno08x_cb_list_t = etl::vector, CONFIG_ESP32_BNO08X_CB_MAX>; ///< Alias for vector type to contain both cb flavors. - /// @brief Holds info about which functionality has been successfully initialized (used by deconstructor during cleanup). + /// @brief Holds info about which functionality has been successfully initialized (used by + /// deconstructor during cleanup). typedef struct bno08x_init_status_t { - bool gpio_outputs; ///< True if GPIO outputs have been initialized. - bool gpio_inputs; ///< True if GPIO inputs have been initialized. - bool isr_service; ///< True if global ISR service has been initialized. - bool isr_handler; ///< True if HINT ISR handler has been initialized. - bool spi_bus; ///< True if spi_bus_initialize() has been called successfully. - bool spi_device; ///< True if spi_bus_add_device() has been called successfully. - bool sh2_HAL; ///< True if sh2_open() has been called successfully. - bool data_proc_task; ///< True if xTaskCreate has been called successfully for data_proc_task. + bool gpio_outputs; ///< True if GPIO outputs have been initialized. + bool gpio_inputs; ///< True if GPIO inputs have been initialized. + bool isr_service; ///< True if global ISR service has been initialized. + bool isr_handler; ///< True if HINT ISR handler has been initialized. + bool spi_bus; ///< True if spi_bus_initialize() has been called successfully. + bool spi_device; ///< True if spi_bus_add_device() has been called successfully. + bool sh2_HAL; ///< True if sh2_open() has been called successfully. + bool data_proc_task; ///< True if xTaskCreate has been called successfully for data_proc_task. bool sh2_HAL_service_task; ///< True if xTaskCreate has been called successfully for sh2_HAL_service_task. - bool cb_task; ///< True if xTaskCreate has been called successfully for cb_task. + bool cb_task; ///< True if xTaskCreate has been called successfully for cb_task. bno08x_init_status_t() : gpio_outputs(false) @@ -63,9 +64,12 @@ namespace BNO08xPrivateTypes etl::vector* _en_report_ids; bno08x_cb_list_t* _cb_list; - bno08x_report_info_t(uint8_t ID, EventBits_t rpt_bit, SemaphoreHandle_t* _sh2_HAL_lock, SemaphoreHandle_t* _data_lock, - EventGroupHandle_t* _evt_grp_rpt_en, EventGroupHandle_t* _evt_grp_rpt_data_available, EventGroupHandle_t* _evt_grp_bno08x_task, - etl::vector* _en_report_ids, bno08x_cb_list_t* _cb_list) + bno08x_report_info_t(uint8_t ID, EventBits_t rpt_bit, SemaphoreHandle_t* _sh2_HAL_lock, + SemaphoreHandle_t* _data_lock, EventGroupHandle_t* _evt_grp_rpt_en, + EventGroupHandle_t* _evt_grp_rpt_data_available, + EventGroupHandle_t* _evt_grp_bno08x_task, + etl::vector* _en_report_ids, + bno08x_cb_list_t* _cb_list) : ID(ID) , rpt_bit(rpt_bit) , _sh2_HAL_lock(_sh2_HAL_lock) @@ -91,34 +95,53 @@ namespace BNO08xPrivateTypes /// @brief Bits for evt_grp_rpt_en & evt_grp_rpt_data_available enum bno08x_rpt_bit_t : EventBits_t { - EVT_GRP_RPT_RV_BIT = (1UL << 0U), ///< When set, rotation vector reports are active. - EVT_GRP_RPT_RV_GAME_BIT = (1UL << 1U), ///< When set, game rotation vector reports are active. - EVT_GRP_RPT_RV_ARVR_S_BIT = (1UL << 2U), ///< When set, ARVR stabilized rotation vector reports are active. - EVT_GRP_RPT_RV_ARVR_S_GAME_BIT = (1UL << 3U), ///< When set, ARVR stabilized game rotation vector reports are active. - EVT_GRP_RPT_GYRO_INTEGRATED_RV_BIT = (1UL << 4U), ///< When set, gyro integrator rotation vector reports are active. - EVT_GRP_RPT_GEOMAG_RV_BIT = (1UL << 5U), ///< When set, geomagnetic rotation vector reports are active. - EVT_GRP_RPT_ACCELEROMETER_BIT = (1UL << 6U), ///< When set, accelerometer reports are active. - EVT_GRP_RPT_LINEAR_ACCELEROMETER_BIT = (1UL << 7U), ///< When set, linear accelerometer reports are active. - EVT_GRP_RPT_GRAVITY_BIT = (1UL << 8U), ///< When set, gravity reports are active. - EVT_GRP_RPT_CAL_GYRO_BIT = (1UL << 9U), ///< When set, calibrated gyro reports are active. - EVT_GRP_RPT_UNCAL_GYRO_BIT = (1UL << 10U), ///< When set, uncalibrated gyro reports are active. - EVT_GRP_RPT_CAL_MAGNETOMETER_BIT = (1UL << 11U), ///< When set, calibrated magnetometer reports are active. - EVT_GRP_RPT_UNCAL_MAGNETOMETER_BIT = (1UL << 12U), ///< When set, uncalibrated magnetometer reports are active. - EVT_GRP_RPT_TAP_DETECTOR_BIT = (1UL << 13U), ///< When set, tap detector reports are active. - EVT_GRP_RPT_STEP_COUNTER_BIT = (1UL << 14U), ///< When set, step counter reports are active. - EVT_GRP_RPT_STABILITY_CLASSIFIER_BIT = (1UL << 15U), ///< When set, stability classifier reports are active. - EVT_GRP_RPT_ACTIVITY_CLASSIFIER_BIT = (1UL << 16U), ///< When set, activity classifier reports are active. - EVT_GRP_RPT_SHAKE_DETECTOR_BIT = (1UL << 17U), ///< When set, shake detector reports are active. - EVT_GRP_RPT_RAW_ACCELEROMETER_BIT = (1UL << 18U), ///< When set, raw accelerometer reports are active. - EVT_GRP_RPT_RAW_GYRO_BIT = (1UL << 19U), ///< When set, raw gyro reports are active. - EVT_GRP_RPT_RAW_MAGNETOMETER_BIT = (1UL << 20U), ///< When set, raw magnetometer reports are active. + EVT_GRP_RPT_RV_BIT = (1UL << 0U), ///< When set, rotation vector reports are active. + EVT_GRP_RPT_RV_GAME_BIT = + (1UL << 1U), ///< When set, game rotation vector reports are active. + EVT_GRP_RPT_RV_ARVR_S_BIT = + (1UL << 2U), ///< When set, ARVR stabilized rotation vector reports are active. + EVT_GRP_RPT_RV_ARVR_S_GAME_BIT = + (1UL << 3U), ///< When set, ARVR stabilized game rotation vector reports are active. + EVT_GRP_RPT_GYRO_INTEGRATED_RV_BIT = + (1UL << 4U), ///< When set, gyro integrator rotation vector reports are active. + EVT_GRP_RPT_GEOMAG_RV_BIT = + (1UL << 5U), ///< When set, geomagnetic rotation vector reports are active. + EVT_GRP_RPT_ACCELEROMETER_BIT = + (1UL << 6U), ///< When set, accelerometer reports are active. + EVT_GRP_RPT_LINEAR_ACCELEROMETER_BIT = + (1UL << 7U), ///< When set, linear accelerometer reports are active. + EVT_GRP_RPT_GRAVITY_BIT = (1UL << 8U), ///< When set, gravity reports are active. + EVT_GRP_RPT_CAL_GYRO_BIT = (1UL << 9U), ///< When set, calibrated gyro reports are active. + EVT_GRP_RPT_UNCAL_GYRO_BIT = + (1UL << 10U), ///< When set, uncalibrated gyro reports are active. + EVT_GRP_RPT_CAL_MAGNETOMETER_BIT = + (1UL << 11U), ///< When set, calibrated magnetometer reports are active. + EVT_GRP_RPT_UNCAL_MAGNETOMETER_BIT = + (1UL << 12U), ///< When set, uncalibrated magnetometer reports are active. + EVT_GRP_RPT_TAP_DETECTOR_BIT = (1UL << 13U), ///< When set, tap detector reports are active. + EVT_GRP_RPT_STEP_COUNTER_BIT = (1UL << 14U), ///< When set, step counter reports are active. + EVT_GRP_RPT_STABILITY_CLASSIFIER_BIT = + (1UL << 15U), ///< When set, stability classifier reports are active. + EVT_GRP_RPT_ACTIVITY_CLASSIFIER_BIT = + (1UL << 16U), ///< When set, activity classifier reports are active. + EVT_GRP_RPT_SHAKE_DETECTOR_BIT = + (1UL << 17U), ///< When set, shake detector reports are active. + EVT_GRP_RPT_RAW_ACCELEROMETER_BIT = + (1UL << 18U), ///< When set, raw accelerometer reports are active. + EVT_GRP_RPT_RAW_GYRO_BIT = (1UL << 19U), ///< When set, raw gyro reports are active. + EVT_GRP_RPT_RAW_MAGNETOMETER_BIT = + (1UL << 20U), ///< When set, raw magnetometer reports are active. - EVT_GRP_RPT_ALL = EVT_GRP_RPT_RV_BIT | EVT_GRP_RPT_RV_GAME_BIT | EVT_GRP_RPT_RV_ARVR_S_BIT | EVT_GRP_RPT_RV_ARVR_S_GAME_BIT | - EVT_GRP_RPT_LINEAR_ACCELEROMETER_BIT | EVT_GRP_RPT_GRAVITY_BIT | EVT_GRP_RPT_CAL_GYRO_BIT | EVT_GRP_RPT_UNCAL_GYRO_BIT | - EVT_GRP_RPT_CAL_MAGNETOMETER_BIT | EVT_GRP_RPT_TAP_DETECTOR_BIT | EVT_GRP_RPT_STEP_COUNTER_BIT | - EVT_GRP_RPT_STABILITY_CLASSIFIER_BIT | EVT_GRP_RPT_ACTIVITY_CLASSIFIER_BIT | EVT_GRP_RPT_RAW_ACCELEROMETER_BIT | - EVT_GRP_RPT_RAW_GYRO_BIT | EVT_GRP_RPT_RAW_MAGNETOMETER_BIT | EVT_GRP_RPT_UNCAL_MAGNETOMETER_BIT | - EVT_GRP_RPT_SHAKE_DETECTOR_BIT | EVT_GRP_RPT_ACCELEROMETER_BIT | EVT_GRP_RPT_GEOMAG_RV_BIT | + EVT_GRP_RPT_ALL = EVT_GRP_RPT_RV_BIT | EVT_GRP_RPT_RV_GAME_BIT | EVT_GRP_RPT_RV_ARVR_S_BIT | + EVT_GRP_RPT_RV_ARVR_S_GAME_BIT | EVT_GRP_RPT_LINEAR_ACCELEROMETER_BIT | + EVT_GRP_RPT_GRAVITY_BIT | EVT_GRP_RPT_CAL_GYRO_BIT | + EVT_GRP_RPT_UNCAL_GYRO_BIT | EVT_GRP_RPT_CAL_MAGNETOMETER_BIT | + EVT_GRP_RPT_TAP_DETECTOR_BIT | EVT_GRP_RPT_STEP_COUNTER_BIT | + EVT_GRP_RPT_STABILITY_CLASSIFIER_BIT | + EVT_GRP_RPT_ACTIVITY_CLASSIFIER_BIT | EVT_GRP_RPT_RAW_ACCELEROMETER_BIT | + EVT_GRP_RPT_RAW_GYRO_BIT | EVT_GRP_RPT_RAW_MAGNETOMETER_BIT | + EVT_GRP_RPT_UNCAL_MAGNETOMETER_BIT | EVT_GRP_RPT_SHAKE_DETECTOR_BIT | + EVT_GRP_RPT_ACCELEROMETER_BIT | EVT_GRP_RPT_GEOMAG_RV_BIT | EVT_GRP_RPT_GYRO_INTEGRATED_RV_BIT }; @@ -134,4 +157,4 @@ namespace BNO08xPrivateTypes EVT_GRP_BNO08x_TASK_DATA_AVAILABLE = (1UL << 3U) ///< When this bit is set it indicates a report has been received for the user to read, cleared in data_available() set/cleared in handle_sensor_report(). }; -}; \ No newline at end of file +}; // namespace BNO08xPrivateTypes \ No newline at end of file diff --git a/include/BNO08xSH2HAL.hpp b/include/BNO08xSH2HAL.hpp index 88b4e10..7d202fc 100644 --- a/include/BNO08xSH2HAL.hpp +++ b/include/BNO08xSH2HAL.hpp @@ -57,10 +57,12 @@ * @param packet Pointer to bno08x_rx_packet_t containing data. * @return Length of SHTP packet. */ -#define PARSE_PACKET_LENGTH(header) (UINT16_CLR_LSB(static_cast(header[1]) << 8U) | UINT16_CLR_MSB(static_cast(header[0]))) +#define PARSE_PACKET_LENGTH(header) \ + (UINT16_CLR_LSB(static_cast(header[1]) << 8U) | \ + UINT16_CLR_MSB(static_cast(header[0]))) - // forward dec to prevent compile errors - class BNO08x; +// forward dec to prevent compile errors +class BNO08x; /** * @class BNO08xSH2HAL diff --git a/include/BNO08xTestHelper.hpp b/include/BNO08xTestHelper.hpp index 1985f43..605b5e4 100644 --- a/include/BNO08xTestHelper.hpp +++ b/include/BNO08xTestHelper.hpp @@ -31,7 +31,8 @@ class BNO08xTestHelper */ static void print_test_start_banner(const char* TEST_TAG) { - printf("------------------------ BEGIN TEST: %s ------------------------\n\r", TEST_TAG); + printf("------------------------ BEGIN TEST: %s ------------------------\n\r", + TEST_TAG); } /** diff --git a/include/BNO08xTestSuite.hpp b/include/BNO08xTestSuite.hpp index e65cedd..dfd7aa7 100644 --- a/include/BNO08xTestSuite.hpp +++ b/include/BNO08xTestSuite.hpp @@ -21,12 +21,14 @@ class BNO08xTestSuite private: static void print_begin_tests_banner(const char* test_set_name) { - printf("####################### BEGIN TESTS: %s #######################\n\r", test_set_name); + printf("####################### BEGIN TESTS: %s #######################\n\r", + test_set_name); } static void print_end_tests_banner(const char* test_set_name) { - printf("####################### END TESTS: %s #######################\n\r", test_set_name); + printf("####################### END TESTS: %s #######################\n\r", + test_set_name); } public: diff --git a/include/callback/BNO08xCbGeneric.hpp b/include/callback/BNO08xCbGeneric.hpp index 308cff0..2a43b9d 100644 --- a/include/callback/BNO08xCbGeneric.hpp +++ b/include/callback/BNO08xCbGeneric.hpp @@ -12,7 +12,8 @@ /** * @class BNO08xCbGeneric * - * @brief Parent class to represent callback functions as generic type such that all flavors can be invoked by single type. + * @brief Parent class to represent callback functions as generic type such that all flavors can be + * invoked by single type. */ class BNO08xCbGeneric { diff --git a/include/callback/BNO08xCbParamRptID.hpp b/include/callback/BNO08xCbParamRptID.hpp index edac13d..aa4bf1f 100644 --- a/include/callback/BNO08xCbParamRptID.hpp +++ b/include/callback/BNO08xCbParamRptID.hpp @@ -35,5 +35,5 @@ class BNO08xCbParamRptID : public BNO08xCbGeneric } private: - std::function cb_fxn; ///< Wrapped callback function passed at register_cb(). + std::function cb_fxn; ///< Wrapped callback function passed at register_cb(). }; diff --git a/include/callback/BNO08xCbParamVoid.hpp b/include/callback/BNO08xCbParamVoid.hpp index 95ed526..cbfbc95 100644 --- a/include/callback/BNO08xCbParamVoid.hpp +++ b/include/callback/BNO08xCbParamVoid.hpp @@ -24,7 +24,8 @@ class BNO08xCbParamVoid : public BNO08xCbGeneric /** * @brief Invokes contained callback function. * - * @param rpt_ID n/a, not used, kept to maintain same prototype as BNO08xCbParamRptID::invoke() + * @param rpt_ID n/a, not used, kept to maintain same prototype as + * BNO08xCbParamRptID::invoke() * * @return void, nothing to return */ @@ -34,5 +35,5 @@ class BNO08xCbParamVoid : public BNO08xCbGeneric } private: - std::function cb_fxn; ///< Wrapped callback function passed at register_cb(). + std::function cb_fxn; ///< Wrapped callback function passed at register_cb(). }; diff --git a/include/report/BNO08xRpt.hpp b/include/report/BNO08xRpt.hpp index b8162a5..b47e4b9 100644 --- a/include/report/BNO08xRpt.hpp +++ b/include/report/BNO08xRpt.hpp @@ -23,7 +23,8 @@ class BNO08xRpt { public: - bool enable(uint32_t time_between_reports, sh2_SensorConfig_t sensor_cfg = BNO08xPrivateTypes::default_sensor_cfg); + bool enable(uint32_t time_between_reports, + sh2_SensorConfig_t sensor_cfg = BNO08xPrivateTypes::default_sensor_cfg); bool disable(sh2_SensorConfig_t sensor_cfg = BNO08xPrivateTypes::default_sensor_cfg); bool register_cb(std::function cb_fxn); bool has_new_data(); @@ -32,19 +33,25 @@ class BNO08xRpt bool clear_sample_counts(); bool get_meta_data(bno08x_meta_data_t& meta_data); - uint8_t ID; ///< Report ID, ex. SH2_ACCELERATION. - EventBits_t rpt_bit; ///< Respective enable and data bit for report in BNO08x::evt_grp_report_en and BNO08x::evt_grp_report_data - uint32_t period_us; ///< The period/interval of the report in microseconds. + uint8_t ID; ///< Report ID, ex. SH2_ACCELERATION. + EventBits_t + rpt_bit; ///< Respective enable and data bit for report in BNO08x::evt_grp_report_en and BNO08x::evt_grp_report_data + uint32_t period_us; ///< The period/interval of the report in microseconds. protected: - SemaphoreHandle_t* _sh2_HAL_lock; ///* _en_report_ids; ///< Vector to contain IDs of currently enabled reports - BNO08xPrivateTypes::bno08x_cb_list_t* _cb_list; ///< Vector to contain registered callbacks. + EventGroupHandle_t* + _evt_grp_bno08x_task; ///* + _en_report_ids; ///< Vector to contain IDs of currently enabled reports + BNO08xPrivateTypes::bno08x_cb_list_t* _cb_list; ///< Vector to contain registered callbacks. virtual void update_data(sh2_SensorValue_t* sensor_val) = 0; @@ -82,7 +89,8 @@ class BNO08xRpt void signal_data_available(); static const constexpr float RAD_2_DEG = - (180.0f / M_PI); ///< Constant for radian to degree conversions, sed in quaternion to euler function conversions. + (180.0f / + M_PI); ///< Constant for radian to degree conversions, sed in quaternion to euler function conversions. static const constexpr char* TAG = "BNO08xRpt"; diff --git a/include/report/BNO08xRptActivityClassifier.hpp b/include/report/BNO08xRptActivityClassifier.hpp index 7fd61e7..ad92a19 100644 --- a/include/report/BNO08xRptActivityClassifier.hpp +++ b/include/report/BNO08xRptActivityClassifier.hpp @@ -27,6 +27,7 @@ class BNO08xRptActivityClassifier : public BNO08xRpt private: void update_data(sh2_SensorValue_t* sensor_val) override; - bno08x_activity_classifier_t data; ///< Most recent report data, doesn't account for step rollover. + bno08x_activity_classifier_t + data; ///< Most recent report data, doesn't account for step rollover. static const constexpr char* TAG = "BNO08xRptActivityClassifier"; }; diff --git a/include/report/BNO08xTapDetector.hpp b/include/report/BNO08xTapDetector.hpp index e8d2ba4..4e8716d 100644 --- a/include/report/BNO08xTapDetector.hpp +++ b/include/report/BNO08xTapDetector.hpp @@ -20,7 +20,8 @@ class BNO08xTapDetector : public BNO08xRpt { } - bool enable(uint32_t time_between_reports, sh2_SensorConfig_t sensor_cfg = BNO08xPrivateTypes::default_sensor_cfg); + bool enable(uint32_t time_between_reports, + sh2_SensorConfig_t sensor_cfg = BNO08xPrivateTypes::default_sensor_cfg); bno08x_tap_detector_t get(); private: diff --git a/source/BNO08x.cpp b/source/BNO08x.cpp index cd01899..27ac22c 100644 --- a/source/BNO08x.cpp +++ b/source/BNO08x.cpp @@ -13,52 +13,74 @@ using namespace BNO08xPrivateTypes; * * Construct a BNO08x object for managing a BNO08x sensor. * - * @param imu_config Configuration settings (optional), default settings can be seen in bno08x_config_t + * @param imu_config Configuration settings (optional), default settings can be seen in + * bno08x_config_t * @return void, nothing to return */ BNO08x::BNO08x(bno08x_config_t imu_config) - : accelerometer(bno08x_report_info_t(SH2_ACCELEROMETER, EVT_GRP_RPT_ACCELEROMETER_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, - &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , linear_accelerometer(bno08x_report_info_t(SH2_LINEAR_ACCELERATION, EVT_GRP_RPT_LINEAR_ACCELEROMETER_BIT, &sh2_HAL_lock, &data_lock, - &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , gravity(bno08x_report_info_t(SH2_GRAVITY, EVT_GRP_RPT_GRAVITY_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, - &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , cal_magnetometer(bno08x_report_info_t(SH2_MAGNETIC_FIELD_CALIBRATED, EVT_GRP_RPT_CAL_MAGNETOMETER_BIT, &sh2_HAL_lock, &data_lock, - &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , uncal_magnetometer(bno08x_report_info_t(SH2_MAGNETIC_FIELD_UNCALIBRATED, EVT_GRP_RPT_UNCAL_MAGNETOMETER_BIT, &sh2_HAL_lock, &data_lock, - &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , cal_gyro(bno08x_report_info_t(SH2_GYROSCOPE_CALIBRATED, EVT_GRP_RPT_CAL_GYRO_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, - &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , uncal_gyro(bno08x_report_info_t(SH2_GYROSCOPE_UNCALIBRATED, EVT_GRP_RPT_UNCAL_GYRO_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, - &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , rv(bno08x_report_info_t(SH2_ROTATION_VECTOR, EVT_GRP_RPT_RV_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, + : rpt_accelerometer(bno08x_report_info_t(SH2_ACCELEROMETER, EVT_GRP_RPT_ACCELEROMETER_BIT, + &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , rv_game(bno08x_report_info_t(SH2_GAME_ROTATION_VECTOR, EVT_GRP_RPT_RV_GAME_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, + , rpt_linear_accelerometer(bno08x_report_info_t(SH2_LINEAR_ACCELERATION, + EVT_GRP_RPT_LINEAR_ACCELEROMETER_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , rv_ARVR_stabilized(bno08x_report_info_t(SH2_ARVR_STABILIZED_RV, EVT_GRP_RPT_RV_ARVR_S_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, + , rpt_gravity(bno08x_report_info_t(SH2_GRAVITY, EVT_GRP_RPT_GRAVITY_BIT, &sh2_HAL_lock, + &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, + &en_report_ids, &cb_list)) + , rpt_cal_magnetometer(bno08x_report_info_t(SH2_MAGNETIC_FIELD_CALIBRATED, + EVT_GRP_RPT_CAL_MAGNETOMETER_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , rv_ARVR_stabilized_game(bno08x_report_info_t(SH2_ARVR_STABILIZED_GRV, EVT_GRP_RPT_RV_ARVR_S_GAME_BIT, &sh2_HAL_lock, &data_lock, - &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , rv_gyro_integrated(bno08x_report_info_t(SH2_GYRO_INTEGRATED_RV, EVT_GRP_RPT_GYRO_INTEGRATED_RV_BIT, &sh2_HAL_lock, &data_lock, - &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , rv_geomagnetic(bno08x_report_info_t(SH2_GEOMAGNETIC_ROTATION_VECTOR, EVT_GRP_RPT_GEOMAG_RV_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, + , rpt_uncal_magnetometer(bno08x_report_info_t(SH2_MAGNETIC_FIELD_UNCALIBRATED, + EVT_GRP_RPT_UNCAL_MAGNETOMETER_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , raw_gyro(bno08x_report_info_t(SH2_RAW_GYROSCOPE, EVT_GRP_RPT_RAW_GYRO_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, + , rpt_cal_gyro(bno08x_report_info_t(SH2_GYROSCOPE_CALIBRATED, EVT_GRP_RPT_CAL_GYRO_BIT, + &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, + &evt_grp_bno08x_task, &en_report_ids, &cb_list)) + , rpt_uncal_gyro(bno08x_report_info_t(SH2_GYROSCOPE_UNCALIBRATED, EVT_GRP_RPT_UNCAL_GYRO_BIT, + &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, + &evt_grp_bno08x_task, &en_report_ids, &cb_list)) + , rpt_rv(bno08x_report_info_t(SH2_ROTATION_VECTOR, EVT_GRP_RPT_RV_BIT, &sh2_HAL_lock, + &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, + &en_report_ids, &cb_list)) + , rpt_rv_game(bno08x_report_info_t(SH2_GAME_ROTATION_VECTOR, EVT_GRP_RPT_RV_GAME_BIT, + &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, + &evt_grp_bno08x_task, &en_report_ids, &cb_list)) + , rpt_rv_ARVR_stabilized(bno08x_report_info_t(SH2_ARVR_STABILIZED_RV, EVT_GRP_RPT_RV_ARVR_S_BIT, + &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, + &evt_grp_bno08x_task, &en_report_ids, &cb_list)) + , rpt_rv_ARVR_stabilized_game(bno08x_report_info_t(SH2_ARVR_STABILIZED_GRV, + EVT_GRP_RPT_RV_ARVR_S_GAME_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , raw_accelerometer(bno08x_report_info_t(SH2_RAW_ACCELEROMETER, EVT_GRP_RPT_RAW_ACCELEROMETER_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, + , rpt_rv_gyro_integrated(bno08x_report_info_t(SH2_GYRO_INTEGRATED_RV, + EVT_GRP_RPT_GYRO_INTEGRATED_RV_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , raw_magnetometer(bno08x_report_info_t(SH2_RAW_MAGNETOMETER, EVT_GRP_RPT_RAW_MAGNETOMETER_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, + , rpt_rv_geomagnetic(bno08x_report_info_t(SH2_GEOMAGNETIC_ROTATION_VECTOR, + EVT_GRP_RPT_GEOMAG_RV_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , step_counter(bno08x_report_info_t(SH2_STEP_COUNTER, EVT_GRP_RPT_STEP_COUNTER_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, + , rpt_raw_gyro(bno08x_report_info_t(SH2_RAW_GYROSCOPE, EVT_GRP_RPT_RAW_GYRO_BIT, &sh2_HAL_lock, + &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, + &en_report_ids, &cb_list)) + , rpt_raw_accelerometer(bno08x_report_info_t(SH2_RAW_ACCELEROMETER, + EVT_GRP_RPT_RAW_ACCELEROMETER_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , activity_classifier(bno08x_report_info_t(SH2_PERSONAL_ACTIVITY_CLASSIFIER, EVT_GRP_RPT_ACTIVITY_CLASSIFIER_BIT, &sh2_HAL_lock, &data_lock, - &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , stability_classifier(bno08x_report_info_t(SH2_STABILITY_CLASSIFIER, EVT_GRP_RPT_STABILITY_CLASSIFIER_BIT, &sh2_HAL_lock, &data_lock, - &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , shake_detector(bno08x_report_info_t(SH2_SHAKE_DETECTOR, EVT_GRP_RPT_SHAKE_DETECTOR_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, + , rpt_raw_magnetometer(bno08x_report_info_t(SH2_RAW_MAGNETOMETER, + EVT_GRP_RPT_RAW_MAGNETOMETER_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) - , tap_detector(bno08x_report_info_t(SH2_TAP_DETECTOR, EVT_GRP_RPT_TAP_DETECTOR_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, + , rpt_step_counter(bno08x_report_info_t(SH2_STEP_COUNTER, EVT_GRP_RPT_STEP_COUNTER_BIT, + &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, + &evt_grp_bno08x_task, &en_report_ids, &cb_list)) + , rpt_activity_classifier(bno08x_report_info_t(SH2_PERSONAL_ACTIVITY_CLASSIFIER, + EVT_GRP_RPT_ACTIVITY_CLASSIFIER_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) + , rpt_stability_classifier(bno08x_report_info_t(SH2_STABILITY_CLASSIFIER, + EVT_GRP_RPT_STABILITY_CLASSIFIER_BIT, &sh2_HAL_lock, &data_lock, &evt_grp_report_en, + &evt_grp_report_data_available, &evt_grp_bno08x_task, &en_report_ids, &cb_list)) + , rpt_shake_detector(bno08x_report_info_t(SH2_SHAKE_DETECTOR, EVT_GRP_RPT_SHAKE_DETECTOR_BIT, + &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, + &evt_grp_bno08x_task, &en_report_ids, &cb_list)) + , rpt_tap_detector(bno08x_report_info_t(SH2_TAP_DETECTOR, EVT_GRP_RPT_TAP_DETECTOR_BIT, + &sh2_HAL_lock, &data_lock, &evt_grp_report_en, &evt_grp_report_data_available, + &evt_grp_bno08x_task, &en_report_ids, &cb_list)) , data_proc_task_hdl(NULL) , sh2_HAL_service_task_hdl(NULL) , cb_task_hdl(NULL) @@ -118,7 +140,8 @@ BNO08x::~BNO08x() * @brief Initializes BNO08x sensor * * Resets sensor and goes through initialization process. - * Configures GPIO, required ISRs, and launches two tasks, one to manage SPI transactions, another to process any received data. + * Configures GPIO, required ISRs, and launches two tasks, one to manage SPI transactions, another + * to process any received data. * * @return True if initialization was success, false if otherwise. */ @@ -168,12 +191,14 @@ bool BNO08x::initialize() */ void BNO08x::data_proc_task_trampoline(void* arg) { - BNO08x* imu = (BNO08x*) arg; // cast argument received by xTaskCreate ("this" pointer to imu object created by constructor call) + BNO08x* imu = (BNO08x*) arg; // cast argument received by xTaskCreate ("this" pointer to imu + // object created by constructor call) imu->data_proc_task(); // launch data processing task task from object } /** - * @brief Task responsible for parsing/handling sensor events sent by SH2 HAL and updating data that is returned to user. + * @brief Task responsible for parsing/handling sensor events sent by SH2 HAL and updating data that + * is returned to user. * * @return void, nothing to return */ @@ -213,12 +238,14 @@ void BNO08x::data_proc_task() */ void BNO08x::sh2_HAL_service_task_trampoline(void* arg) { - BNO08x* imu = (BNO08x*) arg; // cast argument received by xTaskCreate ("this" pointer to imu object created by constructor call) + BNO08x* imu = (BNO08x*) arg; // cast argument received by xTaskCreate ("this" pointer to imu + // object created by constructor call) imu->sh2_HAL_service_task(); // launch data processing task task from object } /** - * @brief Task responsible for calling shtp_service() when HINT is asserted to dispatch any sh2 HAL lib callbacks. + * @brief Task responsible for calling shtp_service() when HINT is asserted to dispatch any sh2 HAL + * lib callbacks. * * @return void, nothing to return */ @@ -248,8 +275,9 @@ void BNO08x::sh2_HAL_service_task() unlock_sh2_HAL(); } - evt_grp_bno08x_task_bits = xEventGroupWaitBits( - evt_grp_bno08x_task, EVT_GRP_BNO08x_TASK_HINT_ASSRT_BIT | EVT_GRP_BNO08x_TASK_RESET_OCCURRED, pdFALSE, pdFALSE, portMAX_DELAY); + evt_grp_bno08x_task_bits = xEventGroupWaitBits(evt_grp_bno08x_task, + EVT_GRP_BNO08x_TASK_HINT_ASSRT_BIT | EVT_GRP_BNO08x_TASK_RESET_OCCURRED, pdFALSE, + pdFALSE, portMAX_DELAY); } while (evt_grp_bno08x_task_bits & EVT_GRP_BNO08x_TASKS_RUNNING); @@ -268,7 +296,8 @@ void BNO08x::sh2_HAL_service_task() */ void BNO08x::cb_task_trampoline(void* arg) { - BNO08x* imu = (BNO08x*) arg; // cast argument received by xTaskCreate ("this" pointer to imu object created by constructor call) + BNO08x* imu = (BNO08x*) arg; // cast argument received by xTaskCreate ("this" pointer to imu + // object created by constructor call) imu->cb_task(); // launch data processing task task from object } @@ -401,7 +430,8 @@ void BNO08x::handle_cb(uint8_t rpt_ID, BNO08xCbGeneric* cb_entry) } /** - * @brief Initializes required esp-idf SPI data structures with values from user passed bno08x_config_t struct. + * @brief Initializes required esp-idf SPI data structures with values from user passed + * bno08x_config_t struct. * * @return ESP_OK if initialization was success. */ @@ -470,7 +500,8 @@ esp_err_t BNO08x::init_config_args() bus_config.quadwp_io_num = -1; // write protect signal gpio (not used) // SPI slave device specific config - imu_spi_config.mode = 0x3; // set mode to 3 as per BNO08x datasheet (CPHA second edge, CPOL bus high when idle) + imu_spi_config.mode = 0x3; // set mode to 3 as per BNO08x datasheet (CPHA second edge, CPOL bus + // high when idle) if (imu_config.sclk_speed > SCLK_MAX_SPEED) // max sclk speed of 3MHz for BNO08x { @@ -487,9 +518,11 @@ esp_err_t BNO08x::init_config_args() imu_spi_config.clock_speed_hz = imu_config.sclk_speed; // assign SCLK speed imu_spi_config.address_bits = 0; // 0 address bits, not using this system imu_spi_config.command_bits = 0; // 0 command bits, not using this system - imu_spi_config.spics_io_num = -1; // due to esp32 silicon issue, chip select cannot be used with full-duplex mode - // driver, it must be handled via calls to gpio pins - imu_spi_config.queue_size = static_cast(CONFIG_ESP32_BNO08X_SPI_QUEUE_SZ); // set max allowable queued SPI transactions + imu_spi_config.spics_io_num = + -1; // due to esp32 silicon issue, chip select cannot be used with full-duplex mode + // driver, it must be handled via calls to gpio pins + imu_spi_config.queue_size = static_cast( + CONFIG_ESP32_BNO08X_SPI_QUEUE_SZ); // set max allowable queued SPI transactions return ESP_OK; } @@ -523,7 +556,8 @@ esp_err_t BNO08x::init_gpio_inputs() } else { - init_status.gpio_inputs = true; // set gpio_inputs to initialized such that deconstructor knows to clean them up + init_status.gpio_inputs = true; // set gpio_inputs to initialized such that deconstructor + // knows to clean them up } return ret; @@ -559,7 +593,8 @@ esp_err_t BNO08x::init_gpio_outputs() } else { - init_status.gpio_outputs = true; // set gpio_inputs to initialized such that deconstructor knows to clean them up + init_status.gpio_outputs = true; // set gpio_inputs to initialized such that deconstructor + // knows to clean them up } return ret; @@ -615,8 +650,9 @@ esp_err_t BNO08x::init_hint_isr() } else { - init_status.isr_service = true; // set isr service to initialized such that deconstructor knows to clean it up (this will be ignored if - // imu_config.install_isr_service == false) + init_status.isr_service = + true; // set isr service to initialized such that deconstructor knows to clean it up + // (this will be ignored if imu_config.install_isr_service == false) } ret = gpio_isr_handler_add(imu_config.io_int, hint_handler, (void*) this); @@ -633,7 +669,8 @@ esp_err_t BNO08x::init_hint_isr() } else { - init_status.isr_handler = true; // set isr handler to initialized such that deconstructor knows to clean it up + init_status.isr_handler = + true; // set isr handler to initialized such that deconstructor knows to clean it up } return ret; @@ -651,7 +688,8 @@ esp_err_t BNO08x::init_tasks() xEventGroupSetBits(evt_grp_bno08x_task, EVT_GRP_BNO08x_TASKS_RUNNING); // launch data processing task - task_created = xTaskCreate(&data_proc_task_trampoline, "bno08x_data_processing_task", DATA_PROC_TASK_SZ, this, 6, &data_proc_task_hdl); + task_created = xTaskCreate(&data_proc_task_trampoline, "bno08x_data_processing_task", + DATA_PROC_TASK_SZ, this, 6, &data_proc_task_hdl); if (task_created != pdTRUE) { @@ -669,7 +707,8 @@ esp_err_t BNO08x::init_tasks() } // launch cb task - task_created = xTaskCreate(&cb_task_trampoline, "bno08x_cb_task", CB_TASK_SZ, this, 5, &cb_task_hdl); + task_created = + xTaskCreate(&cb_task_trampoline, "bno08x_cb_task", CB_TASK_SZ, this, 5, &cb_task_hdl); if (task_created != pdTRUE) { @@ -687,8 +726,8 @@ esp_err_t BNO08x::init_tasks() } // launch sh2 hal service task - task_created = - xTaskCreate(&sh2_HAL_service_task_trampoline, "bno08x_sh2_HAL_service_task", SH2_HAL_SERVICE_TASK_SZ, this, 7, &sh2_HAL_service_task_hdl); + task_created = xTaskCreate(&sh2_HAL_service_task_trampoline, "bno08x_sh2_HAL_service_task", + SH2_HAL_SERVICE_TASK_SZ, this, 7, &sh2_HAL_service_task_hdl); if (task_created != pdTRUE) { @@ -999,13 +1038,15 @@ esp_err_t BNO08x::deinit_tasks() // disable interrupts before beginning so we can ensure SPI transaction doesn't attempt to run gpio_intr_disable(imu_config.io_int); - init_count += (static_cast(init_status.cb_task) + static_cast(init_status.data_proc_task) + + init_count += (static_cast(init_status.cb_task) + + static_cast(init_status.data_proc_task) + static_cast(init_status.sh2_HAL_service_task)); if (init_count != 0) { sem_kill_tasks = xSemaphoreCreateCounting(init_count, 0); - xEventGroupClearBits(evt_grp_bno08x_task, EVT_GRP_BNO08x_TASKS_RUNNING); // clear task running bit request deletion of tasks + xEventGroupClearBits(evt_grp_bno08x_task, + EVT_GRP_BNO08x_TASKS_RUNNING); // clear task running bit request deletion of tasks if (init_status.cb_task) xQueueSend(queue_cb_report_id, &empty_ID, 0); @@ -1218,7 +1259,165 @@ bool BNO08x::sleep() } /** - * @brief Retrieves a record from flash record system (if your goal is to retrieve meta data use the BNO08xRpt:get_meta_data() method instead) + * @brief Enables dynamic/motion engine calibration for specified sensor(s), see ref. manual 6.4.6.1 + * + * @param sensor The sensor(s) to enable dynamic/ME calibration for. + * + * @return True if enable dynamic/ME calibration succeeded. + */ +bool BNO08x::enable_dynamic_calibration(BNO08xCalSel sensor) +{ + int op_success = SH2_ERR; + + lock_sh2_HAL(); + op_success = sh2_setCalConfig(static_cast(sensor)); + unlock_sh2_HAL(); + + return (op_success == SH2_OK); +} + +/** + * @brief Disables dynamic/motion engine calibration for specified sensor(s), see ref. + * manual 6.4.6.1 + * + * @param sensor The sensor(s) to disable dynamic/ME calibration for. + * + * @return True if disable dynamic/ME calibration succeeded. + */ +bool BNO08x::disable_dynamic_calibration(BNO08xCalSel sensor) +{ + int op_success = SH2_ERR; + uint8_t active_sensors = 0U; + + lock_sh2_HAL(); + op_success = sh2_getCalConfig(&active_sensors); + unlock_sh2_HAL(); + + if (op_success == SH2_OK) + { + active_sensors &= ~static_cast(sensor); + + lock_sh2_HAL(); + op_success = sh2_setCalConfig(active_sensors); + unlock_sh2_HAL(); + } + + return (op_success == SH2_OK); +} + +/** + * @brief Enables the automatic saving of dynamic/ME calibration data to BNO08x internal flash See + * ref manual 6.4.7.1. + * + * @return True if dynamic/ME calibration autosave data enable succeeded. + */ +bool BNO08x::enable_autosave_dynamic_calibration() +{ + int op_success = SH2_ERR; + + lock_sh2_HAL(); + op_success = sh2_setDcdAutoSave(true); + unlock_sh2_HAL(); + + return (op_success == SH2_OK); +} + +/** + * @brief Disables the automatic saving of dynamic/ME calibration data to BNO08x internal flash See + * ref manual 6.4.7.1. + * + * @return True if dynamic/ME calibration autosave data enable succeeded. + */ +bool BNO08x::disable_autosave_dynamic_calibration() +{ + int op_success = SH2_ERR; + + lock_sh2_HAL(); + op_success = sh2_setDcdAutoSave(false); + unlock_sh2_HAL(); + + return (op_success == SH2_OK); +} + +/** + * @brief Saves dynamic/motion engine calibration data to BNO08x internal flash immediately. See ref + * manual 6.4.5.1 + * + * @return True if save dynamic/ME calibration data succeeded. + */ +bool BNO08x::save_dynamic_calibration() +{ + int op_success = SH2_ERR; + + lock_sh2_HAL(); + op_success = sh2_saveDcdNow(); + unlock_sh2_HAL(); + + return (op_success == SH2_OK); +} + +/** + * @brief Clears dynamic/motion engine calibration data and resets BNO08x device. See ref + * manual 6.4.9.1 + * + * @return True if save dynamic/ME calibration data succeeded. + */ +bool BNO08x::clear_dynamic_calibration() +{ + int op_success = SH2_ERR; + + // send clear DCD and reset command + lock_sh2_HAL(); + op_success = sh2_clearDcdAndReset(); + unlock_sh2_HAL(); + + if (op_success == SH2_OK) + { + // wait for reset to be detected by SH2 HAL lib + if (wait_for_reset() == ESP_OK) + { + // run service to dispatch callbacks + lock_sh2_HAL(); + sh2_service(); + unlock_sh2_HAL(); + + if (get_reset_reason() == BNO08xResetReason::EXT_RST) + { + return true; + } + else + { + // clang-format off + #ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS + ESP_LOGE(TAG, "Clear dynamic calibration failure, incorrect reset reason returned."); + #endif + // clang-format on + } + } + else + { + // clang-format off + #ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS + ESP_LOGE(TAG, "Clear dynamic calibration failure, reset never detected after sending command."); + #endif + // clang-format on + } + } + else + { + // clang-format off + #ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS + ESP_LOGE(TAG, "Clear dynamic calibration failure, failed to send reset command"); + #endif + // clang-format on + } + + return false; +} + +/** + * @brief Retrieves a record from flash record system (if your goal is to retrieve meta data use the + * BNO08xRpt:get_meta_data() method instead) * * For more details on returned and data and frs_ID see ref. manual 6.3.7 & 4.3 * @@ -1239,6 +1438,16 @@ bool BNO08x::get_frs(uint16_t frs_ID, uint32_t (&data)[16], uint16_t& rx_data_sz return (op_success == SH2_OK); } +/** + * @brief Returns product ID info sent by IMU at initialization. + * + * @return The product ID info returned at initialization. + */ +sh2_ProductIds_t BNO08x::get_product_IDs() +{ + return product_IDs; +} + /** * @brief Waits for HINT pin assertion or HOST_INT_TIMEOUT_DEFAULT_MS to elapse. * @@ -1249,7 +1458,8 @@ esp_err_t BNO08x::wait_for_hint() { EventBits_t spi_evt_bits; - spi_evt_bits = xEventGroupWaitBits(evt_grp_bno08x_task, EVT_GRP_BNO08x_TASK_HINT_ASSRT_BIT, pdTRUE, pdFALSE, HOST_INT_TIMEOUT_DEFAULT_MS); + spi_evt_bits = xEventGroupWaitBits(evt_grp_bno08x_task, EVT_GRP_BNO08x_TASK_HINT_ASSRT_BIT, + pdTRUE, pdFALSE, HOST_INT_TIMEOUT_DEFAULT_MS); if (spi_evt_bits & EVT_GRP_BNO08x_TASK_HINT_ASSRT_BIT) return ESP_OK; @@ -1265,7 +1475,8 @@ esp_err_t BNO08x::wait_for_hint() */ esp_err_t BNO08x::wait_for_reset() { - if (xEventGroupWaitBits(evt_grp_bno08x_task, EVT_GRP_BNO08x_TASK_RESET_OCCURRED, pdFALSE, pdFALSE, HOST_INT_TIMEOUT_DEFAULT_MS) & + if (xEventGroupWaitBits(evt_grp_bno08x_task, EVT_GRP_BNO08x_TASK_RESET_OCCURRED, pdFALSE, + pdFALSE, HOST_INT_TIMEOUT_DEFAULT_MS) & EVT_GRP_BNO08x_TASK_RESET_OCCURRED) return ESP_OK; else @@ -1285,13 +1496,14 @@ void BNO08x::toggle_reset() gpio_set_level(imu_config.io_cs, 1); gpio_set_level(imu_config.io_rst, 0); // set reset pin low - vTaskDelay(HARD_RESET_DELAY_MS); // 10ns min, set to larger delay to let things stabilize(Anton) + vTaskDelay(HARD_RESET_DELAY_MS); // 10ns min, set to larger delay to let things stabilize(Anton) gpio_intr_enable(imu_config.io_int); // enable interrupts before bringing out of reset gpio_set_level(imu_config.io_rst, 1); // bring out of reset } /** - * @brief Re-enables all reports enabled by user (called when BNO08x reset is detected by sh2 HAL lib). + * @brief Re-enables all reports enabled by user (called when BNO08x reset is detected by sh2 HAL + * lib). * * @return ESP_OK if enabled reports were successfuly re-enabled. */ @@ -1339,7 +1551,8 @@ esp_err_t BNO08x::re_enable_reports() bool BNO08x::data_available() { - if (xEventGroupWaitBits(evt_grp_bno08x_task, EVT_GRP_BNO08x_TASK_DATA_AVAILABLE, pdTRUE, pdFALSE, DATA_AVAILABLE_TIMEOUT_MS) & + if (xEventGroupWaitBits(evt_grp_bno08x_task, EVT_GRP_BNO08x_TASK_DATA_AVAILABLE, pdTRUE, + pdFALSE, DATA_AVAILABLE_TIMEOUT_MS) & EVT_GRP_BNO08x_TASK_DATA_AVAILABLE) return true; @@ -1365,9 +1578,11 @@ bool BNO08x::register_cb(std::function cb_fxn) } /** - * @brief Registers a callback to execute when new data from a report is received, overloaded with callback param for most recent report ID. + * @brief Registers a callback to execute when new data from a report is received, overloaded with + * callback param for most recent report ID. * - * @param cb_fxn Pointer to the call-back function should be of void return type with single input param of uint8_t for most recent report ID. + * @param cb_fxn Pointer to the call-back function should be of void return type with single input + * param of uint8_t for most recent report ID. * * @return void, nothing to return */ @@ -1399,8 +1614,9 @@ void BNO08x::print_product_ids() " SW Build Number: 0x%" PRIx32 "\n\r" " SW Version Patch: 0x%" PRIx16 "\n\r" " ---------------------------\n\r", - i, product_IDs.entry->swPartNumber, product_IDs.entry->swVersionMajor, product_IDs.entry->swVersionMinor, - product_IDs.entry->swBuildNumber, product_IDs.entry->swVersionPatch); + i, product_IDs.entry->swPartNumber, product_IDs.entry->swVersionMajor, + product_IDs.entry->swVersionMinor, product_IDs.entry->swBuildNumber, + product_IDs.entry->swVersionPatch); } } @@ -1495,10 +1711,11 @@ const char* BNO08x::accuracy_to_str(BNO08xAccuracy accuracy) void IRAM_ATTR BNO08x::hint_handler(void* arg) { BaseType_t xHighPriorityTaskWoken = pdFALSE; - BNO08x* imu = (BNO08x*) arg; // cast argument received by gpio_isr_handler_add ("this" pointer to imu object - // created by constructor call) + BNO08x* imu = (BNO08x*) arg; // cast argument received by gpio_isr_handler_add ("this" pointer + // to imu object created by constructor call) // notify any tasks/function calls waiting for HINT assertion - xEventGroupSetBitsFromISR(imu->evt_grp_bno08x_task, EVT_GRP_BNO08x_TASK_HINT_ASSRT_BIT, &xHighPriorityTaskWoken); + xEventGroupSetBitsFromISR( + imu->evt_grp_bno08x_task, EVT_GRP_BNO08x_TASK_HINT_ASSRT_BIT, &xHighPriorityTaskWoken); portYIELD_FROM_ISR(xHighPriorityTaskWoken); // perform context switch if necessary } diff --git a/source/BNO08xRpt.cpp b/source/BNO08xRpt.cpp index 4205562..4ec9374 100644 --- a/source/BNO08xRpt.cpp +++ b/source/BNO08xRpt.cpp @@ -9,7 +9,8 @@ * @brief Enables a sensor report such that the BNO08x begins sending it. * * @param report_period_us The period/interval of the report in microseconds. - * @param sensor_cfg Sensor special configuration (optional, see BNO08xPrivateTypes::default_sensor_cfg for defaults). + * @param sensor_cfg Sensor special configuration (optional, see + * BNO08xPrivateTypes::default_sensor_cfg for defaults). * * @return True if report was successfully enabled. */ @@ -46,7 +47,8 @@ bool BNO08xRpt::enable(uint32_t time_between_reports, sh2_SensorConfig_t sensor_ } /** - * @brief Disables a sensor report by setting its period to 0us such that the BNO08x stops sending it. + * @brief Disables a sensor report by setting its period to 0us such that the BNO08x stops sending + * it. * * @param sensor_ID The ID of the sensor for the respective report to be disabled. * @param sensor_cfg Sensor special configuration. @@ -180,9 +182,11 @@ bool BNO08xRpt::clear_sample_counts() } /** - * @brief Retrieves meta data for this sensor/report by reading respective record in FRS (flash record system). + * @brief Retrieves meta data for this sensor/report by reading respective record in FRS (flash + * record system). * - * Can be used to retrieve the minimum period, maximum period, actual Q points, resolution, and other info for a given sensor. + * Can be used to retrieve the minimum period, maximum period, actual Q points, resolution, and + * other info for a given sensor. * * @return True clear get meta data operation succeeded. */ @@ -250,5 +254,6 @@ void BNO08xRpt::unlock_user_data() void BNO08xRpt::signal_data_available() { xEventGroupSetBits(*_evt_grp_rpt_data_available, rpt_bit); - xEventGroupSetBits(*_evt_grp_bno08x_task, BNO08xPrivateTypes::EVT_GRP_BNO08x_TASK_DATA_AVAILABLE); + xEventGroupSetBits( + *_evt_grp_bno08x_task, BNO08xPrivateTypes::EVT_GRP_BNO08x_TASK_DATA_AVAILABLE); } diff --git a/source/BNO08xSH2HAL.cpp b/source/BNO08xSH2HAL.cpp index bea3954..8fbd268 100644 --- a/source/BNO08xSH2HAL.cpp +++ b/source/BNO08xSH2HAL.cpp @@ -33,7 +33,8 @@ int BNO08xSH2HAL::spi_open(sh2_Hal_t* self) } /** - * @brief Closes SPI instance (nothing to do here, but required by sh2 HAL lib for cases where other communication protocols are used.) + * @brief Closes SPI instance (nothing to do here, but required by sh2 HAL lib for cases where other + * communication protocols are used.) * * @return void, nothing to return */ @@ -136,7 +137,8 @@ uint32_t BNO08xSH2HAL::get_time_us(sh2_Hal_t* self) void BNO08xSH2HAL::hal_cb(void* cookie, sh2_AsyncEvent_t* pEvent) { if (pEvent->eventId == SH2_RESET) - xEventGroupSetBits(imu->evt_grp_bno08x_task, BNO08xPrivateTypes::EVT_GRP_BNO08x_TASK_RESET_OCCURRED); + xEventGroupSetBits( + imu->evt_grp_bno08x_task, BNO08xPrivateTypes::EVT_GRP_BNO08x_TASK_RESET_OCCURRED); } /** diff --git a/source/report/BNO08xRptActivityClassifier.cpp b/source/report/BNO08xRptActivityClassifier.cpp index b3c54cd..97a1800 100644 --- a/source/report/BNO08xRptActivityClassifier.cpp +++ b/source/report/BNO08xRptActivityClassifier.cpp @@ -10,13 +10,17 @@ * * @param time_between_reports The period/interval of the report in microseconds. * @param activities_to_enable Which activities to enable. - * @param sensor_cfg Sensor special configuration (optional, see BNO08xPrivateTypes::default_sensor_cfg for defaults). + * @param sensor_cfg Sensor special configuration (optional, see + * BNO08xPrivateTypes::default_sensor_cfg for defaults). * * @return True if report was successfully enabled. */ -bool BNO08xRptActivityClassifier::enable(uint32_t time_between_reports, BNO08xActivityEnable activities_to_enable, sh2_SensorConfig_t sensor_cfg) +bool BNO08xRptActivityClassifier::enable(uint32_t time_between_reports, + BNO08xActivityEnable activities_to_enable, sh2_SensorConfig_t sensor_cfg) { - sensor_cfg.sensorSpecific = static_cast(activities_to_enable); // this must be set regardless of user cfg or no reports will be received + sensor_cfg.sensorSpecific = + static_cast(activities_to_enable); // this must be set regardless of user cfg + // or no reports will be received return BNO08xRpt::enable(time_between_reports, sensor_cfg); } diff --git a/source/report/BNO08xRptIGyroRV.cpp b/source/report/BNO08xRptIGyroRV.cpp index 2890df8..237dac8 100644 --- a/source/report/BNO08xRptIGyroRV.cpp +++ b/source/report/BNO08xRptIGyroRV.cpp @@ -41,7 +41,8 @@ void BNO08xRptIGyroRV::get(bno08x_quat_t& quat, bno08x_ang_vel_t& vel) } /** - * @brief Grabs most recent gyro integrated rotation vector angular velocity data, units are in rad/s. + * @brief Grabs most recent gyro integrated rotation vector angular velocity data, units are in + * rad/s. * * @return Struct containing requested data. */ diff --git a/source/report/BNO08xRptRVGeneric.cpp b/source/report/BNO08xRptRVGeneric.cpp index 379557f..28f8c39 100644 --- a/source/report/BNO08xRptRVGeneric.cpp +++ b/source/report/BNO08xRptRVGeneric.cpp @@ -6,7 +6,8 @@ #include "BNO08xRptRVGeneric.hpp" /** - * @brief Grabs most recent rotation vector data in form of unit quaternion, rad accuracy units in radians (if available, else constant 0.0f). + * @brief Grabs most recent rotation vector data in form of unit quaternion, rad accuracy units in + * radians (if available, else constant 0.0f). * * The following RV reports have rad accuracy data: * @@ -25,7 +26,8 @@ bno08x_quat_t BNO08xRptRVGeneric::get_quat() } /** - * @brief Grabs most recent rotation vector data in form of an euler angle, units are in degrees or rads. + * @brief Grabs most recent rotation vector data in form of an euler angle, units are in degrees or + * rads. * * @param in_degrees If true returned euler angle is in degrees, if false in radians * diff --git a/source/report/BNO08xRptRawMEMSAccelerometer.cpp b/source/report/BNO08xRptRawMEMSAccelerometer.cpp index c525df6..ab9dd27 100644 --- a/source/report/BNO08xRptRawMEMSAccelerometer.cpp +++ b/source/report/BNO08xRptRawMEMSAccelerometer.cpp @@ -24,7 +24,8 @@ void BNO08xRptRawMEMSAccelerometer::update_data(sh2_SensorValue_t* sensor_val) } /** - * @brief Grabs most recent raw accelerometer data, units are ADC counts, time_stamp in microseconds. + * @brief Grabs most recent raw accelerometer data, units are ADC counts, time_stamp in + * microseconds. * * @return Struct containing requested data. */ diff --git a/source/report/BNO08xRptStepCounter.cpp b/source/report/BNO08xRptStepCounter.cpp index 2439ef9..0520508 100644 --- a/source/report/BNO08xRptStepCounter.cpp +++ b/source/report/BNO08xRptStepCounter.cpp @@ -48,7 +48,8 @@ uint32_t BNO08xRptStepCounter::get_total_steps() } /** - * @brief Grabs most recent step counter data (rollover not accounted for in step count, just most recent report data). + * @brief Grabs most recent step counter data (rollover not accounted for in step count, just most + * recent report data). * * @return Struct containing requested data. */ diff --git a/source/report/BNO08xShakeDetector.cpp b/source/report/BNO08xShakeDetector.cpp index 58be6b1..37297ea 100644 --- a/source/report/BNO08xShakeDetector.cpp +++ b/source/report/BNO08xShakeDetector.cpp @@ -4,6 +4,7 @@ */ #include "BNO08xShakeDetector.hpp" + /** * @brief Updates shake detector data from decoded sensor event. * diff --git a/source/report/BNO08xTapDetector.cpp b/source/report/BNO08xTapDetector.cpp index 459a702..35e2561 100644 --- a/source/report/BNO08xTapDetector.cpp +++ b/source/report/BNO08xTapDetector.cpp @@ -6,17 +6,21 @@ #include "BNO08xTapDetector.hpp" /** - * @brief Enables tap detector reports such that the BNO08x begins sending them (only sends reports when a tap is detected). + * @brief Enables tap detector reports such that the BNO08x begins sending them (only sends reports + * when a tap is detected). * * @param time_between_reports The period/interval of the report in microseconds. - * @param sensor_cfg Sensor special configuration (optional, see BNO08xPrivateTypes::default_sensor_cfg for defaults). + * @param sensor_cfg Sensor special configuration (optional, see + * BNO08xPrivateTypes::default_sensor_cfg for defaults). * * @return True if report was successfully enabled. */ bool BNO08xTapDetector::enable(uint32_t time_between_reports, sh2_SensorConfig_t sensor_cfg) { - sensor_cfg.changeSensitivityEnabled = true; // this must be set regardless of user cfg or no reports will be received - sensor_cfg.changeSensitivity = 0U; // this must be set regardless of user cfg or no reports will be received + sensor_cfg.changeSensitivityEnabled = + true; // this must be set regardless of user cfg or no reports will be received + sensor_cfg.changeSensitivity = + 0U; // this must be set regardless of user cfg or no reports will be received return BNO08xRpt::enable(time_between_reports, sensor_cfg); } diff --git a/test/CallbackTests.cpp b/test/CallbackTests.cpp index 4fa3774..0d20cc7 100644 --- a/test/CallbackTests.cpp +++ b/test/CallbackTests.cpp @@ -3,16 +3,19 @@ * @author Myles Parfeniuk * * - * @warning YOU MUST ADD THE FOLLOWING LINE TO YOUR MAIN PROJECTS CMakeLists.txt IN ORDER FOR THIS TEST SUITE TO BE BUILT WITH PROJECT: - * set(TEST_COMPONENTS "esp32_BNO08x" CACHE STRING "Components to test.") + * @warning YOU MUST ADD THE FOLLOWING LINE TO YOUR MAIN PROJECTS CMakeLists.txt IN ORDER FOR THIS + * TEST SUITE TO BE BUILT WITH PROJECT: set(TEST_COMPONENTS "esp32_BNO08x" CACHE STRING "Components + * to test.") */ #include "unity.h" #include "../include/BNO08xTestHelper.hpp" -TEST_CASE("BNO08x Driver Creation for [CallbackAllReportVoidInputParam] Tests", "[CallbackAllReportVoidInputParam]") +TEST_CASE("BNO08x Driver Creation for [CallbackAllReportVoidInputParam] Tests", + "[CallbackAllReportVoidInputParam]") { - const constexpr char* TEST_TAG = "BNO08x Driver Creation for [CallbackAllReportVoidInputParam] Tests"; + const constexpr char* TEST_TAG = + "BNO08x Driver Creation for [CallbackAllReportVoidInputParam] Tests"; BNO08x* imu = nullptr; @@ -56,76 +59,101 @@ TEST_CASE("Void Input Param Flavor Cb", "[CallbackAllReportVoidInputParam]") imu = BNO08xTestHelper::get_test_imu(); imu->register_cb( - [&imu, &data_available_accel, &data_available_lin_accel, &data_available_grav, &data_available_cal_gyro, &data_available_cal_magnetometer, - &data_accel, &data_available_rv, &data_available_rv_game, &data_available_rv_geomagnetic, &data_quat, &data_vel, &data_magf, - &msg_buff, &test_running]() + [&imu, &data_available_accel, &data_available_lin_accel, &data_available_grav, + &data_available_cal_gyro, &data_available_cal_magnetometer, &data_accel, + &data_available_rv, &data_available_rv_game, &data_available_rv_geomagnetic, + &data_quat, &data_vel, &data_magf, &msg_buff, &test_running]() { static int i = 0; if (i < RX_REPORT_TRIAL_CNT) { - if (imu->accelerometer.has_new_data()) + if (imu->rpt_accelerometer.has_new_data()) { data_available_accel = true; - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, - data_accel.y, data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f " + "accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - else if (imu->linear_accelerometer.has_new_data()) + else if (imu->rpt_linear_accelerometer.has_new_data()) { data_available_lin_accel = true; - data_accel = imu->linear_accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: LinAccel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, - data_accel.y, data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_linear_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: LinAccel: [m/s^2] x: %.2f y: %.2f z: " + "%.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - else if (imu->gravity.has_new_data()) + else if (imu->rpt_gravity.has_new_data()) { data_available_grav = true; - data_accel = imu->gravity.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Gravity: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, - data_accel.y, data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_gravity.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Gravity: [m/s^2] x: %.2f y: %.2f z: " + "%.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - else if (imu->cal_gyro.has_new_data()) + else if (imu->rpt_cal_gyro.has_new_data()) { data_available_cal_gyro = true; - data_vel = imu->cal_gyro.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: CalGyro: [rad/s] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_vel.x, - data_vel.y, data_vel.z, BNO08x::accuracy_to_str(data_vel.accuracy)); + data_vel = imu->rpt_cal_gyro.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: CalGyro: [rad/s] x: %.2f y: %.2f z: " + "%.2f accuracy: %s ", + (i + 1), data_vel.x, data_vel.y, data_vel.z, + BNO08x::accuracy_to_str(data_vel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - else if (imu->cal_magnetometer.has_new_data()) + else if (imu->rpt_cal_magnetometer.has_new_data()) { data_available_cal_magnetometer = true; - data_magf = imu->cal_magnetometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: CalMagnetometer: [uTesla] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), - data_magf.x, data_magf.y, data_magf.z, BNO08x::accuracy_to_str(data_magf.accuracy)); + data_magf = imu->rpt_cal_magnetometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: CalMagnetometer: [uTesla] x: %.2f y: " + "%.2f z: %.2f accuracy: %s ", + (i + 1), data_magf.x, data_magf.y, data_magf.z, + BNO08x::accuracy_to_str(data_magf.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - else if (imu->rv.has_new_data()) + else if (imu->rpt_rv.has_new_data()) { data_available_rv = true; - data_quat = imu->rv.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), - data_quat.real, data_quat.i, data_quat.j, data_quat.k, BNO08x::accuracy_to_str(data_quat.accuracy)); + data_quat = imu->rpt_rv.get_quat(); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV: [n/a] real: %.2f i: %.2f j: %.2f k: " + "%.2f accuracy: %s ", + (i + 1), data_quat.real, data_quat.i, data_quat.j, data_quat.k, + BNO08x::accuracy_to_str(data_quat.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - else if (imu->rv_game.has_new_data()) + else if (imu->rpt_rv_game.has_new_data()) { data_available_rv_game = true; - data_quat = imu->rv_game.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV Game: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), - data_quat.real, data_quat.i, data_quat.j, data_quat.k, BNO08x::accuracy_to_str(data_quat.accuracy)); + data_quat = imu->rpt_rv_game.get_quat(); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV Game: [n/a] real: %.2f i: %.2f j: " + "%.2f k: %.2f accuracy: %s ", + (i + 1), data_quat.real, data_quat.i, data_quat.j, data_quat.k, + BNO08x::accuracy_to_str(data_quat.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - else if (imu->rv_geomagnetic.has_new_data()) + else if (imu->rpt_rv_geomagnetic.has_new_data()) { data_available_rv_geomagnetic = true; - data_quat = imu->rv_geomagnetic.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV Geomagnetic: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), - data_quat.real, data_quat.i, data_quat.j, data_quat.k, BNO08x::accuracy_to_str(data_quat.accuracy)); + data_quat = imu->rpt_rv_geomagnetic.get_quat(); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV Geomagnetic: [n/a] real: %.2f i: " + "%.2f j: %.2f k: %.2f accuracy: %s ", + (i + 1), data_quat.real, data_quat.i, data_quat.j, data_quat.k, + BNO08x::accuracy_to_str(data_quat.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } @@ -133,26 +161,26 @@ TEST_CASE("Void Input Param Flavor Cb", "[CallbackAllReportVoidInputParam]") } else if (test_running) { - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); - TEST_ASSERT_EQUAL(true, imu->linear_accelerometer.disable()); - TEST_ASSERT_EQUAL(true, imu->gravity.disable()); - TEST_ASSERT_EQUAL(true, imu->cal_gyro.disable()); - TEST_ASSERT_EQUAL(true, imu->cal_magnetometer.disable()); - TEST_ASSERT_EQUAL(true, imu->rv.disable()); - TEST_ASSERT_EQUAL(true, imu->rv_game.disable()); - TEST_ASSERT_EQUAL(true, imu->rv_geomagnetic.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_linear_accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_gravity.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_gyro.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_magnetometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_game.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_geomagnetic.disable()); test_running = false; } }); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->linear_accelerometer.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->gravity.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->cal_gyro.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->cal_magnetometer.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->rv.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->rv_game.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->rv_geomagnetic.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_linear_accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_gravity.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_gyro.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_magnetometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_game.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_geomagnetic.enable(REPORT_PERIOD)); while (test_running) { @@ -170,9 +198,11 @@ TEST_CASE("Void Input Param Flavor Cb", "[CallbackAllReportVoidInputParam]") BNO08xTestHelper::print_test_end_banner(TEST_TAG); } -TEST_CASE("BNO08x Driver Cleanup for [CallbackAllReportVoidInputParam] Tests", "[CallbackAllReportVoidInputParam]") +TEST_CASE("BNO08x Driver Cleanup for [CallbackAllReportVoidInputParam] Tests", + "[CallbackAllReportVoidInputParam]") { - const constexpr char* TEST_TAG = "BNO08x Driver Cleanup for [CallbackAllReportVoidInputParam] Tests"; + const constexpr char* TEST_TAG = + "BNO08x Driver Cleanup for [CallbackAllReportVoidInputParam] Tests"; BNO08xTestHelper::print_test_start_banner(TEST_TAG); BNO08xTestHelper::print_test_msg(TEST_TAG, "Destroying BNO08x Driver."); @@ -181,9 +211,11 @@ TEST_CASE("BNO08x Driver Cleanup for [CallbackAllReportVoidInputParam] Tests", " BNO08xTestHelper::print_test_end_banner(TEST_TAG); } -TEST_CASE("BNO08x Driver Creation for [CallbackAllReportIDInputParam] Tests", "[CallbackAllReportIDInputParam]") +TEST_CASE("BNO08x Driver Creation for [CallbackAllReportIDInputParam] Tests", + "[CallbackAllReportIDInputParam]") { - const constexpr char* TEST_TAG = "BNO08x Driver Creation for [CallbackAllReportIDInputParam] Tests"; + const constexpr char* TEST_TAG = + "BNO08x Driver Creation for [CallbackAllReportIDInputParam] Tests"; BNO08x* imu = nullptr; @@ -226,9 +258,10 @@ TEST_CASE("Report ID Input Param Flavor Cb", "[CallbackAllReportIDInputParam]") imu = BNO08xTestHelper::get_test_imu(); imu->register_cb( - [&imu, &data_available_accel, &data_available_lin_accel, &data_available_grav, &data_available_cal_gyro, &data_available_cal_magnetometer, - &data_accel, &data_available_rv, &data_available_rv_game, &data_available_rv_geomagnetic, &data_quat, &data_vel, &data_magf, - &msg_buff, &test_running](uint8_t report_ID) + [&imu, &data_available_accel, &data_available_lin_accel, &data_available_grav, + &data_available_cal_gyro, &data_available_cal_magnetometer, &data_accel, + &data_available_rv, &data_available_rv_game, &data_available_rv_geomagnetic, + &data_quat, &data_vel, &data_magf, &msg_buff, &test_running](uint8_t report_ID) { static int i = 0; if (i < RX_REPORT_TRIAL_CNT) @@ -238,65 +271,89 @@ TEST_CASE("Report ID Input Param Flavor Cb", "[CallbackAllReportIDInputParam]") case SH2_ACCELEROMETER: data_available_accel = true; - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, - data_accel.y, data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: " + "%.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); break; case SH2_LINEAR_ACCELERATION: data_available_lin_accel = true; - data_accel = imu->linear_accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: LinAccel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), - data_accel.x, data_accel.y, data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_linear_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: LinAccel: [m/s^2] x: %.2f y: %.2f " + "z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); break; case SH2_GRAVITY: data_available_grav = true; - data_accel = imu->gravity.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Gravity: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), - data_accel.x, data_accel.y, data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_gravity.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Gravity: [m/s^2] x: %.2f y: %.2f z: " + "%.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); break; case SH2_GYROSCOPE_CALIBRATED: data_available_cal_gyro = true; - data_vel = imu->cal_gyro.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: CalGyro: [rad/s] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_vel.x, - data_vel.y, data_vel.z, BNO08x::accuracy_to_str(data_vel.accuracy)); + data_vel = imu->rpt_cal_gyro.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: CalGyro: [rad/s] x: %.2f y: %.2f z: " + "%.2f accuracy: %s ", + (i + 1), data_vel.x, data_vel.y, data_vel.z, + BNO08x::accuracy_to_str(data_vel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); break; case SH2_MAGNETIC_FIELD_CALIBRATED: data_available_cal_magnetometer = true; - data_magf = imu->cal_magnetometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: CalMagnetometer: [uTesla] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), - data_magf.x, data_magf.y, data_magf.z, BNO08x::accuracy_to_str(data_magf.accuracy)); + data_magf = imu->rpt_cal_magnetometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: CalMagnetometer: [uTesla] x: %.2f " + "y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_magf.x, data_magf.y, data_magf.z, + BNO08x::accuracy_to_str(data_magf.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); break; case SH2_ROTATION_VECTOR: data_available_rv = true; - data_quat = imu->rv.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), - data_quat.real, data_quat.i, data_quat.j, data_quat.k, BNO08x::accuracy_to_str(data_quat.accuracy)); + data_quat = imu->rpt_rv.get_quat(); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV: [n/a] real: %.2f i: %.2f j: " + "%.2f k: %.2f accuracy: %s ", + (i + 1), data_quat.real, data_quat.i, data_quat.j, data_quat.k, + BNO08x::accuracy_to_str(data_quat.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); break; case SH2_GAME_ROTATION_VECTOR: data_available_rv_game = true; - data_quat = imu->rv_game.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV Game: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), - data_quat.real, data_quat.i, data_quat.j, data_quat.k, BNO08x::accuracy_to_str(data_quat.accuracy)); + data_quat = imu->rpt_rv_game.get_quat(); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV Game: [n/a] real: %.2f i: %.2f " + "j: %.2f k: %.2f accuracy: %s ", + (i + 1), data_quat.real, data_quat.i, data_quat.j, data_quat.k, + BNO08x::accuracy_to_str(data_quat.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); break; case SH2_GEOMAGNETIC_ROTATION_VECTOR: data_available_rv_geomagnetic = true; - data_quat = imu->rv_geomagnetic.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV Geomagnetic: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", - (i + 1), data_quat.real, data_quat.i, data_quat.j, data_quat.k, BNO08x::accuracy_to_str(data_quat.accuracy)); + data_quat = imu->rpt_rv_geomagnetic.get_quat(); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV Geomagnetic: [n/a] real: %.2f i: " + "%.2f j: %.2f k: %.2f accuracy: %s ", + (i + 1), data_quat.real, data_quat.i, data_quat.j, data_quat.k, + BNO08x::accuracy_to_str(data_quat.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); break; @@ -309,26 +366,26 @@ TEST_CASE("Report ID Input Param Flavor Cb", "[CallbackAllReportIDInputParam]") } else if (test_running) { - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); - TEST_ASSERT_EQUAL(true, imu->linear_accelerometer.disable()); - TEST_ASSERT_EQUAL(true, imu->gravity.disable()); - TEST_ASSERT_EQUAL(true, imu->cal_gyro.disable()); - TEST_ASSERT_EQUAL(true, imu->cal_magnetometer.disable()); - TEST_ASSERT_EQUAL(true, imu->rv.disable()); - TEST_ASSERT_EQUAL(true, imu->rv_game.disable()); - TEST_ASSERT_EQUAL(true, imu->rv_geomagnetic.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_linear_accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_gravity.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_gyro.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_magnetometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_game.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_geomagnetic.disable()); test_running = false; } }); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->linear_accelerometer.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->gravity.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->cal_gyro.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->cal_magnetometer.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->rv.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->rv_game.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->rv_geomagnetic.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_linear_accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_gravity.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_gyro.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_magnetometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_game.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_geomagnetic.enable(REPORT_PERIOD)); while (test_running) { @@ -346,9 +403,11 @@ TEST_CASE("Report ID Input Param Flavor Cb", "[CallbackAllReportIDInputParam]") BNO08xTestHelper::print_test_end_banner(TEST_TAG); } -TEST_CASE("BNO08x Driver Cleanup for [CallbackAllReportIDInputParam] Tests", "[CallbackAllReportIDInputParam]") +TEST_CASE("BNO08x Driver Cleanup for [CallbackAllReportIDInputParam] Tests", + "[CallbackAllReportIDInputParam]") { - const constexpr char* TEST_TAG = "BNO08x Driver Cleanup for [CallbackAllReportIDInputParam] Tests"; + const constexpr char* TEST_TAG = + "BNO08x Driver Cleanup for [CallbackAllReportIDInputParam] Tests"; BNO08xTestHelper::print_test_start_banner(TEST_TAG); BNO08xTestHelper::print_test_msg(TEST_TAG, "Destroying BNO08x Driver."); @@ -357,9 +416,11 @@ TEST_CASE("BNO08x Driver Cleanup for [CallbackAllReportIDInputParam] Tests", "[C BNO08xTestHelper::print_test_end_banner(TEST_TAG); } -TEST_CASE("BNO08x Driver Creation for [CallbackSingleReportVoidInputParam] Tests", "[CallbackSingleReportVoidInputParam]") +TEST_CASE("BNO08x Driver Creation for [CallbackSingleReportVoidInputParam] Tests", + "[CallbackSingleReportVoidInputParam]") { - const constexpr char* TEST_TAG = "BNO08x Driver Creation for [CallbackSingleReportVoidInputParam] Tests"; + const constexpr char* TEST_TAG = + "BNO08x Driver Creation for [CallbackSingleReportVoidInputParam] Tests"; BNO08x* imu = nullptr; @@ -391,7 +452,7 @@ TEST_CASE("Single Report Void Input Param Flavor Cb", "[CallbackSingleReportVoid BNO08xTestHelper::print_test_start_banner(TEST_TAG); imu = BNO08xTestHelper::get_test_imu(); - imu->accelerometer.register_cb( + imu->rpt_accelerometer.register_cb( [&imu, &data_available_accel, &data_accel, &msg_buff, &test_running]() { static int i = 0; @@ -399,21 +460,24 @@ TEST_CASE("Single Report Void Input Param Flavor Cb", "[CallbackSingleReportVoid if (i < RX_REPORT_TRIAL_CNT) { data_available_accel = true; - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, - data_accel.y, data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f " + "accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); i++; } else if (test_running) { - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); test_running = false; } }); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); while (test_running) { @@ -424,9 +488,11 @@ TEST_CASE("Single Report Void Input Param Flavor Cb", "[CallbackSingleReportVoid BNO08xTestHelper::print_test_end_banner(TEST_TAG); } -TEST_CASE("BNO08x Driver Cleanup for [CallbackSingleReportVoidInputParam] Tests", "[CallbackSingleReportVoidInputParam]") +TEST_CASE("BNO08x Driver Cleanup for [CallbackSingleReportVoidInputParam] Tests", + "[CallbackSingleReportVoidInputParam]") { - const constexpr char* TEST_TAG = "BNO08x Driver Cleanup for [CallbackSingleReportVoidInputParam] Tests"; + const constexpr char* TEST_TAG = + "BNO08x Driver Cleanup for [CallbackSingleReportVoidInputParam] Tests"; BNO08xTestHelper::print_test_start_banner(TEST_TAG); BNO08xTestHelper::print_test_msg(TEST_TAG, "Destroying BNO08x Driver."); diff --git a/test/FeatureTests.cpp b/test/FeatureTests.cpp index a2eb252..ecd9e99 100644 --- a/test/FeatureTests.cpp +++ b/test/FeatureTests.cpp @@ -3,8 +3,9 @@ * @author Myles Parfeniuk * * - * @warning YOU MUST ADD THE FOLLOWING LINE TO YOUR MAIN PROJECTS CMakeLists.txt IN ORDER FOR THIS TEST SUITE TO BE BUILT WITH PROJECT: - * set(TEST_COMPONENTS "esp32_BNO08x" CACHE STRING "Components to test.") + * @warning YOU MUST ADD THE FOLLOWING LINE TO YOUR MAIN PROJECTS CMakeLists.txt IN ORDER FOR THIS + * TEST SUITE TO BE BUILT WITH PROJECT: set(TEST_COMPONENTS "esp32_BNO08x" CACHE STRING "Components + * to test.") */ #include "unity.h" @@ -41,15 +42,17 @@ TEST_CASE("Hard Reset", "[FeatureTests]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { TEST_ASSERT_EQUAL(true, imu->data_available()); - TEST_ASSERT_EQUAL(true, imu->accelerometer.has_new_data()); - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } @@ -59,14 +62,16 @@ TEST_CASE("Hard Reset", "[FeatureTests]") for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { TEST_ASSERT_EQUAL(true, imu->data_available()); - TEST_ASSERT_EQUAL(true, imu->accelerometer.has_new_data()); - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -86,15 +91,17 @@ TEST_CASE("Soft Reset", "[FeatureTests]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { TEST_ASSERT_EQUAL(true, imu->data_available()); - TEST_ASSERT_EQUAL(true, imu->accelerometer.has_new_data()); - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } @@ -104,14 +111,16 @@ TEST_CASE("Soft Reset", "[FeatureTests]") for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { TEST_ASSERT_EQUAL(true, imu->data_available()); - TEST_ASSERT_EQUAL(true, imu->accelerometer.has_new_data()); - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -131,15 +140,17 @@ TEST_CASE("Sleep", "[FeatureTests]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { TEST_ASSERT_EQUAL(true, imu->data_available()); - TEST_ASSERT_EQUAL(true, imu->accelerometer.has_new_data()); - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } @@ -158,14 +169,16 @@ TEST_CASE("Sleep", "[FeatureTests]") for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { TEST_ASSERT_EQUAL(true, imu->data_available()); - TEST_ASSERT_EQUAL(true, imu->accelerometer.has_new_data()); - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -186,36 +199,43 @@ TEST_CASE("Get Metadata", "[FeatureTests]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { TEST_ASSERT_EQUAL(true, imu->data_available()); - TEST_ASSERT_EQUAL(true, imu->accelerometer.has_new_data()); - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } BNO08xTestHelper::print_test_msg(TEST_TAG, "Getting meta data..."); - TEST_ASSERT_EQUAL(true, imu->accelerometer.get_meta_data(meta_data)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.get_meta_data(meta_data)); - sprintf(msg_buff, "Re-enabling report with fastest possible period of %ldus from accelerometer meta data.", meta_data.min_period_us); + sprintf(msg_buff, + "Re-enabling report with fastest possible period of %ldus from accelerometer meta " + "data.", + meta_data.min_period_us); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(meta_data.min_period_us)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(meta_data.min_period_us)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { TEST_ASSERT_EQUAL(true, imu->data_available()); - TEST_ASSERT_EQUAL(true, imu->accelerometer.has_new_data()); - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -236,40 +256,204 @@ TEST_CASE("Get Sample Counts", "[FeatureTests]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { TEST_ASSERT_EQUAL(true, imu->data_available()); - TEST_ASSERT_EQUAL(true, imu->accelerometer.has_new_data()); - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } BNO08xTestHelper::print_test_msg(TEST_TAG, "Getting sample counts..."); - TEST_ASSERT_EQUAL(true, imu->accelerometer.get_sample_counts(sample_counts)); - sprintf(msg_buff, "offered: %ld on: %ld accepted: %ld attempted: %ld", sample_counts.offered, sample_counts.on, sample_counts.accepted, - sample_counts.attempted); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.get_sample_counts(sample_counts)); + sprintf(msg_buff, "offered: %ld on: %ld accepted: %ld attempted: %ld", sample_counts.offered, + sample_counts.on, sample_counts.accepted, sample_counts.attempted); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { TEST_ASSERT_EQUAL(true, imu->data_available()); - TEST_ASSERT_EQUAL(true, imu->accelerometer.has_new_data()); - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } +TEST_CASE("Enable Dynamic Calibration", "[FeatureTests]") +{ + const constexpr char* TEST_TAG = "Enable Dynamic Calibration"; + static const constexpr uint8_t ENABLED_REPORT_COUNT = 1; + static const constexpr uint8_t RX_REPORT_TRIAL_CNT = ENABLED_REPORT_COUNT * 5; + static const constexpr uint32_t REPORT_PERIOD = 100000UL; // 100ms + + BNO08x* imu = nullptr; + char msg_buff[200] = {}; + bno08x_accel_t data_accel; + bno08x_sample_counts_t sample_counts; + + BNO08xTestHelper::print_test_start_banner(TEST_TAG); + + imu = BNO08xTestHelper::get_test_imu(); + + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->enable_dynamic_calibration(BNO08xCalSel::all)); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + TEST_ASSERT_EQUAL(true, imu->data_available()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } +} + +TEST_CASE("Save Dynamic Calibration", "[FeatureTests]") +{ + const constexpr char* TEST_TAG = "Save Dynamic Calibration"; + static const constexpr uint8_t ENABLED_REPORT_COUNT = 1; + static const constexpr uint8_t RX_REPORT_TRIAL_CNT = ENABLED_REPORT_COUNT * 5; + static const constexpr uint32_t REPORT_PERIOD = 100000UL; // 100ms + + BNO08x* imu = nullptr; + char msg_buff[200] = {}; + bno08x_accel_t data_accel; + bno08x_sample_counts_t sample_counts; + + BNO08xTestHelper::print_test_start_banner(TEST_TAG); + + imu = BNO08xTestHelper::get_test_imu(); + + TEST_ASSERT_EQUAL(true, imu->save_dynamic_calibration()); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + TEST_ASSERT_EQUAL(true, imu->data_available()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } +} + +TEST_CASE("Autosave Dynamic Calibration", "[FeatureTests]") +{ + const constexpr char* TEST_TAG = "Autosave Dynamic Calibration"; + static const constexpr uint8_t ENABLED_REPORT_COUNT = 1; + static const constexpr uint8_t RX_REPORT_TRIAL_CNT = ENABLED_REPORT_COUNT * 200; + static const constexpr uint32_t REPORT_PERIOD = 100000UL; // 100ms + + BNO08x* imu = nullptr; + char msg_buff[200] = {}; + bno08x_accel_t data_accel; + bno08x_sample_counts_t sample_counts; + + BNO08xTestHelper::print_test_start_banner(TEST_TAG); + + imu = BNO08xTestHelper::get_test_imu(); + + TEST_ASSERT_EQUAL(true, imu->enable_autosave_dynamic_calibration()); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + TEST_ASSERT_EQUAL(true, imu->data_available()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + TEST_ASSERT_EQUAL(true, imu->disable_autosave_dynamic_calibration()); +} + +TEST_CASE("Disable Dynamic Calibration", "[FeatureTests]") +{ + const constexpr char* TEST_TAG = "Disable Dynamic Calibration"; + static const constexpr uint8_t ENABLED_REPORT_COUNT = 1; + static const constexpr uint8_t RX_REPORT_TRIAL_CNT = ENABLED_REPORT_COUNT * 5; + static const constexpr uint32_t REPORT_PERIOD = 100000UL; // 100ms + + BNO08x* imu = nullptr; + char msg_buff[200] = {}; + bno08x_accel_t data_accel; + bno08x_sample_counts_t sample_counts; + + BNO08xTestHelper::print_test_start_banner(TEST_TAG); + + imu = BNO08xTestHelper::get_test_imu(); + + TEST_ASSERT_EQUAL(true, imu->disable_dynamic_calibration(BNO08xCalSel::all)); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + TEST_ASSERT_EQUAL(true, imu->data_available()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } +} + +TEST_CASE("Clear Dynamic Calibration", "[FeatureTests]") +{ + const constexpr char* TEST_TAG = "Clear Dynamic Calibration"; + static const constexpr uint8_t ENABLED_REPORT_COUNT = 1; + static const constexpr uint8_t RX_REPORT_TRIAL_CNT = ENABLED_REPORT_COUNT * 5; + static const constexpr uint32_t REPORT_PERIOD = 100000UL; // 100ms + + BNO08x* imu = nullptr; + char msg_buff[200] = {}; + bno08x_accel_t data_accel; + bno08x_sample_counts_t sample_counts; + + BNO08xTestHelper::print_test_start_banner(TEST_TAG); + + imu = BNO08xTestHelper::get_test_imu(); + + TEST_ASSERT_EQUAL(true, imu->clear_dynamic_calibration()); + + for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) + { + TEST_ASSERT_EQUAL(true, imu->data_available()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.has_new_data()); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); + BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); + } + + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); +} + TEST_CASE("BNO08x Driver Cleanup for [FeatureTests] Tests", "[FeatureTests]") { const constexpr char* TEST_TAG = "BNO08x Driver Cleanup for [FeatureTests] Tests"; diff --git a/test/InitDenitTests.cpp b/test/InitDenitTests.cpp index 4a68fd9..d2f74aa 100644 --- a/test/InitDenitTests.cpp +++ b/test/InitDenitTests.cpp @@ -3,8 +3,9 @@ * @author Myles Parfeniuk * * - * @warning YOU MUST ADD THE FOLLOWING LINE TO YOUR MAIN PROJECTS CMakeLists.txt IN ORDER FOR THIS TEST SUITE TO BE BUILT WITH PROJECT: - * set(TEST_COMPONENTS "esp32_BNO08x" CACHE STRING "Components to test.") + * @warning YOU MUST ADD THE FOLLOWING LINE TO YOUR MAIN PROJECTS CMakeLists.txt IN ORDER FOR THIS + * TEST SUITE TO BE BUILT WITH PROJECT: set(TEST_COMPONENTS "esp32_BNO08x" CACHE STRING "Components + * to test.") */ #include "unity.h" @@ -17,7 +18,8 @@ TEST_CASE("InitComprehensive Config Args", "[InitComprehensive]") BNO08xTestHelper::print_test_start_banner(TEST_TAG); - BNO08xTestHelper::print_test_msg(TEST_TAG, "Creating test IMU for [InitComprehensive] and [DeinitComprehensive]."); + BNO08xTestHelper::print_test_msg( + TEST_TAG, "Creating test IMU for [InitComprehensive] and [DeinitComprehensive]."); BNO08xTestHelper::create_test_imu(); imu = BNO08xTestHelper::get_test_imu(); diff --git a/test/MultiReportTests.cpp b/test/MultiReportTests.cpp index 62b3c38..944942d 100644 --- a/test/MultiReportTests.cpp +++ b/test/MultiReportTests.cpp @@ -3,14 +3,16 @@ * @author Myles Parfeniuk * * - * @warning YOU MUST ADD THE FOLLOWING LINE TO YOUR MAIN PROJECTS CMakeLists.txt IN ORDER FOR THIS TEST SUITE TO BE BUILT WITH PROJECT: - * set(TEST_COMPONENTS "esp32_BNO08x" CACHE STRING "Components to test.") + * @warning YOU MUST ADD THE FOLLOWING LINE TO YOUR MAIN PROJECTS CMakeLists.txt IN ORDER FOR THIS + * TEST SUITE TO BE BUILT WITH PROJECT: set(TEST_COMPONENTS "esp32_BNO08x" CACHE STRING "Components + * to test.") */ #include "unity.h" #include "../include/BNO08xTestHelper.hpp" -TEST_CASE("BNO08x Driver Creation for [MultiReportEnableDisable] Tests", "[MultiReportEnableDisable]") +TEST_CASE( + "BNO08x Driver Creation for [MultiReportEnableDisable] Tests", "[MultiReportEnableDisable]") { const constexpr char* TEST_TAG = "BNO08x Driver Creation for [MultiReportEnableDisable] Tests"; BNO08x* imu = nullptr; @@ -45,35 +47,39 @@ TEST_CASE("Enable/Disable Dual Report", "[MultiReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->linear_accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_linear_accelerometer.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - if (imu->accelerometer.has_new_data()) + if (imu->rpt_accelerometer.has_new_data()) { data_available_accel = true; - data = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data.x, data.y, data.z, - BNO08x::accuracy_to_str(data.accuracy)); + data = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: " + "%s ", + (i + 1), data.x, data.y, data.z, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - if (imu->linear_accelerometer.has_new_data()) + if (imu->rpt_linear_accelerometer.has_new_data()) { data_available_lin_accel = true; - data = imu->linear_accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: LinAccel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data.x, data.y, data.z, - BNO08x::accuracy_to_str(data.accuracy)); + data = imu->rpt_linear_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: LinAccel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: " + "%s ", + (i + 1), data.x, data.y, data.z, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } } - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); - TEST_ASSERT_EQUAL(true, imu->linear_accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_linear_accelerometer.disable()); TEST_ASSERT_EQUAL(true, data_available_accel); TEST_ASSERT_EQUAL(true, data_available_lin_accel); @@ -103,57 +109,69 @@ TEST_CASE("Enable/Disable Quad Report", "[MultiReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->linear_accelerometer.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->gravity.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->cal_gyro.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_linear_accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_gravity.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_gyro.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - if (imu->accelerometer.has_new_data()) + if (imu->rpt_accelerometer.has_new_data()) { data_available_accel = true; - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: " + "%s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - if (imu->linear_accelerometer.has_new_data()) + if (imu->rpt_linear_accelerometer.has_new_data()) { data_available_lin_accel = true; - data_accel = imu->linear_accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: LinAccel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, - data_accel.y, data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_linear_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: LinAccel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: " + "%s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - if (imu->gravity.has_new_data()) + if (imu->rpt_gravity.has_new_data()) { data_available_gravity = true; - data_accel = imu->gravity.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Gravity: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_gravity.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Gravity: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: " + "%s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - if (imu->cal_gyro.has_new_data()) + if (imu->rpt_cal_gyro.has_new_data()) { data_available_cal_gyro = true; - data_vel = imu->cal_gyro.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: CalGyro: [rad/s] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_vel.x, data_vel.y, - data_vel.z, BNO08x::accuracy_to_str(data_vel.accuracy)); + data_vel = imu->rpt_cal_gyro.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: CalGyro: [rad/s] x: %.2f y: %.2f z: %.2f accuracy: " + "%s ", + (i + 1), data_vel.x, data_vel.y, data_vel.z, + BNO08x::accuracy_to_str(data_vel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } } - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); - TEST_ASSERT_EQUAL(true, imu->linear_accelerometer.disable()); - TEST_ASSERT_EQUAL(true, imu->gravity.disable()); - TEST_ASSERT_EQUAL(true, imu->cal_gyro.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_linear_accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_gravity.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_gyro.disable()); TEST_ASSERT_EQUAL(true, data_available_accel); TEST_ASSERT_EQUAL(true, data_available_lin_accel); @@ -191,101 +209,125 @@ TEST_CASE("Enable/Disable Octo Report", "[MultiReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->linear_accelerometer.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->gravity.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->cal_gyro.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->cal_magnetometer.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->rv.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->rv_game.enable(REPORT_PERIOD)); - TEST_ASSERT_EQUAL(true, imu->rv_geomagnetic.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_linear_accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_gravity.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_gyro.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_magnetometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_game.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_geomagnetic.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - if (imu->accelerometer.has_new_data()) + if (imu->rpt_accelerometer.has_new_data()) { data_available_accel = true; - data_accel = imu->accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: " + "%s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - if (imu->linear_accelerometer.has_new_data()) + if (imu->rpt_linear_accelerometer.has_new_data()) { data_available_lin_accel = true; - data_accel = imu->linear_accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: LinAccel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, - data_accel.y, data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_linear_accelerometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: LinAccel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: " + "%s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - if (imu->gravity.has_new_data()) + if (imu->rpt_gravity.has_new_data()) { data_available_gravity = true; - data_accel = imu->gravity.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Gravity: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_accel.x, data_accel.y, - data_accel.z, BNO08x::accuracy_to_str(data_accel.accuracy)); + data_accel = imu->rpt_gravity.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: Gravity: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: " + "%s ", + (i + 1), data_accel.x, data_accel.y, data_accel.z, + BNO08x::accuracy_to_str(data_accel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - if (imu->cal_gyro.has_new_data()) + if (imu->rpt_cal_gyro.has_new_data()) { data_available_cal_gyro = true; - data_vel = imu->cal_gyro.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: CalGyro: [rad/s] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_vel.x, data_vel.y, - data_vel.z, BNO08x::accuracy_to_str(data_vel.accuracy)); + data_vel = imu->rpt_cal_gyro.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: CalGyro: [rad/s] x: %.2f y: %.2f z: %.2f accuracy: " + "%s ", + (i + 1), data_vel.x, data_vel.y, data_vel.z, + BNO08x::accuracy_to_str(data_vel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - if (imu->cal_magnetometer.has_new_data()) + if (imu->rpt_cal_magnetometer.has_new_data()) { data_available_cal_magnetometer = true; - data_magf = imu->cal_magnetometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: CalMagnetometer: [uTesla] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data_magf.x, - data_magf.y, data_magf.z, BNO08x::accuracy_to_str(data_magf.accuracy)); + data_magf = imu->rpt_cal_magnetometer.get(); + sprintf(msg_buff, + "Rx Data Trial %d Success: CalMagnetometer: [uTesla] x: %.2f y: %.2f z: %.2f " + "accuracy: %s ", + (i + 1), data_magf.x, data_magf.y, data_magf.z, + BNO08x::accuracy_to_str(data_magf.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - if (imu->rv.has_new_data()) + if (imu->rpt_rv.has_new_data()) { data_available_rv = true; - data_quat = imu->rv.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), data_quat.real, - data_quat.i, data_quat.j, data_quat.k, BNO08x::accuracy_to_str(data_quat.accuracy)); + data_quat = imu->rpt_rv.get_quat(); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f " + "accuracy: %s ", + (i + 1), data_quat.real, data_quat.i, data_quat.j, data_quat.k, + BNO08x::accuracy_to_str(data_quat.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - if (imu->rv_game.has_new_data()) + if (imu->rpt_rv_game.has_new_data()) { data_available_rv_game = true; - data_quat = imu->rv_game.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV Game: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), data_quat.real, - data_quat.i, data_quat.j, data_quat.k, BNO08x::accuracy_to_str(data_quat.accuracy)); + data_quat = imu->rpt_rv_game.get_quat(); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV Game: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f " + "accuracy: %s ", + (i + 1), data_quat.real, data_quat.i, data_quat.j, data_quat.k, + BNO08x::accuracy_to_str(data_quat.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - if (imu->rv_geomagnetic.has_new_data()) + if (imu->rpt_rv_geomagnetic.has_new_data()) { data_available_rv_geomagnetic = true; - data_quat = imu->rv_geomagnetic.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV Geomagnetic: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), - data_quat.real, data_quat.i, data_quat.j, data_quat.k, BNO08x::accuracy_to_str(data_quat.accuracy)); + data_quat = imu->rpt_rv_geomagnetic.get_quat(); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV Geomagnetic: [n/a] real: %.2f i: %.2f j: %.2f k: " + "%.2f accuracy: %s ", + (i + 1), data_quat.real, data_quat.i, data_quat.j, data_quat.k, + BNO08x::accuracy_to_str(data_quat.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } } - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); - TEST_ASSERT_EQUAL(true, imu->linear_accelerometer.disable()); - TEST_ASSERT_EQUAL(true, imu->gravity.disable()); - TEST_ASSERT_EQUAL(true, imu->cal_gyro.disable()); - TEST_ASSERT_EQUAL(true, imu->cal_magnetometer.disable()); - TEST_ASSERT_EQUAL(true, imu->rv.disable()); - TEST_ASSERT_EQUAL(true, imu->rv_game.disable()); - TEST_ASSERT_EQUAL(true, imu->rv_geomagnetic.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_linear_accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_gravity.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_gyro.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_magnetometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_game.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_geomagnetic.disable()); TEST_ASSERT_EQUAL(true, data_available_accel); TEST_ASSERT_EQUAL(true, data_available_lin_accel); @@ -299,7 +341,8 @@ TEST_CASE("Enable/Disable Octo Report", "[MultiReportEnableDisable]") BNO08xTestHelper::print_test_end_banner(TEST_TAG); } -TEST_CASE("BNO08x Driver Cleanup for [MultiReportEnableDisable] Tests", "[MultiReportEnableDisable]") +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 4606523..d66593c 100644 --- a/test/SingleReportTests.cpp +++ b/test/SingleReportTests.cpp @@ -3,14 +3,16 @@ * @author Myles Parfeniuk * * - * @warning YOU MUST ADD THE FOLLOWING LINE TO YOUR MAIN PROJECTS CMakeLists.txt IN ORDER FOR THIS TEST SUITE TO BE BUILT WITH PROJECT: - * set(TEST_COMPONENTS "esp32_BNO08x" CACHE STRING "Components to test.") + * @warning YOU MUST ADD THE FOLLOWING LINE TO YOUR MAIN PROJECTS CMakeLists.txt IN ORDER FOR THIS + * TEST SUITE TO BE BUILT WITH PROJECT: set(TEST_COMPONENTS "esp32_BNO08x" CACHE STRING "Components + * to test.") */ #include "unity.h" #include "../include/BNO08xTestHelper.hpp" -TEST_CASE("BNO08x Driver Creation for [SingleReportEnableDisable] Tests", "[SingleReportEnableDisable]") +TEST_CASE("BNO08x Driver Creation for [SingleReportEnableDisable] Tests", + "[SingleReportEnableDisable]") { const constexpr char* TEST_TAG = "BNO08x Driver Creation for [SingleReportEnableDisable] Tests"; BNO08x* imu = nullptr; @@ -42,25 +44,27 @@ TEST_CASE("Enable Incorrect Report", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - wrong_report_data_available = imu->linear_accelerometer.has_new_data(); + wrong_report_data_available = imu->rpt_linear_accelerometer.has_new_data(); TEST_ASSERT_EQUAL(false, wrong_report_data_available); - data = imu->linear_accelerometer.get(); + data = imu->rpt_linear_accelerometer.get(); - sprintf(msg_buff, "No Rx Data Trial %d Success: LinAccelDefaults: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data.x, data.y, - data.z, BNO08x::accuracy_to_str(data.accuracy)); + sprintf(msg_buff, + "No Rx Data Trial %d Success: LinAccelDefaults: [m/s^2] x: %.2f y: %.2f z: %.2f " + "accuracy: %s ", + (i + 1), data.x, data.y, data.z, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -80,25 +84,26 @@ TEST_CASE("Enable/Disable Accelerometer", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->accelerometer.has_new_data(); + report_data_available = imu->rpt_accelerometer.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - data = imu->accelerometer.get(); + data = imu->rpt_accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data.x, data.y, data.z, - BNO08x::accuracy_to_str(data.accuracy)); + sprintf(msg_buff, + "Rx Data Trial %d Success: Accel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data.x, data.y, data.z, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_accelerometer.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -118,25 +123,27 @@ TEST_CASE("Enable/Disable Linear Accelerometer", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->linear_accelerometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_linear_accelerometer.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->linear_accelerometer.has_new_data(); + report_data_available = imu->rpt_linear_accelerometer.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - data = imu->linear_accelerometer.get(); + data = imu->rpt_linear_accelerometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: LinearAccel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data.x, data.y, data.z, - BNO08x::accuracy_to_str(data.accuracy)); + sprintf(msg_buff, + "Rx Data Trial %d Success: LinearAccel: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: " + "%s ", + (i + 1), data.x, data.y, data.z, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->linear_accelerometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_linear_accelerometer.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -156,25 +163,26 @@ TEST_CASE("Enable/Disable Gravity", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->gravity.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_gravity.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->gravity.has_new_data(); + report_data_available = imu->rpt_gravity.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - data = imu->gravity.get(); + data = imu->rpt_gravity.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: Gravity: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data.x, data.y, data.z, - BNO08x::accuracy_to_str(data.accuracy)); + sprintf(msg_buff, + "Rx Data Trial %d Success: Gravity: [m/s^2] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data.x, data.y, data.z, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->gravity.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_gravity.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -194,25 +202,27 @@ TEST_CASE("Enable/Disable Cal Magnetometer", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->cal_magnetometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_magnetometer.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->cal_magnetometer.has_new_data(); + report_data_available = imu->rpt_cal_magnetometer.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - data = imu->cal_magnetometer.get(); + data = imu->rpt_cal_magnetometer.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: CalMagnetometer: [uTesla] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data.x, data.y, - data.z, BNO08x::accuracy_to_str(data.accuracy)); + sprintf(msg_buff, + "Rx Data Trial %d Success: CalMagnetometer: [uTesla] x: %.2f y: %.2f z: %.2f " + "accuracy: %s ", + (i + 1), data.x, data.y, data.z, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->cal_magnetometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_magnetometer.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -233,26 +243,28 @@ TEST_CASE("Enable/Disable Uncal Magnetometer", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->uncal_magnetometer.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_uncal_magnetometer.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->uncal_magnetometer.has_new_data(); + report_data_available = imu->rpt_uncal_magnetometer.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - imu->uncal_magnetometer.get(data_magf, data_bias); + imu->rpt_uncal_magnetometer.get(data_magf, data_bias); sprintf(msg_buff, - "Rx Data Trial %d Success: UncalMagnetometer: [uTesla] x: %.2f y: %.2f z: %.2f x_bias: %.2f y_bias: %.2f z_bias: %.2f accuracy: %s ", - (i + 1), data_magf.x, data_magf.y, data_magf.z, data_bias.x, data_bias.y, data_bias.z, BNO08x::accuracy_to_str(data_magf.accuracy)); + "Rx Data Trial %d Success: UncalMagnetometer: [uTesla] x: %.2f y: %.2f z: %.2f " + "x_bias: %.2f y_bias: %.2f z_bias: %.2f accuracy: %s ", + (i + 1), data_magf.x, data_magf.y, data_magf.z, data_bias.x, data_bias.y, + data_bias.z, BNO08x::accuracy_to_str(data_magf.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->uncal_magnetometer.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_uncal_magnetometer.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -272,25 +284,26 @@ TEST_CASE("Enable/Disable Cal Gyro", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->cal_gyro.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_gyro.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->cal_gyro.has_new_data(); + report_data_available = imu->rpt_cal_gyro.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - data = imu->cal_gyro.get(); + data = imu->rpt_cal_gyro.get(); - sprintf(msg_buff, "Rx Data Trial %d Success: CalGyro: [rad/s] x: %.2f y: %.2f z: %.2f accuracy: %s ", (i + 1), data.x, data.y, data.z, - BNO08x::accuracy_to_str(data.accuracy)); + sprintf(msg_buff, + "Rx Data Trial %d Success: CalGyro: [rad/s] x: %.2f y: %.2f z: %.2f accuracy: %s ", + (i + 1), data.x, data.y, data.z, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->cal_gyro.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_cal_gyro.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -311,25 +324,28 @@ TEST_CASE("Enable/Disable Uncal Gyro", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->uncal_gyro.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_uncal_gyro.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->uncal_gyro.has_new_data(); + report_data_available = imu->rpt_uncal_gyro.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - imu->uncal_gyro.get(data_vel, data_bias); + imu->rpt_uncal_gyro.get(data_vel, data_bias); - sprintf(msg_buff, "Rx Data Trial %d Success: UncalGyro: [rad/s] x: %.2f y: %.2f z: %.2f x_bias: %.2f y_bias: %.2f z_bias: %.2f accuracy: %s ", - (i + 1), data_vel.x, data_vel.y, data_vel.z, data_bias.x, data_bias.y, data_bias.z, BNO08x::accuracy_to_str(data_vel.accuracy)); + sprintf(msg_buff, + "Rx Data Trial %d Success: UncalGyro: [rad/s] x: %.2f y: %.2f z: %.2f x_bias: %.2f " + "y_bias: %.2f z_bias: %.2f accuracy: %s ", + (i + 1), data_vel.x, data_vel.y, data_vel.z, data_bias.x, data_bias.y, data_bias.z, + BNO08x::accuracy_to_str(data_vel.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->uncal_gyro.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_uncal_gyro.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -349,25 +365,27 @@ TEST_CASE("Enable/Disable RV", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->rv.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->rv.has_new_data(); + report_data_available = imu->rpt_rv.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - data = imu->rv.get_quat(); + data = imu->rpt_rv.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), data.real, data.i, data.j, - data.k, BNO08x::accuracy_to_str(data.accuracy)); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: " + "%s ", + (i + 1), data.real, data.i, data.j, data.k, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->rv.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -387,25 +405,27 @@ TEST_CASE("Enable/Disable Game RV", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->rv_game.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_game.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->rv_game.has_new_data(); + report_data_available = imu->rpt_rv_game.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - data = imu->rv_game.get_quat(); + data = imu->rpt_rv_game.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV Game: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), data.real, data.i, - data.j, data.k, BNO08x::accuracy_to_str(data.accuracy)); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV Game: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f " + "accuracy: %s ", + (i + 1), data.real, data.i, data.j, data.k, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->rv_game.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_game.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -425,25 +445,27 @@ TEST_CASE("Enable/Disable ARVR Stabilized RV", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->rv_ARVR_stabilized.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_ARVR_stabilized.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->rv_ARVR_stabilized.has_new_data(); + report_data_available = imu->rpt_rv_ARVR_stabilized.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - data = imu->rv_ARVR_stabilized.get_quat(); + data = imu->rpt_rv_ARVR_stabilized.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV ARVR Stabilized: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), data.real, - data.i, data.j, data.k, BNO08x::accuracy_to_str(data.accuracy)); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV ARVR Stabilized: [n/a] real: %.2f i: %.2f j: %.2f k: " + "%.2f accuracy: %s ", + (i + 1), data.real, data.i, data.j, data.k, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->rv_ARVR_stabilized.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_ARVR_stabilized.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -463,25 +485,27 @@ TEST_CASE("Enable/Disable ARVR Stabilized Game RV", "[SingleReportEnableDisable] imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->rv_ARVR_stabilized_game.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_ARVR_stabilized_game.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->rv_ARVR_stabilized_game.has_new_data(); + report_data_available = imu->rpt_rv_ARVR_stabilized_game.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - data = imu->rv_ARVR_stabilized_game.get_quat(); + data = imu->rpt_rv_ARVR_stabilized_game.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV ARVR Stabilized Game: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), - data.real, data.i, data.j, data.k, BNO08x::accuracy_to_str(data.accuracy)); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV ARVR Stabilized Game: [n/a] real: %.2f i: %.2f j: " + "%.2f k: %.2f accuracy: %s ", + (i + 1), data.real, data.i, data.j, data.k, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->rv_ARVR_stabilized_game.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_ARVR_stabilized_game.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -501,25 +525,27 @@ TEST_CASE("Enable/Disable Gyro Integrated RV", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->rv_gyro_integrated.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_gyro_integrated.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->rv_gyro_integrated.has_new_data(); + report_data_available = imu->rpt_rv_gyro_integrated.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - data = imu->rv_gyro_integrated.get_quat(); + data = imu->rpt_rv_gyro_integrated.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV Gyro Integrated: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), data.real, - data.i, data.j, data.k, BNO08x::accuracy_to_str(data.accuracy)); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV Gyro Integrated: [n/a] real: %.2f i: %.2f j: %.2f k: " + "%.2f accuracy: %s ", + (i + 1), data.real, data.i, data.j, data.k, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->rv_gyro_integrated.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_gyro_integrated.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } @@ -539,30 +565,33 @@ TEST_CASE("Enable/Disable Geomagnetic RV", "[SingleReportEnableDisable]") imu = BNO08xTestHelper::get_test_imu(); - TEST_ASSERT_EQUAL(true, imu->rv_geomagnetic.enable(REPORT_PERIOD)); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_geomagnetic.enable(REPORT_PERIOD)); for (int i = 0; i < RX_REPORT_TRIAL_CNT; i++) { data_available = imu->data_available(); TEST_ASSERT_EQUAL(true, data_available); - report_data_available = imu->rv_geomagnetic.has_new_data(); + report_data_available = imu->rpt_rv_geomagnetic.has_new_data(); TEST_ASSERT_EQUAL(true, report_data_available); - data = imu->rv_geomagnetic.get_quat(); + data = imu->rpt_rv_geomagnetic.get_quat(); - sprintf(msg_buff, "Rx Data Trial %d Success: RV Geomagnetic: [n/a] real: %.2f i: %.2f j: %.2f k: %.2f accuracy: %s ", (i + 1), data.real, - data.i, data.j, data.k, BNO08x::accuracy_to_str(data.accuracy)); + sprintf(msg_buff, + "Rx Data Trial %d Success: RV Geomagnetic: [n/a] real: %.2f i: %.2f j: %.2f k: " + "%.2f accuracy: %s ", + (i + 1), data.real, data.i, data.j, data.k, BNO08x::accuracy_to_str(data.accuracy)); BNO08xTestHelper::print_test_msg(TEST_TAG, msg_buff); } - TEST_ASSERT_EQUAL(true, imu->rv_geomagnetic.disable()); + TEST_ASSERT_EQUAL(true, imu->rpt_rv_geomagnetic.disable()); BNO08xTestHelper::print_test_end_banner(TEST_TAG); } -TEST_CASE("BNO08x Driver Cleanup for [SingleReportEnableDisable] Tests", "[SingleReportEnableDisable]") +TEST_CASE("BNO08x Driver Cleanup for [SingleReportEnableDisable] Tests", + "[SingleReportEnableDisable]") { const constexpr char* TEST_TAG = "BNO08x Driver Cleanup for [SingleReportEnableDisable] Tests";