reorganize structs to prevent alignment issues for potential generic HAL version

Signed-off-by: myles-parfeniuk <myles.parfenyuk@gmail.com>
This commit is contained in:
myles-parfeniuk 2025-06-06 22:29:55 -07:00
parent e0081794f8
commit a35784a74d
2 changed files with 59 additions and 56 deletions

View File

@ -72,58 +72,58 @@ class BNO08x
void print_system_orientation(); void print_system_orientation();
/// @brief Contains report implementations. /// @brief Contains report implementations.
typedef struct bno08x_reports_t typedef struct alignas(4) bno08x_reports_t
{ {
BNO08xRptAcceleration accelerometer; BNO08xRptIGyroRV rv_gyro_integrated;
BNO08xRptLinearAcceleration linear_accelerometer;
BNO08xRptGravity gravity;
BNO08xRptCalMagnetometer cal_magnetometer;
BNO08xRptUncalMagnetometer uncal_magnetometer; BNO08xRptUncalMagnetometer uncal_magnetometer;
BNO08xRptCalGyro cal_gyro;
BNO08xRptUncalGyro uncal_gyro; BNO08xRptUncalGyro uncal_gyro;
BNO08xRptRV rv; BNO08xRptRV rv;
BNO08xRptGameRV rv_game; BNO08xRptGameRV rv_game;
BNO08xRptARVRStabilizedRV rv_ARVR_stabilized; BNO08xRptARVRStabilizedRV rv_ARVR_stabilized;
BNO08xRptARVRStabilizedGameRV rv_ARVR_stabilized_game; BNO08xRptARVRStabilizedGameRV rv_ARVR_stabilized_game;
BNO08xRptIGyroRV rv_gyro_integrated;
BNO08xRptRVGeomag rv_geomagnetic; BNO08xRptRVGeomag rv_geomagnetic;
BNO08xRptActivityClassifier activity_classifier;
BNO08xRptAcceleration accelerometer;
BNO08xRptLinearAcceleration linear_accelerometer;
BNO08xRptGravity gravity;
BNO08xRptCalMagnetometer cal_magnetometer;
BNO08xRptCalGyro cal_gyro;
BNO08xRptRawMEMSGyro raw_gyro; BNO08xRptRawMEMSGyro raw_gyro;
BNO08xRptRawMEMSAccelerometer raw_accelerometer; BNO08xRptRawMEMSAccelerometer raw_accelerometer;
BNO08xRptRawMEMSMagnetometer raw_magnetometer; BNO08xRptRawMEMSMagnetometer raw_magnetometer;
BNO08xRptStepCounter step_counter; BNO08xRptStepCounter step_counter;
BNO08xRptActivityClassifier activity_classifier; BNO08xRptTapDetector tap_detector;
BNO08xRptStabilityClassifier stability_classifier; BNO08xRptStabilityClassifier stability_classifier;
BNO08xRptShakeDetector shake_detector; BNO08xRptShakeDetector shake_detector;
BNO08xRptTapDetector tap_detector;
bno08x_reports_t(BNO08xPrivateTypes::bno08x_sync_ctx_t* sync_ctx) bno08x_reports_t(BNO08xPrivateTypes::bno08x_sync_ctx_t* sync_ctx)
: accelerometer(SH2_ACCELEROMETER, BNO08xPrivateTypes::EVT_GRP_RPT_ACCELEROMETER_BIT, sync_ctx) : rv_gyro_integrated(SH2_GYRO_INTEGRATED_RV, BNO08xPrivateTypes::EVT_GRP_RPT_GYRO_INTEGRATED_RV_BIT, sync_ctx)
, linear_accelerometer(
SH2_LINEAR_ACCELERATION, BNO08xPrivateTypes::EVT_GRP_RPT_LINEAR_ACCELEROMETER_BIT, sync_ctx)
, gravity(SH2_GRAVITY, BNO08xPrivateTypes::EVT_GRP_RPT_GRAVITY_BIT, sync_ctx)
, cal_magnetometer(
SH2_MAGNETIC_FIELD_CALIBRATED, BNO08xPrivateTypes::EVT_GRP_RPT_CAL_MAGNETOMETER_BIT, sync_ctx)
, uncal_magnetometer( , uncal_magnetometer(
SH2_MAGNETIC_FIELD_UNCALIBRATED, BNO08xPrivateTypes::EVT_GRP_RPT_UNCAL_MAGNETOMETER_BIT, sync_ctx) SH2_MAGNETIC_FIELD_UNCALIBRATED, BNO08xPrivateTypes::EVT_GRP_RPT_UNCAL_MAGNETOMETER_BIT, sync_ctx)
, cal_gyro(SH2_GYROSCOPE_CALIBRATED, BNO08xPrivateTypes::EVT_GRP_RPT_CAL_GYRO_BIT, sync_ctx)
, uncal_gyro(SH2_GYROSCOPE_UNCALIBRATED, BNO08xPrivateTypes::EVT_GRP_RPT_UNCAL_GYRO_BIT, sync_ctx) , uncal_gyro(SH2_GYROSCOPE_UNCALIBRATED, BNO08xPrivateTypes::EVT_GRP_RPT_UNCAL_GYRO_BIT, sync_ctx)
, rv(SH2_ROTATION_VECTOR, BNO08xPrivateTypes::EVT_GRP_RPT_RV_BIT, sync_ctx) , rv(SH2_ROTATION_VECTOR, BNO08xPrivateTypes::EVT_GRP_RPT_RV_BIT, sync_ctx)
, rv_game(SH2_GAME_ROTATION_VECTOR, BNO08xPrivateTypes::EVT_GRP_RPT_RV_GAME_BIT, sync_ctx) , rv_game(SH2_GAME_ROTATION_VECTOR, BNO08xPrivateTypes::EVT_GRP_RPT_RV_GAME_BIT, sync_ctx)
, rv_ARVR_stabilized(SH2_ARVR_STABILIZED_RV, BNO08xPrivateTypes::EVT_GRP_RPT_RV_ARVR_S_BIT, sync_ctx) , rv_ARVR_stabilized(SH2_ARVR_STABILIZED_RV, BNO08xPrivateTypes::EVT_GRP_RPT_RV_ARVR_S_BIT, sync_ctx)
, rv_ARVR_stabilized_game( , rv_ARVR_stabilized_game(
SH2_ARVR_STABILIZED_GRV, BNO08xPrivateTypes::EVT_GRP_RPT_RV_ARVR_S_GAME_BIT, sync_ctx) SH2_ARVR_STABILIZED_GRV, BNO08xPrivateTypes::EVT_GRP_RPT_RV_ARVR_S_GAME_BIT, sync_ctx)
, rv_gyro_integrated(SH2_GYRO_INTEGRATED_RV, BNO08xPrivateTypes::EVT_GRP_RPT_GYRO_INTEGRATED_RV_BIT, sync_ctx)
, rv_geomagnetic(SH2_GEOMAGNETIC_ROTATION_VECTOR, BNO08xPrivateTypes::EVT_GRP_RPT_GEOMAG_RV_BIT, sync_ctx) , rv_geomagnetic(SH2_GEOMAGNETIC_ROTATION_VECTOR, BNO08xPrivateTypes::EVT_GRP_RPT_GEOMAG_RV_BIT, sync_ctx)
, activity_classifier(
SH2_PERSONAL_ACTIVITY_CLASSIFIER, BNO08xPrivateTypes::EVT_GRP_RPT_ACTIVITY_CLASSIFIER_BIT, sync_ctx)
, accelerometer(SH2_ACCELEROMETER, BNO08xPrivateTypes::EVT_GRP_RPT_ACCELEROMETER_BIT, sync_ctx)
, linear_accelerometer(
SH2_LINEAR_ACCELERATION, BNO08xPrivateTypes::EVT_GRP_RPT_LINEAR_ACCELEROMETER_BIT, sync_ctx)
, gravity(SH2_GRAVITY, BNO08xPrivateTypes::EVT_GRP_RPT_GRAVITY_BIT, sync_ctx)
, cal_magnetometer(
SH2_MAGNETIC_FIELD_CALIBRATED, BNO08xPrivateTypes::EVT_GRP_RPT_CAL_MAGNETOMETER_BIT, sync_ctx)
, cal_gyro(SH2_GYROSCOPE_CALIBRATED, BNO08xPrivateTypes::EVT_GRP_RPT_CAL_GYRO_BIT, sync_ctx)
, raw_gyro(SH2_RAW_GYROSCOPE, BNO08xPrivateTypes::EVT_GRP_RPT_RAW_GYRO_BIT, sync_ctx) , raw_gyro(SH2_RAW_GYROSCOPE, BNO08xPrivateTypes::EVT_GRP_RPT_RAW_GYRO_BIT, sync_ctx)
, raw_accelerometer(SH2_RAW_ACCELEROMETER, BNO08xPrivateTypes::EVT_GRP_RPT_RAW_ACCELEROMETER_BIT, sync_ctx) , raw_accelerometer(SH2_RAW_ACCELEROMETER, BNO08xPrivateTypes::EVT_GRP_RPT_RAW_ACCELEROMETER_BIT, sync_ctx)
, raw_magnetometer(SH2_RAW_MAGNETOMETER, BNO08xPrivateTypes::EVT_GRP_RPT_RAW_MAGNETOMETER_BIT, sync_ctx) , raw_magnetometer(SH2_RAW_MAGNETOMETER, BNO08xPrivateTypes::EVT_GRP_RPT_RAW_MAGNETOMETER_BIT, sync_ctx)
, step_counter(SH2_STEP_COUNTER, BNO08xPrivateTypes::EVT_GRP_RPT_STEP_COUNTER_BIT, sync_ctx) , step_counter(SH2_STEP_COUNTER, BNO08xPrivateTypes::EVT_GRP_RPT_STEP_COUNTER_BIT, sync_ctx)
, activity_classifier( , tap_detector(SH2_TAP_DETECTOR, BNO08xPrivateTypes::EVT_GRP_RPT_TAP_DETECTOR_BIT, sync_ctx)
SH2_PERSONAL_ACTIVITY_CLASSIFIER, BNO08xPrivateTypes::EVT_GRP_RPT_ACTIVITY_CLASSIFIER_BIT, sync_ctx)
, stability_classifier( , stability_classifier(
SH2_STABILITY_CLASSIFIER, BNO08xPrivateTypes::EVT_GRP_RPT_STABILITY_CLASSIFIER_BIT, sync_ctx) SH2_STABILITY_CLASSIFIER, BNO08xPrivateTypes::EVT_GRP_RPT_STABILITY_CLASSIFIER_BIT, sync_ctx)
, shake_detector(SH2_SHAKE_DETECTOR, BNO08xPrivateTypes::EVT_GRP_RPT_SHAKE_DETECTOR_BIT, sync_ctx) , shake_detector(SH2_SHAKE_DETECTOR, BNO08xPrivateTypes::EVT_GRP_RPT_SHAKE_DETECTOR_BIT, sync_ctx)
, tap_detector(SH2_TAP_DETECTOR, BNO08xPrivateTypes::EVT_GRP_RPT_TAP_DETECTOR_BIT, sync_ctx)
{ {
} }
} bno08x_reports_t; } bno08x_reports_t;

