10#ifndef M5_UNIT_IMU_UNIT_UNIT_AK8963_DATA_HPP
11#define M5_UNIT_IMU_UNIT_UNIT_AK8963_DATA_HPP
61 return (mode == MeasurementMode::Cont8Hz) ? 125U : 10U;
67 return static_cast<uint8_t
>(
static_cast<uint8_t
>(bit) |
static_cast<uint8_t
>(mode));
85 std::array<uint8_t, 8>
raw{};
86 std::array<uint8_t, 3>
asa{};
91 return (
raw[0] & 0x01) != 0;
94 inline bool dor()
const
96 return (
raw[0] & 0x02) != 0;
101 return (
raw[7] & 0x08) != 0;
108 return (
raw[7] & 0x10) != 0;
113 return static_cast<int16_t
>((
raw[2] << 8) |
raw[1]);
118 return static_cast<int16_t
>((
raw[4] << 8) |
raw[3]);
123 return static_cast<int16_t
>((
raw[6] << 8) |
raw[5]);
143 inline int32_t adjust(
const int16_t raw_axis,
const uint8_t asa_axis)
const
149 return static_cast<int32_t
>(lroundf(ut * OUTPUT_LSB_PER_UT));
Top level namespace of M5Stack.
Definition ahrs_controller.cpp:26
One AK8963 sample: an 8-byte burst from ST1 (0x02) plus the device ASA trim.
Definition unit_ak8963_data.hpp:84
bool bit16() const
16bit output? (ST2 bit4 BITM)
Definition unit_ak8963_data.hpp:106
int16_t z_raw() const
Raw Z.
Definition unit_ak8963_data.hpp:121
int32_t adj_z() const
ASA-adjusted Z.
Definition unit_ak8963_data.hpp:137
std::array< uint8_t, 3 > asa
Per-axis sensitivity adjustment (device constant)
Definition unit_ak8963_data.hpp:86
int32_t adj_y() const
ASA-adjusted Y.
Definition unit_ak8963_data.hpp:132
bool dor() const
Data overrun (ST1 bit1 DOR): a sample was read too late and one was skipped.
Definition unit_ak8963_data.hpp:94
int16_t y_raw() const
Raw Y.
Definition unit_ak8963_data.hpp:116
int16_t x_raw() const
Raw X (little-endian, signed 16bit)
Definition unit_ak8963_data.hpp:111
std::array< uint8_t, 8 > raw
ST1 + X/Y/Z (LE) + ST2.
Definition unit_ak8963_data.hpp:85
bool drdy() const
Data ready (ST1 bit0)
Definition unit_ak8963_data.hpp:89
int32_t adj_x() const
ASA-adjusted X in library-wide 16 LSB/µT.
Definition unit_ak8963_data.hpp:127
bool overflow() const
Magnetic overflow (ST2 bit3 HOFL); sample invalid if set.
Definition unit_ak8963_data.hpp:99
constexpr uint8_t cntl1_value(const MeasurementMode mode, const OutputBit bit)
REG_CNTL1 value entering a continuous measurement mode.
Definition unit_ak8963_data.hpp:65
MeasurementMode
Continuous measurement rate, the subset of Mode this driver measures in.
Definition unit_ak8963_data.hpp:42
constexpr float RAW_UT_PER_LSB
16bit-mode sensitivity (µT per raw LSB) = 4912/32760
Definition unit_ak8963_data.hpp:71
constexpr uint32_t interval_ms(const MeasurementMode mode)
Sampling interval (ms) for a continuous measurement rate.
Definition unit_ak8963_data.hpp:59
constexpr float RAW_UT_PER_LSB_14BIT
14bit-mode sensitivity (µT per raw LSB) = 4912/8190
Definition unit_ak8963_data.hpp:73
Mode
CNTL1 (0x0A) low-nibble operating mode.
Definition unit_ak8963_data.hpp:25
@ Cont100Hz
Continuous measurement, 100Hz.
@ Cont8Hz
Continuous measurement, 8Hz.
@ Single
Single measurement.
@ FuseRom
FUSE-ROM access (ASA readable only here)
constexpr float OUTPUT_LSB_PER_UT
Library-wide magnetometer output scale (raw LSB per µT); see imu_convert_param_t.
Definition unit_ak8963_data.hpp:75
OutputBit
Output bit width (CNTL1 bit4 BIT)
Definition unit_ak8963_data.hpp:53
@ Bit16
16bit (0.15µT/LSB)