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