10#ifndef M5_UNIT_IMU_UNIT_UNIT_BMM150_HPP
11#define M5_UNIT_IMU_UNIT_UNIT_BMM150_HPP
13#include <M5UnitComponent.hpp>
14#include <m5_utility/container/circular_buffer.hpp>
29 public PeriodicMeasurementAdapter<UnitBMM150, bmm150::Data>,
31 M5_UNIT_COMPONENT_HPP_BUILDER(
UnitBMM150, 0x10);
51 explicit UnitBMM150(
const uint8_t addr = DEFAULT_ADDRESS);
58 virtual bool begin()
override;
61 virtual void update(
const bool force =
false)
override;
153 bool sleep()
override;
171 return m5::imu::Capability::Mag;
184 bool start_periodic_measurement();
185 bool stop_periodic_measurement();
192 bool write_repetition_unchecked(
const uint8_t rep_xy,
const uint8_t rep_z);
194 bool write_register8_verified(
const uint8_t reg,
const uint8_t val);
201 bmm150::trim_t _trim{};
202 uint32_t _pushed{}, _consumed{};
203 std::unique_ptr<m5::container::CircularBuffer<bmm150::Data>> _data{};
209constexpr uint32_t DEFAULT_STORED_SIZE{4};
214constexpr uint8_t REG_CHIP_ID{0x40};
215constexpr uint8_t REG_DATA_X_LSB{0x42};
216constexpr uint8_t REG_INT_STATUS{0x4A};
217constexpr uint8_t REG_POWER_CONTROL{0x4B};
218constexpr uint8_t REG_OP_MODE{0x4C};
219constexpr uint8_t REG_REP_XY{0x51};
220constexpr uint8_t REG_REP_Z{0x52};
221constexpr uint8_t REG_TRIM_START{0x5D};
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 for this chip; it is found built into some ...
Definition unit_bmm150.hpp:30
config_t config() const
Gets the configuration.
Definition unit_bmm150.hpp:67
virtual m5::imu::Capability readImuRaw(m5::imu::imu_raw_data_t &out) override
Read the latest raw IMU data.
Definition unit_bmm150.cpp:343
void config(const config_t &cfg)
Set the configuration.
Definition unit_bmm150.hpp:73
bool readRepetition(uint8_t &rep_xy, uint8_t &rep_z)
Read the repetition registers from the device (REG_REP_XY/REG_REP_Z)
Definition unit_bmm150.cpp:235
bool writeDataRate(const bmm150::DataRate rate)
Write the output data rate.
Definition unit_bmm150.cpp:240
bool sleep() override
Put the chip into suspend mode (REG_POWER_CONTROL power bit cleared)
Definition unit_bmm150.cpp:181
bool softReset()
Soft reset (REG_POWER_CONTROL soft-reset bits, keeping the power control bit on), leaving the chip in...
Definition unit_bmm150.cpp:98
bool readDataRate(bmm150::DataRate &rate)
Read the output data rate from the device (REG_OP_MODE bits[5:3])
Definition unit_bmm150.cpp:277
bool writeRepetition(const uint8_t rep_xy, const uint8_t rep_z)
Write the repetition (oversampling) registers directly.
Definition unit_bmm150.cpp:214
bool wakeup() override
Bring the chip out of suspend.
Definition unit_bmm150.cpp:195
virtual m5::imu::Capability imuSpec() const override
Capability of this unit.
Definition unit_bmm150.hpp:169
virtual void imuConvertParam(m5::imu::imu_convert_param_t &out) const override
Gets the conversion parameters for raw IMU data.
Definition unit_bmm150.cpp:367
virtual ~UnitBMM150()
Destructor.
Definition unit_bmm150.hpp:53
bool startPeriodicMeasurement()
Start periodic measurement in the current settings.
Definition unit_bmm150.cpp:171
bool writePreset(const bmm150::Preset preset)
Write the accuracy/power preset (REG_REP_XY/REG_REP_Z)
Definition unit_bmm150.cpp:205
UnitBMM150(const uint8_t addr=DEFAULT_ADDRESS)
Construct with the I2C address the chip will answer on.
Definition unit_bmm150.cpp:47
virtual bool begin() override
Begin the unit.
Definition unit_bmm150.cpp:56
virtual void update(const bool force=false) override
Update the unit.
Definition unit_bmm150.cpp:112
bool stopPeriodicMeasurement()
Stop periodic measurement.
Definition unit_bmm150.cpp:176
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_bmm150.hpp:40
bmm150::DataRate rate
Output data rate.
Definition unit_bmm150.hpp:46
bmm150::Preset preset
Accuracy/power preset (controls REG_REP_XY/REG_REP_Z)
Definition unit_bmm150.hpp:44
bool start_periodic
Start periodic measurement on begin()?
Definition unit_bmm150.hpp:42
One measurement (8 bytes burst from REG_DATA_X_LSB, register 0x42)
Definition unit_bmm150_data.hpp:143
Factory trim (calibration) values read from registers 0x5D-0x71, consumed by the compensation formula...
Definition unit_bmm150_data.hpp:125
BMM150 setting enums and measurement data (framework independent)
DataRate
Output data rate (REG_OP_MODE register bits 5:3, value order is NOT monotonic in Hz)
Definition unit_bmm150_data.hpp:25
Preset
Preset accuracy/power modes, controlling the REG_REP_XY/REG_REP_Z repetition counts (see preset_rep_x...
Definition unit_bmm150_data.hpp:41