View File

@ -475,16 +475,16 @@ typedef struct bno08x_quat_t
float i; float i;
float j; float j;
float k; float k;
BNO08xAccuracy accuracy;
float rad_accuracy; float rad_accuracy;
BNO08xAccuracy accuracy;
bno08x_quat_t() bno08x_quat_t()
: real(0.0f) : real(0.0f)
, i(0.0f) , i(0.0f)
, j(0.0f) , j(0.0f)
, k(0.0f) , k(0.0f)
, accuracy(BNO08xAccuracy::UNDEFINED)
, rad_accuracy(0.0f) , rad_accuracy(0.0f)
, accuracy(BNO08xAccuracy::UNDEFINED)
{ {
} }
@ -529,15 +529,15 @@ typedef struct bno08x_euler_angle_t
float x; float x;
float y; float y;
float z; float z;
BNO08xAccuracy accuracy;
float rad_accuracy; float rad_accuracy;
BNO08xAccuracy accuracy;
bno08x_euler_angle_t() bno08x_euler_angle_t()
: x(0.0f) : x(0.0f)
, y(0.0f) , y(0.0f)
, z(0.0f) , z(0.0f)
, accuracy(BNO08xAccuracy::UNDEFINED)
, rad_accuracy(0.0f) , rad_accuracy(0.0f)
, accuracy(BNO08xAccuracy::UNDEFINED)
{ {
} }
@ -726,18 +726,18 @@ typedef struct bno08x_gyro_bias_t
/// @brief Struct to represent activity classifier data. /// @brief Struct to represent activity classifier data.
typedef struct bno08x_activity_classifier_t typedef struct bno08x_activity_classifier_t
{ {
uint8_t confidence[10];
BNO08xActivity mostLikelyState;
BNO08xAccuracy accuracy;
uint8_t page; uint8_t page;
bool lastPage; bool lastPage;
BNO08xActivity mostLikelyState;
uint8_t confidence[10];
BNO08xAccuracy accuracy;
bno08x_activity_classifier_t() bno08x_activity_classifier_t()
: page(0U) : confidence({})
, lastPage(false)
, mostLikelyState(BNO08xActivity::UNDEFINED) , mostLikelyState(BNO08xActivity::UNDEFINED)
, confidence({})
, accuracy(BNO08xAccuracy::UNDEFINED) , accuracy(BNO08xAccuracy::UNDEFINED)
, page(0U)
, lastPage(false)
{ {
} }
@ -903,19 +903,19 @@ typedef struct bno08x_step_counter_t
/// @brief Struct to represent raw mems gyro data from raw gyro reports (units in ADC counts). /// @brief Struct to represent raw mems gyro data from raw gyro reports (units in ADC counts).
typedef struct bno08x_raw_gyro_t typedef struct bno08x_raw_gyro_t
{ {
uint32_t timestamp_us;
int16_t x; int16_t x;
int16_t y; int16_t y;
int16_t z; int16_t z;
int16_t temperature; int16_t temperature;
uint32_t timestamp_us;
BNO08xAccuracy accuracy; BNO08xAccuracy accuracy;
bno08x_raw_gyro_t() bno08x_raw_gyro_t()
: x(0U) : timestamp_us(0UL)
, x(0U)
, y(0U) , y(0U)
, z(0U) , z(0U)
, temperature(0U) , temperature(0U)
, timestamp_us(0UL)
, accuracy(BNO08xAccuracy::UNDEFINED) , accuracy(BNO08xAccuracy::UNDEFINED)
{ {
} }
@ -936,17 +936,17 @@ typedef struct bno08x_raw_gyro_t
/// ADC counts). /// ADC counts).
typedef struct bno08x_raw_accel_t typedef struct bno08x_raw_accel_t
{ {
uint32_t timestamp_us;
int16_t x; int16_t x;
int16_t y; int16_t y;
int16_t z; int16_t z;
uint32_t timestamp_us;
BNO08xAccuracy accuracy; BNO08xAccuracy accuracy;
bno08x_raw_accel_t() bno08x_raw_accel_t()
: x(0U) : timestamp_us(0UL)
, x(0U)
, y(0U) , y(0U)
, z(0U) , z(0U)
, timestamp_us(0UL)
, accuracy(BNO08xAccuracy::UNDEFINED) , accuracy(BNO08xAccuracy::UNDEFINED)
{ {
} }
@ -966,17 +966,17 @@ typedef struct bno08x_raw_accel_t
/// ADC counts). /// ADC counts).
typedef struct bno08x_raw_magf_t typedef struct bno08x_raw_magf_t
{ {
uint32_t timestamp_us;
int16_t x; int16_t x;
int16_t y; int16_t y;
int16_t z; int16_t z;
uint32_t timestamp_us;
BNO08xAccuracy accuracy; BNO08xAccuracy accuracy;
bno08x_raw_magf_t() bno08x_raw_magf_t()
: x(0U) : timestamp_us(0UL)
, x(0U)
, y(0U) , y(0U)
, z(0U) , z(0U)
, timestamp_us(0UL)
, accuracy(BNO08xAccuracy::UNDEFINED) , accuracy(BNO08xAccuracy::UNDEFINED)
{ {
} }
@ -1045,45 +1045,48 @@ typedef struct bno08x_sample_counts_t
/// @brief Struct to represent sensor/report meta data, returned from BNO08xRpt::get_meta_data() /// @brief Struct to represent sensor/report meta data, returned from BNO08xRpt::get_meta_data()
typedef struct bno08x_meta_data_t typedef struct bno08x_meta_data_t
{ {
uint8_t me_version; ///< Motion Engine Version char vendor_ID[48]; ///< Vendor name and part number
uint8_t mh_version; ///< Motion Hub Version uint8_t sensor_specific[48]; ///< See SH-2 Reference Manual
uint8_t sh_version; ///< SensorHub Version uint32_t vendor_id_len; ///< [bytes]
uint32_t sensor_specific_len; ///< [bytes]
uint32_t range; ///< Same units as sensor reports uint32_t range; ///< Same units as sensor reports
uint32_t resolution; ///< Same units as sensor reports uint32_t resolution; ///< Same units as sensor reports
uint16_t revision; ///< Metadata record format revision
uint16_t power_mA; ///< [mA] Fixed point 16Q10 format
uint32_t min_period_us; ///< [uS] min period to use with enable_report uint32_t min_period_us; ///< [uS] min period to use with enable_report
uint32_t max_period_us; ///< [uS] max period to use with enable_report uint32_t max_period_us; ///< [uS] max period to use with enable_report
uint32_t fifo_reserved; ///< (Unused) uint32_t fifo_reserved; ///< (Unused)
uint32_t fifo_max; ///< (Unused) uint32_t fifo_max; ///< (Unused)
uint32_t batch_buffer_bytes; ///< (Unused) uint32_t batch_buffer_bytes; ///< (Unused)
uint16_t revision; ///< Metadata record format revision
uint16_t power_mA; ///< [mA] Fixed point 16Q10 format
uint16_t q_point_1; ///< q point for sensor values uint16_t q_point_1; ///< q point for sensor values
uint16_t q_point_2; ///< q point for accuracy or bias fields uint16_t q_point_2; ///< q point for accuracy or bias fields
uint16_t q_point_3; ///< q point for sensor data change sensitivity uint16_t q_point_3; ///< q point for sensor data change sensitivity
uint32_t vendor_id_len; ///< [bytes] uint8_t me_version; ///< Motion Engine Version
char vendor_ID[48]; ///< Vendor name and part number uint8_t mh_version; ///< Motion Hub Version
uint32_t sensor_specific_len; ///< [bytes] uint8_t sh_version; ///< SensorHub Version
uint8_t sensor_specific[48]; ///< See SH-2 Reference Manual
// Default constructor // Default constructor
bno08x_meta_data_t() bno08x_meta_data_t()
: me_version(0) : vendor_ID({})
, mh_version(0) , sensor_specific({})
, sh_version(0) , vendor_id_len(0)
, sensor_specific_len(0)
, range(0) , range(0)
, resolution(0) , resolution(0)
, revision(0)
, power_mA(0)
, min_period_us(0) , min_period_us(0)
, max_period_us(0) , max_period_us(0)
, fifo_reserved(0) , fifo_reserved(0)
, fifo_max(0) , fifo_max(0)
, batch_buffer_bytes(0) , batch_buffer_bytes(0)
, revision(0)
, power_mA(0)
, q_point_1(0) , q_point_1(0)
, q_point_2(0) , q_point_2(0)
, q_point_3(0) , q_point_3(0)
, vendor_id_len(0) , me_version(0)
, sensor_specific_len(0) , mh_version(0)
, sh_version(0)
{ {
memset(vendor_ID, 0, sizeof(vendor_ID)); memset(vendor_ID, 0, sizeof(vendor_ID));
memset(sensor_specific, 0, sizeof(sensor_specific)); memset(sensor_specific, 0, sizeof(sensor_specific));