frs write feature, PAC bugfix

Signed-off-by: myles <myles.parfenyuk@gmail.com>
This commit is contained in:
myles 2025-04-13 11:34:41 -07:00 committed by myles-parfeniuk
parent 33e4c04468
commit a136b8f7c7
7 changed files with 220 additions and 123 deletions

View File

@ -1023,38 +1023,38 @@ const static struct {
sh2_SensorId_t sensorId;
uint16_t recordId;
} sensorToRecordMap[] = {
{ SH2_RAW_ACCELEROMETER, FRS_ID_META_RAW_ACCELEROMETER },
{ SH2_ACCELEROMETER, FRS_ID_META_ACCELEROMETER },
{ SH2_LINEAR_ACCELERATION, FRS_ID_META_LINEAR_ACCELERATION },
{ SH2_GRAVITY, FRS_ID_META_GRAVITY },
{ SH2_RAW_GYROSCOPE, FRS_ID_META_RAW_GYROSCOPE },
{ SH2_GYROSCOPE_CALIBRATED, FRS_ID_META_GYROSCOPE_CALIBRATED },
{ SH2_GYROSCOPE_UNCALIBRATED, FRS_ID_META_GYROSCOPE_UNCALIBRATED },
{ SH2_RAW_MAGNETOMETER, FRS_ID_META_RAW_MAGNETOMETER },
{ SH2_MAGNETIC_FIELD_CALIBRATED, FRS_ID_META_MAGNETIC_FIELD_CALIBRATED },
{ SH2_MAGNETIC_FIELD_UNCALIBRATED, FRS_ID_META_MAGNETIC_FIELD_UNCALIBRATED },
{ SH2_ROTATION_VECTOR, FRS_ID_META_ROTATION_VECTOR },
{ SH2_GAME_ROTATION_VECTOR, FRS_ID_META_GAME_ROTATION_VECTOR },
{ SH2_GEOMAGNETIC_ROTATION_VECTOR, FRS_ID_META_GEOMAGNETIC_ROTATION_VECTOR },
{ SH2_PRESSURE, FRS_ID_META_PRESSURE },
{ SH2_AMBIENT_LIGHT, FRS_ID_META_AMBIENT_LIGHT },
{ SH2_HUMIDITY, FRS_ID_META_HUMIDITY },
{ SH2_PROXIMITY, FRS_ID_META_PROXIMITY },
{ SH2_TEMPERATURE, FRS_ID_META_TEMPERATURE },
{ SH2_TAP_DETECTOR, FRS_ID_META_TAP_DETECTOR },
{ SH2_STEP_DETECTOR, FRS_ID_META_STEP_DETECTOR },
{ SH2_STEP_COUNTER, FRS_ID_META_STEP_COUNTER },
{ SH2_SIGNIFICANT_MOTION, FRS_ID_META_SIGNIFICANT_MOTION },
{ SH2_STABILITY_CLASSIFIER, FRS_ID_META_STABILITY_CLASSIFIER },
{ SH2_SHAKE_DETECTOR, FRS_ID_META_SHAKE_DETECTOR },
{ SH2_FLIP_DETECTOR, FRS_ID_META_FLIP_DETECTOR },
{ SH2_PICKUP_DETECTOR, FRS_ID_META_PICKUP_DETECTOR },
{ SH2_STABILITY_DETECTOR, FRS_ID_META_STABILITY_DETECTOR },
{ SH2_PERSONAL_ACTIVITY_CLASSIFIER, FRS_ID_META_PERSONAL_ACTIVITY_CLASSIFIER },
{ SH2_SLEEP_DETECTOR, FRS_ID_META_SLEEP_DETECTOR },
{ SH2_TILT_DETECTOR, FRS_ID_META_TILT_DETECTOR },
{ SH2_POCKET_DETECTOR, FRS_ID_META_POCKET_DETECTOR },
{ SH2_CIRCLE_DETECTOR, FRS_ID_META_CIRCLE_DETECTOR },
{ SH2_RAW_ACCELEROMETER, SH2_FRS_ID_META_RAW_ACCELEROMETER },
{ SH2_ACCELEROMETER, SH2_FRS_ID_META_ACCELEROMETER },
{ SH2_LINEAR_ACCELERATION, SH2_FRS_ID_META_LINEAR_ACCELERATION },
{ SH2_GRAVITY, SH2_FRS_ID_META_GRAVITY },
{ SH2_RAW_GYROSCOPE, SH2_FRS_ID_META_RAW_GYROSCOPE },
{ SH2_GYROSCOPE_CALIBRATED, SH2_FRS_ID_META_GYROSCOPE_CALIBRATED },
{ SH2_GYROSCOPE_UNCALIBRATED, SH2_FRS_ID_META_GYROSCOPE_UNCALIBRATED },
{ SH2_RAW_MAGNETOMETER, SH2_FRS_ID_META_RAW_MAGNETOMETER },
{ SH2_MAGNETIC_FIELD_CALIBRATED, SH2_FRS_ID_META_MAGNETIC_FIELD_CALIBRATED },
{ SH2_MAGNETIC_FIELD_UNCALIBRATED, SH2_FRS_ID_META_MAGNETIC_FIELD_UNCALIBRATED },
{ SH2_ROTATION_VECTOR, SH2_FRS_ID_META_ROTATION_VECTOR },
{ SH2_GAME_ROTATION_VECTOR, SH2_FRS_ID_META_GAME_ROTATION_VECTOR },
{ SH2_GEOMAGNETIC_ROTATION_VECTOR, SH2_FRS_ID_META_GEOMAGNETIC_ROTATION_VECTOR },
{ SH2_PRESSURE, SH2_FRS_ID_META_PRESSURE },
{ SH2_AMBIENT_LIGHT, SH2_FRS_ID_META_AMBIENT_LIGHT },
{ SH2_HUMIDITY, SH2_FRS_ID_META_HUMIDITY },
{ SH2_PROXIMITY, SH2_FRS_ID_META_PROXIMITY },
{ SH2_TEMPERATURE, SH2_FRS_ID_META_TEMPERATURE },
{ SH2_TAP_DETECTOR, SH2_FRS_ID_META_TAP_DETECTOR },
{ SH2_STEP_DETECTOR, SH2_FRS_ID_META_STEP_DETECTOR },
{ SH2_STEP_COUNTER, SH2_FRS_ID_META_STEP_COUNTER },
{ SH2_SIGNIFICANT_MOTION, SH2_FRS_ID_META_SIGNIFICANT_MOTION },
{ SH2_STABILITY_CLASSIFIER, SH2_FRS_ID_META_STABILITY_CLASSIFIER },
{ SH2_SHAKE_DETECTOR, SH2_FRS_ID_META_SHAKE_DETECTOR },
{ SH2_FLIP_DETECTOR, SH2_FRS_ID_META_FLIP_DETECTOR },
{ SH2_PICKUP_DETECTOR, SH2_FRS_ID_META_PICKUP_DETECTOR },
{ SH2_STABILITY_DETECTOR, SH2_FRS_ID_META_STABILITY_DETECTOR },
{ SH2_PERSONAL_ACTIVITY_CLASSIFIER, SH2_FRS_ID_META_PERSONAL_ACTIVITY_CLASSIFIER },
{ SH2_SLEEP_DETECTOR, SH2_FRS_ID_META_SLEEP_DETECTOR },
{ SH2_TILT_DETECTOR, SH2_FRS_ID_META_TILT_DETECTOR },
{ SH2_POCKET_DETECTOR, SH2_FRS_ID_META_POCKET_DETECTOR },
{ SH2_CIRCLE_DETECTOR, SH2_FRS_ID_META_CIRCLE_DETECTOR },
};
static void stuffMetadata(sh2_SensorMetadata_t *pData, uint32_t *frsData)

