Removed BNO08x dependency from BNO08xRpt
This commit is contained in:
parent
f00416c297
commit
09d8481877
|
|
@ -1,4 +1,3 @@
|
|||
---
|
||||
BasedOnStyle: LLVM
|
||||
Standard: Cpp11
|
||||
|
||||
|
|
@ -35,3 +34,5 @@ IndentAccessModifiers: true
|
|||
IndentPPDirectives: AfterHash
|
||||
|
||||
IndentCaseLabels: true
|
||||
|
||||
NamespaceIndentation: All
|
||||
|
|
|
|||
|
|
@ -7,41 +7,22 @@
|
|||
|
||||
// etl includes
|
||||
#include <etl/vector.h>
|
||||
#include <etl/variant.h>
|
||||
#include <etl/map.h>
|
||||
|
||||
// esp-idf includes
|
||||
#include <driver/gpio.h>
|
||||
#include <driver/spi_common.h>
|
||||
#include <driver/spi_master.h>
|
||||
#include <freertos/FreeRTOS.h>
|
||||
#include <freertos/task.h>
|
||||
#include <freertos/event_groups.h>
|
||||
#include <freertos/queue.h>
|
||||
#include <freertos/semphr.h>
|
||||
|
||||
// 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, ///<TODO
|
||||
.changeSensitivityRelative = false,
|
||||
.wakeupEnabled = false,
|
||||
.alwaysOnEnabled = false,
|
||||
.changeSensitivity = 0,
|
||||
.reportInterval_us = 0,
|
||||
.batchInterval_us = 0,
|
||||
.sensorSpecific = 0};
|
||||
|
||||
BNO08x(bno08x_config_t imu_config = bno08x_config_t());
|
||||
~BNO08x();
|
||||
|
||||
|
|
@ -74,8 +46,8 @@ class BNO08x
|
|||
bool get_frs(uint16_t frs_ID, uint32_t (&data)[16], uint16_t& rx_data_sz);
|
||||
|
||||
bool data_available();
|
||||
void register_cb(std::function<void(void)> cb_fxn);
|
||||
void register_cb(std::function<void(uint8_t report_ID)> cb_fxn);
|
||||
bool register_cb(std::function<void(void)> cb_fxn);
|
||||
bool register_cb(std::function<void(uint8_t report_ID)> 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<BNO08xCbParamVoid, CONFIG_ESP32_BNO08X_CB_MAX>
|
||||
cb_list_void_param; // Vector for storing any call-back functions added with register_cb()
|
||||
etl::vector<BNO08xCbParamRptID, CONFIG_ESP32_BNO08X_CB_MAX>
|
||||
cb_list_rpt_param; // Vector for storing any call-back functions added with register_cb()
|
||||
etl::vector<BNO08xCbGeneric*, CONFIG_ESP32_BNO08X_CB_MAX>
|
||||
cb_ptr_list; // Vector for storing any call-back functions added with register_cb() as pointer to generic type
|
||||
|
||||
bno08x_config_t imu_config{}; ///<IMU configuration settings
|
||||
spi_bus_config_t bus_config{}; ///<SPI bus GPIO configuration settings
|
||||
spi_device_interface_config_t imu_spi_config{}; ///<SPI slave device settings
|
||||
spi_device_handle_t spi_hdl{}; ///<SPI device handle
|
||||
spi_transaction_t spi_transaction{}; ///<SPI transaction handle
|
||||
bno08x_init_status_t
|
||||
BNO08xPrivateTypes::bno08x_init_status_t
|
||||
init_status; ///<Initialization status of various functionality, used by deconstructor during cleanup, set during initialization.
|
||||
|
||||
sh2_ProductIds_t product_IDs; ///< Product ID info returned IMU at initialization, can be viewed with print_product_ids()
|
||||
|
||||
static const constexpr uint8_t TOTAL_RPT_COUNT = 38; ///< Amount of possible reports returned from BNO08x.
|
||||
BNO08xPrivateTypes::bno08x_cb_list_t cb_list; ///< Vector to contain registered callbacks.
|
||||
|
||||
etl::vector<uint8_t, TOTAL_RPT_COUNT> en_report_ids; ///< Vector to contain IDs of currently enabled reports
|
||||
|
||||
// clang-format off
|
||||
etl::map<uint8_t, BNO08xRpt*, TOTAL_RPT_COUNT, etl::less<uint8_t>> usr_reports =
|
||||
|
|
@ -285,81 +224,10 @@ class BNO08x
|
|||
|
||||
static const constexpr uint32_t SCLK_MAX_SPEED = 3000000UL; ///<Max SPI SCLK speed BNO08x is capable of.
|
||||
|
||||
// evt_grp_bno08x_task bits
|
||||
static const constexpr EventBits_t EVT_GRP_BNO08x_TASKS_RUNNING =
|
||||
(1UL << 0U); ///<When this bit is set it indicates the BNO08x tasks are running, it is always set to 1 for the duration BNO08x driver object. Cleared in deconstructor for safe task deletion.
|
||||
static const constexpr EventBits_t EVT_GRP_BNO08x_TASK_HINT_ASSRT_BIT =
|
||||
(1UL << 1U); ///<When this bit is set it indicates the BNO08x has asserted its host interrupt pin, thus an SPI transaction should commence.
|
||||
static const constexpr EventBits_t EVT_GRP_BNO08x_TASK_RESET_OCCURRED =
|
||||
(1UL << 2U); ///<When this bit is set it indicates the SH2 HAL lib has reset the IMU, any reports enabled by the user must be re-enabled.
|
||||
static const constexpr EventBits_t 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()
|
||||
|
||||
// evt_grp_report_en bits
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_RV_BIT = (1UL << 0U); ///< When set, rotation vector reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_RV_GAME_BIT = (1UL << 1U); ///< When set, game rotation vector reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_RV_ARVR_S_BIT = (1UL << 2U); ///< When set, ARVR stabilized rotation vector reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_RV_ARVR_S_GAME_BIT =
|
||||
(1UL << 3U); ///< When set, ARVR stabilized game rotation vector reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_GYRO_INTEGRATED_RV_BIT =
|
||||
(1UL << 4U); ///< When set, gyro integrator rotation vector reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_GEOMAG_RV_BIT = (1UL << 5U); ///< When set, gyro integrator rotation vector reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_ACCELEROMETER_BIT = (1UL << 6U); ///< When set, accelerometer reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_LINEAR_ACCELEROMETER_BIT = (1UL << 7U); ///< When set, linear accelerometer reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_GRAVITY_BIT = (1UL << 8U); ///< When set, gravity reports are active.
|
||||
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_CAL_GYRO_BIT = (1UL << 9U); ///< When set, gyro reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_UNCAL_GYRO_BIT = (1UL << 10U); ///< When set, uncalibrated gyro reports are active.
|
||||
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_CAL_MAGNETOMETER_BIT = (1UL << 11U); ///< When set, calibrated magnetometer reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_UNCAL_MAGNETOMETER_BIT =
|
||||
(1UL << 12U); ///< When set, uncalibrated magnetometer reports are active.
|
||||
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_TAP_DETECTOR_BIT = (1UL << 13U); ///< When set, tap detector reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_STEP_COUNTER_BIT = (1UL << 14U); ///< When set, step counter reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_STABILITY_CLASSIFIER_BIT =
|
||||
(1UL << 15U); ///< When set, stability classifier reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_ACTIVITY_CLASSIFIER_BIT = (1UL << 16U); ///< When set, activity classifier reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_SHAKE_DETECTOR_BIT = (1UL << 17U); ///< When set, shake detector reports are active.
|
||||
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_RAW_ACCELEROMETER_BIT = (1UL << 18U); ///< When set, raw accelerometer reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_RAW_GYRO_BIT = (1UL << 19U); ///< When set, raw gyro reports are active.
|
||||
static const constexpr EventBits_t EVT_GRP_RPT_RAW_MAGNETOMETER_BIT = (1UL << 20U); ///< When set, raw magnetometer reports are active.
|
||||
|
||||
static const constexpr EventBits_t 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;
|
||||
|
||||
static const constexpr char* TAG = "BNO08x"; ///< Class tag used for serial print statements
|
||||
|
||||
// we have a lot of friends
|
||||
friend class BNO08xSH2HAL;
|
||||
friend class BNO08xTestHelper;
|
||||
friend class BNO08xRpt;
|
||||
friend class BNO08xRptRVGeneric;
|
||||
friend class BNO08xRptRV;
|
||||
friend class BNO08xRptGameRV;
|
||||
friend class BNO08xRptARVRStabilizedRV;
|
||||
friend class BNO08xRptARVRStabilizedGameRV;
|
||||
friend class BNO08xRptAcceleration;
|
||||
friend class BNO08xRptLinearAcceleration;
|
||||
friend class BNO08xRptGravity;
|
||||
friend class BNO08xRptCalMagnetometer;
|
||||
friend class BNO08xRptUncalMagnetometer;
|
||||
friend class BNO08xRptCalGyro;
|
||||
friend class BNO08xRptUncalGyro;
|
||||
friend class BNO08xRptIGyroRV;
|
||||
friend class BNO08xRptRVGeomag;
|
||||
friend class BNO08xRptRawMEMSGyro;
|
||||
friend class BNO08xRptRawMEMSAccelerometer;
|
||||
friend class BNO08xRptRawMEMSMagnetometer;
|
||||
friend class BNO08xRptStepCounter;
|
||||
friend class BNO08xRptActivityClassifier;
|
||||
friend class BNO08xStabilityClassifier;
|
||||
friend class BNO08xShakeDetector;
|
||||
friend class BNO08xTapDetector;
|
||||
};
|
||||
|
|
@ -1,10 +1,24 @@
|
|||
/**
|
||||
* @file BNO08x_global_types.hpp
|
||||
* @file BNO08xGlobalTypes.hpp
|
||||
* @author Myles Parfeniuk
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// 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)
|
||||
|
||||
// macros for bno08x_shake_detector_t
|
||||
#define SHAKE_DETECTED_X(tap) ((tap) & (1U << 0U) ? 1 : 0)
|
||||
#define SHAKE_DETECTED_Y(tap) ((tap) & (1U << 1U) ? 1 : 0)
|
||||
#define SHAKE_DETECTED_Z(tap) ((tap) & (1U << 2U) ? 1 : 0)
|
||||
|
||||
// standard library includes
|
||||
#include <math.h>
|
||||
#include <inttypes.h>
|
||||
|
|
@ -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; ///<SPI peripheral to be used
|
||||
gpio_num_t io_mosi; ///<MOSI GPIO pin (connects to BNO08x DI pin)
|
||||
gpio_num_t io_miso; ///<MISO GPIO pin (connects to BNO08x SDA pin)
|
||||
gpio_num_t io_sclk; ///<SCLK pin (connects to BNO08x SCL pin)
|
||||
gpio_num_t io_cs; /// Chip select pin (connects to BNO08x CS pin)
|
||||
gpio_num_t io_int; /// Host interrupt pin (connects to BNO08x INT pin)
|
||||
gpio_num_t io_rst; /// Reset pin (connects to BNO08x RST pin)
|
||||
uint32_t sclk_speed; ///<Desired SPI SCLK speed in Hz (max 3MHz)
|
||||
bool install_isr_service; ///<Indicates whether the ISR service for the HINT should be installed at IMU initialization, (if gpio_install_isr_service() is called before initialize() set this to false)
|
||||
|
||||
// macros for bno08x_shake_detector_t
|
||||
#define SHAKE_DETECTED_X(tap) ((tap) & (1U << 0U) ? 1 : 0)
|
||||
#define SHAKE_DETECTED_Y(tap) ((tap) & (1U << 1U) ? 1 : 0)
|
||||
#define SHAKE_DETECTED_Z(tap) ((tap) & (1U << 2U) ? 1 : 0)
|
||||
/// @brief Default IMU configuration settings constructor.
|
||||
/// To modify default GPIO pins, run "idf.py menuconfig" esp32_BNO08x->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<gpio_num_t>(CONFIG_ESP32_BNO08X_GPIO_DI)) // default: 23
|
||||
, io_miso(static_cast<gpio_num_t>(CONFIG_ESP32_BNO08X_GPIO_SDA)) // default: 19
|
||||
, io_sclk(static_cast<gpio_num_t>(CONFIG_ESP32_BNO08X_GPIO_SCL)) // default: 18
|
||||
, io_cs(static_cast<gpio_num_t>(CONFIG_ESP32_BNO08X_GPIO_CS)) // default: 33
|
||||
, io_int(static_cast<gpio_num_t>(CONFIG_ESP32_BNO08X_GPIO_HINT)) // default: 26
|
||||
, io_rst(static_cast<gpio_num_t>(CONFIG_ESP32_BNO08X_GPIO_RST)) // default: 32
|
||||
, sclk_speed(static_cast<uint32_t>(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; ///<SPI peripheral to be used
|
||||
gpio_num_t io_mosi; ///<MOSI GPIO pin (connects to BNO08x DI pin)
|
||||
gpio_num_t io_miso; ///<MISO GPIO pin (connects to BNO08x SDA pin)
|
||||
gpio_num_t io_sclk; ///<SCLK pin (connects to BNO08x SCL pin)
|
||||
gpio_num_t io_cs; /// Chip select pin (connects to BNO08x CS pin)
|
||||
gpio_num_t io_int; /// Host interrupt pin (connects to BNO08x INT pin)
|
||||
gpio_num_t io_rst; /// Reset pin (connects to BNO08x RST pin)
|
||||
uint32_t sclk_speed; ///<Desired SPI SCLK speed in Hz (max 3MHz)
|
||||
bool install_isr_service; ///<Indicates whether the ISR service for the HINT should be installed at IMU initialization, (if gpio_install_isr_service() is called before initialize() set this to false)
|
||||
|
||||
/// @brief Default IMU configuration settings constructor.
|
||||
/// To modify default GPIO pins, run "idf.py menuconfig" esp32_BNO08x->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<gpio_num_t>(CONFIG_ESP32_BNO08X_GPIO_DI)) // default: 23
|
||||
, io_miso(static_cast<gpio_num_t>(CONFIG_ESP32_BNO08X_GPIO_SDA)) // default: 19
|
||||
, io_sclk(static_cast<gpio_num_t>(CONFIG_ESP32_BNO08X_GPIO_SCL)) // default: 18
|
||||
, io_cs(static_cast<gpio_num_t>(CONFIG_ESP32_BNO08X_GPIO_CS)) // default: 33
|
||||
, io_int(static_cast<gpio_num_t>(CONFIG_ESP32_BNO08X_GPIO_HINT)) // default: 26
|
||||
, io_rst(static_cast<gpio_num_t>(CONFIG_ESP32_BNO08X_GPIO_RST)) // default: 32
|
||||
, sclk_speed(static_cast<uint32_t>(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
|
||||
static const constexpr uint8_t TOTAL_RPT_COUNT = 38; ///< Amount of possible reports returned from BNO08x.
|
||||
|
|
@ -0,0 +1,137 @@
|
|||
/**
|
||||
* @file BNO08xPrivateTypes.hpp
|
||||
* @author Myles Parfeniuk
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// etl includes
|
||||
#include <etl/vector.h>
|
||||
#include <etl/variant.h>
|
||||
// esp-idf includes
|
||||
#include <freertos/FreeRTOS.h>
|
||||
#include <freertos/semphr.h>
|
||||
#include <freertos/event_groups.h>
|
||||
// in-house includes
|
||||
#include "BNO08xGlobalTypes.hpp"
|
||||
#include "BNO08xCbParamRptID.hpp"
|
||||
#include "BNO08xCbParamVoid.hpp"
|
||||
|
||||
namespace BNO08xPrivateTypes
|
||||
{
|
||||
using bno08x_cb_list_t = etl::vector<etl::variant<BNO08xCbParamVoid, BNO08xCbParamRptID>,
|
||||
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<uint8_t, TOTAL_RPT_COUNT>* _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<uint8_t, TOTAL_RPT_COUNT>* _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, ///<TODO
|
||||
.changeSensitivityRelative = false,
|
||||
.wakeupEnabled = false,
|
||||
.alwaysOnEnabled = false,
|
||||
.changeSensitivity = 0,
|
||||
.reportInterval_us = 0,
|
||||
.batchInterval_us = 0,
|
||||
.sensorSpecific = 0};
|
||||
|
||||
/// @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_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
|
||||
};
|
||||
|
||||
/// @brief Bits for evt_grp_bno08x_task
|
||||
enum bno08x_tsk_bit_t : EventBits_t
|
||||
{
|
||||
EVT_GRP_BNO08x_TASKS_RUNNING =
|
||||
(1UL << 0U), ///< When this bit is set it indicates the BNO08x tasks are running, it is always set to 1 for the duration of the BNO08x driver object. Cleared in the destructor for safe task deletion.
|
||||
EVT_GRP_BNO08x_TASK_HINT_ASSRT_BIT =
|
||||
(1UL << 1U), ///< When this bit is set it indicates the BNO08x has asserted its host interrupt pin, thus an SPI transaction should commence.
|
||||
EVT_GRP_BNO08x_TASK_RESET_OCCURRED =
|
||||
(1UL << 2U), ///< When this bit is set it indicates the SH2 HAL lib has reset the IMU, any reports enabled by the user must be re-enabled.
|
||||
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().
|
||||
};
|
||||
};
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
/**
|
||||
* @file BNO08xRpt.hpp
|
||||
* @author Myles Parfeniuk
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// standard library includes
|
||||
#include <functional>
|
||||
|
||||
// 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, ///<TODO
|
||||
.changeSensitivityRelative = false,
|
||||
.wakeupEnabled = false,
|
||||
.alwaysOnEnabled = false,
|
||||
.changeSensitivity = 0,
|
||||
.reportInterval_us = 0,
|
||||
.batchInterval_us = 0,
|
||||
.sensorSpecific = 0};
|
||||
|
||||
bool enable(uint32_t time_between_reports, sh2_SensorConfig_t sensor_cfg = default_sensor_cfg);
|
||||
bool disable(sh2_SensorConfig_t sensor_cfg = default_sensor_cfg);
|
||||
void register_cb(std::function<void(void)> 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;
|
||||
};
|
||||
|
|
@ -9,10 +9,11 @@
|
|||
#include "sh2.h"
|
||||
#include "sh2_SensorValue.h"
|
||||
#include "sh2_err.h"
|
||||
|
||||
// esp-idf includes
|
||||
#include <esp_log.h>
|
||||
#include <esp_timer.h>
|
||||
// in-house includes
|
||||
#include "BNO08xPrivateTypes.hpp"
|
||||
|
||||
/**
|
||||
* @brief Clears the most significant byte of a 16-bit value.
|
||||
|
|
|
|||
|
|
@ -35,5 +35,5 @@ class BNO08xCbParamRptID : public BNO08xCbGeneric
|
|||
}
|
||||
|
||||
private:
|
||||
std::function<void(uint8_t)> cb_fxn;
|
||||
std::function<void(uint8_t)> cb_fxn; ///< Wrapped callback function passed at register_cb().
|
||||
};
|
||||
|
|
|
|||
|
|
@ -34,5 +34,5 @@ class BNO08xCbParamVoid : public BNO08xCbGeneric
|
|||
}
|
||||
|
||||
private:
|
||||
std::function<void(void)> cb_fxn;
|
||||
std::function<void(void)> cb_fxn; ///< Wrapped callback function passed at register_cb().
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
/**
|
||||
* @file BNO08xRpt.hpp
|
||||
* @author Myles Parfeniuk
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// standard library includes
|
||||
#include <functional>
|
||||
// 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<void(void)> 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; ///<Mutex to prevent sh2 HAL lib functions from being accessed at same time.
|
||||
SemaphoreHandle_t* _data_lock; ///<Mutex to prevent user from reading data while data_proc_task() updates it, and vice versa.
|
||||
EventGroupHandle_t* _evt_grp_rpt_en; ///<Event group for indicating which reports are currently enabled.
|
||||
EventGroupHandle_t*
|
||||
_evt_grp_rpt_data_available; ///< Event group for indicating to BNO08xRpt::has_new_data() that a module received a new report since the last time it was called (note this group is unaffected by data read through callbacks).
|
||||
EventGroupHandle_t* _evt_grp_bno08x_task; ///<Event group for indicating various BNO08x related events between tasks.
|
||||
etl::vector<uint8_t, TOTAL_RPT_COUNT>* _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;
|
||||
};
|
||||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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<BNO08xCbParamVoid>(&cb_entry))
|
||||
cb_ptr = ptr;
|
||||
|
||||
else if (auto* ptr = etl::get_if<BNO08xCbParamRptID>(&cb_entry))
|
||||
cb_ptr = ptr;
|
||||
|
||||
if (cb_ptr != nullptr)
|
||||
handle_cb(rpt_ID, cb_ptr);
|
||||
}
|
||||
|
||||
xQueueReceive(queue_cb_report_id, &rpt_ID, portMAX_DELAY);
|
||||
|
||||
|
|
@ -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
|
||||
BNO08xRpt* rpt = usr_reports.at(rpt_ID);
|
||||
if (rpt == nullptr)
|
||||
break;
|
||||
{
|
||||
// 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<void(void)> cb_fxn)
|
||||
bool BNO08x::register_cb(std::function<void(void)> cb_fxn)
|
||||
{
|
||||
cb_list_void_param.push_back(BNO08xCbParamVoid(cb_fxn, 0U));
|
||||
cb_ptr_list.push_back(static_cast<BNO08xCbGeneric*>(&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<void(void)> cb_fxn)
|
|||
*
|
||||
* @return void, nothing to return
|
||||
*/
|
||||
void BNO08x::register_cb(std::function<void(uint8_t report_ID)> cb_fxn)
|
||||
bool BNO08x::register_cb(std::function<void(uint8_t report_ID)> cb_fxn)
|
||||
{
|
||||
cb_list_rpt_param.push_back(BNO08xCbParamRptID(cb_fxn, 0U));
|
||||
cb_ptr_list.push_back(static_cast<BNO08xCbGeneric*>(&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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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
|
||||
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))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
xEventGroupClearBits(imu->evt_grp_report_en, rpt_bit); // Set the event group bit
|
||||
{
|
||||
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<void(void)> cb_fxn)
|
||||
bool BNO08xRpt::register_cb(std::function<void(void)> cb_fxn)
|
||||
{
|
||||
imu->cb_list_void_param.push_back(BNO08xCbParamVoid(cb_fxn, ID));
|
||||
imu->cb_ptr_list.push_back(static_cast<BNO08xCbGeneric*>(&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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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<BNO08xAccuracy>(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();
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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();
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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<BNO08xActivity>(data.mostLikelyState);
|
||||
imu->unlock_user_data();
|
||||
unlock_user_data();
|
||||
return rqdata;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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();
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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();
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<BNO08xAccuracy>(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();
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<BNO08xAccuracy>(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;
|
||||
}
|
||||
Loading…
Reference in New Issue