10#ifndef M5_UNIT_IMU_UNIT_UNIT_MAG3110_HPP
11#define M5_UNIT_IMU_UNIT_UNIT_MAG3110_HPP
13#include <M5UnitComponent.hpp>
14#include <m5_utility/container/circular_buffer.hpp>
29 public PeriodicMeasurementAdapter<UnitMAG3110, mag3110::Data>,
53 explicit UnitMAG3110(
const uint8_t addr = DEFAULT_ADDRESS);
60 virtual bool begin()
override;
63 virtual void update(
const bool force =
false)
override;
142 bool sleep()
override;
159 return m5::imu::Capability::Mag;
172 bool start_periodic_measurement();
173 bool stop_periodic_measurement();
182 mag3110::DataRate _rate{mag3110::DataRate::Rate80Hz};
183 mag3110::OverSampling _os{mag3110::OverSampling::X16};
184 uint32_t _pushed{}, _consumed{};
185 std::unique_ptr<m5::container::CircularBuffer<mag3110::Data>> _data{};
190constexpr uint32_t DEFAULT_STORED_SIZE{4};
194constexpr uint8_t REG_DR_STATUS{0x00};
195constexpr uint8_t REG_WHO_AM_I{0x07};
196constexpr uint8_t REG_CTRL_REG1{0x10};
197constexpr uint8_t REG_CTRL_REG2{0x11};
Thin contract between measurement units and consumers (e.g. AHRS)
Definition imu_data_source.hpp:27
NXP/Freescale MAG3110 3-axis magnetometer. No standalone GROVE unit exists; it is the magnetometer on...
Definition unit_mag3110.hpp:30
bool writeDataRate(const mag3110::DataRate rate, const mag3110::OverSampling os)
Write the output data rate and over sampling ratio.
Definition unit_mag3110.cpp:77
bool stopPeriodicMeasurement()
Mark periodic measurement as stopped (bookkeeping only; the chip stays in ACTIVE – call sleep() to dr...
Definition unit_mag3110.cpp:193
bool readDataRate(mag3110::DataRate &rate, mag3110::OverSampling &os)
Read the output data rate and over sampling ratio.
Definition unit_mag3110.cpp:103
bool softReset()
Soft reset (the MAG3110 has no reset command; returns to STANDBY via REG_CTRL_REG1),...
Definition unit_mag3110.cpp:115
virtual void update(const bool force=false) override
Update the unit.
Definition unit_mag3110.cpp:131
virtual ~UnitMAG3110()
Destructor.
Definition unit_mag3110.hpp:55
config_t config() const
Gets the configuration.
Definition unit_mag3110.hpp:68
virtual m5::imu::Capability imuSpec() const override
Capability of this unit.
Definition unit_mag3110.hpp:157
void config(const config_t &cfg)
Set the configuration.
Definition unit_mag3110.hpp:73
bool startPeriodicMeasurement()
Start periodic measurement in the current settings.
Definition unit_mag3110.cpp:188
virtual bool begin() override
Begin the unit.
Definition unit_mag3110.cpp:44
bool sleep() override
Enter STANDBY mode (REG_CTRL_REG1 AC cleared)
Definition unit_mag3110.cpp:198
virtual void imuConvertParam(m5::imu::imu_convert_param_t &out) const override
Gets the conversion parameters for raw IMU data.
Definition unit_mag3110.cpp:256
UnitMAG3110(const uint8_t addr=DEFAULT_ADDRESS)
Construct with the I2C address the chip will answer on.
Definition unit_mag3110.cpp:35
virtual m5::imu::Capability readImuRaw(m5::imu::imu_raw_data_t &out) override
Read the latest raw IMU data.
Definition unit_mag3110.cpp:232
bool wakeup() override
Leave STANDBY.
Definition unit_mag3110.cpp:212
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_mag3110.hpp:38
mag3110::DataRate rate
Definition unit_mag3110.hpp:46
bool start_periodic
Start periodic measurement on begin()?
Definition unit_mag3110.hpp:40
mag3110::OverSampling over_sampling
Over sampling ratio, which sets the noise floor. See mag3110::OverSampling.
Definition unit_mag3110.hpp:48
One MAG3110 sample: a 7-byte burst from DR_STATUS (0x00)
Definition unit_mag3110_data.hpp:92
MAG3110 setting enums and measurement data (framework independent)
DataRate
Output data rate select (REG_CTRL_REG1 DR[7:5])
Definition unit_mag3110_data.hpp:28
OverSampling
Over sampling ratio (REG_CTRL_REG1 OS[4:3])
Definition unit_mag3110_data.hpp:47