146
SH2/sh2.h
View File

@ -276,79 +276,79 @@ typedef enum {
} sh2_CalStatus_t;
// FRS Record Ids
#define STATIC_CALIBRATION_AGM (0x7979)
#define NOMINAL_CALIBRATION (0x4D4D)
#define STATIC_CALIBRATION_SRA (0x8A8A)
#define NOMINAL_CALIBRATION_SRA (0x4E4E)
#define DYNAMIC_CALIBRATION (0x1F1F)
#define ME_POWER_MGMT (0xD3E2)
#define SYSTEM_ORIENTATION (0x2D3E)
#define ACCEL_ORIENTATION (0x2D41)
#define SCREEN_ACCEL_ORIENTATION (0x2D43)
#define GYROSCOPE_ORIENTATION (0x2D46)
#define MAGNETOMETER_ORIENTATION (0x2D4C)
#define ARVR_STABILIZATION_RV (0x3E2D)
#define ARVR_STABILIZATION_GRV (0x3E2E)
#define TAP_DETECT_CONFIG (0xC269)
#define SIG_MOTION_DETECT_CONFIG (0xC274)
#define SHAKE_DETECT_CONFIG (0x7D7D)
#define MAX_FUSION_PERIOD (0xD7D7)
#define SERIAL_NUMBER (0x4B4B)
#define ES_PRESSURE_CAL (0x39AF)
#define ES_TEMPERATURE_CAL (0x4D20)
#define ES_HUMIDITY_CAL (0x1AC9)
#define ES_AMBIENT_LIGHT_CAL (0x39B1)
#define ES_PROXIMITY_CAL (0x4DA2)
#define ALS_CAL (0xD401)
#define PROXIMITY_SENSOR_CAL (0xD402)
#define PICKUP_DETECTOR_CONFIG (0x1B2A)
#define FLIP_DETECTOR_CONFIG (0xFC94)
#define STABILITY_DETECTOR_CONFIG (0xED85)
#define ACTIVITY_TRACKER_CONFIG (0xED88)
#define SLEEP_DETECTOR_CONFIG (0xED87)
#define TILT_DETECTOR_CONFIG (0xED89)
#define POCKET_DETECTOR_CONFIG (0xEF27)
#define CIRCLE_DETECTOR_CONFIG (0xEE51)
#define USER_RECORD (0x74B4)
#define ME_TIME_SOURCE_SELECT (0xD403)
#define UART_FORMAT (0xA1A1)
#define GYRO_INTEGRATED_RV_CONFIG (0xA1A2)
#define FRS_ID_META_RAW_ACCELEROMETER (0xE301)
#define FRS_ID_META_ACCELEROMETER (0xE302)
#define FRS_ID_META_LINEAR_ACCELERATION (0xE303)
#define FRS_ID_META_GRAVITY (0xE304)
#define FRS_ID_META_RAW_GYROSCOPE (0xE305)
#define FRS_ID_META_GYROSCOPE_CALIBRATED (0xE306)
#define FRS_ID_META_GYROSCOPE_UNCALIBRATED (0xE307)
#define FRS_ID_META_RAW_MAGNETOMETER (0xE308)
#define FRS_ID_META_MAGNETIC_FIELD_CALIBRATED (0xE309)
#define FRS_ID_META_MAGNETIC_FIELD_UNCALIBRATED (0xE30A)
#define FRS_ID_META_ROTATION_VECTOR (0xE30B)
#define FRS_ID_META_GAME_ROTATION_VECTOR (0xE30C)
#define FRS_ID_META_GEOMAGNETIC_ROTATION_VECTOR (0xE30D)
#define FRS_ID_META_PRESSURE (0xE30E)
#define FRS_ID_META_AMBIENT_LIGHT (0xE30F)
#define FRS_ID_META_HUMIDITY (0xE310)
#define FRS_ID_META_PROXIMITY (0xE311)
#define FRS_ID_META_TEMPERATURE (0xE312)
#define FRS_ID_META_TAP_DETECTOR (0xE313)
#define FRS_ID_META_STEP_DETECTOR (0xE314)
#define FRS_ID_META_STEP_COUNTER (0xE315)
#define FRS_ID_META_SIGNIFICANT_MOTION (0xE316)
#define FRS_ID_META_STABILITY_CLASSIFIER (0xE317)
#define FRS_ID_META_SHAKE_DETECTOR (0xE318)
#define FRS_ID_META_FLIP_DETECTOR (0xE319)
#define FRS_ID_META_PICKUP_DETECTOR (0xE31A)
#define FRS_ID_META_STABILITY_DETECTOR (0xE31B)
#define FRS_ID_META_PERSONAL_ACTIVITY_CLASSIFIER (0xE31C)
#define FRS_ID_META_SLEEP_DETECTOR (0xE31D)
#define FRS_ID_META_TILT_DETECTOR (0xE31E)
#define FRS_ID_META_POCKET_DETECTOR (0xE31F)
#define FRS_ID_META_CIRCLE_DETECTOR (0xE320)
#define FRS_ID_META_HEART_RATE_MONITOR (0xE321)
#define FRS_ID_META_ARVR_STABILIZED_RV (0xE322)
#define FRS_ID_META_ARVR_STABILIZED_GRV (0xE323)
#define FRS_ID_META_GYRO_INTEGRATED_RV (0xE324)
#define SH2_STATIC_CALIBRATION_AGM (0x7979)
#define SH2_NOMINAL_CALIBRATION (0x4D4D)
#define SH2_STATIC_CALIBRATION_SRA (0x8A8A)
#define SH2_NOMINAL_CALIBRATION_SRA (0x4E4E)
#define SH2_DYNAMIC_CALIBRATION (0x1F1F)
#define SH2_ME_POWER_MGMT (0xD3E2)
#define SH2_SYSTEM_ORIENTATION (0x2D3E)
#define SH2_ACCEL_ORIENTATION (0x2D41)
#define SH2_SCREEN_ACCEL_ORIENTATION (0x2D43)
#define SH2_GYROSCOPE_ORIENTATION (0x2D46)
#define SH2_MAGNETOMETER_ORIENTATION (0x2D4C)
#define SH2_ARVR_STABILIZATION_RV (0x3E2D)
#define SH2_ARVR_STABILIZATION_GRV (0x3E2E)
#define SH2_TAP_DETECT_CONFIG (0xC269)
#define SH2_SIG_MOTION_DETECT_CONFIG (0xC274)
#define SH2_SHAKE_DETECT_CONFIG (0x7D7D)
#define SH2_MAX_FUSION_PERIOD (0xD7D7)
#define SH2_SERIAL_NUMBER (0x4B4B)
#define SH2_ES_PRESSURE_CAL (0x39AF)
#define SH2_ES_TEMPERATURE_CAL (0x4D20)
#define SH2_ES_HUMIDITY_CAL (0x1AC9)
#define SH2_ES_AMBIENT_LIGHT_CAL (0x39B1)
#define SH2_ES_PROXIMITY_CAL (0x4DA2)
#define SH2_ALS_CAL (0xD401)
#define SH2_PROXIMITY_SENSOR_CAL (0xD402)
#define SH2_PICKUP_DETECTOR_CONFIG (0x1B2A)
#define SH2_FLIP_DETECTOR_CONFIG (0xFC94)
#define SH2_STABILITY_DETECTOR_CONFIG (0xED85)
#define SH2_ACTIVITY_TRACKER_CONFIG (0xED88)
#define SH2_SLEEP_DETECTOR_CONFIG (0xED87)
#define SH2_TILT_DETECTOR_CONFIG (0xED89)
#define SH2_POCKET_DETECTOR_CONFIG (0xEF27)
#define SH2_CIRCLE_DETECTOR_CONFIG (0xEE51)
#define SH2_USER_RECORD (0x74B4)
#define SH2_ME_TIME_SOURCE_SELECT (0xD403)
#define SH2_UART_FORMAT (0xA1A1)
#define SH2_GYRO_INTEGRATED_RV_CONFIG (0xA1A2)
#define SH2_FRS_ID_META_RAW_ACCELEROMETER (0xE301)
#define SH2_FRS_ID_META_ACCELEROMETER (0xE302)
#define SH2_FRS_ID_META_LINEAR_ACCELERATION (0xE303)
#define SH2_FRS_ID_META_GRAVITY (0xE304)
#define SH2_FRS_ID_META_RAW_GYROSCOPE (0xE305)
#define SH2_FRS_ID_META_GYROSCOPE_CALIBRATED (0xE306)
#define SH2_FRS_ID_META_GYROSCOPE_UNCALIBRATED (0xE307)
#define SH2_FRS_ID_META_RAW_MAGNETOMETER (0xE308)
#define SH2_FRS_ID_META_MAGNETIC_FIELD_CALIBRATED (0xE309)
#define SH2_FRS_ID_META_MAGNETIC_FIELD_UNCALIBRATED (0xE30A)
#define SH2_FRS_ID_META_ROTATION_VECTOR (0xE30B)
#define SH2_FRS_ID_META_GAME_ROTATION_VECTOR (0xE30C)
#define SH2_FRS_ID_META_GEOMAGNETIC_ROTATION_VECTOR (0xE30D)
#define SH2_FRS_ID_META_PRESSURE (0xE30E)
#define SH2_FRS_ID_META_AMBIENT_LIGHT (0xE30F)
#define SH2_FRS_ID_META_HUMIDITY (0xE310)
#define SH2_FRS_ID_META_PROXIMITY (0xE311)
#define SH2_FRS_ID_META_TEMPERATURE (0xE312)
#define SH2_FRS_ID_META_TAP_DETECTOR (0xE313)
#define SH2_FRS_ID_META_STEP_DETECTOR (0xE314)
#define SH2_FRS_ID_META_STEP_COUNTER (0xE315)
#define SH2_FRS_ID_META_SIGNIFICANT_MOTION (0xE316)
#define SH2_FRS_ID_META_STABILITY_CLASSIFIER (0xE317)
#define SH2_FRS_ID_META_SHAKE_DETECTOR (0xE318)
#define SH2_FRS_ID_META_FLIP_DETECTOR (0xE319)
#define SH2_FRS_ID_META_PICKUP_DETECTOR (0xE31A)
#define SH2_FRS_ID_META_STABILITY_DETECTOR (0xE31B)
#define SH2_FRS_ID_META_PERSONAL_ACTIVITY_CLASSIFIER (0xE31C)
#define SH2_FRS_ID_META_SLEEP_DETECTOR (0xE31D)
#define SH2_FRS_ID_META_TILT_DETECTOR (0xE31E)
#define SH2_FRS_ID_META_POCKET_DETECTOR (0xE31F)
#define SH2_FRS_ID_META_CIRCLE_DETECTOR (0xE320)
#define SH2_FRS_ID_META_HEART_RATE_MONITOR (0xE321)
#define SH2_FRS_ID_META_ARVR_STABILIZED_RV (0xE322)
#define SH2_FRS_ID_META_ARVR_STABILIZED_GRV (0xE323)
#define SH2_FRS_ID_META_GYRO_INTEGRATED_RV (0xE324)
/**
* @brief Interactive ZRO Motion Intent

View File

@ -61,8 +61,8 @@ class BNO08x
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_frs(uint16_t frs_ID, uint32_t (&data)[16], uint16_t& rx_data_sz);
bool get_frs(BNO08xFrsID frs_ID, uint32_t (&data)[16], uint16_t& rx_data_sz);
bool write_frs(BNO08xFrsID frs_ID, uint32_t *data, const uint16_t tx_data_sz);
sh2_ProductIds_t get_product_IDs();
bool data_available();

View File

@ -80,7 +80,7 @@ typedef struct bno08x_config_t
} bno08x_config_t;
typedef bno08x_config_t imu_config_t; // legacy version compatibility
enum class BNO08xCalSel
enum class BNO08xCalSel : uint8_t
{
accelerometer = SH2_CAL_ACCEL,
gyro = SH2_CAL_GYRO,
@ -90,7 +90,7 @@ enum class BNO08xCalSel
};
/// @brief Reason for previous IMU reset (returned by get_reset_reason())
enum class BNO08xResetReason
enum class BNO08xResetReason : uint8_t
{
UNDEFINED, ///< Undefined reset reason, this should never occur and is an error.
POR, ///< Previous reset was due to power on reset.
@ -102,7 +102,7 @@ enum class BNO08xResetReason
/// @brief Sensor accuracy returned from input reports, corresponds to status bits (see ref.
/// manual 6.5.1)
enum class BNO08xAccuracy
enum class BNO08xAccuracy : uint8_t
{
UNRELIABLE,
LOW,
@ -113,7 +113,8 @@ enum class BNO08xAccuracy
using IMUAccuracy = BNO08xAccuracy; // legacy version compatibility
/// @brief BNO08xActivity Classifier enable bits passed to enable_activity_classifier()
enum class BNO08xActivityEnable
/// See ref manual 6.5.36.1
enum class BNO08xActivityEnable : uint32_t
{
UNKNOWN = (1U << 0U),
IN_VEHICLE = (1U << 1U),
@ -124,11 +125,11 @@ enum class BNO08xActivityEnable
WALKING = (1U << 6U),
RUNNING = (1U << 7U),
ON_STAIRS = (1U << 8U),
ALL = 0x1FU
ALL = ( UNKNOWN | IN_VEHICLE | ON_BICYCLE | ON_FOOT | STILL | TILTING | WALKING | RUNNING | ON_STAIRS)
};
/// @brief BNO08xActivity states returned from BNO08x::activity_classifier.get()
enum class BNO08xActivity
enum class BNO08xActivity : uint8_t
{
UNKNOWN = 0, // 0 = unknown
IN_VEHICLE = 1, // 1 = in vehicle
@ -143,7 +144,7 @@ enum class BNO08xActivity
};
/// @brief BNO08xStability states returned from BNO08x::stability_classifier.get()
enum class BNO08xStability
enum class BNO08xStability : uint8_t
{
UNKNOWN = 0, // 0 = unknown
ON_TABLE = 1, // 1 = on table
@ -154,6 +155,82 @@ enum class BNO08xStability
UNDEFINED = 6 // used for unit tests
};
enum class BNO08xFrsID : uint16_t {
STATIC_CALIBRATION_AGM = 0x7979,
NOMINAL_CALIBRATION = 0x4D4D,
STATIC_CALIBRATION_SRA = 0x8A8A,
NOMINAL_CALIBRATION_SRA = 0x4E4E,
DYNAMIC_CALIBRATION = 0x1F1F,
ME_POWER_MGMT = 0xD3E2,
SYSTEM_ORIENTATION = 0x2D3E,
ACCEL_ORIENTATION = 0x2D41,
SCREEN_ACCEL_ORIENTATION = 0x2D43,
GYROSCOPE_ORIENTATION = 0x2D46,
MAGNETOMETER_ORIENTATION = 0x2D4C,
ARVR_STABILIZATION_RV = 0x3E2D,
ARVR_STABILIZATION_GRV = 0x3E2E,
TAP_DETECT_CONFIG = 0xC269,
SIG_MOTION_DETECT_CONFIG = 0xC274,
SHAKE_DETECT_CONFIG = 0x7D7D,
MAX_FUSION_PERIOD = 0xD7D7,
SERIAL_NUMBER = 0x4B4B,
ES_PRESSURE_CAL = 0x39AF,
ES_TEMPERATURE_CAL = 0x4D20,
ES_HUMIDITY_CAL = 0x1AC9,
ES_AMBIENT_LIGHT_CAL = 0x39B1,
ES_PROXIMITY_CAL = 0x4DA2,
ALS_CAL = 0xD401,
PROXIMITY_SENSOR_CAL = 0xD402,
PICKUP_DETECTOR_CONFIG = 0x1B2A,
FLIP_DETECTOR_CONFIG = 0xFC94,
STABILITY_DETECTOR_CONFIG = 0xED85,
ACTIVITY_TRACKER_CONFIG = 0xED88,
SLEEP_DETECTOR_CONFIG = 0xED87,
TILT_DETECTOR_CONFIG = 0xED89,
POCKET_DETECTOR_CONFIG = 0xEF27,
CIRCLE_DETECTOR_CONFIG = 0xEE51,
USER_RECORD = 0x74B4,
ME_TIME_SOURCE_SELECT = 0xD403,
UART_FORMAT = 0xA1A1,
GYRO_INTEGRATED_RV_CONFIG = 0xA1A2,
META_RAW_ACCELEROMETER = 0xE301,
META_ACCELEROMETER = 0xE302,
META_LINEAR_ACCELERATION = 0xE303,
META_GRAVITY = 0xE304,
META_RAW_GYROSCOPE = 0xE305,
META_GYROSCOPE_CALIBRATED = 0xE306,
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
};
/// @brief Struct to represent unit quaternion.
typedef struct bno08x_quat_t
{

View File

@ -1728,10 +1728,10 @@ bool BNO08x::delete_calibration_data()
}
/**
* @brief Retrieves a record from flash record system (if your goal is to retrieve meta data use the
* @brief Retrieves a record from flash record system (if your goal is to retrieve sensor specific 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
* For more details on returned and data and frs_IDs see ref. manual 6.3.7 & 4.3
*
* @param frs_ID The ID of the desired record to retrieve from flash.
* @param data Buffer of 16 uint32_t to store retrieved data.
@ -1739,17 +1739,41 @@ bool BNO08x::delete_calibration_data()
*
* @return True if get flash record system operation succeeded.
*/
bool BNO08x::get_frs(uint16_t frs_ID, uint32_t (&data)[16], uint16_t& rx_data_sz)
bool BNO08x::get_frs(BNO08xFrsID frs_ID, uint32_t (&data)[16], uint16_t& rx_data_sz)
{
int op_success = SH2_ERR;
lock_sh2_HAL();
op_success = sh2_getFrs(frs_ID, data, &rx_data_sz);
op_success = sh2_getFrs(static_cast<uint16_t>(frs_ID), data, &rx_data_sz);
unlock_sh2_HAL();
return (op_success == SH2_OK);
}
/**
* @brief Writes a record to flash record system.
*
* For more details on flash records and frs_IDs see ref. manual 6.3.6 & 4.3
*
* @param frs_ID The ID of the desired to write to flash.
* @param data Buffer of 16 uint32_t to store data to send.
* @param tx_data_sz Length of data, amount of 32 bit words to write to flash.
*
* @return True if get flash record system operation succeeded.
*/
bool BNO08x::write_frs(BNO08xFrsID frs_ID, uint32_t *data, const uint16_t tx_data_sz)
{
int op_success = SH2_ERR;
lock_sh2_HAL();
op_success = sh2_setFrs(static_cast<uint16_t>(frs_ID), data, tx_data_sz);
unlock_sh2_HAL();
return (op_success == SH2_OK);
}
/**
* @brief Returns product ID info sent by IMU at initialization.
*

View File

@ -34,7 +34,7 @@ void BNO08xRptActivityClassifier::update_data(sh2_SensorValue_t* sensor_val)
*/
bool BNO08xRptActivityClassifier::enable(uint32_t time_between_reports, sh2_SensorConfig_t sensor_cfg)
{
sensor_cfg.sensorSpecific = static_cast<uint8_t>(activities_to_enable); // this must be set regardless of user cfg
sensor_cfg.sensorSpecific = static_cast<uint32_t>(activities_to_enable); // this must be set regardless of user cfg
// or no reports will be received
return BNO08xRpt::rpt_enable(time_between_reports, sensor_cfg);
}

View File

@ -309,7 +309,6 @@ 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] = {};
@ -338,7 +337,6 @@ 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] = {};
@ -369,7 +367,6 @@ 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] = {};
@ -398,7 +395,6 @@ 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] = {};