diff --git a/.clang-format b/.clang-format index 51ae599..2eaf0c7 100644 --- a/.clang-format +++ b/.clang-format @@ -1,4 +1,3 @@ ---- BasedOnStyle: LLVM Standard: Cpp11 @@ -13,7 +12,7 @@ BreakConstructorInitializersBeforeComma: true ConstructorInitializerAllOnOneLineOrOnePerLine: false AllowShortBlocksOnASingleLine: false -AllowShortCaseLabelsOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: None AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false @@ -34,4 +33,6 @@ IndentAccessModifiers: true IndentPPDirectives: AfterHash -IndentCaseLabels: true +IndentCaseLabels: true + +NamespaceIndentation: All diff --git a/include/BNO08x.hpp b/include/BNO08x.hpp index 768f33b..d913ead 100644 --- a/include/BNO08x.hpp +++ b/include/BNO08x.hpp @@ -7,41 +7,22 @@ // etl includes #include +#include #include // esp-idf includes +#include +#include +#include #include #include #include #include -#include - // in-house includes -#include "BNO08x_global_types.hpp" +#include "BNO08xGlobalTypes.hpp" +#include "BNO08xPrivateTypes.hpp" #include "BNO08xSH2HAL.hpp" -#include "BNO08xCbParamRptID.hpp" -#include "BNO08xCbParamVoid.hpp" -#include "BNO08xRptAcceleration.hpp" -#include "BNO08xRptLinearAcceleration.hpp" -#include "BNO08xRptGravity.hpp" -#include "BNO08xRptCalMagnetometer.hpp" -#include "BNO08xRptUncalMagnetometer.hpp" -#include "BNO08xRptCalGyro.hpp" -#include "BNO08xRptUncalGyro.hpp" -#include "BNO08xRptRV.hpp" -#include "BNO08xRptGameRV.hpp" -#include "BNO08xRptARVRStabilizedRV.hpp" -#include "BNO08xRptARVRStabilizedGameRV.hpp" -#include "BNO08xRptIGyroRV.hpp" -#include "BNO08xRptRVGeomag.hpp" -#include "BNO08xRptRawMEMSGyro.hpp" -#include "BNO08xRptRawMEMSAccelerometer.hpp" -#include "BNO08xRptRawMEMSMagnetometer.hpp" -#include "BNO08xRptStepCounter.hpp" -#include "BNO08xRptActivityClassifier.hpp" -#include "BNO08xStabilityClassifier.hpp" -#include "BNO08xShakeDetector.hpp" -#include "BNO08xTapDetector.hpp" +#include "BNO08xReports.hpp" /** * @class BNO08x @@ -51,15 +32,6 @@ class BNO08x { public: - inline static sh2_SensorConfig default_sensor_cfg = {.changeSensitivityEnabled = false, /// cb_fxn); - void register_cb(std::function cb_fxn); + bool register_cb(std::function cb_fxn); + bool register_cb(std::function cb_fxn); void print_product_ids(); @@ -107,34 +79,6 @@ class BNO08x BNO08xTapDetector tap_detector; private: - /// @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 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. - - bno08x_init_status_t() - : gpio_outputs(false) - , gpio_inputs(false) - , isr_service(false) - , isr_handler(false) - , spi_bus(false) - , spi_device(false) - , data_proc_task(false) - , sh2_HAL_service_task(false) - , cb_task(false) - { - } - } bno08x_init_status_t; - // data processing task static const constexpr configSTACK_DEPTH_TYPE DATA_PROC_TASK_SZ = CONFIG_ESP32_BNO08X_DATA_PROC_TASK_SZ; ///< Size of data_proc_task() stack in bytes @@ -203,24 +147,19 @@ class BNO08x QueueHandle_t queue_cb_report_id; ///< Queue to send report ID of most recent report to cb_task() - etl::vector - cb_list_void_param; // Vector for storing any call-back functions added with register_cb() - etl::vector - cb_list_rpt_param; // Vector for storing any call-back functions added with register_cb() - etl::vector - cb_ptr_list; // Vector for storing any call-back functions added with register_cb() as pointer to generic type - bno08x_config_t imu_config{}; /// en_report_ids; ///< Vector to contain IDs of currently enabled reports // clang-format off etl::map> usr_reports = @@ -285,81 +224,10 @@ class BNO08x static const constexpr uint32_t SCLK_MAX_SPEED = 3000000UL; /// #include @@ -19,19 +33,52 @@ // third-party includes #include "sh2_SensorValue.h" -// macros for bno08x_tap_detector_t -#define TAP_DETECTED_X_AXIS(tap) ((tap) & (1U << 0U) ? 1 : 0) -#define TAP_DETECTED_X_AXIS_POSITIVE(tap) ((tap) & (1U << 1U) ? 1 : 0) -#define TAP_DETECTED_Y_AXIS(tap) ((tap) & (1U << 2U) ? 1 : 0) -#define TAP_DETECTED_Y_AXIS_POSITIVE(tap) ((tap) & (1U << 3U) ? 1 : 0) -#define TAP_DETECTED_Z_AXIS(tap) ((tap) & (1U << 4U) ? 1 : 0) -#define TAP_DETECTED_Z_AXIS_POSITIVE(tap) ((tap) & (1U << 5U) ? 1 : 0) -#define TAP_DETECTED_DOUBLE(tap) ((tap) & (1U << 6U) ? 1 : 0) +/// @brief IMU configuration settings passed into constructor +typedef struct bno08x_config_t +{ + spi_host_device_t spi_peripheral; ///GPIO Configuration. + /// Alternatively, edit the default values in "Kconfig.projbuild" + bno08x_config_t(bool install_isr_service = true) + : spi_peripheral((spi_host_device_t) CONFIG_ESP32_BNO08x_SPI_HOST) + , io_mosi(static_cast(CONFIG_ESP32_BNO08X_GPIO_DI)) // default: 23 + , io_miso(static_cast(CONFIG_ESP32_BNO08X_GPIO_SDA)) // default: 19 + , io_sclk(static_cast(CONFIG_ESP32_BNO08X_GPIO_SCL)) // default: 18 + , io_cs(static_cast(CONFIG_ESP32_BNO08X_GPIO_CS)) // default: 33 + , io_int(static_cast(CONFIG_ESP32_BNO08X_GPIO_HINT)) // default: 26 + , io_rst(static_cast(CONFIG_ESP32_BNO08X_GPIO_RST)) // default: 32 + , sclk_speed(static_cast(CONFIG_ESP32_BNO08X_SCL_SPEED_HZ)) // default: 2MHz + , install_isr_service(install_isr_service) // default: true + + { + } + + /// @brief Overloaded IMU configuration settings constructor for custom pin settings + bno08x_config_t(spi_host_device_t spi_peripheral, gpio_num_t io_mosi, gpio_num_t io_miso, gpio_num_t io_sclk, gpio_num_t io_cs, + gpio_num_t io_int, gpio_num_t io_rst, uint32_t sclk_speed, bool install_isr_service = true) + : spi_peripheral(spi_peripheral) + , io_mosi(io_mosi) + , io_miso(io_miso) + , io_sclk(io_sclk) + , io_cs(io_cs) + , io_int(io_int) + , io_rst(io_rst) + , sclk_speed(sclk_speed) + , install_isr_service(install_isr_service) + { + } +} bno08x_config_t; +typedef bno08x_config_t imu_config_t; // legacy version compatibility /// @brief Reason for previous IMU reset (returned by get_reset_reason()) enum class BNO08xResetReason @@ -95,55 +142,8 @@ enum class BNO08xStability MOTION = 4, // 4 = in motion RESERVED = 5, // 5 = reserved (not used) UNDEFINED = 6 // used for unit tests - }; -/// @brief IMU configuration settings passed into constructor -typedef struct bno08x_config_t -{ - spi_host_device_t spi_peripheral; ///GPIO Configuration. - /// Alternatively, edit the default values in "Kconfig.projbuild" - bno08x_config_t(bool install_isr_service = true) - : spi_peripheral((spi_host_device_t) CONFIG_ESP32_BNO08x_SPI_HOST) - , io_mosi(static_cast(CONFIG_ESP32_BNO08X_GPIO_DI)) // default: 23 - , io_miso(static_cast(CONFIG_ESP32_BNO08X_GPIO_SDA)) // default: 19 - , io_sclk(static_cast(CONFIG_ESP32_BNO08X_GPIO_SCL)) // default: 18 - , io_cs(static_cast(CONFIG_ESP32_BNO08X_GPIO_CS)) // default: 33 - , io_int(static_cast(CONFIG_ESP32_BNO08X_GPIO_HINT)) // default: 26 - , io_rst(static_cast(CONFIG_ESP32_BNO08X_GPIO_RST)) // default: 32 - , sclk_speed(static_cast(CONFIG_ESP32_BNO08X_SCL_SPEED_HZ)) // default: 2MHz - , install_isr_service(install_isr_service) // default: true - - { - } - - /// @brief Overloaded IMU configuration settings constructor for custom pin settings - bno08x_config_t(spi_host_device_t spi_peripheral, gpio_num_t io_mosi, gpio_num_t io_miso, gpio_num_t io_sclk, gpio_num_t io_cs, - gpio_num_t io_int, gpio_num_t io_rst, uint32_t sclk_speed, bool install_isr_service = true) - : spi_peripheral(spi_peripheral) - , io_mosi(io_mosi) - , io_miso(io_miso) - , io_sclk(io_sclk) - , io_cs(io_cs) - , io_int(io_int) - , io_rst(io_rst) - , sclk_speed(sclk_speed) - , install_isr_service(install_isr_service) - { - } -} bno08x_config_t; - /// @brief Struct to represent unit quaternion. typedef struct bno08x_quat_t { @@ -783,4 +783,4 @@ typedef struct bno08x_meta_data_t } } bno08x_meta_data_t; -typedef bno08x_config_t imu_config_t; // legacy version compatibility \ No newline at end of file +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 new file mode 100644 index 0000000..76327bc --- /dev/null +++ b/include/BNO08xPrivateTypes.hpp @@ -0,0 +1,137 @@ +/** + * @file BNO08xPrivateTypes.hpp + * @author Myles Parfeniuk + */ + +#pragma once + +// etl includes +#include +#include +// esp-idf includes +#include +#include +#include +// in-house includes +#include "BNO08xGlobalTypes.hpp" +#include "BNO08xCbParamRptID.hpp" +#include "BNO08xCbParamVoid.hpp" + +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). + 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 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. + + bno08x_init_status_t() + : gpio_outputs(false) + , gpio_inputs(false) + , isr_service(false) + , isr_handler(false) + , spi_bus(false) + , spi_device(false) + , data_proc_task(false) + , sh2_HAL_service_task(false) + , cb_task(false) + { + } + } bno08x_init_status_t; + + /// @brief Holds info used to initialize report modules. + typedef struct 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) + , _data_lock(_data_lock) + , _evt_grp_rpt_en(_evt_grp_rpt_en) + , _evt_grp_rpt_data_available(_evt_grp_rpt_data_available) + , _evt_grp_bno08x_task(_evt_grp_bno08x_task) + , _en_report_ids(_en_report_ids) + , _cb_list(_cb_list) + { + } + } bno08x_report_info_t; + + inline static sh2_SensorConfig default_sensor_cfg = {.changeSensitivityEnabled = false, /// - -// in-house includes -#include "BNO08x_global_types.hpp" - -// forward dec to prevent compile errors -class BNO08x; - -/** - * @class BNO08xRpt - * - * @brief Class to represent and manage reports returned from BNO08x. - */ -class BNO08xRpt -{ - public: - inline static sh2_SensorConfig default_sensor_cfg = {.changeSensitivityEnabled = false, /// cb_fxn); - bool has_new_data(); - bool flush(); - bool get_sample_counts(bno08x_sample_counts_t& sample_counts); - bool clear_sample_counts(); - bool get_meta_data(bno08x_meta_data_t& meta_data); - - protected: - BNO08x* imu; ///< Pointer to BNO08x object for enable ,disable, and update operations. - uint8_t ID; ///< Report ID, ex. SH2_ACCELERATION. - uint32_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. - - virtual void update_data(sh2_SensorValue_t* sensor_val) = 0; - - /** - * @brief BNO08xRpt report constructor. - * - * Construct a BNO08xRpt object for managing a BNO08x sensor report. - * - * @param imu Pointer to BNO08x imu object. - * @param report_ID Report ID, ex. SH2_ACCELERATION. - * @param rpt_bit Respective enable bit for report in BNO08x::evt_grp_report_en. - * @param period_us The period/interval of the report in microseconds. - * - * @return void, nothing to return - */ - BNO08xRpt(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : imu(imu) - , ID(report_ID) - , rpt_bit(rpt_bit) - , period_us(period_us) - - { - } - - 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. - - static const constexpr char* TAG = "BNO08xRpt"; - - friend class BNO08x; -}; \ No newline at end of file diff --git a/include/BNO08xSH2HAL.hpp b/include/BNO08xSH2HAL.hpp index f4e6c51..88b4e10 100644 --- a/include/BNO08xSH2HAL.hpp +++ b/include/BNO08xSH2HAL.hpp @@ -9,10 +9,11 @@ #include "sh2.h" #include "sh2_SensorValue.h" #include "sh2_err.h" - // esp-idf includes #include #include +// in-house includes +#include "BNO08xPrivateTypes.hpp" /** * @brief Clears the most significant byte of a 16-bit value. @@ -58,8 +59,8 @@ */ #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/callback/BNO08xCbParamRptID.hpp b/include/callback/BNO08xCbParamRptID.hpp index b1fe75e..edac13d 100644 --- a/include/callback/BNO08xCbParamRptID.hpp +++ b/include/callback/BNO08xCbParamRptID.hpp @@ -35,5 +35,5 @@ class BNO08xCbParamRptID : public BNO08xCbGeneric } private: - std::function cb_fxn; + std::function cb_fxn; ///< Wrapped callback function passed at register_cb(). }; diff --git a/include/callback/BNO08xCbParamVoid.hpp b/include/callback/BNO08xCbParamVoid.hpp index f83abbd..95ed526 100644 --- a/include/callback/BNO08xCbParamVoid.hpp +++ b/include/callback/BNO08xCbParamVoid.hpp @@ -34,5 +34,5 @@ class BNO08xCbParamVoid : public BNO08xCbGeneric } private: - std::function cb_fxn; + std::function cb_fxn; ///< Wrapped callback function passed at register_cb(). }; diff --git a/include/report/BNO08xReports.hpp b/include/report/BNO08xReports.hpp new file mode 100644 index 0000000..107282f --- /dev/null +++ b/include/report/BNO08xReports.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include "BNO08xRptAcceleration.hpp" +#include "BNO08xRptLinearAcceleration.hpp" +#include "BNO08xRptGravity.hpp" +#include "BNO08xRptCalMagnetometer.hpp" +#include "BNO08xRptUncalMagnetometer.hpp" +#include "BNO08xRptCalGyro.hpp" +#include "BNO08xRptUncalGyro.hpp" +#include "BNO08xRptRV.hpp" +#include "BNO08xRptGameRV.hpp" +#include "BNO08xRptARVRStabilizedRV.hpp" +#include "BNO08xRptARVRStabilizedGameRV.hpp" +#include "BNO08xRptIGyroRV.hpp" +#include "BNO08xRptRVGeomag.hpp" +#include "BNO08xRptRawMEMSGyro.hpp" +#include "BNO08xRptRawMEMSAccelerometer.hpp" +#include "BNO08xRptRawMEMSMagnetometer.hpp" +#include "BNO08xRptStepCounter.hpp" +#include "BNO08xRptActivityClassifier.hpp" +#include "BNO08xStabilityClassifier.hpp" +#include "BNO08xShakeDetector.hpp" +#include "BNO08xTapDetector.hpp" \ No newline at end of file diff --git a/include/report/BNO08xRpt.hpp b/include/report/BNO08xRpt.hpp new file mode 100644 index 0000000..b8162a5 --- /dev/null +++ b/include/report/BNO08xRpt.hpp @@ -0,0 +1,90 @@ +/** + * @file BNO08xRpt.hpp + * @author Myles Parfeniuk + */ + +#pragma once + +// standard library includes +#include +// in-house includes +#include "BNO08xGlobalTypes.hpp" +#include "BNO08xPrivateTypes.hpp" +// hill-crest labs includes (apache 2.0 license, compatible with MIT) +#include "sh2.h" +#include "sh2_SensorValue.h" +#include "sh2_err.h" + +/** + * @class BNO08xRpt + * + * @brief Class to represent and manage reports returned from BNO08x. + */ +class BNO08xRpt +{ + public: + 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(); + bool flush(); + bool get_sample_counts(bno08x_sample_counts_t& sample_counts); + 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. + + 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. + + virtual void update_data(sh2_SensorValue_t* sensor_val) = 0; + + /** + * @brief BNO08xRpt report constructor. + * + * Construct a BNO08xRpt object for managing a BNO08x sensor report. + * + * @param imu Pointer to BNO08x imu object. + * @param report_ID Report ID, ex. SH2_ACCELERATION. + * @param rpt_bit Respective enable bit for report in BNO08x::evt_grp_report_en. + * @param period_us The period/interval of the report in microseconds. + * + * @return void, nothing to return + */ + BNO08xRpt(BNO08xPrivateTypes::bno08x_report_info_t info) + : ID(info.ID) + , rpt_bit(info.rpt_bit) + , period_us(0UL) + , _sh2_HAL_lock(info._sh2_HAL_lock) + , _data_lock(info._data_lock) + , _evt_grp_rpt_en(info._evt_grp_rpt_en) + , _evt_grp_rpt_data_available(info._evt_grp_rpt_data_available) + , _evt_grp_bno08x_task(info._evt_grp_bno08x_task) + , _en_report_ids(info._en_report_ids) + , _cb_list(info._cb_list) + + { + } + + void unlock_sh2_HAL(); + void lock_sh2_HAL(); + void unlock_user_data(); + void lock_user_data(); + 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. + + static const constexpr char* TAG = "BNO08xRpt"; + + friend class BNO08x; +}; \ No newline at end of file diff --git a/include/report/BNO08xRptARVRStabilizedGameRV.hpp b/include/report/BNO08xRptARVRStabilizedGameRV.hpp index bb03d62..b9965b1 100644 --- a/include/report/BNO08xRptARVRStabilizedGameRV.hpp +++ b/include/report/BNO08xRptARVRStabilizedGameRV.hpp @@ -15,8 +15,8 @@ class BNO08xRptARVRStabilizedGameRV : public BNO08xRptRVGeneric { public: - BNO08xRptARVRStabilizedGameRV(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRptRVGeneric(imu, report_ID, period_us, rpt_bit) + BNO08xRptARVRStabilizedGameRV(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRptRVGeneric(info) { } diff --git a/include/report/BNO08xRptARVRStabilizedRV.hpp b/include/report/BNO08xRptARVRStabilizedRV.hpp index 6df5bf8..865cfd9 100644 --- a/include/report/BNO08xRptARVRStabilizedRV.hpp +++ b/include/report/BNO08xRptARVRStabilizedRV.hpp @@ -15,8 +15,8 @@ class BNO08xRptARVRStabilizedRV : public BNO08xRptRVGeneric { public: - BNO08xRptARVRStabilizedRV(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRptRVGeneric(imu, report_ID, period_us, rpt_bit) + BNO08xRptARVRStabilizedRV(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRptRVGeneric(info) { } diff --git a/include/report/BNO08xRptAcceleration.hpp b/include/report/BNO08xRptAcceleration.hpp index ab33c50..0c7b874 100644 --- a/include/report/BNO08xRptAcceleration.hpp +++ b/include/report/BNO08xRptAcceleration.hpp @@ -15,8 +15,8 @@ class BNO08xRptAcceleration : public BNO08xRpt { public: - BNO08xRptAcceleration(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptAcceleration(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xRptActivityClassifier.hpp b/include/report/BNO08xRptActivityClassifier.hpp index dfa0532..7fd61e7 100644 --- a/include/report/BNO08xRptActivityClassifier.hpp +++ b/include/report/BNO08xRptActivityClassifier.hpp @@ -15,12 +15,13 @@ class BNO08xRptActivityClassifier : public BNO08xRpt { public: - BNO08xRptActivityClassifier(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptActivityClassifier(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } - bool enable(uint32_t time_between_reports, BNO08xActivityEnable activities_to_enable, sh2_SensorConfig_t sensor_cfg = default_sensor_cfg); + bool enable(uint32_t time_between_reports, BNO08xActivityEnable activities_to_enable, + sh2_SensorConfig_t sensor_cfg = BNO08xPrivateTypes::default_sensor_cfg); bno08x_activity_classifier_t get(); BNO08xActivity get_most_likely_activity(); diff --git a/include/report/BNO08xRptCalGyro.hpp b/include/report/BNO08xRptCalGyro.hpp index 95b0b18..e81d0b7 100644 --- a/include/report/BNO08xRptCalGyro.hpp +++ b/include/report/BNO08xRptCalGyro.hpp @@ -15,8 +15,8 @@ class BNO08xRptCalGyro : public BNO08xRpt { public: - BNO08xRptCalGyro(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptCalGyro(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xRptCalMagnetometer.hpp b/include/report/BNO08xRptCalMagnetometer.hpp index 833f8ae..b378119 100644 --- a/include/report/BNO08xRptCalMagnetometer.hpp +++ b/include/report/BNO08xRptCalMagnetometer.hpp @@ -15,8 +15,8 @@ class BNO08xRptCalMagnetometer : public BNO08xRpt { public: - BNO08xRptCalMagnetometer(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptCalMagnetometer(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xRptGameRV.hpp b/include/report/BNO08xRptGameRV.hpp index 2a8193d..6b7691d 100644 --- a/include/report/BNO08xRptGameRV.hpp +++ b/include/report/BNO08xRptGameRV.hpp @@ -15,8 +15,8 @@ class BNO08xRptGameRV : public BNO08xRptRVGeneric { public: - BNO08xRptGameRV(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRptRVGeneric(imu, report_ID, period_us, rpt_bit) + BNO08xRptGameRV(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRptRVGeneric(info) { } diff --git a/include/report/BNO08xRptGravity.hpp b/include/report/BNO08xRptGravity.hpp index 042031c..ac3b5d9 100644 --- a/include/report/BNO08xRptGravity.hpp +++ b/include/report/BNO08xRptGravity.hpp @@ -15,8 +15,8 @@ class BNO08xRptGravity : public BNO08xRpt { public: - BNO08xRptGravity(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptGravity(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xRptIGyroRV.hpp b/include/report/BNO08xRptIGyroRV.hpp index 2e8cc35..3b2cde8 100644 --- a/include/report/BNO08xRptIGyroRV.hpp +++ b/include/report/BNO08xRptIGyroRV.hpp @@ -15,8 +15,8 @@ class BNO08xRptIGyroRV : public BNO08xRptRVGeneric { public: - BNO08xRptIGyroRV(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRptRVGeneric(imu, report_ID, period_us, rpt_bit) + BNO08xRptIGyroRV(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRptRVGeneric(info) { } diff --git a/include/report/BNO08xRptLinearAcceleration.hpp b/include/report/BNO08xRptLinearAcceleration.hpp index 2f511d6..0e645c2 100644 --- a/include/report/BNO08xRptLinearAcceleration.hpp +++ b/include/report/BNO08xRptLinearAcceleration.hpp @@ -15,8 +15,8 @@ class BNO08xRptLinearAcceleration : public BNO08xRpt { public: - BNO08xRptLinearAcceleration(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptLinearAcceleration(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xRptRV.hpp b/include/report/BNO08xRptRV.hpp index 4f53f9d..2316110 100644 --- a/include/report/BNO08xRptRV.hpp +++ b/include/report/BNO08xRptRV.hpp @@ -15,8 +15,8 @@ class BNO08xRptRV : public BNO08xRptRVGeneric { public: - BNO08xRptRV(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRptRVGeneric(imu, report_ID, period_us, rpt_bit) + BNO08xRptRV(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRptRVGeneric(info) { } diff --git a/include/report/BNO08xRptRVGeneric.hpp b/include/report/BNO08xRptRVGeneric.hpp index 6f6cdd2..78c7b9d 100644 --- a/include/report/BNO08xRptRVGeneric.hpp +++ b/include/report/BNO08xRptRVGeneric.hpp @@ -19,8 +19,8 @@ class BNO08xRptRVGeneric : public BNO08xRpt bno08x_euler_angle_t get_euler(bool in_degrees = true); protected: - BNO08xRptRVGeneric(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptRVGeneric(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } bool tare(bool x, bool y, bool z, sh2_TareBasis_t basis); diff --git a/include/report/BNO08xRptRVGeomag.hpp b/include/report/BNO08xRptRVGeomag.hpp index ad81041..f16c08b 100644 --- a/include/report/BNO08xRptRVGeomag.hpp +++ b/include/report/BNO08xRptRVGeomag.hpp @@ -15,8 +15,8 @@ class BNO08xRptRVGeomag : public BNO08xRptRVGeneric { public: - BNO08xRptRVGeomag(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRptRVGeneric(imu, report_ID, period_us, rpt_bit) + BNO08xRptRVGeomag(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRptRVGeneric(info) { } diff --git a/include/report/BNO08xRptRawMEMSAccelerometer.hpp b/include/report/BNO08xRptRawMEMSAccelerometer.hpp index b071e85..1392a9d 100644 --- a/include/report/BNO08xRptRawMEMSAccelerometer.hpp +++ b/include/report/BNO08xRptRawMEMSAccelerometer.hpp @@ -15,8 +15,8 @@ class BNO08xRptRawMEMSAccelerometer : public BNO08xRpt { public: - BNO08xRptRawMEMSAccelerometer(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptRawMEMSAccelerometer(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xRptRawMEMSGyro.hpp b/include/report/BNO08xRptRawMEMSGyro.hpp index 43c05c3..97393a9 100644 --- a/include/report/BNO08xRptRawMEMSGyro.hpp +++ b/include/report/BNO08xRptRawMEMSGyro.hpp @@ -15,8 +15,8 @@ class BNO08xRptRawMEMSGyro : public BNO08xRpt { public: - BNO08xRptRawMEMSGyro(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptRawMEMSGyro(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xRptRawMEMSMagnetometer.hpp b/include/report/BNO08xRptRawMEMSMagnetometer.hpp index 879c0c6..5551131 100644 --- a/include/report/BNO08xRptRawMEMSMagnetometer.hpp +++ b/include/report/BNO08xRptRawMEMSMagnetometer.hpp @@ -15,8 +15,8 @@ class BNO08xRptRawMEMSMagnetometer : public BNO08xRpt { public: - BNO08xRptRawMEMSMagnetometer(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptRawMEMSMagnetometer(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xRptStepCounter.hpp b/include/report/BNO08xRptStepCounter.hpp index 03d238a..1fa22c8 100644 --- a/include/report/BNO08xRptStepCounter.hpp +++ b/include/report/BNO08xRptStepCounter.hpp @@ -15,8 +15,8 @@ class BNO08xRptStepCounter : public BNO08xRpt { public: - BNO08xRptStepCounter(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptStepCounter(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xRptUncalGyro.hpp b/include/report/BNO08xRptUncalGyro.hpp index 39ae019..15a928b 100644 --- a/include/report/BNO08xRptUncalGyro.hpp +++ b/include/report/BNO08xRptUncalGyro.hpp @@ -15,8 +15,8 @@ class BNO08xRptUncalGyro : public BNO08xRpt { public: - BNO08xRptUncalGyro(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptUncalGyro(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xRptUncalMagnetometer.hpp b/include/report/BNO08xRptUncalMagnetometer.hpp index b34ed6d..97c0692 100644 --- a/include/report/BNO08xRptUncalMagnetometer.hpp +++ b/include/report/BNO08xRptUncalMagnetometer.hpp @@ -16,8 +16,8 @@ class BNO08xRptUncalMagnetometer : public BNO08xRpt { public: - BNO08xRptUncalMagnetometer(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xRptUncalMagnetometer(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xShakeDetector.hpp b/include/report/BNO08xShakeDetector.hpp index b4472ba..527bab3 100644 --- a/include/report/BNO08xShakeDetector.hpp +++ b/include/report/BNO08xShakeDetector.hpp @@ -15,8 +15,8 @@ class BNO08xShakeDetector : public BNO08xRpt { public: - BNO08xShakeDetector(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xShakeDetector(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xStabilityClassifier.hpp b/include/report/BNO08xStabilityClassifier.hpp index ec844ed..1984448 100644 --- a/include/report/BNO08xStabilityClassifier.hpp +++ b/include/report/BNO08xStabilityClassifier.hpp @@ -15,8 +15,8 @@ class BNO08xStabilityClassifier : public BNO08xRpt { public: - BNO08xStabilityClassifier(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xStabilityClassifier(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } diff --git a/include/report/BNO08xTapDetector.hpp b/include/report/BNO08xTapDetector.hpp index 8df43e3..e8d2ba4 100644 --- a/include/report/BNO08xTapDetector.hpp +++ b/include/report/BNO08xTapDetector.hpp @@ -15,12 +15,12 @@ class BNO08xTapDetector : public BNO08xRpt { public: - BNO08xTapDetector(BNO08x* imu, uint8_t report_ID, uint32_t period_us, uint32_t rpt_bit) - : BNO08xRpt(imu, report_ID, period_us, rpt_bit) + BNO08xTapDetector(BNO08xPrivateTypes::bno08x_report_info_t info) + : BNO08xRpt(info) { } - bool enable(uint32_t time_between_reports, sh2_SensorConfig_t sensor_cfg = 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 6fc6578..cd01899 100644 --- a/source/BNO08x.cpp +++ b/source/BNO08x.cpp @@ -4,6 +4,9 @@ */ #include "BNO08x.hpp" +#include "BNO08xPrivateTypes.hpp" + +using namespace BNO08xPrivateTypes; /** * @brief BNO08x imu constructor. @@ -14,27 +17,48 @@ * @return void, nothing to return */ BNO08x::BNO08x(bno08x_config_t imu_config) - : accelerometer(this, SH2_ACCELEROMETER, 0UL, EVT_GRP_RPT_ACCELEROMETER_BIT) - , linear_accelerometer(this, SH2_LINEAR_ACCELERATION, 0UL, EVT_GRP_RPT_LINEAR_ACCELEROMETER_BIT) - , gravity(this, SH2_GRAVITY, 0UL, EVT_GRP_RPT_GRAVITY_BIT) - , cal_magnetometer(this, SH2_MAGNETIC_FIELD_CALIBRATED, 0UL, EVT_GRP_RPT_CAL_MAGNETOMETER_BIT) - , uncal_magnetometer(this, SH2_MAGNETIC_FIELD_UNCALIBRATED, 0UL, EVT_GRP_RPT_UNCAL_MAGNETOMETER_BIT) - , cal_gyro(this, SH2_GYROSCOPE_CALIBRATED, 0UL, EVT_GRP_RPT_CAL_GYRO_BIT) - , uncal_gyro(this, SH2_GYROSCOPE_UNCALIBRATED, 0UL, EVT_GRP_RPT_UNCAL_GYRO_BIT) - , rv(this, SH2_ROTATION_VECTOR, 0UL, EVT_GRP_RPT_RV_BIT) - , rv_game(this, SH2_GAME_ROTATION_VECTOR, 0UL, EVT_GRP_RPT_RV_GAME_BIT) - , rv_ARVR_stabilized(this, SH2_ARVR_STABILIZED_RV, 0UL, EVT_GRP_RPT_RV_ARVR_S_BIT) - , rv_ARVR_stabilized_game(this, SH2_ARVR_STABILIZED_GRV, 0UL, EVT_GRP_RPT_RV_ARVR_S_GAME_BIT) - , rv_gyro_integrated(this, SH2_GYRO_INTEGRATED_RV, 0UL, EVT_GRP_RPT_GYRO_INTEGRATED_RV_BIT) - , rv_geomagnetic(this, SH2_GEOMAGNETIC_ROTATION_VECTOR, 0UL, EVT_GRP_RPT_GEOMAG_RV_BIT) - , raw_gyro(this, SH2_RAW_GYROSCOPE, 0UL, EVT_GRP_RPT_RAW_GYRO_BIT) - , raw_accelerometer(this, SH2_RAW_ACCELEROMETER, 0UL, EVT_GRP_RPT_RAW_ACCELEROMETER_BIT) - , raw_magnetometer(this, SH2_RAW_MAGNETOMETER, 0UL, EVT_GRP_RPT_RAW_MAGNETOMETER_BIT) - , step_counter(this, SH2_STEP_COUNTER, 0UL, EVT_GRP_RPT_STEP_COUNTER_BIT) - , activity_classifier(this, SH2_PERSONAL_ACTIVITY_CLASSIFIER, 0UL, EVT_GRP_RPT_ACTIVITY_CLASSIFIER_BIT) - , stability_classifier(this, SH2_STABILITY_CLASSIFIER, 0UL, EVT_GRP_RPT_STABILITY_CLASSIFIER_BIT) - , shake_detector(this, SH2_SHAKE_DETECTOR, 0UL, EVT_GRP_RPT_SHAKE_DETECTOR_BIT) - , tap_detector(this, SH2_TAP_DETECTOR, 0UL, EVT_GRP_RPT_TAP_DETECTOR_BIT) + : 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, + &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, + &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, + &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, + &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, + &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, + &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, + &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, + &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, + &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, + &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) @@ -261,8 +285,19 @@ void BNO08x::cb_task() do { // execute callbacks - for (auto& cb_entry : cb_ptr_list) - handle_cb(rpt_ID, cb_entry); + for (auto& cb_entry : cb_list) + { + BNO08xCbGeneric* cb_ptr = nullptr; + + if (auto* ptr = etl::get_if(&cb_entry)) + cb_ptr = ptr; + + else if (auto* ptr = etl::get_if(&cb_entry)) + cb_ptr = ptr; + + if (cb_ptr != nullptr) + handle_cb(rpt_ID, cb_ptr); + } xQueueReceive(queue_cb_report_id, &rpt_ID, portMAX_DELAY); @@ -324,13 +359,13 @@ void BNO08x::handle_sensor_report(sh2_SensorValue_t* sensor_val) { uint8_t rpt_ID = sensor_val->sensorId; - // check if report implementation exists within map - if(rpt_ID == SH2_RESERVED) + // check if report implementation exists within map + if (rpt_ID == SH2_RESERVED) return; auto& rpt = usr_reports.at(rpt_ID); - if(rpt == nullptr) + if (rpt == nullptr) return; // send report ids to cb_task for callback execution (only if this report is enabled) @@ -339,7 +374,7 @@ void BNO08x::handle_sensor_report(sh2_SensorValue_t* sensor_val) // update respective report with new data rpt->update_data(sensor_val); - if (cb_ptr_list.size() != 0) + if (cb_list.size() != 0) if (xQueueSend(queue_cb_report_id, &rpt_ID, 0) != pdTRUE) { // clang-format off @@ -1264,14 +1299,18 @@ esp_err_t BNO08x::re_enable_reports() { EventBits_t report_en_bits = xEventGroupGetBits(evt_grp_report_en); - // loop through all entries of map and check if they are enabled - for (auto entry = usr_reports.begin(); entry != usr_reports.end(); ++entry) + for (const auto& rpt_ID : en_report_ids) { - BNO08xRpt* rpt = entry->second; - - //all reports in map passed this point should be null - if(rpt == nullptr) - break; + BNO08xRpt* rpt = usr_reports.at(rpt_ID); + if (rpt == nullptr) + { + // clang-format off + #ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS + ESP_LOGE(TAG, "NULL pointer detected in usr_reports map for enabled report."); + #endif + // clang-format on + continue; + } if (rpt->rpt_bit & report_en_bits) { @@ -1314,10 +1353,15 @@ bool BNO08x::data_available() * * @return void, nothing to return */ -void BNO08x::register_cb(std::function cb_fxn) +bool BNO08x::register_cb(std::function cb_fxn) { - cb_list_void_param.push_back(BNO08xCbParamVoid(cb_fxn, 0U)); - cb_ptr_list.push_back(static_cast(&cb_list_void_param.back())); + + if (cb_list.size() < CONFIG_ESP32_BNO08X_CB_MAX) + { + cb_list.push_back(BNO08xCbParamVoid(cb_fxn, 0U)); + return true; + } + return false; } /** @@ -1327,10 +1371,14 @@ void BNO08x::register_cb(std::function cb_fxn) * * @return void, nothing to return */ -void BNO08x::register_cb(std::function cb_fxn) +bool BNO08x::register_cb(std::function cb_fxn) { - cb_list_rpt_param.push_back(BNO08xCbParamRptID(cb_fxn, 0U)); - cb_ptr_list.push_back(static_cast(&cb_list_rpt_param.back())); + if (cb_list.size() < CONFIG_ESP32_BNO08X_CB_MAX) + { + cb_list.push_back(BNO08xCbParamRptID(cb_fxn, 0U)); + return true; + } + return false; } /** diff --git a/source/BNO08xRpt.cpp b/source/BNO08xRpt.cpp index d1febe8..4205562 100644 --- a/source/BNO08xRpt.cpp +++ b/source/BNO08xRpt.cpp @@ -4,13 +4,12 @@ */ #include "BNO08xRpt.hpp" -#include "BNO08x.hpp" /** * @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 BNO08xRpt::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. */ @@ -18,13 +17,13 @@ bool BNO08xRpt::enable(uint32_t time_between_reports, sh2_SensorConfig_t sensor_ { int sh2_res = SH2_OK; - xEventGroupClearBits(imu->evt_grp_report_en, rpt_bit); // Set the event group bit + EventBits_t report_en_bits = xEventGroupGetBits(*_evt_grp_rpt_en); sensor_cfg.reportInterval_us = time_between_reports; - imu->lock_sh2_HAL(); + lock_sh2_HAL(); sh2_res = sh2_setSensorConfig(ID, &sensor_cfg); - imu->unlock_sh2_HAL(); + unlock_sh2_HAL(); if (sh2_res != SH2_OK) { @@ -32,9 +31,16 @@ bool BNO08xRpt::enable(uint32_t time_between_reports, sh2_SensorConfig_t sensor_ } else { - period_us = time_between_reports; // Update the period - xEventGroupSetBits(imu->evt_grp_report_en, rpt_bit); // Set the event group bit - vTaskDelay(30UL / portTICK_PERIOD_MS); // delay a bit to allow command to execute + vTaskDelay(30UL / portTICK_PERIOD_MS); // delay a bit to allow command to execute + period_us = time_between_reports; // update the period + + // if not already enabled (ie user called this, not re_enable_reports()) + if (!(report_en_bits & rpt_bit)) + { + _en_report_ids->push_back(ID); // add report ID to enabled report IDs + xEventGroupSetBits(*_evt_grp_rpt_en, rpt_bit); // set the event group bit + } + return true; } } @@ -49,14 +55,30 @@ bool BNO08xRpt::enable(uint32_t time_between_reports, sh2_SensorConfig_t sensor_ */ bool BNO08xRpt::disable(sh2_SensorConfig_t sensor_cfg) { - EventBits_t evt_grp_report_en_bits = xEventGroupGetBits(imu->evt_grp_report_en); + int16_t idx = -1; - if (evt_grp_report_en_bits & rpt_bit) + if (!enable(0UL, sensor_cfg)) { - if (!enable(0UL, sensor_cfg)) - return false; - else - xEventGroupClearBits(imu->evt_grp_report_en, rpt_bit); // Set the event group bit + return false; + } + else + { + for (int i = 0; i < _en_report_ids->size(); i++) + { + if (_en_report_ids->at(i) == ID) + { + idx = i; + break; + } + } + + vTaskDelay(30UL / portTICK_PERIOD_MS); // delay a bit to allow command to execute + period_us = 0UL; // update the period + + if (idx != -1) + _en_report_ids->erase(_en_report_ids->begin() + idx); + + xEventGroupClearBits(*_evt_grp_rpt_en, rpt_bit); // Set the event group bit } return true; @@ -69,10 +91,14 @@ bool BNO08xRpt::disable(sh2_SensorConfig_t sensor_cfg) * * @return void, nothing to return */ -void BNO08xRpt::register_cb(std::function cb_fxn) +bool BNO08xRpt::register_cb(std::function cb_fxn) { - imu->cb_list_void_param.push_back(BNO08xCbParamVoid(cb_fxn, ID)); - imu->cb_ptr_list.push_back(static_cast(&imu->cb_list_void_param.back())); + if (_cb_list->size() < CONFIG_ESP32_BNO08X_CB_MAX) + { + _cb_list->push_back(BNO08xCbParamVoid(cb_fxn, ID)); + return true; + } + return false; } /** @@ -85,10 +111,10 @@ bool BNO08xRpt::has_new_data() { bool new_data = false; - if (xEventGroupGetBits(imu->evt_grp_report_data_available) & rpt_bit) + if (xEventGroupGetBits(*_evt_grp_rpt_data_available) & rpt_bit) { new_data = true; - xEventGroupClearBits(imu->evt_grp_report_data_available, rpt_bit); + xEventGroupClearBits(*_evt_grp_rpt_data_available, rpt_bit); } return new_data; @@ -103,9 +129,9 @@ bool BNO08xRpt::flush() { int success = SH2_OK; - imu->lock_sh2_HAL(); + lock_sh2_HAL(); success = sh2_flush(ID); - imu->unlock_sh2_HAL(); + unlock_sh2_HAL(); return (success != SH2_OK) ? false : true; } @@ -122,9 +148,9 @@ bool BNO08xRpt::get_sample_counts(bno08x_sample_counts_t& sample_counts) int success = SH2_OK; sh2_Counts_t pCounts; - imu->lock_sh2_HAL(); + lock_sh2_HAL(); success = sh2_getCounts(ID, &pCounts); - imu->unlock_sh2_HAL(); + unlock_sh2_HAL(); if (success != SH2_OK) { @@ -146,9 +172,9 @@ bool BNO08xRpt::clear_sample_counts() { int success = SH2_OK; - imu->lock_sh2_HAL(); + lock_sh2_HAL(); success = sh2_clearCounts(ID); - imu->unlock_sh2_HAL(); + unlock_sh2_HAL(); return (success == SH2_OK); } @@ -166,9 +192,9 @@ bool BNO08xRpt::get_meta_data(bno08x_meta_data_t& meta_data) sh2_SensorMetadata_t sensor_meta_data; - imu->lock_sh2_HAL(); + lock_sh2_HAL(); success = sh2_getMetadata(ID, &sensor_meta_data); - imu->unlock_sh2_HAL(); + unlock_sh2_HAL(); if (success == SH2_OK) meta_data = sensor_meta_data; @@ -176,6 +202,46 @@ bool BNO08xRpt::get_meta_data(bno08x_meta_data_t& meta_data) return (success == SH2_OK); } +/** + * @brief Locks sh2 HAL lib to only allow the calling task to call its APIs. + * + * @return void, nothing to return + */ +void BNO08xRpt::lock_sh2_HAL() +{ + xSemaphoreTake(*_sh2_HAL_lock, portMAX_DELAY); +} + +/** + * @brief Unlocks sh2 HAL lib to allow other tasks to call its APIs. + * + * @return void, nothing to return + */ +void BNO08xRpt::unlock_sh2_HAL() +{ + xSemaphoreGive(*_sh2_HAL_lock); +} + +/** + * @brief Locks locks user data to only allow the calling task to read/modify it. + * + * @return void, nothing to return + */ +void BNO08xRpt::lock_user_data() +{ + xSemaphoreTake(*_data_lock, portMAX_DELAY); +} + +/** + * @brief Unlocks user data to allow other tasks to read/modify it. + * + * @return void, nothing to return + */ +void BNO08xRpt::unlock_user_data() +{ + xSemaphoreGive(*_data_lock); +} + /** * @brief Signals to BNO08x::data_available() that a new report has arrived. * @@ -183,6 +249,6 @@ bool BNO08xRpt::get_meta_data(bno08x_meta_data_t& meta_data) */ void BNO08xRpt::signal_data_available() { - xEventGroupSetBits(imu->evt_grp_report_data_available, rpt_bit); - xEventGroupSetBits(imu->evt_grp_bno08x_task, BNO08x::EVT_GRP_BNO08x_TASK_DATA_AVAILABLE); + xEventGroupSetBits(*_evt_grp_rpt_data_available, rpt_bit); + xEventGroupSetBits(*_evt_grp_bno08x_task, BNO08xPrivateTypes::EVT_GRP_BNO08x_TASK_DATA_AVAILABLE); } diff --git a/source/BNO08xSH2HAL.cpp b/source/BNO08xSH2HAL.cpp index 3d8de4d..bea3954 100644 --- a/source/BNO08xSH2HAL.cpp +++ b/source/BNO08xSH2HAL.cpp @@ -136,7 +136,7 @@ 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, BNO08x::EVT_GRP_BNO08x_TASK_RESET_OCCURRED); + xEventGroupSetBits(imu->evt_grp_bno08x_task, BNO08xPrivateTypes::EVT_GRP_BNO08x_TASK_RESET_OCCURRED); } /** diff --git a/source/report/BNO08xRptARVRStabilizedGameRV.cpp b/source/report/BNO08xRptARVRStabilizedGameRV.cpp index c269ded..8724ad1 100644 --- a/source/report/BNO08xRptARVRStabilizedGameRV.cpp +++ b/source/report/BNO08xRptARVRStabilizedGameRV.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptARVRStabilizedGameRV.hpp" -#include "BNO08x.hpp" /** * @brief Updates ARVR stabilized game rotation vector data from decoded sensor event. @@ -15,11 +14,11 @@ */ void BNO08xRptARVRStabilizedGameRV::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.arvrStabilizedGRV; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } \ No newline at end of file diff --git a/source/report/BNO08xRptARVRStabilizedRV.cpp b/source/report/BNO08xRptARVRStabilizedRV.cpp index cab1fe7..1474bd4 100644 --- a/source/report/BNO08xRptARVRStabilizedRV.cpp +++ b/source/report/BNO08xRptARVRStabilizedRV.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptARVRStabilizedRV.hpp" -#include "BNO08x.hpp" /** * @brief Updates ARVR stabilized rotation vector data from decoded sensor event. @@ -15,11 +14,11 @@ */ void BNO08xRptARVRStabilizedRV::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.arvrStabilizedRV; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } \ No newline at end of file diff --git a/source/report/BNO08xRptAcceleration.cpp b/source/report/BNO08xRptAcceleration.cpp index 29a079b..3077931 100644 --- a/source/report/BNO08xRptAcceleration.cpp +++ b/source/report/BNO08xRptAcceleration.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptAcceleration.hpp" -#include "BNO08x.hpp" /** * @brief Updates accelerometer data from decoded sensor event. @@ -15,12 +14,12 @@ */ void BNO08xRptAcceleration::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.accelerometer; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -31,8 +30,8 @@ void BNO08xRptAcceleration::update_data(sh2_SensorValue_t* sensor_val) */ bno08x_accel_t BNO08xRptAcceleration::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_accel_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xRptActivityClassifier.cpp b/source/report/BNO08xRptActivityClassifier.cpp index 3821fb6..b3c54cd 100644 --- a/source/report/BNO08xRptActivityClassifier.cpp +++ b/source/report/BNO08xRptActivityClassifier.cpp @@ -4,14 +4,13 @@ */ #include "BNO08xRptActivityClassifier.hpp" -#include "BNO08x.hpp" /** * @brief Enables activity classifier reports such that the BNO08x begins sending them. * * @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 BNO08xRpt::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. */ @@ -31,12 +30,12 @@ bool BNO08xRptActivityClassifier::enable(uint32_t time_between_reports, BNO08xAc */ void BNO08xRptActivityClassifier::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.personalActivityClassifier; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -47,9 +46,9 @@ void BNO08xRptActivityClassifier::update_data(sh2_SensorValue_t* sensor_val) */ bno08x_activity_classifier_t BNO08xRptActivityClassifier::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_activity_classifier_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } @@ -60,8 +59,8 @@ bno08x_activity_classifier_t BNO08xRptActivityClassifier::get() */ BNO08xActivity BNO08xRptActivityClassifier::get_most_likely_activity() { - imu->lock_user_data(); + lock_user_data(); BNO08xActivity rqdata = static_cast(data.mostLikelyState); - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xRptCalGyro.cpp b/source/report/BNO08xRptCalGyro.cpp index 0107800..98be682 100644 --- a/source/report/BNO08xRptCalGyro.cpp +++ b/source/report/BNO08xRptCalGyro.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptCalGyro.hpp" -#include "BNO08x.hpp" /** * @brief Updates calibrated gyro data from decoded sensor event. @@ -15,12 +14,12 @@ */ void BNO08xRptCalGyro::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.gyroscope; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -31,8 +30,8 @@ void BNO08xRptCalGyro::update_data(sh2_SensorValue_t* sensor_val) */ bno08x_gyro_t BNO08xRptCalGyro::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_gyro_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xRptCalMagnetometer.cpp b/source/report/BNO08xRptCalMagnetometer.cpp index bfed8a2..78ad0ba 100644 --- a/source/report/BNO08xRptCalMagnetometer.cpp +++ b/source/report/BNO08xRptCalMagnetometer.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptCalMagnetometer.hpp" -#include "BNO08x.hpp" /** * @brief Updates calibrated magnetometer data from decoded sensor event. @@ -15,12 +14,12 @@ */ void BNO08xRptCalMagnetometer::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.magneticField; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -31,8 +30,8 @@ void BNO08xRptCalMagnetometer::update_data(sh2_SensorValue_t* sensor_val) */ bno08x_magf_t BNO08xRptCalMagnetometer::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_magf_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xRptGameRV.cpp b/source/report/BNO08xRptGameRV.cpp index 43a8284..11a0b9f 100644 --- a/source/report/BNO08xRptGameRV.cpp +++ b/source/report/BNO08xRptGameRV.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptGameRV.hpp" -#include "BNO08x.hpp" /** * @brief Updates game rotation vector data from decoded sensor event. @@ -15,12 +14,12 @@ */ void BNO08xRptGameRV::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.gameRotationVector; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -48,9 +47,9 @@ bool BNO08xRptGameRV::tare_persist() { int success = SH2_ERR; - imu->lock_sh2_HAL(); + lock_sh2_HAL(); success = sh2_persistTare(); - imu->unlock_sh2_HAL(); + unlock_sh2_HAL(); if (success != SH2_OK) return false; @@ -65,7 +64,7 @@ bool BNO08xRptGameRV::tare_persist() */ void BNO08xRptGameRV::tare_clear() { - imu->lock_sh2_HAL(); + lock_sh2_HAL(); sh2_clearTare(); - imu->unlock_sh2_HAL(); + unlock_sh2_HAL(); } \ No newline at end of file diff --git a/source/report/BNO08xRptGravity.cpp b/source/report/BNO08xRptGravity.cpp index 6219b4e..7a012af 100644 --- a/source/report/BNO08xRptGravity.cpp +++ b/source/report/BNO08xRptGravity.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptGravity.hpp" -#include "BNO08x.hpp" /** * @brief Updates gravity data from decoded sensor event. @@ -15,12 +14,12 @@ */ void BNO08xRptGravity::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.gravity; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -31,8 +30,8 @@ void BNO08xRptGravity::update_data(sh2_SensorValue_t* sensor_val) */ bno08x_accel_t BNO08xRptGravity::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_accel_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xRptIGyroRV.cpp b/source/report/BNO08xRptIGyroRV.cpp index 9199399..2890df8 100644 --- a/source/report/BNO08xRptIGyroRV.cpp +++ b/source/report/BNO08xRptIGyroRV.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptIGyroRV.hpp" -#include "BNO08x.hpp" /** * @brief Updates gyro integrated rotation vector data from decoded sensor event. @@ -15,13 +14,13 @@ */ void BNO08xRptIGyroRV::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.gyroIntegratedRV; data.accuracy = static_cast(sensor_val->status); data_vel = sensor_val->un.gyroIntegratedRV; - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -35,10 +34,10 @@ void BNO08xRptIGyroRV::update_data(sh2_SensorValue_t* sensor_val) */ void BNO08xRptIGyroRV::get(bno08x_quat_t& quat, bno08x_ang_vel_t& vel) { - imu->lock_user_data(); + lock_user_data(); quat = data; vel = data_vel; - imu->unlock_user_data(); + unlock_user_data(); } /** @@ -48,8 +47,8 @@ void BNO08xRptIGyroRV::get(bno08x_quat_t& quat, bno08x_ang_vel_t& vel) */ bno08x_ang_vel_t BNO08xRptIGyroRV::get_vel() { - imu->lock_user_data(); + lock_user_data(); bno08x_ang_vel_t rqdata = data_vel; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xRptLinearAcceleration.cpp b/source/report/BNO08xRptLinearAcceleration.cpp index c02bdb7..a81b666 100644 --- a/source/report/BNO08xRptLinearAcceleration.cpp +++ b/source/report/BNO08xRptLinearAcceleration.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptLinearAcceleration.hpp" -#include "BNO08x.hpp" /** * @brief Updates accelerometer data from decoded sensor event. @@ -15,12 +14,12 @@ */ void BNO08xRptLinearAcceleration::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.linearAcceleration; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -31,8 +30,8 @@ void BNO08xRptLinearAcceleration::update_data(sh2_SensorValue_t* sensor_val) */ bno08x_accel_t BNO08xRptLinearAcceleration::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_accel_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xRptRV.cpp b/source/report/BNO08xRptRV.cpp index e78b60e..a3db475 100644 --- a/source/report/BNO08xRptRV.cpp +++ b/source/report/BNO08xRptRV.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptRV.hpp" -#include "BNO08x.hpp" /** * @brief Updates rotation vector data from decoded sensor event. @@ -15,12 +14,12 @@ */ void BNO08xRptRV::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.rotationVector; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -48,9 +47,9 @@ bool BNO08xRptRV::tare_persist() { int success = SH2_ERR; - imu->lock_sh2_HAL(); + lock_sh2_HAL(); success = sh2_persistTare(); - imu->unlock_sh2_HAL(); + unlock_sh2_HAL(); if (success != SH2_OK) return false; @@ -65,7 +64,7 @@ bool BNO08xRptRV::tare_persist() */ void BNO08xRptRV::tare_clear() { - imu->lock_sh2_HAL(); + lock_sh2_HAL(); sh2_clearTare(); - imu->unlock_sh2_HAL(); + unlock_sh2_HAL(); } \ No newline at end of file diff --git a/source/report/BNO08xRptRVGeneric.cpp b/source/report/BNO08xRptRVGeneric.cpp index d4e7433..379557f 100644 --- a/source/report/BNO08xRptRVGeneric.cpp +++ b/source/report/BNO08xRptRVGeneric.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptRVGeneric.hpp" -#include "BNO08x.hpp" /** * @brief Grabs most recent rotation vector data in form of unit quaternion, rad accuracy units in radians (if available, else constant 0.0f). @@ -19,9 +18,9 @@ */ bno08x_quat_t BNO08xRptRVGeneric::get_quat() { - imu->lock_user_data(); + lock_user_data(); bno08x_quat_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } @@ -71,9 +70,9 @@ bool BNO08xRptRVGeneric::tare(bool x, bool y, bool z, sh2_TareBasis_t basis) if (z) axis_flag |= SH2_TARE_Z; - imu->lock_sh2_HAL(); + lock_sh2_HAL(); success = sh2_setTareNow(axis_flag, basis); - imu->unlock_sh2_HAL(); + unlock_sh2_HAL(); if (success != SH2_OK) return false; diff --git a/source/report/BNO08xRptRVGeomag.cpp b/source/report/BNO08xRptRVGeomag.cpp index 552cdba..490ba13 100644 --- a/source/report/BNO08xRptRVGeomag.cpp +++ b/source/report/BNO08xRptRVGeomag.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptRVGeomag.hpp" -#include "BNO08x.hpp" /** * @brief Updates geomagnetic rotation vector data from decoded sensor event. @@ -15,12 +14,12 @@ */ void BNO08xRptRVGeomag::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.geoMagRotationVector; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -47,9 +46,9 @@ bool BNO08xRptRVGeomag::tare_persist() { int success = SH2_ERR; - imu->lock_sh2_HAL(); + lock_sh2_HAL(); success = sh2_persistTare(); - imu->unlock_sh2_HAL(); + unlock_sh2_HAL(); if (success != SH2_OK) return false; @@ -64,7 +63,7 @@ bool BNO08xRptRVGeomag::tare_persist() */ void BNO08xRptRVGeomag::tare_clear() { - imu->lock_sh2_HAL(); + lock_sh2_HAL(); sh2_clearTare(); - imu->unlock_sh2_HAL(); + unlock_sh2_HAL(); } \ No newline at end of file diff --git a/source/report/BNO08xRptRawMEMSAccelerometer.cpp b/source/report/BNO08xRptRawMEMSAccelerometer.cpp index 2c11443..c525df6 100644 --- a/source/report/BNO08xRptRawMEMSAccelerometer.cpp +++ b/source/report/BNO08xRptRawMEMSAccelerometer.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptRawMEMSAccelerometer.hpp" -#include "BNO08x.hpp" /** * @brief Updates raw accelerometer data from decoded sensor event. @@ -15,12 +14,12 @@ */ void BNO08xRptRawMEMSAccelerometer::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.rawAccelerometer; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -31,8 +30,8 @@ void BNO08xRptRawMEMSAccelerometer::update_data(sh2_SensorValue_t* sensor_val) */ bno08x_raw_accel_t BNO08xRptRawMEMSAccelerometer::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_raw_accel_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xRptRawMEMSGyro.cpp b/source/report/BNO08xRptRawMEMSGyro.cpp index 6c5bd7a..9431c53 100644 --- a/source/report/BNO08xRptRawMEMSGyro.cpp +++ b/source/report/BNO08xRptRawMEMSGyro.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptRawMEMSGyro.hpp" -#include "BNO08x.hpp" /** * @brief Updates raw mems gyro data from decoded sensor event. @@ -15,12 +14,12 @@ */ void BNO08xRptRawMEMSGyro::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.rawGyroscope; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -31,8 +30,8 @@ void BNO08xRptRawMEMSGyro::update_data(sh2_SensorValue_t* sensor_val) */ bno08x_raw_gyro_t BNO08xRptRawMEMSGyro::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_raw_gyro_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xRptRawMEMSMagnetometer.cpp b/source/report/BNO08xRptRawMEMSMagnetometer.cpp index 45c0801..012b43b 100644 --- a/source/report/BNO08xRptRawMEMSMagnetometer.cpp +++ b/source/report/BNO08xRptRawMEMSMagnetometer.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptRawMEMSMagnetometer.hpp" -#include "BNO08x.hpp" /** * @brief Updates raw magnetometer data from decoded sensor event. @@ -15,12 +14,12 @@ */ void BNO08xRptRawMEMSMagnetometer::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.rawMagnetometer; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -31,8 +30,8 @@ void BNO08xRptRawMEMSMagnetometer::update_data(sh2_SensorValue_t* sensor_val) */ bno08x_raw_magf_t BNO08xRptRawMEMSMagnetometer::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_raw_magf_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xRptStepCounter.cpp b/source/report/BNO08xRptStepCounter.cpp index 2872682..2439ef9 100644 --- a/source/report/BNO08xRptStepCounter.cpp +++ b/source/report/BNO08xRptStepCounter.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptStepCounter.hpp" -#include "BNO08x.hpp" /** * @brief Updates step counter data from decoded sensor event. @@ -17,7 +16,7 @@ void BNO08xRptStepCounter::update_data(sh2_SensorValue_t* sensor_val) { static uint16_t prev_steps = 0; - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.stepCounter; if (prev_steps > data.steps) @@ -29,9 +28,9 @@ void BNO08xRptStepCounter::update_data(sh2_SensorValue_t* sensor_val) prev_steps = data.steps; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -42,9 +41,9 @@ void BNO08xRptStepCounter::update_data(sh2_SensorValue_t* sensor_val) */ uint32_t BNO08xRptStepCounter::get_total_steps() { - imu->lock_user_data(); + lock_user_data(); uint32_t total_steps = step_accumulator + data.steps; - imu->unlock_user_data(); + unlock_user_data(); return total_steps; } @@ -55,8 +54,8 @@ uint32_t BNO08xRptStepCounter::get_total_steps() */ bno08x_step_counter_t BNO08xRptStepCounter::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_step_counter_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xRptUncalGyro.cpp b/source/report/BNO08xRptUncalGyro.cpp index 7af340c..b1d2fa7 100644 --- a/source/report/BNO08xRptUncalGyro.cpp +++ b/source/report/BNO08xRptUncalGyro.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptUncalGyro.hpp" -#include "BNO08x.hpp" /** * @brief Updates uncalibrated gyro data from decoded sensor event. @@ -15,13 +14,13 @@ */ void BNO08xRptUncalGyro::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.gyroscopeUncal; data.accuracy = static_cast(sensor_val->status); bias_data = sensor_val->un.gyroscopeUncal; - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -35,10 +34,10 @@ void BNO08xRptUncalGyro::update_data(sh2_SensorValue_t* sensor_val) */ void BNO08xRptUncalGyro::get(bno08x_gyro_t& vel, bno08x_gyro_bias_t& bias) { - imu->lock_user_data(); + lock_user_data(); vel = data; bias = bias_data; - imu->unlock_user_data(); + unlock_user_data(); } /** @@ -48,9 +47,9 @@ void BNO08xRptUncalGyro::get(bno08x_gyro_t& vel, bno08x_gyro_bias_t& bias) */ bno08x_gyro_t BNO08xRptUncalGyro::get_vel() { - imu->lock_user_data(); + lock_user_data(); bno08x_gyro_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } @@ -61,8 +60,8 @@ bno08x_gyro_t BNO08xRptUncalGyro::get_vel() */ bno08x_gyro_bias_t BNO08xRptUncalGyro::get_bias() { - imu->lock_user_data(); + lock_user_data(); bno08x_gyro_bias_t rqdata = bias_data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xRptUncalMagnetometer.cpp b/source/report/BNO08xRptUncalMagnetometer.cpp index 2619821..eb5d35b 100644 --- a/source/report/BNO08xRptUncalMagnetometer.cpp +++ b/source/report/BNO08xRptUncalMagnetometer.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xRptUncalMagnetometer.hpp" -#include "BNO08x.hpp" /** * @brief Updates uncalibrated magf data from decoded sensor event. @@ -15,13 +14,13 @@ */ void BNO08xRptUncalMagnetometer::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.magneticFieldUncal; data.accuracy = static_cast(sensor_val->status); bias_data = sensor_val->un.magneticFieldUncal; - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -35,10 +34,10 @@ void BNO08xRptUncalMagnetometer::update_data(sh2_SensorValue_t* sensor_val) */ void BNO08xRptUncalMagnetometer::get(bno08x_magf_t& magf, bno08x_magf_bias_t& bias) { - imu->lock_user_data(); + lock_user_data(); magf = data; bias = bias_data; - imu->unlock_user_data(); + unlock_user_data(); } /** @@ -48,9 +47,9 @@ void BNO08xRptUncalMagnetometer::get(bno08x_magf_t& magf, bno08x_magf_bias_t& bi */ bno08x_magf_t BNO08xRptUncalMagnetometer::get_magf() { - imu->lock_user_data(); + lock_user_data(); bno08x_magf_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } @@ -61,8 +60,8 @@ bno08x_magf_t BNO08xRptUncalMagnetometer::get_magf() */ bno08x_magf_bias_t BNO08xRptUncalMagnetometer::get_bias() { - imu->lock_user_data(); + lock_user_data(); bno08x_magf_bias_t rqdata = bias_data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xShakeDetector.cpp b/source/report/BNO08xShakeDetector.cpp index 0d24437..58be6b1 100644 --- a/source/report/BNO08xShakeDetector.cpp +++ b/source/report/BNO08xShakeDetector.cpp @@ -4,8 +4,6 @@ */ #include "BNO08xShakeDetector.hpp" -#include "BNO08x.hpp" - /** * @brief Updates shake detector data from decoded sensor event. * @@ -15,12 +13,12 @@ */ void BNO08xShakeDetector::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.shakeDetector; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -31,8 +29,8 @@ void BNO08xShakeDetector::update_data(sh2_SensorValue_t* sensor_val) */ bno08x_shake_detector_t BNO08xShakeDetector::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_shake_detector_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file diff --git a/source/report/BNO08xStabilityClassifier.cpp b/source/report/BNO08xStabilityClassifier.cpp index 2ff7def..4c2bd70 100644 --- a/source/report/BNO08xStabilityClassifier.cpp +++ b/source/report/BNO08xStabilityClassifier.cpp @@ -4,7 +4,6 @@ */ #include "BNO08xStabilityClassifier.hpp" -#include "BNO08x.hpp" /** * @brief Updates stability classifier data from decoded sensor event. @@ -15,12 +14,12 @@ */ void BNO08xStabilityClassifier::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.stabilityClassifier; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -31,9 +30,9 @@ void BNO08xStabilityClassifier::update_data(sh2_SensorValue_t* sensor_val) */ bno08x_stability_classifier_t BNO08xStabilityClassifier::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_stability_classifier_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } @@ -44,8 +43,8 @@ bno08x_stability_classifier_t BNO08xStabilityClassifier::get() */ BNO08xStability BNO08xStabilityClassifier::get_stability() { - imu->lock_user_data(); + lock_user_data(); BNO08xStability rqdata = data.stability; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } diff --git a/source/report/BNO08xTapDetector.cpp b/source/report/BNO08xTapDetector.cpp index ca41453..459a702 100644 --- a/source/report/BNO08xTapDetector.cpp +++ b/source/report/BNO08xTapDetector.cpp @@ -4,13 +4,12 @@ */ #include "BNO08xTapDetector.hpp" -#include "BNO08x.hpp" /** * @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 BNO08xRpt::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. */ @@ -31,12 +30,12 @@ bool BNO08xTapDetector::enable(uint32_t time_between_reports, sh2_SensorConfig_t */ void BNO08xTapDetector::update_data(sh2_SensorValue_t* sensor_val) { - imu->lock_user_data(); + lock_user_data(); data = sensor_val->un.tapDetector; data.accuracy = static_cast(sensor_val->status); - imu->unlock_user_data(); + unlock_user_data(); - if (rpt_bit & xEventGroupGetBits(imu->evt_grp_report_en)) + if (rpt_bit & xEventGroupGetBits(*_evt_grp_rpt_en)) signal_data_available(); } @@ -47,8 +46,8 @@ void BNO08xTapDetector::update_data(sh2_SensorValue_t* sensor_val) */ bno08x_tap_detector_t BNO08xTapDetector::get() { - imu->lock_user_data(); + lock_user_data(); bno08x_tap_detector_t rqdata = data; - imu->unlock_user_data(); + unlock_user_data(); return rqdata; } \ No newline at end of file