refactor FlyteSailing PR for internal wrappers, move enum helper fxns

Signed-off-by: myles-parfeniuk <myles.parfenyuk@gmail.com>
This commit is contained in:
myles-parfeniuk 2025-05-31 12:48:13 -07:00
parent a136b8f7c7
commit ec3b078468
3 changed files with 367 additions and 223 deletions

View File

@ -52,11 +52,10 @@ class BNO08x
bool dynamic_calibration_autosave_enable(); bool dynamic_calibration_autosave_enable();
bool dynamic_calibration_autosave_disable(); bool dynamic_calibration_autosave_disable();
bool dynamic_calibration_save(); bool dynamic_calibration_save();
bool dynamic_calibration_clear(); bool dynamic_calibration_clear_data_ram();
bool dynamic_calibration_delete_data();
bool dynamic_calibration_run_routine(); bool dynamic_calibration_run_routine();
bool delete_calibration_data();
constexpr static float SQRT2OVER2 = 0.7071067811865476f; // sqrt(2)/2, used for setting system orientation constexpr static float SQRT2OVER2 = 0.7071067811865476f; // sqrt(2)/2, used for setting system orientation
bool set_system_orientation(float w, float x, float y, float z); bool set_system_orientation(float w, float x, float y, float z);
bool get_system_orientation(float &w, float &x, float &y, float &z); bool get_system_orientation(float &w, float &x, float &y, float &z);
@ -71,12 +70,7 @@ class BNO08x
void print_product_ids(); void print_product_ids();
void print_system_orientation(); void print_system_orientation();
// enum helper fxns
static const char* activity_to_str(BNO08xActivity activity);
static const char* stability_to_str(BNO08xStability stability);
static const char* accuracy_to_str(BNO08xAccuracy accuracy);
/// @brief Contains report implementations. /// @brief Contains report implementations.
typedef struct bno08x_reports_t typedef struct bno08x_reports_t
{ {

View File

@ -90,7 +90,7 @@ enum class BNO08xCalSel : uint8_t
}; };
/// @brief Reason for previous IMU reset (returned by get_reset_reason()) /// @brief Reason for previous IMU reset (returned by get_reset_reason())
enum class BNO08xResetReason : uint8_t enum class BNO08xResetReason : uint8_t
{ {
UNDEFINED, ///< Undefined reset reason, this should never occur and is an error. UNDEFINED, ///< Undefined reset reason, this should never occur and is an error.
POR, ///< Previous reset was due to power on reset. POR, ///< Previous reset was due to power on reset.
@ -102,7 +102,7 @@ enum class BNO08xResetReason : uint8_t
/// @brief Sensor accuracy returned from input reports, corresponds to status bits (see ref. /// @brief Sensor accuracy returned from input reports, corresponds to status bits (see ref.
/// manual 6.5.1) /// manual 6.5.1)
enum class BNO08xAccuracy : uint8_t enum class BNO08xAccuracy : uint8_t
{ {
UNRELIABLE, UNRELIABLE,
LOW, LOW,
@ -112,9 +112,28 @@ enum class BNO08xAccuracy : uint8_t
}; };
using IMUAccuracy = BNO08xAccuracy; // legacy version compatibility using IMUAccuracy = BNO08xAccuracy; // legacy version compatibility
const constexpr char* BNO08xAccuracy_to_str(BNO08xAccuracy accuracy)
{
switch (accuracy)
{
case BNO08xAccuracy::UNRELIABLE:
return "UNRELIABLE";
case BNO08xAccuracy::LOW:
return "LOW";
case BNO08xAccuracy::MED:
return "MED";
case BNO08xAccuracy::HIGH:
return "HIGH";
case BNO08xAccuracy::UNDEFINED:
return "UNDEFINED";
default:
return "UNDEFINED";
}
}
/// @brief BNO08xActivity Classifier enable bits passed to enable_activity_classifier() /// @brief BNO08xActivity Classifier enable bits passed to enable_activity_classifier()
/// See ref manual 6.5.36.1 /// See ref manual 6.5.36.1
enum class BNO08xActivityEnable : uint32_t enum class BNO08xActivityEnable : uint32_t
{ {
UNKNOWN = (1U << 0U), UNKNOWN = (1U << 0U),
IN_VEHICLE = (1U << 1U), IN_VEHICLE = (1U << 1U),
@ -125,11 +144,11 @@ enum class BNO08xActivityEnable : uint32_t
WALKING = (1U << 6U), WALKING = (1U << 6U),
RUNNING = (1U << 7U), RUNNING = (1U << 7U),
ON_STAIRS = (1U << 8U), ON_STAIRS = (1U << 8U),
ALL = ( UNKNOWN | IN_VEHICLE | ON_BICYCLE | ON_FOOT | STILL | TILTING | WALKING | RUNNING | ON_STAIRS) ALL = (UNKNOWN | IN_VEHICLE | ON_BICYCLE | ON_FOOT | STILL | TILTING | WALKING | RUNNING | ON_STAIRS)
}; };
/// @brief BNO08xActivity states returned from BNO08x::activity_classifier.get() /// @brief BNO08xActivity states returned from BNO08x::activity_classifier.get()
enum class BNO08xActivity : uint8_t enum class BNO08xActivity : uint8_t
{ {
UNKNOWN = 0, // 0 = unknown UNKNOWN = 0, // 0 = unknown
IN_VEHICLE = 1, // 1 = in vehicle IN_VEHICLE = 1, // 1 = in vehicle
@ -143,8 +162,42 @@ enum class BNO08xActivity : uint8_t
UNDEFINED = 9 // used for unit tests UNDEFINED = 9 // used for unit tests
}; };
/**
* @brief Converts a BNO08xActivity enum to string.
*
* @return The resulting string conversion of the enum.
*/
const constexpr char* BNO08xActivity_to_str(BNO08xActivity activity)
{
switch (activity)
{
case BNO08xActivity::UNKNOWN:
return "UNKNOWN";
case BNO08xActivity::IN_VEHICLE:
return "IN_VEHICLE";
case BNO08xActivity::ON_BICYCLE:
return "ON_BICYCLE";
case BNO08xActivity::ON_FOOT:
return "ON_FOOT";
case BNO08xActivity::STILL:
return "STILL";
case BNO08xActivity::TILTING:
return "TILTING";
case BNO08xActivity::WALKING:
return "WALKING";
case BNO08xActivity::RUNNING:
return "RUNNING";
case BNO08xActivity::ON_STAIRS:
return "ON_STAIRS";
case BNO08xActivity::UNDEFINED:
return "UNDEFINED";
default:
return "UNDEFINED";
}
}
/// @brief BNO08xStability states returned from BNO08x::stability_classifier.get() /// @brief BNO08xStability states returned from BNO08x::stability_classifier.get()
enum class BNO08xStability : uint8_t enum class BNO08xStability : uint8_t
{ {
UNKNOWN = 0, // 0 = unknown UNKNOWN = 0, // 0 = unknown
ON_TABLE = 1, // 1 = on table ON_TABLE = 1, // 1 = on table
@ -155,82 +208,266 @@ enum class BNO08xStability : uint8_t
UNDEFINED = 6 // used for unit tests UNDEFINED = 6 // used for unit tests
}; };
enum class BNO08xFrsID : uint16_t { /**
STATIC_CALIBRATION_AGM = 0x7979, * @brief Converts a BNO08xStability enum to string.
NOMINAL_CALIBRATION = 0x4D4D, *
STATIC_CALIBRATION_SRA = 0x8A8A, * @return The resulting string conversion of the enum.
NOMINAL_CALIBRATION_SRA = 0x4E4E, */
DYNAMIC_CALIBRATION = 0x1F1F, const constexpr char* BNO08xStability_to_str(BNO08xStability stability)
ME_POWER_MGMT = 0xD3E2, {
SYSTEM_ORIENTATION = 0x2D3E, switch (stability)
ACCEL_ORIENTATION = 0x2D41, {
SCREEN_ACCEL_ORIENTATION = 0x2D43, case BNO08xStability::UNKNOWN:
GYROSCOPE_ORIENTATION = 0x2D46, return "UNKNOWN";
MAGNETOMETER_ORIENTATION = 0x2D4C, case BNO08xStability::ON_TABLE:
ARVR_STABILIZATION_RV = 0x3E2D, return "ON_TABLE";
ARVR_STABILIZATION_GRV = 0x3E2E, case BNO08xStability::STATIONARY:
TAP_DETECT_CONFIG = 0xC269, return "STATIONARY";
SIG_MOTION_DETECT_CONFIG = 0xC274, case BNO08xStability::STABLE:
SHAKE_DETECT_CONFIG = 0x7D7D, return "STABLE";
MAX_FUSION_PERIOD = 0xD7D7, case BNO08xStability::MOTION:
SERIAL_NUMBER = 0x4B4B, return "MOTION";
ES_PRESSURE_CAL = 0x39AF, case BNO08xStability::RESERVED:
ES_TEMPERATURE_CAL = 0x4D20, return "RESERVED";
ES_HUMIDITY_CAL = 0x1AC9, case BNO08xStability::UNDEFINED:
ES_AMBIENT_LIGHT_CAL = 0x39B1, return "UNDEFINED";
ES_PROXIMITY_CAL = 0x4DA2, default:
ALS_CAL = 0xD401, return "UNDEFINED";
PROXIMITY_SENSOR_CAL = 0xD402, }
PICKUP_DETECTOR_CONFIG = 0x1B2A, }
FLIP_DETECTOR_CONFIG = 0xFC94,
STABILITY_DETECTOR_CONFIG = 0xED85, enum class BNO08xFrsID : uint16_t
ACTIVITY_TRACKER_CONFIG = 0xED88, {
SLEEP_DETECTOR_CONFIG = 0xED87, STATIC_CALIBRATION_AGM = 0x7979,
TILT_DETECTOR_CONFIG = 0xED89, NOMINAL_CALIBRATION = 0x4D4D,
POCKET_DETECTOR_CONFIG = 0xEF27, STATIC_CALIBRATION_SRA = 0x8A8A,
CIRCLE_DETECTOR_CONFIG = 0xEE51, NOMINAL_CALIBRATION_SRA = 0x4E4E,
USER_RECORD = 0x74B4, DYNAMIC_CALIBRATION = 0x1F1F,
ME_TIME_SOURCE_SELECT = 0xD403, ME_POWER_MGMT = 0xD3E2,
UART_FORMAT = 0xA1A1, SYSTEM_ORIENTATION = 0x2D3E,
GYRO_INTEGRATED_RV_CONFIG = 0xA1A2, ACCEL_ORIENTATION = 0x2D41,
META_RAW_ACCELEROMETER = 0xE301, SCREEN_ACCEL_ORIENTATION = 0x2D43,
META_ACCELEROMETER = 0xE302, GYROSCOPE_ORIENTATION = 0x2D46,
META_LINEAR_ACCELERATION = 0xE303, MAGNETOMETER_ORIENTATION = 0x2D4C,
META_GRAVITY = 0xE304, ARVR_STABILIZATION_RV = 0x3E2D,
META_RAW_GYROSCOPE = 0xE305, ARVR_STABILIZATION_GRV = 0x3E2E,
META_GYROSCOPE_CALIBRATED = 0xE306, TAP_DETECT_CONFIG = 0xC269,
META_GYROSCOPE_UNCALIBRATED = 0xE307, SIG_MOTION_DETECT_CONFIG = 0xC274,
META_RAW_MAGNETOMETER = 0xE308, SHAKE_DETECT_CONFIG = 0x7D7D,
META_MAGNETIC_FIELD_CALIBRATED = 0xE309, MAX_FUSION_PERIOD = 0xD7D7,
META_MAGNETIC_FIELD_UNCALIBRATED = 0xE30A, SERIAL_NUMBER = 0x4B4B,
META_ROTATION_VECTOR = 0xE30B, ES_PRESSURE_CAL = 0x39AF,
META_GAME_ROTATION_VECTOR = 0xE30C, ES_TEMPERATURE_CAL = 0x4D20,
META_GEOMAGNETIC_ROTATION_VECTOR = 0xE30D, ES_HUMIDITY_CAL = 0x1AC9,
META_PRESSURE = 0xE30E, ES_AMBIENT_LIGHT_CAL = 0x39B1,
META_AMBIENT_LIGHT = 0xE30F, ES_PROXIMITY_CAL = 0x4DA2,
META_HUMIDITY = 0xE310, ALS_CAL = 0xD401,
META_PROXIMITY = 0xE311, PROXIMITY_SENSOR_CAL = 0xD402,
META_TEMPERATURE = 0xE312, PICKUP_DETECTOR_CONFIG = 0x1B2A,
META_TAP_DETECTOR = 0xE313, FLIP_DETECTOR_CONFIG = 0xFC94,
META_STEP_DETECTOR = 0xE314, STABILITY_DETECTOR_CONFIG = 0xED85,
META_STEP_COUNTER = 0xE315, ACTIVITY_TRACKER_CONFIG = 0xED88,
META_SIGNIFICANT_MOTION = 0xE316, SLEEP_DETECTOR_CONFIG = 0xED87,
META_STABILITY_CLASSIFIER = 0xE317, TILT_DETECTOR_CONFIG = 0xED89,
META_SHAKE_DETECTOR = 0xE318, POCKET_DETECTOR_CONFIG = 0xEF27,
META_FLIP_DETECTOR = 0xE319, CIRCLE_DETECTOR_CONFIG = 0xEE51,
META_PICKUP_DETECTOR = 0xE31A, USER_RECORD = 0x74B4,
META_STABILITY_DETECTOR = 0xE31B, ME_TIME_SOURCE_SELECT = 0xD403,
META_PERSONAL_ACTIVITY_CLASSIFIER = 0xE31C, UART_FORMAT = 0xA1A1,
META_SLEEP_DETECTOR = 0xE31D, GYRO_INTEGRATED_RV_CONFIG = 0xA1A2,
META_TILT_DETECTOR = 0xE31E, META_RAW_ACCELEROMETER = 0xE301,
META_POCKET_DETECTOR = 0xE31F, META_ACCELEROMETER = 0xE302,
META_CIRCLE_DETECTOR = 0xE320, META_LINEAR_ACCELERATION = 0xE303,
META_HEART_RATE_MONITOR = 0xE321, META_GRAVITY = 0xE304,
META_ARVR_STABILIZED_RV = 0xE322, META_RAW_GYROSCOPE = 0xE305,
META_ARVR_STABILIZED_GRV = 0xE323, META_GYROSCOPE_CALIBRATED = 0xE306,
META_GYRO_INTEGRATED_RV = 0xE324 META_GYROSCOPE_UNCALIBRATED = 0xE307,
META_RAW_MAGNETOMETER = 0xE308,
META_MAGNETIC_FIELD_CALIBRATED = 0xE309,
META_MAGNETIC_FIELD_UNCALIBRATED = 0xE30A,
META_ROTATION_VECTOR = 0xE30B,
META_GAME_ROTATION_VECTOR = 0xE30C,
META_GEOMAGNETIC_ROTATION_VECTOR = 0xE30D,
META_PRESSURE = 0xE30E,
META_AMBIENT_LIGHT = 0xE30F,
META_HUMIDITY = 0xE310,
META_PROXIMITY = 0xE311,
META_TEMPERATURE = 0xE312,
META_TAP_DETECTOR = 0xE313,
META_STEP_DETECTOR = 0xE314,
META_STEP_COUNTER = 0xE315,
META_SIGNIFICANT_MOTION = 0xE316,
META_STABILITY_CLASSIFIER = 0xE317,
META_SHAKE_DETECTOR = 0xE318,
META_FLIP_DETECTOR = 0xE319,
META_PICKUP_DETECTOR = 0xE31A,
META_STABILITY_DETECTOR = 0xE31B,
META_PERSONAL_ACTIVITY_CLASSIFIER = 0xE31C,
META_SLEEP_DETECTOR = 0xE31D,
META_TILT_DETECTOR = 0xE31E,
META_POCKET_DETECTOR = 0xE31F,
META_CIRCLE_DETECTOR = 0xE320,
META_HEART_RATE_MONITOR = 0xE321,
META_ARVR_STABILIZED_RV = 0xE322,
META_ARVR_STABILIZED_GRV = 0xE323,
META_GYRO_INTEGRATED_RV = 0xE324
}; };
const constexpr char* BNO08xFrsID_to_str(BNO08xFrsID id)
{
switch (id)
{
case BNO08xFrsID::STATIC_CALIBRATION_AGM:
return "STATIC_CALIBRATION_AGM";
case BNO08xFrsID::NOMINAL_CALIBRATION:
return "NOMINAL_CALIBRATION";
case BNO08xFrsID::STATIC_CALIBRATION_SRA:
return "STATIC_CALIBRATION_SRA";
case BNO08xFrsID::NOMINAL_CALIBRATION_SRA:
return "NOMINAL_CALIBRATION_SRA";
case BNO08xFrsID::DYNAMIC_CALIBRATION:
return "DYNAMIC_CALIBRATION";
case BNO08xFrsID::ME_POWER_MGMT:
return "ME_POWER_MGMT";
case BNO08xFrsID::SYSTEM_ORIENTATION:
return "SYSTEM_ORIENTATION";
case BNO08xFrsID::ACCEL_ORIENTATION:
return "ACCEL_ORIENTATION";
case BNO08xFrsID::SCREEN_ACCEL_ORIENTATION:
return "SCREEN_ACCEL_ORIENTATION";
case BNO08xFrsID::GYROSCOPE_ORIENTATION:
return "GYROSCOPE_ORIENTATION";
case BNO08xFrsID::MAGNETOMETER_ORIENTATION:
return "MAGNETOMETER_ORIENTATION";
case BNO08xFrsID::ARVR_STABILIZATION_RV:
return "ARVR_STABILIZATION_RV";
case BNO08xFrsID::ARVR_STABILIZATION_GRV:
return "ARVR_STABILIZATION_GRV";
case BNO08xFrsID::TAP_DETECT_CONFIG:
return "TAP_DETECT_CONFIG";
case BNO08xFrsID::SIG_MOTION_DETECT_CONFIG:
return "SIG_MOTION_DETECT_CONFIG";
case BNO08xFrsID::SHAKE_DETECT_CONFIG:
return "SHAKE_DETECT_CONFIG";
case BNO08xFrsID::MAX_FUSION_PERIOD:
return "MAX_FUSION_PERIOD";
case BNO08xFrsID::SERIAL_NUMBER:
return "SERIAL_NUMBER";
case BNO08xFrsID::ES_PRESSURE_CAL:
return "ES_PRESSURE_CAL";
case BNO08xFrsID::ES_TEMPERATURE_CAL:
return "ES_TEMPERATURE_CAL";
case BNO08xFrsID::ES_HUMIDITY_CAL:
return "ES_HUMIDITY_CAL";
case BNO08xFrsID::ES_AMBIENT_LIGHT_CAL:
return "ES_AMBIENT_LIGHT_CAL";
case BNO08xFrsID::ES_PROXIMITY_CAL:
return "ES_PROXIMITY_CAL";
case BNO08xFrsID::ALS_CAL:
return "ALS_CAL";
case BNO08xFrsID::PROXIMITY_SENSOR_CAL:
return "PROXIMITY_SENSOR_CAL";
case BNO08xFrsID::PICKUP_DETECTOR_CONFIG:
return "PICKUP_DETECTOR_CONFIG";
case BNO08xFrsID::FLIP_DETECTOR_CONFIG:
return "FLIP_DETECTOR_CONFIG";
case BNO08xFrsID::STABILITY_DETECTOR_CONFIG:
return "STABILITY_DETECTOR_CONFIG";
case BNO08xFrsID::ACTIVITY_TRACKER_CONFIG:
return "ACTIVITY_TRACKER_CONFIG";
case BNO08xFrsID::SLEEP_DETECTOR_CONFIG:
return "SLEEP_DETECTOR_CONFIG";
case BNO08xFrsID::TILT_DETECTOR_CONFIG:
return "TILT_DETECTOR_CONFIG";
case BNO08xFrsID::POCKET_DETECTOR_CONFIG:
return "POCKET_DETECTOR_CONFIG";
case BNO08xFrsID::CIRCLE_DETECTOR_CONFIG:
return "CIRCLE_DETECTOR_CONFIG";
case BNO08xFrsID::USER_RECORD:
return "USER_RECORD";
case BNO08xFrsID::ME_TIME_SOURCE_SELECT:
return "ME_TIME_SOURCE_SELECT";
case BNO08xFrsID::UART_FORMAT:
return "UART_FORMAT";
case BNO08xFrsID::GYRO_INTEGRATED_RV_CONFIG:
return "GYRO_INTEGRATED_RV_CONFIG";
case BNO08xFrsID::META_RAW_ACCELEROMETER:
return "META_RAW_ACCELEROMETER";
case BNO08xFrsID::META_ACCELEROMETER:
return "META_ACCELEROMETER";
case BNO08xFrsID::META_LINEAR_ACCELERATION:
return "META_LINEAR_ACCELERATION";
case BNO08xFrsID::META_GRAVITY:
return "META_GRAVITY";
case BNO08xFrsID::META_RAW_GYROSCOPE:
return "META_RAW_GYROSCOPE";
case BNO08xFrsID::META_GYROSCOPE_CALIBRATED:
return "META_GYROSCOPE_CALIBRATED";
case BNO08xFrsID::META_GYROSCOPE_UNCALIBRATED:
return "META_GYROSCOPE_UNCALIBRATED";
case BNO08xFrsID::META_RAW_MAGNETOMETER:
return "META_RAW_MAGNETOMETER";
case BNO08xFrsID::META_MAGNETIC_FIELD_CALIBRATED:
return "META_MAGNETIC_FIELD_CALIBRATED";
case BNO08xFrsID::META_MAGNETIC_FIELD_UNCALIBRATED:
return "META_MAGNETIC_FIELD_UNCALIBRATED";
case BNO08xFrsID::META_ROTATION_VECTOR:
return "META_ROTATION_VECTOR";
case BNO08xFrsID::META_GAME_ROTATION_VECTOR:
return "META_GAME_ROTATION_VECTOR";
case BNO08xFrsID::META_GEOMAGNETIC_ROTATION_VECTOR:
return "META_GEOMAGNETIC_ROTATION_VECTOR";
case BNO08xFrsID::META_PRESSURE:
return "META_PRESSURE";
case BNO08xFrsID::META_AMBIENT_LIGHT:
return "META_AMBIENT_LIGHT";
case BNO08xFrsID::META_HUMIDITY:
return "META_HUMIDITY";
case BNO08xFrsID::META_PROXIMITY:
return "META_PROXIMITY";
case BNO08xFrsID::META_TEMPERATURE:
return "META_TEMPERATURE";
case BNO08xFrsID::META_TAP_DETECTOR:
return "META_TAP_DETECTOR";
case BNO08xFrsID::META_STEP_DETECTOR:
return "META_STEP_DETECTOR";
case BNO08xFrsID::META_STEP_COUNTER:
return "META_STEP_COUNTER";
case BNO08xFrsID::META_SIGNIFICANT_MOTION:
return "META_SIGNIFICANT_MOTION";
case BNO08xFrsID::META_STABILITY_CLASSIFIER:
return "META_STABILITY_CLASSIFIER";
case BNO08xFrsID::META_SHAKE_DETECTOR:
return "META_SHAKE_DETECTOR";
case BNO08xFrsID::META_FLIP_DETECTOR:
return "META_FLIP_DETECTOR";
case BNO08xFrsID::META_PICKUP_DETECTOR:
return "META_PICKUP_DETECTOR";
case BNO08xFrsID::META_STABILITY_DETECTOR:
return "META_STABILITY_DETECTOR";
case BNO08xFrsID::META_PERSONAL_ACTIVITY_CLASSIFIER:
return "META_PERSONAL_ACTIVITY_CLASSIFIER";
case BNO08xFrsID::META_SLEEP_DETECTOR:
return "META_SLEEP_DETECTOR";
case BNO08xFrsID::META_TILT_DETECTOR:
return "META_TILT_DETECTOR";
case BNO08xFrsID::META_POCKET_DETECTOR:
return "META_POCKET_DETECTOR";
case BNO08xFrsID::META_CIRCLE_DETECTOR:
return "META_CIRCLE_DETECTOR";
case BNO08xFrsID::META_HEART_RATE_MONITOR:
return "META_HEART_RATE_MONITOR";
case BNO08xFrsID::META_ARVR_STABILIZED_RV:
return "META_ARVR_STABILIZED_RV";
case BNO08xFrsID::META_ARVR_STABILIZED_GRV:
return "META_ARVR_STABILIZED_GRV";
case BNO08xFrsID::META_GYRO_INTEGRATED_RV:
return "META_GYRO_INTEGRATED_RV";
default:
return "UNKNOWN";
}
}
/// @brief Struct to represent unit quaternion. /// @brief Struct to represent unit quaternion.
typedef struct bno08x_quat_t typedef struct bno08x_quat_t
{ {

View File

@ -1408,12 +1408,12 @@ bool BNO08x::dynamic_calibration_save()
} }
/** /**
* @brief Clears dynamic/motion engine calibration data and resets BNO08x device. See ref * @brief Clears dynamic/motion engine calibration data from ram and resets BNO08x device. See ref
* manual 6.4.9.1 * manual 6.4.9.1
* *
* @return True if save dynamic/ME calibration data succeeded. * @return True if save dynamic/ME calibration data succeeded.
*/ */
bool BNO08x::dynamic_calibration_clear() bool BNO08x::dynamic_calibration_clear_data_ram()
{ {
int op_success = SH2_ERR; int op_success = SH2_ERR;
@ -1440,7 +1440,7 @@ bool BNO08x::dynamic_calibration_clear()
{ {
// clang-format off // clang-format off
#ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS #ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS
ESP_LOGE(TAG, "Clear dynamic calibration failure, incorrect reset reason returned."); ESP_LOGE(TAG, "dynamic_calibration_clear_data_ram(): Clear dynamic calibration failure, incorrect reset reason returned.");
#endif #endif
// clang-format on // clang-format on
} }
@ -1449,7 +1449,7 @@ bool BNO08x::dynamic_calibration_clear()
{ {
// clang-format off // clang-format off
#ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS #ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS
ESP_LOGE(TAG, "Clear dynamic calibration failure, reset never detected after sending command."); ESP_LOGE(TAG, "dynamic_calibration_clear_data_ram(): Clear dynamic calibration failure, reset never detected after sending command.");
#endif #endif
// clang-format on // clang-format on
} }
@ -1458,7 +1458,7 @@ bool BNO08x::dynamic_calibration_clear()
{ {
// clang-format off // clang-format off
#ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS #ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS
ESP_LOGE(TAG, "Clear dynamic calibration failure, failed to send reset command"); ESP_LOGE(TAG, "dynamic_calibration_clear_data_ram(): Clear dynamic calibration failure, failed to clearDcdAndReset command with %li", static_cast<int32_t>(op_success));
#endif #endif
// clang-format on // clang-format on
} }
@ -1609,7 +1609,7 @@ bool BNO08x::dynamic_calibration_run_routine()
// clang-format off // clang-format off
#ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS #ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS
ESP_LOGI(TAG, "dynamic_calibration_run_routine(): magf_avg_acc: %s quat_avg_acc: %s", accuracy_to_str(magf_accuracy_avg), accuracy_to_str(quat_accuracy_avg)); ESP_LOGI(TAG, "dynamic_calibration_run_routine(): magf_avg_acc: %s quat_avg_acc: %s", BNO08xAccuracy_to_str(magf_accuracy_avg), BNO08xAccuracy_to_str(quat_accuracy_avg));
#endif #endif
// clang-format on // clang-format on
@ -1686,7 +1686,7 @@ bool BNO08x::dynamic_calibration_run_routine()
* Follows the steps outlined in ref. manual 6.4.9 * Follows the steps outlined in ref. manual 6.4.9
* @return True if delete dynamic calibration data operation succeeded. * @return True if delete dynamic calibration data operation succeeded.
*/ */
bool BNO08x::delete_calibration_data() bool BNO08x::dynamic_calibration_delete_data()
{ {
// 1. Reset hub (using hard_reset) // 1. Reset hub (using hard_reset)
if (!hard_reset()) { if (!hard_reset()) {
@ -1697,28 +1697,13 @@ bool BNO08x::delete_calibration_data()
} }
// 2. Delete flash copy of DCD via FRS // 2. Delete flash copy of DCD via FRS
int op_success = SH2_ERR;
lock_sh2_HAL();
// Deleting FRS record: use sh2_setFrs with nullptr and 0 words // Deleting FRS record: use sh2_setFrs with nullptr and 0 words
op_success = sh2_setFrs(DYNAMIC_CALIBRATION, nullptr, 0U); if(!write_frs(BNO08xFrsID::DYNAMIC_CALIBRATION, nullptr, 0U))
unlock_sh2_HAL(); return false;
if (op_success != SH2_OK) {
#ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS
ESP_LOGE(TAG, "delete_calibration_data(): failed to delete DCD FRS record, op_success: %li", (int32_t)op_success);
#endif
return false;
}
// 3. Issue Clear DCD and Reset Command (atomic clear DCD from RAM and reset) // 3. Issue Clear DCD and Reset Command (atomic clear DCD from RAM and reset)
lock_sh2_HAL(); if(!dynamic_calibration_clear_data_ram())
op_success = sh2_clearDcdAndReset(); return false;
unlock_sh2_HAL();
if (op_success != SH2_OK) {
#ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS
ESP_LOGE(TAG, "delete_calibration_data(): failed to clear DCD and reset, op_success: %li", (int32_t)op_success);
#endif
return false;
}
#ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS #ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS
ESP_LOGI(TAG, "delete_calibration_data(): calibration data cleared successfully"); ESP_LOGI(TAG, "delete_calibration_data(): calibration data cleared successfully");
@ -1747,6 +1732,16 @@ bool BNO08x::get_frs(BNO08xFrsID frs_ID, uint32_t (&data)[16], uint16_t& rx_data
op_success = sh2_getFrs(static_cast<uint16_t>(frs_ID), data, &rx_data_sz); op_success = sh2_getFrs(static_cast<uint16_t>(frs_ID), data, &rx_data_sz);
unlock_sh2_HAL(); unlock_sh2_HAL();
if (op_success != SH2_OK)
{
// clang-format off
#ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS
ESP_LOGE(TAG, "get_frs(): Failed to retrieve FRS record for ID: %s, op_success: %li", BNO08xFrsID_to_str(frs_ID), static_cast<int32_t>(op_success));
#endif
// clang-format off
return false;
}
return (op_success == SH2_OK); return (op_success == SH2_OK);
} }
@ -1770,6 +1765,16 @@ bool BNO08x::write_frs(BNO08xFrsID frs_ID, uint32_t *data, const uint16_t tx_dat
op_success = sh2_setFrs(static_cast<uint16_t>(frs_ID), data, tx_data_sz); op_success = sh2_setFrs(static_cast<uint16_t>(frs_ID), data, tx_data_sz);
unlock_sh2_HAL(); unlock_sh2_HAL();
if (op_success != SH2_OK)
{
// clang-format off
#ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS
ESP_LOGE(TAG, "write_frs(): Failed to write FRS record for ID: %s, op_success: %li", BNO08xFrsID_to_str(frs_ID), static_cast<int32_t>(op_success));
#endif
// clang-format off
return false;
}
return (op_success == SH2_OK); return (op_success == SH2_OK);
} }
@ -2002,121 +2007,29 @@ bool BNO08x::set_system_orientation(float w, float x, float y, float z)
static_cast<uint32_t>(float_to_q30(w)) // W component static_cast<uint32_t>(float_to_q30(w)) // W component
}; };
int op_success = SH2_ERR; if(!write_frs(BNO08xFrsID::SYSTEM_ORIENTATION, orientation_raw, sizeof(orientation_raw)))
lock_sh2_HAL(); return false;
op_success = sh2_setFrs(SYSTEM_ORIENTATION, (uint32_t*)&orientation_raw, 4);
unlock_sh2_HAL();
if (op_success != SH2_OK)
{
#ifdef CONFIG_ESP32_BNO08x_LOG_STATEMENTS
ESP_LOGE(TAG, "Failed to set mounting orientation, op_success: %li", (int32_t)op_success);
#endif
return false;
}
return true;
}
bool BNO08x::get_system_orientation(float& w, float& x, float& y, float& z)
{
uint16_t words = 4;
uint32_t raw[4] = {0};
lock_sh2_HAL();
int op_success = sh2_getFrs(SYSTEM_ORIENTATION, raw, &words);
unlock_sh2_HAL();
if (op_success != SH2_OK) {
return false;
}
x = q30_to_float((int32_t)raw[0]);
y = q30_to_float((int32_t)raw[1]);
z = q30_to_float((int32_t)raw[2]);
w = q30_to_float((int32_t)raw[3]);
return true; return true;
} }
/** bool BNO08x::get_system_orientation(float& real, float& i, float& j, float& k)
* @brief Converts a BNO08xActivity enum to string.
*
* @return The resulting string conversion of the enum.
*/
const char* BNO08x::activity_to_str(BNO08xActivity activity)
{ {
switch (activity) uint16_t words_rxd = 0U;
{ uint32_t raw[16] = {0};
case BNO08xActivity::UNKNOWN:
return "UNKNOWN";
case BNO08xActivity::IN_VEHICLE:
return "IN_VEHICLE";
case BNO08xActivity::ON_BICYCLE:
return "ON_BICYCLE";
case BNO08xActivity::ON_FOOT:
return "ON_FOOT";
case BNO08xActivity::STILL:
return "STILL";
case BNO08xActivity::TILTING:
return "TILTING";
case BNO08xActivity::WALKING:
return "WALKING";
case BNO08xActivity::RUNNING:
return "RUNNING";
case BNO08xActivity::ON_STAIRS:
return "ON_STAIRS";
case BNO08xActivity::UNDEFINED:
return "UNDEFINED";
default:
return "UNDEFINED";
}
}
/** if(!get_frs(BNO08xFrsID::SYSTEM_ORIENTATION, raw, words_rxd))
* @brief Converts a BNO08xStability enum to string. return false;
*
* @return The resulting string conversion of the enum. if(words_rxd >= 4U)
*/ return false;
const char* BNO08x::stability_to_str(BNO08xStability stability)
{
switch (stability)
{
case BNO08xStability::UNKNOWN:
return "UNKNOWN";
case BNO08xStability::ON_TABLE:
return "ON_TABLE";
case BNO08xStability::STATIONARY:
return "STATIONARY";
case BNO08xStability::STABLE:
return "STABLE";
case BNO08xStability::MOTION:
return "MOTION";
case BNO08xStability::RESERVED:
return "RESERVED";
case BNO08xStability::UNDEFINED:
return "UNDEFINED";
default:
return "UNDEFINED";
}
}
const char* BNO08x::accuracy_to_str(BNO08xAccuracy accuracy) i = q30_to_float((int32_t)raw[0]);
{ j = q30_to_float((int32_t)raw[1]);
switch (accuracy) k = q30_to_float((int32_t)raw[2]);
{ real = q30_to_float((int32_t)raw[3]);
case BNO08xAccuracy::UNRELIABLE:
return "UNRELIABLE"; return true;
case BNO08xAccuracy::LOW:
return "LOW";
case BNO08xAccuracy::MED:
return "MED";
case BNO08xAccuracy::HIGH:
return "HIGH";
case BNO08xAccuracy::UNDEFINED:
return "UNDEFINED";
default:
return "UNDEFINED";
}
} }
/** /**