10#ifndef M5_UNIT_IMU_UNIT_UNIT_AK8963_HPP
11#define M5_UNIT_IMU_UNIT_UNIT_AK8963_HPP
13#include <M5UnitComponent.hpp>
14#include <m5_utility/container/circular_buffer.hpp>
30 public PeriodicMeasurementAdapter<UnitAK8963, ak8963::Data>,
32 M5_UNIT_COMPONENT_HPP_BUILDER(
UnitAK8963, 0x0C);
53 explicit UnitAK8963(
const uint8_t addr = DEFAULT_ADDRESS);
60 virtual bool begin()
override;
63 virtual void update(
const bool force =
false)
override;
140 bool sleep()
override;
157 return m5::imu::Capability::Mag;
170 bool start_periodic_measurement();
171 bool stop_periodic_measurement();
173 bool read_sensitivity(std::array<uint8_t, 3>& asa);
181 ak8963::MeasurementMode _mode{ak8963::MeasurementMode::Cont100Hz};
182 ak8963::OutputBit _bit{ak8963::OutputBit::Bit16};
183 std::array<uint8_t, 3> _asa{};
184 uint32_t _pushed{}, _consumed{};
185 std::unique_ptr<m5::container::CircularBuffer<ak8963::Data>> _data{};
194constexpr uint8_t REG_WIA{0x00};
195constexpr uint8_t REG_ST1{0x02};
196constexpr uint8_t REG_CNTL1{0x0A};
197constexpr uint8_t REG_CNTL2{0x0B};
198constexpr uint8_t REG_ASAX{0x10};
Thin contract between measurement units and consumers (e.g. AHRS)
Definition imu_data_source.hpp:27
3-axis magnetometer unit. No standalone GROVE unit exists; it is the magnetometer embedded in the MPU...
Definition unit_ak8963.hpp:31
bool sleep() override
Enter power-down mode (REG_CNTL1 mode 0)
Definition unit_ak8963.cpp:210
bool startPeriodicMeasurement()
Start periodic measurement in the current settings.
Definition unit_ak8963.cpp:200
virtual ~UnitAK8963()
Destructor.
Definition unit_ak8963.hpp:55
virtual void imuConvertParam(m5::imu::imu_convert_param_t &out) const override
Gets the conversion parameters for raw IMU data.
Definition unit_ak8963.cpp:270
UnitAK8963(const uint8_t addr=DEFAULT_ADDRESS)
Construct with the I2C address the chip will answer on.
Definition unit_ak8963.cpp:31
virtual void update(const bool force=false) override
Update the unit.
Definition unit_ak8963.cpp:142
bool readMeasurementMode(ak8963::MeasurementMode &mode, ak8963::OutputBit &bit) const
Read the continuous measurement rate and output bit width.
Definition unit_ak8963.cpp:97
virtual bool begin() override
Begin the unit.
Definition unit_ak8963.cpp:40
bool writeMeasurementMode(const ak8963::MeasurementMode mode, const ak8963::OutputBit bit)
Write the continuous measurement rate and output bit width.
Definition unit_ak8963.cpp:77
config_t config() const
Gets the configuration.
Definition unit_ak8963.hpp:68
void config(const config_t &cfg)
Set the configuration.
Definition unit_ak8963.hpp:73
bool wakeup() override
Leave power-down.
Definition unit_ak8963.cpp:225
bool softReset()
Soft reset (REG_CNTL2 SRST), leaving the chip initialized but unconfigured and stopped.
Definition unit_ak8963.cpp:104
virtual m5::imu::Capability imuSpec() const override
Capability of this unit.
Definition unit_ak8963.hpp:155
bool stopPeriodicMeasurement()
Mark periodic measurement as stopped (bookkeeping only; the chip stays in its current mode – call sle...
Definition unit_ak8963.cpp:205
virtual m5::imu::Capability readImuRaw(m5::imu::imu_raw_data_t &out) override
Read the latest raw IMU data.
Definition unit_ak8963.cpp:246
Public interface for IMU data providers.
Capability
Capability of the IMU data source (bitwise combinable)
Definition imu_types.hpp:22
Top level namespace of M5Stack.
Definition ahrs_controller.cpp:26
Raw to physical unit conversion coefficients.
Definition imu_types.hpp:69
Unified raw data (chip-native axes, no remap applied)
Definition imu_types.hpp:57
Settings for begin()
Definition unit_ak8963.hpp:39
ak8963::MeasurementMode measurement_mode
Definition unit_ak8963.hpp:46
ak8963::OutputBit output_bit
Output bit width. Full scale is the same either way, only the resolution differs.
Definition unit_ak8963.hpp:48
bool start_periodic
Start periodic measurement on begin()?
Definition unit_ak8963.hpp:41
One AK8963 sample: an 8-byte burst from ST1 (0x02) plus the device ASA trim.
Definition unit_ak8963_data.hpp:84
constexpr uint32_t DEFAULT_STORED_SIZE
Default ring buffer depth.
Definition unit_ak8963.hpp:190
AK8963 setting enums and measurement data (framework independent)
MeasurementMode
Continuous measurement rate, the subset of Mode this driver measures in.
Definition unit_ak8963_data.hpp:42
OutputBit
Output bit width (CNTL1 bit4 BIT)
Definition unit_ak8963_data.hpp:53