mirror of
https://github.com/m5stack/M5Unit-HEART.git
synced 2026-05-20 11:28:19 -07:00
Change some enum classes name
This commit is contained in:
@@ -4,6 +4,6 @@
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
/*
|
||||
Example using M5UnitUnified for HatHEART
|
||||
Example using M5UnitUnified for HatHeart
|
||||
*/
|
||||
#include "main/PlotToSerial.cpp"
|
||||
|
||||
@@ -15,10 +15,10 @@ namespace {
|
||||
auto& lcd = M5.Display;
|
||||
m5::unit::UnitUnified Units;
|
||||
m5::unit::HatHeart hat;
|
||||
|
||||
m5::heart::PulseMonitor monitor{};
|
||||
|
||||
constexpr bool using_multi_led_mode{true};
|
||||
constexpr bool using_multi_led_mode{false}; // Using multiLED mode if true
|
||||
constexpr bool using_wire1{false}; // Using Wire1 if true
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -27,10 +27,12 @@ using namespace m5::unit::max30102;
|
||||
void setup()
|
||||
{
|
||||
// Configuration if using Wire1
|
||||
auto m5cfg = M5.config();
|
||||
m5cfg.pmic_button = false; // Disable BtnPWR
|
||||
m5cfg.internal_imu = false; // Disable internal IMU
|
||||
m5cfg.internal_rtc = false; // Disable internal RTC
|
||||
auto m5cfg = M5.config();
|
||||
if (using_wire1) {
|
||||
m5cfg.pmic_button = false; // Disable BtnPWR
|
||||
m5cfg.internal_imu = false; // Disable internal IMU
|
||||
m5cfg.internal_rtc = false; // Disable internal RTC
|
||||
}
|
||||
M5.begin(m5cfg);
|
||||
|
||||
auto board = M5.getBoard();
|
||||
@@ -55,27 +57,27 @@ void setup()
|
||||
}
|
||||
|
||||
// Using TwoWire
|
||||
#if 1
|
||||
Wire1.end();
|
||||
Wire1.begin(0, 26, 400 * 1000U); // Hat port 0,26
|
||||
if (!Units.add(hat, Wire1) || !Units.begin()) {
|
||||
M5_LOGE("Failed to begin");
|
||||
lcd.clear(TFT_RED);
|
||||
while (true) {
|
||||
m5::utility::delay(10000);
|
||||
if (using_wire1) {
|
||||
Wire1.end();
|
||||
Wire1.begin(0, 26, 400 * 1000U);
|
||||
if (!Units.add(hat, Wire1) || !Units.begin()) {
|
||||
M5_LOGE("Failed to begin");
|
||||
lcd.clear(TFT_RED);
|
||||
while (true) {
|
||||
m5::utility::delay(10000);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Wire.end();
|
||||
Wire.begin(0, 26, 400 * 1000U);
|
||||
if (!Units.add(hat, Wire) || !Units.begin()) {
|
||||
M5_LOGE("Failed to begin");
|
||||
lcd.clear(TFT_RED);
|
||||
while (true) {
|
||||
m5::utility::delay(10000);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
Wire.end();
|
||||
Wire.begin(0, 26, 400 * 1000U); // Hat port 0,26
|
||||
if (!Units.add(hat, Wire) || !Units.begin()) {
|
||||
M5_LOGE("Failed to begin");
|
||||
lcd.clear(TFT_RED);
|
||||
while (true) {
|
||||
m5::utility::delay(10000);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
M5_LOGI("M5UnitUnified has been begun");
|
||||
M5_LOGI("%s", Units.debugInfo().c_str());
|
||||
@@ -83,7 +85,7 @@ void setup()
|
||||
// In MultiLED mode, you need to set and start them yourself
|
||||
if (using_multi_led_mode) {
|
||||
hat.writeMode(Mode::MultiLED);
|
||||
hat.writeSpO2Configuration(SpO2ADCRange::nA4096, Sampling::Rate400, LEDPulseWidth::PW411);
|
||||
hat.writeSpO2Configuration(ADC::Range4096nA, Sampling::Rate400, LEDPulse::Width411);
|
||||
hat.writeFIFOConfiguration(FIFOSampling::Average4, true, 15);
|
||||
// hat.writeMultiLEDModeControl(Slot::Red, Slot::IR); // (A)
|
||||
hat.writeMultiLEDModeControl(Slot::IR, Slot::Red); // (B)
|
||||
|
||||
+18
-19
@@ -86,7 +86,7 @@ constexpr const uint8_t* allowed_setting_table[] = {
|
||||
none_table, none_table, hr_table, spo2_table, none_table, none_table, none_table, spo2_table,
|
||||
};
|
||||
|
||||
inline bool is_allowed_settings(const Mode mode, const Sampling rate, const LEDPulseWidth pw)
|
||||
inline bool is_allowed_settings(const Mode mode, const Sampling rate, const LEDPulse pw)
|
||||
{
|
||||
return allowed_setting_table[m5::stl::to_underlying(mode)][m5::stl::to_underlying(rate)] &
|
||||
(1U << m5::stl::to_underlying(pw));
|
||||
@@ -184,19 +184,19 @@ struct ModeConfiguration {
|
||||
};
|
||||
|
||||
struct SpO2Configuration {
|
||||
inline SpO2ADCRange range() const
|
||||
inline ADC range() const
|
||||
{
|
||||
return static_cast<SpO2ADCRange>((value >> 5) & 0x03);
|
||||
return static_cast<ADC>((value >> 5) & 0x03);
|
||||
}
|
||||
inline Sampling rate() const
|
||||
{
|
||||
return static_cast<Sampling>((value >> 2) & 0x07);
|
||||
}
|
||||
inline LEDPulseWidth width() const
|
||||
inline LEDPulse width() const
|
||||
{
|
||||
return static_cast<LEDPulseWidth>(value & 0x03);
|
||||
return static_cast<LEDPulse>(value & 0x03);
|
||||
}
|
||||
inline void range(const SpO2ADCRange range)
|
||||
inline void range(const ADC range)
|
||||
{
|
||||
value = (value & ~(0x03 << 5)) | ((m5::stl::to_underlying(range) & 0x03) << 5);
|
||||
}
|
||||
@@ -204,7 +204,7 @@ struct SpO2Configuration {
|
||||
{
|
||||
value = (value & ~(0x07 << 2)) | ((m5::stl::to_underlying(rate) & 0x07) << 2);
|
||||
}
|
||||
inline void width(const LEDPulseWidth width)
|
||||
inline void width(const LEDPulse width)
|
||||
{
|
||||
value = (value & ~0x03) | (m5::stl::to_underlying(width) & 0x03);
|
||||
}
|
||||
@@ -247,7 +247,7 @@ bool UnitMAX30102::begin()
|
||||
return false;
|
||||
}
|
||||
|
||||
return (_cfg.start_periodic && (_cfg.mode == Mode::SPO2 || _cfg.mode == Mode::MultiLED))
|
||||
return (_cfg.start_periodic && (_cfg.mode == Mode::SpO2 || _cfg.mode == Mode::HROnly))
|
||||
? startPeriodicMeasurement(_cfg.mode, _cfg.adc_range, _cfg.sampling_rate, _cfg.pulse_width,
|
||||
_cfg.fifo_sampling_average, _cfg.ir_current, _cfg.red_current)
|
||||
: true;
|
||||
@@ -277,9 +277,9 @@ bool UnitMAX30102::start_periodic_measurement()
|
||||
FIFOSampling avg{};
|
||||
bool rollover{};
|
||||
uint8_t almostFull{};
|
||||
SpO2ADCRange range{};
|
||||
ADC range{};
|
||||
Sampling rate{};
|
||||
LEDPulseWidth width{};
|
||||
LEDPulse width{};
|
||||
|
||||
if (readFIFOConfiguration(avg, rollover, almostFull) && readSpO2Configuration(range, rate, width)) {
|
||||
_periodic = writeFIFOConfiguration(avg, true /* rollover always true */, almostFull) &&
|
||||
@@ -295,8 +295,8 @@ bool UnitMAX30102::start_periodic_measurement()
|
||||
return _periodic;
|
||||
}
|
||||
|
||||
bool UnitMAX30102::start_periodic_measurement(const max30102::Mode mode, const SpO2ADCRange range,
|
||||
const max30102::Sampling rate, const max30102::LEDPulseWidth width,
|
||||
bool UnitMAX30102::start_periodic_measurement(const max30102::Mode mode, const max30102::ADC range,
|
||||
const max30102::Sampling rate, const max30102::LEDPulse width,
|
||||
const max30102::FIFOSampling avg, const uint8_t ir_current,
|
||||
const uint8_t red_current)
|
||||
{
|
||||
@@ -380,8 +380,7 @@ bool UnitMAX30102::write_mode_configuration(const max30102::ModeConfiguration& m
|
||||
return writeRegister8(MODE_CONFIGURATION, mc.value);
|
||||
}
|
||||
|
||||
bool UnitMAX30102::readSpO2Configuration(max30102::SpO2ADCRange& range, max30102::Sampling& rate,
|
||||
max30102::LEDPulseWidth& width)
|
||||
bool UnitMAX30102::readSpO2Configuration(max30102::ADC& range, max30102::Sampling& rate, max30102::LEDPulse& width)
|
||||
{
|
||||
SpO2Configuration sc{};
|
||||
if (read_register8(SPO2_CONFIGURATION, sc.value)) {
|
||||
@@ -407,8 +406,8 @@ bool UnitMAX30102::write_spo2_configuration(const SpO2Configuration& sc)
|
||||
return writeRegister8(SPO2_CONFIGURATION, sc.value);
|
||||
}
|
||||
|
||||
bool UnitMAX30102::writeSpO2Configuration(const max30102::SpO2ADCRange range, const max30102::Sampling rate,
|
||||
const max30102::LEDPulseWidth width)
|
||||
bool UnitMAX30102::writeSpO2Configuration(const max30102::ADC range, const max30102::Sampling rate,
|
||||
const max30102::LEDPulse width)
|
||||
{
|
||||
SpO2Configuration sc{};
|
||||
sc.range(range);
|
||||
@@ -417,7 +416,7 @@ bool UnitMAX30102::writeSpO2Configuration(const max30102::SpO2ADCRange range, co
|
||||
return write_spo2_configuration(sc);
|
||||
}
|
||||
|
||||
bool UnitMAX30102::writeSpO2ADCRange(const max30102::SpO2ADCRange range)
|
||||
bool UnitMAX30102::writeSpO2ADCRange(const max30102::ADC range)
|
||||
{
|
||||
SpO2Configuration sc{};
|
||||
if (read_register8(SPO2_CONFIGURATION, sc.value)) {
|
||||
@@ -437,7 +436,7 @@ bool UnitMAX30102::writeSpO2SamplingRate(const max30102::Sampling rate)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool UnitMAX30102::writeSpO2LEDPulseWidth(const max30102::LEDPulseWidth width)
|
||||
bool UnitMAX30102::writeSpO2LEDPulseWidth(const max30102::LEDPulse width)
|
||||
{
|
||||
SpO2Configuration sc{};
|
||||
if (read_register8(SPO2_CONFIGURATION, sc.value)) {
|
||||
@@ -622,7 +621,7 @@ bool UnitMAX30102::read_FIFO()
|
||||
|
||||
#if 1
|
||||
uint32_t dlen = (_mode == Mode::HROnly) ? 3
|
||||
: (_mode == Mode::SPO2) ? 6
|
||||
: (_mode == Mode::SpO2) ? 6
|
||||
: (_mode == Mode::MultiLED) ? 3 * ((_slot[0] != Slot::None) + (_slot[1] != Slot::None))
|
||||
: 0;
|
||||
if (dlen && readCount) {
|
||||
|
||||
+36
-37
@@ -30,26 +30,26 @@ namespace max30102 {
|
||||
enum class Mode : uint8_t {
|
||||
None, //!< None
|
||||
HROnly = 0x02, //!< Heart Rate mode (Red only)
|
||||
SPO2, //!< SpO2 mode (Red and IR)
|
||||
SpO2, //!< SpO2 mode (Red and IR)
|
||||
MultiLED = 0x07, //!< Multi-LED mode (Red and IR)
|
||||
};
|
||||
|
||||
/*!
|
||||
@enum SpO2ADCRange
|
||||
@enum ADC
|
||||
@brief SpO2 ADC Range Control
|
||||
@warning If the ambient environment is very bright or the sensor is exposed to strong light, setting a smaller value
|
||||
may cause the IR/RED to overflow
|
||||
*/
|
||||
enum class SpO2ADCRange : uint8_t {
|
||||
nA2048, //!< LSB size 7.81 Full scale 2048
|
||||
nA4096, //!< LSB size 15.63 Full scale 4096
|
||||
nA8192, //!< LSB size 31.25 Full scale 8192
|
||||
nA16384, //!< LSB size 62.5 Full scale 16384
|
||||
enum class ADC : uint8_t {
|
||||
Range2048nA, //!< LSB size 7.81 Full scale 2048
|
||||
Range4096nA, //!< LSB size 15.63 Full scale 4096
|
||||
Range8192nA, //!< LSB size 31.25 Full scale 8192
|
||||
Range16384nA, //!< LSB size 62.5 Full scale 16384
|
||||
};
|
||||
|
||||
/*!
|
||||
@enum Sampling
|
||||
@brief Sampling rate for pulse
|
||||
@brief Sampling rate for pulse/conversion
|
||||
@details Unit is the number of sample per second
|
||||
*/
|
||||
enum class Sampling : uint8_t {
|
||||
@@ -64,14 +64,14 @@ enum class Sampling : uint8_t {
|
||||
};
|
||||
|
||||
/*!
|
||||
@enum LEDPulseWidth
|
||||
@enum LEDPulse
|
||||
@brief LED pulse width (the IR and RED have the same pulse width)
|
||||
*/
|
||||
enum class LEDPulseWidth : uint8_t {
|
||||
PW69, //!< 68.95 us (ADC 15 bits)
|
||||
PW118, //!< 117.78 us (ADC 16 bits)
|
||||
PW215, //!< 215.44 us (ADC 17 bits)
|
||||
PW411, //!< 410.75 us (ADC 18 bits)
|
||||
enum class LEDPulse : uint8_t {
|
||||
Width69, //!< 68.95 us (ADC 15 bits)
|
||||
Width118, //!< 117.78 us (ADC 16 bits)
|
||||
Width215, //!< 215.44 us (ADC 17 bits)
|
||||
Width411, //!< 410.75 us (ADC 18 bits)
|
||||
};
|
||||
|
||||
/*!
|
||||
@@ -99,9 +99,6 @@ enum class FIFOSampling : uint8_t {
|
||||
// Average32, duplicated
|
||||
};
|
||||
|
||||
struct ModeConfiguration;
|
||||
struct SpO2Configuration;
|
||||
|
||||
constexpr uint8_t MAX_FIFO_DEPTH{32}; //!< @brief FIFO depth
|
||||
|
||||
/*!
|
||||
@@ -176,6 +173,9 @@ constexpr uint8_t READ_REVISION_ID{0xFE};
|
||||
constexpr uint8_t READ_PART_ID{0xFF};
|
||||
|
||||
} // namespace command
|
||||
|
||||
struct ModeConfiguration;
|
||||
struct SpO2Configuration;
|
||||
///@endcond
|
||||
|
||||
} // namespace max30102
|
||||
@@ -200,15 +200,15 @@ public:
|
||||
@warning In MultiLED mode, only the mode setting is performed
|
||||
@warning The other settings are ignored, so you need to set and start them yourself
|
||||
*/
|
||||
max30102::Mode mode{max30102::Mode::SPO2};
|
||||
max30102::Mode mode{max30102::Mode::SpO2};
|
||||
//! Start periodic measurement on begin?
|
||||
bool start_periodic{true};
|
||||
//! ADC range if start on begin
|
||||
max30102::SpO2ADCRange adc_range{max30102::SpO2ADCRange::nA4096};
|
||||
max30102::ADC adc_range{max30102::ADC::Range4096nA};
|
||||
//! Sampling rate if start on begin
|
||||
max30102::Sampling sampling_rate{max30102::Sampling::Rate400};
|
||||
//! LED pulse width if start on begin
|
||||
max30102::LEDPulseWidth pulse_width{max30102::LEDPulseWidth::PW411};
|
||||
max30102::LEDPulse pulse_width{max30102::LEDPulse::Width411};
|
||||
//! LED current for IR if start on begin
|
||||
uint8_t ir_current{0x1F};
|
||||
//! LED current for Red if start on begin (only SpO2 MODE)
|
||||
@@ -307,8 +307,8 @@ public:
|
||||
@return True if successful
|
||||
@warning Note that some combinations of rate and width are invalid. See also datasheet
|
||||
*/
|
||||
inline bool startPeriodicMeasurement(const max30102::Mode mode, const max30102::SpO2ADCRange range,
|
||||
const max30102::Sampling rate, const max30102::LEDPulseWidth width,
|
||||
inline bool startPeriodicMeasurement(const max30102::Mode mode, const max30102::ADC range,
|
||||
const max30102::Sampling rate, const max30102::LEDPulse width,
|
||||
const max30102::FIFOSampling avg, const uint8_t ir_current,
|
||||
const uint8_t red_current)
|
||||
{
|
||||
@@ -390,25 +390,25 @@ public:
|
||||
@param[out] width LED pulse width
|
||||
@return True if successful
|
||||
*/
|
||||
bool readSpO2Configuration(max30102::SpO2ADCRange& range, max30102::Sampling& rate, max30102::LEDPulseWidth& width);
|
||||
bool readSpO2Configuration(max30102::ADC& range, max30102::Sampling& rate, max30102::LEDPulse& width);
|
||||
//! @brief Read the ADC range
|
||||
inline bool readSpO2ADCRange(max30102::SpO2ADCRange& range)
|
||||
inline bool readSpO2ADCRange(max30102::ADC& range)
|
||||
{
|
||||
max30102::Sampling rate{};
|
||||
max30102::LEDPulseWidth width{};
|
||||
max30102::LEDPulse width{};
|
||||
return readSpO2Configuration(range, rate, width);
|
||||
}
|
||||
//! @brief Read the sampling rate
|
||||
inline bool readSpO2SamplingRate(max30102::Sampling& rate)
|
||||
{
|
||||
max30102::SpO2ADCRange range{};
|
||||
max30102::LEDPulseWidth width{};
|
||||
max30102::ADC range{};
|
||||
max30102::LEDPulse width{};
|
||||
return readSpO2Configuration(range, rate, width);
|
||||
}
|
||||
//! @brief Read the LED pulse width
|
||||
inline bool readSpO2LEDPulseWidth(max30102::LEDPulseWidth& width)
|
||||
inline bool readSpO2LEDPulseWidth(max30102::LEDPulse& width)
|
||||
{
|
||||
max30102::SpO2ADCRange range{};
|
||||
max30102::ADC range{};
|
||||
max30102::Sampling rate{};
|
||||
return readSpO2Configuration(range, rate, width);
|
||||
}
|
||||
@@ -420,14 +420,14 @@ public:
|
||||
@return True if successful
|
||||
@warning During periodic detection runs, an error is returned
|
||||
*/
|
||||
bool writeSpO2Configuration(const max30102::SpO2ADCRange range, const max30102::Sampling rate,
|
||||
const max30102::LEDPulseWidth width);
|
||||
bool writeSpO2Configuration(const max30102::ADC range, const max30102::Sampling rate,
|
||||
const max30102::LEDPulse width);
|
||||
//! @brief Write the ADC range
|
||||
bool writeSpO2ADCRange(const max30102::SpO2ADCRange range);
|
||||
bool writeSpO2ADCRange(const max30102::ADC range);
|
||||
//! @brief Write the sampling rate
|
||||
bool writeSpO2SamplingRate(const max30102::Sampling rate);
|
||||
//! @brief Write the LED pulse width
|
||||
bool writeSpO2LEDPulseWidth(const max30102::LEDPulseWidth width);
|
||||
bool writeSpO2LEDPulseWidth(const max30102::LEDPulse width);
|
||||
///@}
|
||||
|
||||
///@note Note that the target LEDs differ depending on the mode
|
||||
@@ -581,10 +581,9 @@ protected:
|
||||
bool read_register8(const uint8_t reg, uint8_t& v);
|
||||
|
||||
bool start_periodic_measurement();
|
||||
bool start_periodic_measurement(const max30102::Mode mode, const max30102::SpO2ADCRange range,
|
||||
const max30102::Sampling rate, const max30102::LEDPulseWidth width,
|
||||
const max30102::FIFOSampling avg, const uint8_t ir_current,
|
||||
const uint8_t red_current);
|
||||
bool start_periodic_measurement(const max30102::Mode mode, const max30102::ADC range, const max30102::Sampling rate,
|
||||
const max30102::LEDPulse width, const max30102::FIFOSampling avg,
|
||||
const uint8_t ir_current, const uint8_t red_current);
|
||||
bool stop_periodic_measurement();
|
||||
|
||||
bool write_mode_configuration(const max30102::ModeConfiguration& sc);
|
||||
|
||||
@@ -97,23 +97,23 @@ constexpr uint32_t adc_resolution_bits_table[] = {
|
||||
0x03FFFF, // 18 bits
|
||||
};
|
||||
|
||||
bool is_allowed_settings(const Mode mode, const Sampling rate, const LEDPulseWidth pw)
|
||||
bool is_allowed_settings(const Mode mode, const Sampling rate, const LEDPulse pw)
|
||||
{
|
||||
return allowed_setting_table[m5::stl::to_underlying(mode)][m5::stl::to_underlying(rate)] &
|
||||
(1U << m5::stl::to_underlying(pw));
|
||||
}
|
||||
|
||||
constexpr Mode mode_table[] = {
|
||||
Mode::SPO2,
|
||||
Mode::SpO2,
|
||||
Mode::HROnly,
|
||||
Mode::MultiLED,
|
||||
};
|
||||
|
||||
constexpr SpO2ADCRange range_table[] = {
|
||||
SpO2ADCRange::nA2048,
|
||||
SpO2ADCRange::nA4096,
|
||||
SpO2ADCRange::nA8192,
|
||||
SpO2ADCRange::nA16384,
|
||||
constexpr ADC range_table[] = {
|
||||
ADC::Range2048nA,
|
||||
ADC::Range4096nA,
|
||||
ADC::Range8192nA,
|
||||
ADC::Range16384nA,
|
||||
};
|
||||
|
||||
constexpr Sampling sr_table[] = {
|
||||
@@ -121,11 +121,11 @@ constexpr Sampling sr_table[] = {
|
||||
Sampling::Rate800, Sampling::Rate1000, Sampling::Rate1600, Sampling::Rate3200,
|
||||
};
|
||||
|
||||
constexpr LEDPulseWidth pw_table[] = {
|
||||
LEDPulseWidth::PW69,
|
||||
LEDPulseWidth::PW118,
|
||||
LEDPulseWidth::PW215,
|
||||
LEDPulseWidth::PW411,
|
||||
constexpr LEDPulse pw_table[] = {
|
||||
LEDPulse::Width69,
|
||||
LEDPulse::Width118,
|
||||
LEDPulse::Width215,
|
||||
LEDPulse::Width411,
|
||||
};
|
||||
|
||||
constexpr std::array<Slot, 2> slots_table[] = {
|
||||
@@ -156,9 +156,9 @@ void test_spo2_config(UnitMAX30102* unit, const Mode mode)
|
||||
auto s = m5::utility::formatString("Mode:%u Rate:%u Width:%u", mode, sr, pw);
|
||||
SCOPED_TRACE(s);
|
||||
|
||||
SpO2ADCRange range{};
|
||||
ADC range{};
|
||||
Sampling rate{};
|
||||
LEDPulseWidth width{};
|
||||
LEDPulse width{};
|
||||
|
||||
if (is_allowed_settings(mode, sr, pw)) {
|
||||
EXPECT_TRUE(unit->writeSpO2Configuration(rg, sr, pw));
|
||||
@@ -172,9 +172,9 @@ void test_spo2_config(UnitMAX30102* unit, const Mode mode)
|
||||
|
||||
EXPECT_FALSE(unit->writeSpO2Configuration(rg, sr, pw));
|
||||
|
||||
SpO2ADCRange range2{};
|
||||
ADC range2{};
|
||||
Sampling rate2{};
|
||||
LEDPulseWidth width2{};
|
||||
LEDPulse width2{};
|
||||
EXPECT_TRUE(unit->readSpO2Configuration(range2, rate2, width2));
|
||||
EXPECT_EQ(range2, range);
|
||||
EXPECT_EQ(rate2, rate2);
|
||||
@@ -191,13 +191,13 @@ void test_spo2_config_each(UnitMAX30102* unit, const Mode mode)
|
||||
SCOPED_TRACE(s);
|
||||
|
||||
EXPECT_TRUE(unit->writeMode(mode));
|
||||
EXPECT_TRUE(unit->writeSpO2Configuration(SpO2ADCRange::nA2048, Sampling::Rate50, LEDPulseWidth::PW69));
|
||||
EXPECT_TRUE(unit->writeSpO2Configuration(ADC::Range2048nA, Sampling::Rate50, LEDPulse::Width69));
|
||||
|
||||
for (auto& rg : range_table) {
|
||||
auto s = m5::utility::formatString("Range:%u", rg);
|
||||
SCOPED_TRACE(s);
|
||||
|
||||
SpO2ADCRange range{};
|
||||
ADC range{};
|
||||
EXPECT_TRUE(unit->writeSpO2ADCRange(rg));
|
||||
EXPECT_TRUE(unit->readSpO2ADCRange(range));
|
||||
EXPECT_EQ(range, rg);
|
||||
@@ -206,7 +206,7 @@ void test_spo2_config_each(UnitMAX30102* unit, const Mode mode)
|
||||
auto s = m5::utility::formatString("Rate:%u", sr);
|
||||
SCOPED_TRACE(s);
|
||||
|
||||
if (is_allowed_settings(mode, sr, LEDPulseWidth::PW69)) {
|
||||
if (is_allowed_settings(mode, sr, LEDPulse::Width69)) {
|
||||
Sampling rate{};
|
||||
|
||||
EXPECT_TRUE(unit->writeSpO2SamplingRate(sr));
|
||||
@@ -217,7 +217,7 @@ void test_spo2_config_each(UnitMAX30102* unit, const Mode mode)
|
||||
for (auto&& pw : pw_table) {
|
||||
auto s = m5::utility::formatString("Width:%u", pw);
|
||||
SCOPED_TRACE(s);
|
||||
LEDPulseWidth width{};
|
||||
LEDPulse width{};
|
||||
|
||||
if (is_allowed_settings(mode, sr, pw)) {
|
||||
EXPECT_TRUE(unit->writeSpO2LEDPulseWidth(pw));
|
||||
@@ -225,7 +225,7 @@ void test_spo2_config_each(UnitMAX30102* unit, const Mode mode)
|
||||
EXPECT_TRUE(unit->readSpO2LEDPulseWidth(width));
|
||||
EXPECT_EQ(width, pw);
|
||||
} else {
|
||||
LEDPulseWidth width2{};
|
||||
LEDPulse width2{};
|
||||
EXPECT_TRUE(unit->readSpO2LEDPulseWidth(width));
|
||||
|
||||
EXPECT_FALSE(unit->writeSpO2LEDPulseWidth(pw));
|
||||
@@ -234,7 +234,7 @@ void test_spo2_config_each(UnitMAX30102* unit, const Mode mode)
|
||||
EXPECT_EQ(width2, width);
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(unit->writeSpO2LEDPulseWidth(LEDPulseWidth::PW69));
|
||||
EXPECT_TRUE(unit->writeSpO2LEDPulseWidth(LEDPulse::Width69));
|
||||
} else {
|
||||
Sampling rate{}, rate2{};
|
||||
EXPECT_TRUE(unit->readSpO2SamplingRate(rate));
|
||||
@@ -245,7 +245,7 @@ void test_spo2_config_each(UnitMAX30102* unit, const Mode mode)
|
||||
EXPECT_EQ(rate2, rate);
|
||||
}
|
||||
}
|
||||
EXPECT_TRUE(unit->writeSpO2Configuration(rg, Sampling::Rate50, LEDPulseWidth::PW69));
|
||||
EXPECT_TRUE(unit->writeSpO2Configuration(rg, Sampling::Rate50, LEDPulse::Width69));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -291,62 +291,62 @@ elapsed_time_t test_periodic(U* unit, const uint32_t times, const uint32_t measu
|
||||
void test_periodic_spo2(UnitMAX30102* unit)
|
||||
{
|
||||
// Pairwise
|
||||
constexpr std::tuple<SpO2ADCRange, Sampling, LEDPulseWidth, FIFOSampling> cond_table[] = {
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate50, LEDPulseWidth::PW118, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate100, LEDPulseWidth::PW215, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate100, LEDPulseWidth::PW411, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate200, LEDPulseWidth::PW215, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate1000, LEDPulseWidth::PW69, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate800, LEDPulseWidth::PW69, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate400, LEDPulseWidth::PW118, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate200, LEDPulseWidth::PW69, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate800, LEDPulseWidth::PW215, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate1600, LEDPulseWidth::PW69, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate200, LEDPulseWidth::PW411, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate50, LEDPulseWidth::PW411, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate800, LEDPulseWidth::PW118, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate1600, LEDPulseWidth::PW69, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate1000, LEDPulseWidth::PW118, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate50, LEDPulseWidth::PW215, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate400, LEDPulseWidth::PW69, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate800, LEDPulseWidth::PW215, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate100, LEDPulseWidth::PW411, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate1000, LEDPulseWidth::PW118, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate200, LEDPulseWidth::PW69, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate1000, LEDPulseWidth::PW69, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate400, LEDPulseWidth::PW215, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate800, LEDPulseWidth::PW215, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate100, LEDPulseWidth::PW118, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate50, LEDPulseWidth::PW69, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate50, LEDPulseWidth::PW411, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate1600, LEDPulseWidth::PW69, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate400, LEDPulseWidth::PW411, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate1600, LEDPulseWidth::PW69, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate1000, LEDPulseWidth::PW69, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate100, LEDPulseWidth::PW69, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate800, LEDPulseWidth::PW69, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate1000, LEDPulseWidth::PW69, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate200, LEDPulseWidth::PW411, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate1600, LEDPulseWidth::PW69, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate100, LEDPulseWidth::PW69, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate1600, LEDPulseWidth::PW69, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate50, LEDPulseWidth::PW69, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate400, LEDPulseWidth::PW69, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate400, LEDPulseWidth::PW69, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate200, LEDPulseWidth::PW118, FIFOSampling::Average4},
|
||||
constexpr std::tuple<ADC, Sampling, LEDPulse, FIFOSampling> cond_table[] = {
|
||||
{ADC::Range2048nA, Sampling::Rate50, LEDPulse::Width118, FIFOSampling::Average1},
|
||||
{ADC::Range8192nA, Sampling::Rate100, LEDPulse::Width215, FIFOSampling::Average16},
|
||||
{ADC::Range4096nA, Sampling::Rate100, LEDPulse::Width411, FIFOSampling::Average4},
|
||||
{ADC::Range4096nA, Sampling::Rate200, LEDPulse::Width215, FIFOSampling::Average8},
|
||||
{ADC::Range8192nA, Sampling::Rate1000, LEDPulse::Width69, FIFOSampling::Average8},
|
||||
{ADC::Range4096nA, Sampling::Rate800, LEDPulse::Width69, FIFOSampling::Average1},
|
||||
{ADC::Range16384nA, Sampling::Rate400, LEDPulse::Width118, FIFOSampling::Average2},
|
||||
{ADC::Range2048nA, Sampling::Rate200, LEDPulse::Width69, FIFOSampling::Average16},
|
||||
{ADC::Range16384nA, Sampling::Rate800, LEDPulse::Width215, FIFOSampling::Average32},
|
||||
{ADC::Range16384nA, Sampling::Rate1600, LEDPulse::Width69, FIFOSampling::Average1},
|
||||
{ADC::Range8192nA, Sampling::Rate200, LEDPulse::Width411, FIFOSampling::Average1},
|
||||
{ADC::Range2048nA, Sampling::Rate50, LEDPulse::Width411, FIFOSampling::Average2},
|
||||
{ADC::Range8192nA, Sampling::Rate800, LEDPulse::Width118, FIFOSampling::Average4},
|
||||
{ADC::Range2048nA, Sampling::Rate1600, LEDPulse::Width69, FIFOSampling::Average4},
|
||||
{ADC::Range4096nA, Sampling::Rate1000, LEDPulse::Width118, FIFOSampling::Average32},
|
||||
{ADC::Range4096nA, Sampling::Rate50, LEDPulse::Width215, FIFOSampling::Average4},
|
||||
{ADC::Range8192nA, Sampling::Rate400, LEDPulse::Width69, FIFOSampling::Average32},
|
||||
{ADC::Range2048nA, Sampling::Rate800, LEDPulse::Width215, FIFOSampling::Average8},
|
||||
{ADC::Range16384nA, Sampling::Rate100, LEDPulse::Width411, FIFOSampling::Average1},
|
||||
{ADC::Range16384nA, Sampling::Rate1000, LEDPulse::Width118, FIFOSampling::Average16},
|
||||
{ADC::Range8192nA, Sampling::Rate200, LEDPulse::Width69, FIFOSampling::Average2},
|
||||
{ADC::Range16384nA, Sampling::Rate1000, LEDPulse::Width69, FIFOSampling::Average4},
|
||||
{ADC::Range4096nA, Sampling::Rate400, LEDPulse::Width215, FIFOSampling::Average1},
|
||||
{ADC::Range4096nA, Sampling::Rate800, LEDPulse::Width215, FIFOSampling::Average2},
|
||||
{ADC::Range2048nA, Sampling::Rate100, LEDPulse::Width118, FIFOSampling::Average8},
|
||||
{ADC::Range16384nA, Sampling::Rate50, LEDPulse::Width69, FIFOSampling::Average32},
|
||||
{ADC::Range8192nA, Sampling::Rate50, LEDPulse::Width411, FIFOSampling::Average16},
|
||||
{ADC::Range8192nA, Sampling::Rate1600, LEDPulse::Width69, FIFOSampling::Average8},
|
||||
{ADC::Range2048nA, Sampling::Rate400, LEDPulse::Width411, FIFOSampling::Average8},
|
||||
{ADC::Range4096nA, Sampling::Rate1600, LEDPulse::Width69, FIFOSampling::Average2},
|
||||
{ADC::Range2048nA, Sampling::Rate1000, LEDPulse::Width69, FIFOSampling::Average1},
|
||||
{ADC::Range2048nA, Sampling::Rate100, LEDPulse::Width69, FIFOSampling::Average32},
|
||||
{ADC::Range4096nA, Sampling::Rate800, LEDPulse::Width69, FIFOSampling::Average16},
|
||||
{ADC::Range2048nA, Sampling::Rate1000, LEDPulse::Width69, FIFOSampling::Average2},
|
||||
{ADC::Range16384nA, Sampling::Rate200, LEDPulse::Width411, FIFOSampling::Average32},
|
||||
{ADC::Range2048nA, Sampling::Rate1600, LEDPulse::Width69, FIFOSampling::Average16},
|
||||
{ADC::Range2048nA, Sampling::Rate100, LEDPulse::Width69, FIFOSampling::Average2},
|
||||
{ADC::Range2048nA, Sampling::Rate1600, LEDPulse::Width69, FIFOSampling::Average32},
|
||||
{ADC::Range16384nA, Sampling::Rate50, LEDPulse::Width69, FIFOSampling::Average8},
|
||||
{ADC::Range2048nA, Sampling::Rate400, LEDPulse::Width69, FIFOSampling::Average4},
|
||||
{ADC::Range2048nA, Sampling::Rate400, LEDPulse::Width69, FIFOSampling::Average16},
|
||||
{ADC::Range2048nA, Sampling::Rate200, LEDPulse::Width118, FIFOSampling::Average4},
|
||||
};
|
||||
|
||||
for (auto&& cond : cond_table) {
|
||||
SpO2ADCRange range{};
|
||||
ADC range{};
|
||||
Sampling rate{};
|
||||
LEDPulseWidth width{};
|
||||
LEDPulse width{};
|
||||
FIFOSampling avg{};
|
||||
std::tie(range, rate, width, avg) = cond;
|
||||
|
||||
auto s = m5::utility::formatString("SPO2 RNG:%u SR:%u WID:%u AVG:%u", range, rate, width, avg);
|
||||
SCOPED_TRACE(s);
|
||||
|
||||
EXPECT_TRUE(unit->startPeriodicMeasurement(Mode::SPO2, range, rate, width, avg, 0x1f, 0x1f));
|
||||
EXPECT_TRUE(unit->startPeriodicMeasurement(Mode::SpO2, range, rate, width, avg, 0x1f, 0x1f));
|
||||
auto it = unit->interval() ? unit->interval() : 1;
|
||||
|
||||
auto elapsed = test_periodic(unit, STORED_SIZE, it);
|
||||
@@ -403,61 +403,61 @@ void test_periodic_spo2(UnitMAX30102* unit)
|
||||
void test_periodic_hr(UnitMAX30102* unit)
|
||||
{
|
||||
// Pairwise
|
||||
constexpr std::tuple<SpO2ADCRange, Sampling, LEDPulseWidth, FIFOSampling> cond_table[] = {
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate3200, LEDPulseWidth::PW69, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate50, LEDPulseWidth::PW118, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate100, LEDPulseWidth::PW215, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate100, LEDPulseWidth::PW411, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate200, LEDPulseWidth::PW215, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate1000, LEDPulseWidth::PW118, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate1000, LEDPulseWidth::PW69, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate400, LEDPulseWidth::PW118, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate200, LEDPulseWidth::PW69, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate800, LEDPulseWidth::PW411, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate1000, LEDPulseWidth::PW215, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate1600, LEDPulseWidth::PW215, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate200, LEDPulseWidth::PW411, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate50, LEDPulseWidth::PW411, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate400, LEDPulseWidth::PW215, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate200, LEDPulseWidth::PW118, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate1600, LEDPulseWidth::PW118, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate3200, LEDPulseWidth::PW69, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate50, LEDPulseWidth::PW215, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate800, LEDPulseWidth::PW118, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate800, LEDPulseWidth::PW69, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate800, LEDPulseWidth::PW69, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate3200, LEDPulseWidth::PW69, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate3200, LEDPulseWidth::PW69, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate100, LEDPulseWidth::PW118, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate1000, LEDPulseWidth::PW411, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate200, LEDPulseWidth::PW215, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate1000, LEDPulseWidth::PW69, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate1600, LEDPulseWidth::PW118, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate800, LEDPulseWidth::PW215, FIFOSampling::Average1},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate400, LEDPulseWidth::PW69, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA4096, Sampling::Rate400, LEDPulseWidth::PW411, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate100, LEDPulseWidth::PW69, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA16384, Sampling::Rate50, LEDPulseWidth::PW69, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate50, LEDPulseWidth::PW69, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA8192, Sampling::Rate1600, LEDPulseWidth::PW69, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate1600, LEDPulseWidth::PW69, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate800, LEDPulseWidth::PW69, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate1000, LEDPulseWidth::PW69, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate100, LEDPulseWidth::PW69, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate1600, LEDPulseWidth::PW69, FIFOSampling::Average32},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate3200, LEDPulseWidth::PW69, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate400, LEDPulseWidth::PW69, FIFOSampling::Average4},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate100, LEDPulseWidth::PW69, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate3200, LEDPulseWidth::PW69, FIFOSampling::Average2},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate50, LEDPulseWidth::PW69, FIFOSampling::Average8},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate400, LEDPulseWidth::PW69, FIFOSampling::Average16},
|
||||
{SpO2ADCRange::nA2048, Sampling::Rate200, LEDPulseWidth::PW69, FIFOSampling::Average4},
|
||||
constexpr std::tuple<ADC, Sampling, LEDPulse, FIFOSampling> cond_table[] = {
|
||||
{ADC::Range8192nA, Sampling::Rate3200, LEDPulse::Width69, FIFOSampling::Average4},
|
||||
{ADC::Range2048nA, Sampling::Rate50, LEDPulse::Width118, FIFOSampling::Average1},
|
||||
{ADC::Range8192nA, Sampling::Rate100, LEDPulse::Width215, FIFOSampling::Average16},
|
||||
{ADC::Range4096nA, Sampling::Rate100, LEDPulse::Width411, FIFOSampling::Average4},
|
||||
{ADC::Range4096nA, Sampling::Rate200, LEDPulse::Width215, FIFOSampling::Average8},
|
||||
{ADC::Range8192nA, Sampling::Rate1000, LEDPulse::Width118, FIFOSampling::Average8},
|
||||
{ADC::Range4096nA, Sampling::Rate1000, LEDPulse::Width69, FIFOSampling::Average1},
|
||||
{ADC::Range16384nA, Sampling::Rate400, LEDPulse::Width118, FIFOSampling::Average2},
|
||||
{ADC::Range2048nA, Sampling::Rate200, LEDPulse::Width69, FIFOSampling::Average16},
|
||||
{ADC::Range8192nA, Sampling::Rate800, LEDPulse::Width411, FIFOSampling::Average32},
|
||||
{ADC::Range16384nA, Sampling::Rate1000, LEDPulse::Width215, FIFOSampling::Average32},
|
||||
{ADC::Range2048nA, Sampling::Rate1600, LEDPulse::Width215, FIFOSampling::Average1},
|
||||
{ADC::Range16384nA, Sampling::Rate200, LEDPulse::Width411, FIFOSampling::Average1},
|
||||
{ADC::Range2048nA, Sampling::Rate50, LEDPulse::Width411, FIFOSampling::Average2},
|
||||
{ADC::Range8192nA, Sampling::Rate400, LEDPulse::Width215, FIFOSampling::Average1},
|
||||
{ADC::Range8192nA, Sampling::Rate200, LEDPulse::Width118, FIFOSampling::Average32},
|
||||
{ADC::Range4096nA, Sampling::Rate1600, LEDPulse::Width118, FIFOSampling::Average4},
|
||||
{ADC::Range4096nA, Sampling::Rate3200, LEDPulse::Width69, FIFOSampling::Average32},
|
||||
{ADC::Range4096nA, Sampling::Rate50, LEDPulse::Width215, FIFOSampling::Average4},
|
||||
{ADC::Range2048nA, Sampling::Rate800, LEDPulse::Width118, FIFOSampling::Average4},
|
||||
{ADC::Range4096nA, Sampling::Rate800, LEDPulse::Width69, FIFOSampling::Average2},
|
||||
{ADC::Range16384nA, Sampling::Rate800, LEDPulse::Width69, FIFOSampling::Average8},
|
||||
{ADC::Range16384nA, Sampling::Rate3200, LEDPulse::Width69, FIFOSampling::Average1},
|
||||
{ADC::Range2048nA, Sampling::Rate3200, LEDPulse::Width69, FIFOSampling::Average8},
|
||||
{ADC::Range16384nA, Sampling::Rate100, LEDPulse::Width118, FIFOSampling::Average1},
|
||||
{ADC::Range4096nA, Sampling::Rate1000, LEDPulse::Width411, FIFOSampling::Average16},
|
||||
{ADC::Range8192nA, Sampling::Rate200, LEDPulse::Width215, FIFOSampling::Average2},
|
||||
{ADC::Range16384nA, Sampling::Rate1000, LEDPulse::Width69, FIFOSampling::Average4},
|
||||
{ADC::Range16384nA, Sampling::Rate1600, LEDPulse::Width118, FIFOSampling::Average16},
|
||||
{ADC::Range2048nA, Sampling::Rate800, LEDPulse::Width215, FIFOSampling::Average1},
|
||||
{ADC::Range2048nA, Sampling::Rate400, LEDPulse::Width69, FIFOSampling::Average32},
|
||||
{ADC::Range4096nA, Sampling::Rate400, LEDPulse::Width411, FIFOSampling::Average8},
|
||||
{ADC::Range2048nA, Sampling::Rate100, LEDPulse::Width69, FIFOSampling::Average32},
|
||||
{ADC::Range16384nA, Sampling::Rate50, LEDPulse::Width69, FIFOSampling::Average32},
|
||||
{ADC::Range8192nA, Sampling::Rate50, LEDPulse::Width69, FIFOSampling::Average16},
|
||||
{ADC::Range8192nA, Sampling::Rate1600, LEDPulse::Width69, FIFOSampling::Average8},
|
||||
{ADC::Range2048nA, Sampling::Rate1600, LEDPulse::Width69, FIFOSampling::Average2},
|
||||
{ADC::Range2048nA, Sampling::Rate800, LEDPulse::Width69, FIFOSampling::Average16},
|
||||
{ADC::Range2048nA, Sampling::Rate1000, LEDPulse::Width69, FIFOSampling::Average2},
|
||||
{ADC::Range2048nA, Sampling::Rate100, LEDPulse::Width69, FIFOSampling::Average2},
|
||||
{ADC::Range2048nA, Sampling::Rate1600, LEDPulse::Width69, FIFOSampling::Average32},
|
||||
{ADC::Range2048nA, Sampling::Rate3200, LEDPulse::Width69, FIFOSampling::Average16},
|
||||
{ADC::Range2048nA, Sampling::Rate400, LEDPulse::Width69, FIFOSampling::Average4},
|
||||
{ADC::Range2048nA, Sampling::Rate100, LEDPulse::Width69, FIFOSampling::Average8},
|
||||
{ADC::Range2048nA, Sampling::Rate3200, LEDPulse::Width69, FIFOSampling::Average2},
|
||||
{ADC::Range2048nA, Sampling::Rate50, LEDPulse::Width69, FIFOSampling::Average8},
|
||||
{ADC::Range2048nA, Sampling::Rate400, LEDPulse::Width69, FIFOSampling::Average16},
|
||||
{ADC::Range2048nA, Sampling::Rate200, LEDPulse::Width69, FIFOSampling::Average4},
|
||||
};
|
||||
|
||||
for (auto&& cond : cond_table) {
|
||||
SpO2ADCRange range{};
|
||||
ADC range{};
|
||||
Sampling rate{};
|
||||
LEDPulseWidth width{};
|
||||
LEDPulse width{};
|
||||
FIFOSampling avg{};
|
||||
std::tie(range, rate, width, avg) = cond;
|
||||
|
||||
@@ -638,8 +638,8 @@ TEST_P(TestMAX30102, SpO2Cfg)
|
||||
EXPECT_TRUE(unit->stopPeriodicMeasurement());
|
||||
EXPECT_FALSE(unit->inPeriodic());
|
||||
|
||||
test_spo2_config(unit.get(), Mode::SPO2);
|
||||
test_spo2_config_each(unit.get(), Mode::SPO2);
|
||||
test_spo2_config(unit.get(), Mode::SpO2);
|
||||
test_spo2_config_each(unit.get(), Mode::SpO2);
|
||||
|
||||
test_spo2_config(unit.get(), Mode::HROnly);
|
||||
test_spo2_config_each(unit.get(), Mode::HROnly);
|
||||
@@ -719,7 +719,7 @@ TEST_P(TestMAX30102, MultiLEDMode)
|
||||
|
||||
// All invalid (slots can be set for MutiLED mode only).
|
||||
constexpr Mode m_table[] = {
|
||||
Mode::SPO2,
|
||||
Mode::SpO2,
|
||||
Mode::HROnly,
|
||||
};
|
||||
for (auto&& mode : m_table) {
|
||||
@@ -814,7 +814,7 @@ TEST_P(TestMAX30102, Reset)
|
||||
|
||||
//
|
||||
EXPECT_TRUE(unit->writeMode(Mode::MultiLED));
|
||||
EXPECT_TRUE(unit->writeSpO2Configuration(SpO2ADCRange::nA16384, Sampling::Rate400, LEDPulseWidth::PW411));
|
||||
EXPECT_TRUE(unit->writeSpO2Configuration(ADC::Range16384nA, Sampling::Rate400, LEDPulse::Width411));
|
||||
EXPECT_TRUE(unit->writeLEDCurrent(0, 255));
|
||||
EXPECT_TRUE(unit->writeLEDCurrent(1, 255));
|
||||
EXPECT_TRUE(unit->writeMultiLEDModeControl(Slot::IR, Slot::Red));
|
||||
@@ -835,13 +835,13 @@ TEST_P(TestMAX30102, Reset)
|
||||
EXPECT_TRUE(unit->readMode(mode));
|
||||
EXPECT_EQ(mode, Mode::None);
|
||||
|
||||
SpO2ADCRange range{};
|
||||
ADC range{};
|
||||
Sampling rate{};
|
||||
LEDPulseWidth width{};
|
||||
LEDPulse width{};
|
||||
EXPECT_TRUE(unit->readSpO2Configuration(range, rate, width));
|
||||
EXPECT_EQ(range, SpO2ADCRange::nA2048);
|
||||
EXPECT_EQ(range, ADC::Range2048nA);
|
||||
EXPECT_EQ(rate, Sampling::Rate50);
|
||||
EXPECT_EQ(width, LEDPulseWidth::PW69);
|
||||
EXPECT_EQ(width, LEDPulse::Width69);
|
||||
|
||||
uint8_t led1{}, led2{};
|
||||
EXPECT_TRUE(unit->readLEDCurrent(led1, 0));
|
||||
@@ -880,8 +880,8 @@ TEST_P(TestMAX30102, Periodic)
|
||||
EXPECT_FALSE(unit->inPeriodic());
|
||||
|
||||
// 100 sps
|
||||
EXPECT_TRUE(unit->startPeriodicMeasurement(Mode::SPO2, SpO2ADCRange::nA4096, Sampling::Rate100,
|
||||
LEDPulseWidth::PW411, FIFOSampling::Average1, 0x1F, 0x1F));
|
||||
EXPECT_TRUE(unit->startPeriodicMeasurement(Mode::SpO2, ADC::Range4096nA, Sampling::Rate100, LEDPulse::Width411,
|
||||
FIFOSampling::Average1, 0x1F, 0x1F));
|
||||
|
||||
// Wait first updated
|
||||
auto start_at = m5::utility::millis();
|
||||
@@ -977,7 +977,7 @@ TEST_P(TestMAX30102, Periodic_MultiLED)
|
||||
EXPECT_FALSE(unit->inPeriodic());
|
||||
|
||||
EXPECT_TRUE(unit->writeMode(Mode::MultiLED));
|
||||
EXPECT_TRUE(unit->writeSpO2Configuration(SpO2ADCRange::nA4096, Sampling::Rate400, LEDPulseWidth::PW411));
|
||||
EXPECT_TRUE(unit->writeSpO2Configuration(ADC::Range4096nA, Sampling::Rate400, LEDPulse::Width411));
|
||||
EXPECT_TRUE(unit->writeFIFOConfiguration(FIFOSampling::Average4, true, 15));
|
||||
EXPECT_TRUE(unit->writeLEDCurrent(0, 0x40));
|
||||
EXPECT_TRUE(unit->writeLEDCurrent(1, 0x1F));
|
||||
|
||||
Reference in New Issue
Block a user