20 SPI_CONF spiConfAtEndTransaction) :
21 ABSTRACT_SENSOR_SPI(spiSS,
23 SPI_CONF(spiClockSpeed, MSBFIRST, SPI_MODE0),
24 spiConfAtEndTransaction),
38 bool begin()
override;
39 void readTemp()
override;
40 void readMag()
override;
41 uint8_t whoAmI()
override;
49 void setMagOdrBw(MMC5983MA_ENUM::ODR magFreq, MMC5983MA_ENUM::BW magBw);
120 using ABSTRACT_SENSOR_SPI::readRegister;
121 using ABSTRACT_SENSOR_SPI::readRegisterBurst;
122 using ABSTRACT_SENSOR_SPI::writeRegister;
123 using ABSTRACT_SENSOR_SPI::writeRegisterWithMask;
126 MMC5983MA_ENUM::ODR mMagFreq = MMC5983MA_ENUM::ODR::_100HZ;
127 MMC5983MA_ENUM::BW mMagBW = MMC5983MA_ENUM::BW::_100HZ;
128 MMC5983MA_ENUM::PERIODIC_SET_TIME mMagPeriodicSetTime = MMC5983MA_ENUM::PERIODIC_SET_TIME::_1;
129 float mBridgeOffset[3] = {0.F, 0.F, 0.F};
136 uint32_t mUsTimeOutMeasReading = 100U;
140 float tempLow = -75.F;
141 float tempHigh = 125.F;
142 float tempRange = 255.F;
143 float tempSlope = (tempHigh - tempLow) / tempRange;
146 float magRange = 262144.F;
147 float magSlope = (magHigh - magLow) / magRange;
157 void powerOnSensors();
158 void fillOutputStruct(
const int32_t rawMag[3], int16_t rawTemp, uint32_t timestamp);
159 void setContinuousModeState(
bool state);
160 MMC5983MA_ENUM::STATUS getMeasuresStatus();
163 std::map<MMC5983MA_ENUM::ODR, uint8_t> enum_odr_to_mag_odr_map = {
164 {MMC5983MA_ENUM::ODR::_1000HZ, regVal.CONTROL_2.MEAS_FREQ_1000HZ},
165 {MMC5983MA_ENUM::ODR::_200HZ, regVal.CONTROL_2.MEAS_FREQ_200HZ},
166 {MMC5983MA_ENUM::ODR::_100HZ, regVal.CONTROL_2.MEAS_FREQ_100HZ},
167 {MMC5983MA_ENUM::ODR::_50HZ, regVal.CONTROL_2.MEAS_FREQ_50HZ},
168 {MMC5983MA_ENUM::ODR::_20HZ, regVal.CONTROL_2.MEAS_FREQ_20HZ},
169 {MMC5983MA_ENUM::ODR::_10HZ, regVal.CONTROL_2.MEAS_FREQ_10HZ},
170 {MMC5983MA_ENUM::ODR::_1HZ, regVal.CONTROL_2.MEAS_FREQ_1HZ},
171 {MMC5983MA_ENUM::ODR::_OFF, regVal.CONTROL_2.DISABLE_CONTINUOUS_MEAS}};
173 std::map<MMC5983MA_ENUM::PERIODIC_SET_TIME, uint8_t> enum_periodic_set_to_mag_periodic_map = {
174 {MMC5983MA_ENUM::PERIODIC_SET_TIME::_2000, regVal.CONTROL_2.PERIODIC_SET_2000},
175 {MMC5983MA_ENUM::PERIODIC_SET_TIME::_1000, regVal.CONTROL_2.PERIODIC_SET_1000},
176 {MMC5983MA_ENUM::PERIODIC_SET_TIME::_500, regVal.CONTROL_2.PERIODIC_SET_500},
177 {MMC5983MA_ENUM::PERIODIC_SET_TIME::_250, regVal.CONTROL_2.PERIODIC_SET_250},
178 {MMC5983MA_ENUM::PERIODIC_SET_TIME::_100, regVal.CONTROL_2.PERIODIC_SET_250},
179 {MMC5983MA_ENUM::PERIODIC_SET_TIME::_75, regVal.CONTROL_2.PERIODIC_SET_75},
180 {MMC5983MA_ENUM::PERIODIC_SET_TIME::_25, regVal.CONTROL_2.PERIODIC_SET_25},
181 {MMC5983MA_ENUM::PERIODIC_SET_TIME::_1, regVal.CONTROL_2.PERIODIC_SET_1},
182 {MMC5983MA_ENUM::PERIODIC_SET_TIME::_OFF, regVal.CONTROL_2.DISABLE_PERIODIC_SET}};
184 std::map<MMC5983MA_ENUM::BW, uint8_t> enum_bw_to_mag_bw_map = {
185 {MMC5983MA_ENUM::BW::_800HZ, regVal.CONTROL_1.BW_800HZ},
186 {MMC5983MA_ENUM::BW::_400HZ, regVal.CONTROL_1.BW_400HZ},
187 {MMC5983MA_ENUM::BW::_200HZ, regVal.CONTROL_1.BW_200HZ},
188 {MMC5983MA_ENUM::BW::_100HZ, regVal.CONTROL_1.BW_100HZ}};
191 String mClassName =
"MMC5983MA_SPI";