48 MAX30001G(uint8_t csPin,
int intPin1 = -1,
int intPin2 = -1);
89 bool update(
bool reportRaw =
false);
107 void enableAFE(
bool ECG,
bool BIOZ,
bool RtoR);
130 bool threeleads =
true);
157 uint32_t frequency = 40000,
158 uint32_t current = 8000,
160 bool leadbias =
true,
161 bool leadsoffdetect =
false,
162 bool fourleads =
false
188 uint8_t ecg_speed = 1,
189 uint8_t ecg_gain = 2,
190 bool ecg_threeleads =
true,
191 uint8_t bioz_speed = 0,
192 uint8_t bioz_gain = 1,
193 uint8_t bioz_dlpf = 1,
194 uint8_t bioz_dhpf = 0,
195 uint32_t bioz_frequency = 8000,
196 uint32_t bioz_current = 8000,
197 float bioz_phase = 0.0f,
198 bool leadbias =
true,
199 bool leadsoffdetect =
false,
200 bool bioz_fourleads =
false
248 uint32_t frequency = 40000,
249 uint32_t current = 8000,
251 uint32_t resistance = 5000,
252 uint8_t modulation = 0,
253 uint8_t modulation_frequency = 3
262 uint32_t frequency = 40000,
float phase = 0.0f
273 void setupBIOZScan(uint8_t avg,
bool fast,
bool fourleads,
bool fullRange);
292 void scanBIOZ(uint8_t avg = 2,
bool fast =
false,
bool fourleads =
false,
bool fullRange =
false);
319 void scanBIOZ(
const BIOZScanConfig& config,
bool reuseCurrents =
false);
535 bool setInterrupt1(
bool ecg,
bool bioz,
bool rtor,
bool leadon,
bool leadoff,
bool bioz_fourwire =
false) {
536 return setInterrupt(
MAX30001_EN_INT1, ecg, bioz, rtor, leadon, leadoff, bioz_fourwire);
549 bool setInterrupt2(
bool ecg,
bool bioz,
bool rtor,
bool leadon,
bool leadoff,
bool bioz_fourwire =
false) {
550 return setInterrupt(
MAX30001_EN_INT2, ecg, bioz, rtor, leadon, leadoff, bioz_fourwire);
860 void setRtoR(
bool enable, uint8_t ptsf, uint8_t pavg, uint8_t gain, uint8_t wndw, uint8_t hoff, uint8_t ravg, uint8_t rhsf);
899 bool enableECGCalSignal,
900 bool enableBIOZCalSignal,
981 bool useHighResistance,
982 bool enableModulation,
1005 void printEN_INT1(
void) { printEN_INT(
en_int1); }
1008 void printEN_INT2(
void) { printEN_INT(
en_int2); }
1011 void printMNGR_INT(
void);
1014 void printMNGR_DYN(
void);
1017 void printCNFG_GEN(
void);
1020 void printCNFG_CAL(
void);
1023 void printCNFG_EMUX(
void);
1026 void printCNFG_ECG(
void);
1029 void printCNFG_BMUX(
void);
1032 void printCNFG_BIOZ(
void);
1035 void printCNFG_BIOZ_LC(
void);
1038 void printCNFG_RTOR1(
void);
1041 void printCNFG_RTOR2(
void);
1050 void updateGlobalECG_samplingRate(
void);
1053 void updateGlobalBIOZ_samplingRate(
void);
1056 void updateGlobalCAL_fcal(
void);
1059 void updateGlobalECG_latency(
void);
1062 void updateGlobalBIOZ_frequency(
void);
1065 void updateGlobalBIOZ_test_impedance(
void);
1068 void updateGlobalECG_lpf(
void);
1071 void updateGlobalBIOZ_dlpf(
void);
1074 void updateGlobalRCAL_freq(
void);
1077 void refreshTimingGlobals(
void);
1099 bool setInterrupt(uint8_t interrupt,
bool ecg,
bool bioz,
bool rtor,
bool leadon,
bool leadoff,
bool bioz_fourwire);
1105 void latchStatusFlags(uint32_t statusWord);
1111 uint32_t readStatusAndLatchFlags(
void);
1121 void writeRegister(uint8_t address, uint32_t data);
1128 uint32_t readRegister24(uint8_t address);
1135 uint32_t readRegister(uint8_t address) {
return readRegister24(address); }
1142 uint8_t readRegisterByte(uint8_t address);
1149 uint8_t readRegister8(uint8_t address) {
return readRegisterByte(address); };
1157 bool verifyWrite(uint8_t address, uint32_t expectedValue);
1165 bool verifRegister(uint8_t address, uint32_t expectedValue) {
return verifyWrite(address, expectedValue); }
1182 int32_t closestCurrent(int32_t current);
1191 float impedanceCosineModel(
float theta,
float magnitude,
float phase);
1192 float impedanceTriangularModel(
float theta,
float magnitude,
float phase);
1201 ImpedanceModel fitImpedanceCosine(
const float* phases,
const float* impedances,
int num_points);
1202 ImpedanceModel fitImpedanceTriangular(
const float* phases,
const float* impedances,
int num_points);
1204 uint8_t biozScanPhaseCountForFreq(uint8_t freq_idx)
const;
1205 uint8_t biozScanPhaseSelectorForStep(uint8_t freq_idx, uint8_t phase_step_idx)
const;
1206 uint8_t biozScanSelectAHPF(uint8_t freq_idx)
const;
1207 float biozScanRobustMeanFromBuffer(uint8_t outlier_min_samples,
float outlier_sigma,
bool& hasSamples);
1212 enum SetupProfile : uint8_t {
1218 PROFILE_BIOZ_IMP_CAL,
1219 PROFILE_ECG_AND_BIOZ,
1223 enum BiozScanState : uint8_t {
1226 BIOZ_SCAN_CONFIG_FREQ,
1227 BIOZ_SCAN_CONFIG_CURRENT,
1228 BIOZ_SCAN_CONFIG_PHASE,
1229 BIOZ_SCAN_BEGIN_POINT,
1230 BIOZ_SCAN_DISCARD_POINT,
1231 BIOZ_SCAN_COLLECT_POINT,
1232 BIOZ_SCAN_PROCESS_POINT,
1233 BIOZ_SCAN_NEXT_PHASE,
1234 BIOZ_SCAN_EVALUATE_ATTEMPT,
1235 BIOZ_SCAN_FINALIZE_FREQ,
1246 static void onAFE_IRQ1(
void);
1250 static void onAFE_IRQ2(
void);
1252 SetupProfile _profile;
1260 bool _drainECGOnUpdate;
1261 bool _drainBIOZOnUpdate;
1262 bool _readRTOROnUpdate;
1264 bool _applyLeadSettingsOnStart;
1265 bool _leadBiasEnable;
1266 uint8_t _leadBiasResistance;
1267 bool _leadOffEnable;
1269 uint8_t _leadOffElectrodeImpedance;
1275 bool _scanCurrentProfileValid;
1277 uint8_t _scanProfileFreqStart;
1278 uint8_t _scanProfileFreqEnd;
1279 bool _scanProfileFast;
1282 bool _scanReuseCurrents;
1283 bool _scanInProgress;
1284 bool _scanCompleted;
1286 BiozScanState _BIOZScanState;
1287 uint8_t _scanFreqIndex;
1288 uint8_t _scanPhaseIndex;
1289 uint8_t _scanAttempt;
1290 uint8_t _scanNumPhaseMeasurements;
1291 uint8_t _scanDiscardSamplesSeen;
1292 uint8_t _scanDiscardSamplesTarget;
1293 uint8_t _scanCollectSamplesTarget;
1294 bool _scanCurrentChangedForAttempt;
1295 uint32_t _scanFifoTimeoutMs;
1296 uint32_t _scanWaitDeadlineMs;
1298 float _scanThresholdMin;
1299 float _scanThresholdMax;
1300 float _scanAdcTarget;
1303 bool _scanSawInvalidOrRange;
1304 bool _scanAnyAboveTarget;
1305 bool _scanAnyInTarget;
1306 float _scanMaxAbsRaw;
MAX30001G device driver class used by Arduino sketches.
Definition: max30001g.h:34
void setDefaultRtoR(void)
Apply default RTOR settings and enable RTOR detection.
Definition: max30001g_configure_rtor.cpp:9
void setECGgain(uint8_t gain)
Set ECG PGA gain.
Definition: max30001g_configure_ecg.cpp:113
void setDefaultECGandBIOZTestSignal(void)
Apply default voltage calibration settings to ECG and BIOZ.
Definition: max30001g_calibration.cpp:75
void setFIFOInterruptThreshold(uint8_t ecg, uint8_t bioz)
Set FIFO threshold that triggers ECG/BIOZ FIFO interrupts.
Definition: max30001g_interrupt.cpp:555
void setupBIOZImpedanceCalibration(uint8_t speed=0, uint8_t gain=1, uint8_t ahpf=1, uint8_t dlpf=1, uint8_t dhpf=0, uint32_t frequency=40000, uint32_t current=8000, float phase=0.0f, uint32_t resistance=5000, uint8_t modulation=0, uint8_t modulation_frequency=3)
Configure internal BIOZ impedance calibration/test path.
Definition: max30001g.cpp:1005
void clearLatchedStatusFlags(void)
Clear software-latched interrupt/fault flags.
Definition: max30001g_interrupt.cpp:90
void setBIOZfilter(uint8_t ahpf, uint8_t lpf, uint8_t hpf)
Configure BIOZ analog and digital filters.
Definition: max30001g_configure_bioz.cpp:548
void stepBIOZScan(void)
Advance state-machine style BIOZ scan flow by one step.
Definition: max30001g.cpp:1976
void setDefaultBIOZTestSignal(void)
Apply default BIOZ voltage calibration signal settings.
Definition: max30001g_calibration.cpp:56
void setDefaultECGTestSignal(void)
Apply default ECG voltage calibration signal settings.
Definition: max30001g_calibration.cpp:38
void begin(void)
Definition: max30001g.cpp:315
void setECGfilter(uint8_t lpf, uint8_t hpf)
Configure ECG digital filters.
Definition: max30001g_configure_ecg.cpp:52
void setRtoR(bool enable, uint8_t ptsf, uint8_t pavg, uint8_t gain, uint8_t wndw, uint8_t hoff, uint8_t ravg, uint8_t rhsf)
Configure RTOR algorithm parameters.
Definition: max30001g_configure_rtor.cpp:61
void readInfo(void)
Definition: max30001g_regs.cpp:116
void setupBIOZSignalCalibration(uint8_t speed=0, uint8_t gain=1)
Configure BIOZ voltage calibration signal path.
Definition: max30001g.cpp:914
void setBIOZModulationFrequencyByFrequency(uint32_t frequency_hz)
Set BIOZ modulation frequency by target Hz.
Definition: max30001g_configure_bioz.cpp:248
void setLeadsOffDetection(bool enable, bool bioz_4, uint8_t electrode_impedance)
Configure lead-off detection behavior.
Definition: max30001g_configure_leads.cpp:45
void setECGSamplingRate(uint8_t ECG)
Set ECG sample-rate selector.
Definition: max30001g_configure_ecg.cpp:8
void readStatusRegisters(void)
Definition: max30001g_regs.cpp:126
void setBIOZmag(uint32_t current_nA)
Set BIOZ current magnitude.
Definition: max30001g_configure_bioz.cpp:312
void setECGNormalRecovery(void)
Definition: max30001g_configure_ecg.cpp:243
void setupECGSignalCalibration(uint8_t speed=1, uint8_t gain=2)
Configure ECG voltage calibration signal path.
Definition: max30001g.cpp:626
void setupBIOZScan(uint8_t avg, bool fast, bool fourleads, bool fullRange)
Configure lifecycle-driven BIOZ scan flow.
Definition: max30001g.cpp:1639
float readBIOZ(bool reportRaw)
Read one BIOZ FIFO sample.
Definition: max30001g_readdata.cpp:145
void handleECGFifoInterrupt(bool reportRaw=false)
Convenience callback handler: read ECG FIFO.
Definition: max30001g_interrupt.cpp:338
void clearInterruptAggregateCallback(void)
Clear aggregate interrupt callback.
Definition: max30001g_interrupt.cpp:310
void serviceAllInterrupts(void)
Read STATUS and update interrupt-driven global flags.
Definition: max30001g_interrupt.cpp:178
void setupBIOZExternalImpedanceCalibration(uint32_t frequency=40000, float phase=0.0f)
Configure external impedance calibration path.
Definition: max30001g.cpp:1254
void enableAFE(bool ECG, bool BIOZ, bool RtoR)
Enable or disable ECG, BIOZ, and R-to-R engines.
Definition: max30001g.cpp:459
bool setInterrupt1(bool ecg, bool bioz, bool rtor, bool leadon, bool leadoff, bool bioz_fourwire=false)
Configure interrupt line INT1 event enables.
Definition: max30001g.h:535
bool setInterruptAggregateCallback(InterruptCallback cb, void *context=nullptr, uint32_t statusMask=0x00FFFFFFUL)
Register aggregate callback invoked for status bits matching a mask.
Definition: max30001g_interrupt.cpp:282
void handleRtoRInterrupt(void)
Convenience callback handler: read RTOR data.
Definition: max30001g_interrupt.cpp:346
void stopBIOZScan(void)
Stop state-machine style BIOZ scan flow.
Definition: max30001g.cpp:1792
float readECG(bool reportRaw)
Read one ECG FIFO sample.
Definition: max30001g_readdata.cpp:118
void printConfig(void)
Definition: max30001g_regs.cpp:70
bool setInterruptEventCallback(InterruptEvent event, InterruptCallback cb, void *context=nullptr)
Register callback for one specific interrupt event.
Definition: max30001g_interrupt.cpp:266
void setLeadsOnDetection(bool enable)
Enable/disable ultra-low-power lead-on detection.
Definition: max30001g_configure_leads.cpp:7
MAX30001G(uint8_t csPin, int intPin1=-1, int intPin2=-1)
Construct a MAX30001G device instance.
Definition: max30001g.cpp:185
bool setInterrupt2(bool ecg, bool bioz, bool rtor, bool leadon, bool leadoff, bool bioz_fourwire=false)
Configure interrupt line INT2 event enables.
Definition: max30001g.h:549
void setBIOZModulationFrequencybyIndex(uint8_t frequency_selector)
Set BIOZ modulation frequency by FCGEN index.
Definition: max30001g_configure_bioz.cpp:281
void setBIOZgain(uint8_t gain, bool lowNoise)
Set BIOZ gain and front-end power/noise mode.
Definition: max30001g_configure_bioz.cpp:215
void setTestSignal(bool enableECGCalSignal, bool enableBIOZCalSignal, bool unipolar, bool cal_vmag, uint8_t freq, uint8_t dutycycle)
Configure calibration voltage source and waveform settings.
Definition: max30001g_calibration.cpp:96
void setupECG(uint8_t speed=1, uint8_t gain=2, bool threeleads=true)
Configure a ready-to-use ECG profile.
Definition: max30001g.cpp:492
bool servicePendingInterrupts(void)
Service interrupts only when ISR software flags indicate pending work.
Definition: max30001g_interrupt.cpp:154
void handleBIOZFifoInterrupt(bool reportRaw=false)
Convenience callback handler: read BIOZ FIFO.
Definition: max30001g_interrupt.cpp:342
void end(void)
Definition: max30001g.cpp:435
void stopECGManualRecovery(void)
Definition: max30001g_configure_ecg.cpp:268
void readAllRegisters(void)
Definition: max30001g_regs.cpp:10
void setBIOZSamplingRate(uint8_t speed_select)
Set BIOZ sample-rate selector.
Definition: max30001g_configure_bioz.cpp:190
void setDefaultNoTestSignal(void)
Disable ECG/BIOZ voltage calibration source routing.
Definition: max30001g_calibration.cpp:24
void setDefaultBIOZTestImpedance(void)
Apply default internal BIOZ test impedance settings.
Definition: max30001g_calibration.cpp:313
void setECGAutoRecovery(int threshold_voltage)
Enable automatic ECG fast-recovery mode.
Definition: max30001g_configure_ecg.cpp:206
void setDefaultNoBIOZTestImpedance(void)
Disable internal BIOZ test impedance path.
Definition: max30001g_calibration.cpp:302
void setBIOZmodulation(uint8_t mode)
Set BIOZ current-generator modulation mode.
Definition: max30001g_configure_bioz.cpp:614
void readECG_FIFO(bool reportRaw)
Burst-read ECG FIFO samples.
Definition: max30001g_readdata.cpp:181
void printStatus(void)
Definition: max30001g_regs.cpp:138
void printAllRegisters(void)
Definition: max30001g_regs.cpp:75
void setBIOZPhaseOffsetbyPhase(float phase_deg)
Set BIOZ demodulation phase by degree request.
Definition: max30001g_configure_bioz.cpp:493
void startECGManualRecovery(void)
Definition: max30001g_configure_ecg.cpp:259
void readAndClearFaults(void)
Read and clear fault-related status conditions.
Definition: max30001g_interrupt.cpp:258
void setDefaultInterruptClearing(void)
Configure default interrupt-clear, clears on RR read, fast recovery read, and sample read.
Definition: max30001g_interrupt.cpp:512
void synch(void)
Definition: max30001g_system.cpp:34
void restoreConfig(void)
Definition: max30001g_regs.cpp:45
void readRTOR(void)
Read RTOR result and update RR-interval globals/buffer.
Definition: max30001g_readdata.cpp:88
void setBIOZPhaseOffsetbyIndex(uint8_t selector)
Set BIOZ demodulation phase by selector.
Definition: max30001g_configure_bioz.cpp:518
void clearAllInterruptCallbacks(void)
Clear all registered interrupt callbacks for this instance.
Definition: max30001g_interrupt.cpp:323
void setECGLeadPolarity(bool inverted, bool open)
Configure ECG polarity and input switch state.
Definition: max30001g_configure_ecg.cpp:158
void setLeadsBias(bool enable, uint8_t resistance)
Configure lead-bias mode and resistance.
Definition: max30001g_configure_leads.cpp:360
void setFMSTR(uint8_t fmstr)
Set master clock selector and recompute timing globals.
Definition: max30001g_system.cpp:47
void setupBIOZ(uint8_t speed=0, uint8_t gain=1, uint8_t ahpf=1, uint8_t dlpf=1, uint8_t dhpf=0, uint32_t frequency=40000, uint32_t current=8000, float phase=0.0f, bool leadbias=true, bool leadsoffdetect=false, bool fourleads=false)
Configure a ready-to-use BIOZ profile.
Definition: max30001g.cpp:723
void readBIOZ_FIFO(bool reportRaw)
Burst-read BIOZ FIFO samples.
Definition: max30001g_readdata.cpp:248
void setDefaultNoRtoR(void)
Apply default RTOR settings with RTOR disabled.
Definition: max30001g_configure_rtor.cpp:36
void setupECGandBIOZ(uint8_t ecg_speed=1, uint8_t ecg_gain=2, bool ecg_threeleads=true, uint8_t bioz_speed=0, uint8_t bioz_gain=1, uint8_t bioz_dlpf=1, uint8_t bioz_dhpf=0, uint32_t bioz_frequency=8000, uint32_t bioz_current=8000, float bioz_phase=0.0f, bool leadbias=true, bool leadsoffdetect=false, bool bioz_fourleads=false)
Configure simultaneous ECG and BIOZ operation.
Definition: max30001g.cpp:1280
void startBIOZScan(void)
Start state-machine style BIOZ scan flow.
Definition: max30001g.cpp:1778
void stop(void)
Stop active measurement engines.
Definition: max30001g.cpp:368
void(* InterruptCallback)(MAX30001G *device, uint32_t status, void *context)
Definition: max30001g.h:66
void FIFOReset(void)
Reset ECG and BIOZ FIFOs. Does not affect data already transferred to RingBuffer.
Definition: max30001g_readdata.cpp:68
void printInfo(void)
Definition: max30001g_regs.cpp:267
void saveConfig(void)
Definition: max30001g_regs.cpp:28
HealthCheckResult healthCheck(void)
Run basic health checks and return a summary result.
Definition: max30001g_system.cpp:18
void setBIOZTestImpedance(bool enable, bool useHighResistance, bool enableModulation, uint8_t rnomValue, uint8_t rmodValue, uint8_t modFreq)
Configure BIOZ test impedance and optional modulation.
Definition: max30001g_calibration.cpp:324
bool updateRaw(void)
Alias for raw-code update cycle.
Definition: max30001g.h:95
void start(void)
Start measurement engines according to the most recent setup profile.
Definition: max30001g.cpp:333
void swReset(void)
Definition: max30001g_system.cpp:41
bool update(bool reportRaw=false)
Service pending IRQ work and drain enabled FIFOs.
Definition: max30001g.cpp:385
void printBiozDiagnosticRegisters(const char *context=nullptr)
Definition: max30001g_regs.cpp:96
void clearInterruptEventCallback(InterruptEvent event)
Clear callback for one interrupt event.
Definition: max30001g_interrupt.cpp:294
void setBIOZCurrentMonitor(bool enable)
Enable/disable BIOZ current monitor.
Definition: max30001g_configure_bioz.cpp:648
InterruptEvent
Definition: max30001g.h:50
@ IRQ_BIOZ_UNDER
Definition: max30001g.h:58
@ IRQ_ECG_OVF
Definition: max30001g.h:52
@ IRQ_BIOZ_CGMON
Definition: max30001g.h:59
@ IRQ_ECG_LEADOFF
Definition: max30001g.h:54
@ IRQ_ECG_FAST
Definition: max30001g.h:53
@ IRQ_ECG_FIFO
Definition: max30001g.h:51
@ IRQ_RTOR
Definition: max30001g.h:61
@ IRQ_PLL_UNLOCK
Definition: max30001g.h:62
@ IRQ_BIOZ_OVF
Definition: max30001g.h:56
@ IRQ_EVENT_COUNT
Definition: max30001g.h:63
@ IRQ_BIOZ_OVER
Definition: max30001g.h:57
@ IRQ_BIOZ_FIFO
Definition: max30001g.h:55
@ IRQ_LEADS_ON
Definition: max30001g.h:60
#define MAX30001_BIOZ_NUM_FREQUENCIES
Definition: max30001g_defs.h:11
#define MAX30001_EN_INT2
Definition: max30001g_defs.h:20
#define MAX30001_BIOZ_NUM_PHASES
Definition: max30001g_defs.h:12
#define MAX30001_EN_INT1
Definition: max30001g_defs.h:19
max30001_en_int_reg_t en_int2
Definition: max30001g_globals.cpp:82
float fmstr
Definition: max30001g_globals.cpp:55
max30001_status_reg_t status
Definition: max30001g_globals.cpp:80
max30001_en_int_reg_t en_int1
Definition: max30001g_globals.cpp:81
BIOZScanConfig configuration structure fields:
Definition: max30001g_typedefs.h:77
ConfigSnapshot structure for storing/restoring MAX30001G register configurations.
Definition: max30001g_typedefs.h:125
HealthCheckResult structure for storing health check results.
Definition: max30001g_typedefs.h:39
ImpedanceModel structure for storing impedance measurement results.
Definition: max30001g_typedefs.h:16
EN_INT (0x02) and (0x03) page 43 we can attach two interrupt lines to functions of the MAX30001 multi...
Definition: max30001g_regs_typedefs.h:59