Skip to content

File ns_max86150_driver.h

FileList > includes-api > ns_max86150_driver.h

Go to the source code of this file

Register driver for MAX86150 ECG/PPG IC. More...

  • #include "ns_i2c.h"
  • #include <stddef.h>
  • #include <stdint.h>

Classes

Type Name
struct max86150_context_t

Public Types

Type Name
enum max86150_slot_type
typedef int(* pfnI2cRead
typedef int(* pfnI2cWrite
typedef int(* pfnI2cWriteRead

Public Static Attributes

Type Name
const uint8_t MAX86150_FIFO_DEPTH = = 32

Public Functions

Type Name
void max86150_clear_fifo (const max86150_context_t * ctx)
Clear FIFO.
void max86150_disable_slots (const max86150_context_t * ctx)
Disables all FIFO slots data sources.
uint8_t max86150_get_fifo_overflow_counter (const max86150_context_t * ctx)
Get FIFO overflow counter.
uint8_t max86150_get_fifo_rd_pointer (const max86150_context_t * ctx)
Get FIFO write pointer.
uint8_t max86150_get_fifo_wr_pointer (const max86150_context_t * ctx)
Get FIFO write pointer.
uint8_t max86150_get_int1 (const max86150_context_t * ctx)
Get interrupt 1 register A_FULL[7] PPG_RDY[6] ALC_OVF[5] PROX_INT[4] PWR_RDY[0].
uint8_t max86150_get_int2 (const max86150_context_t * ctx)
Get interrupt 2 register VDD_OOR[7] ECG_RDY[2].
uint8_t max86150_get_part_id (const max86150_context_t * ctx)
Get part ID. Should be 0x1E for this part.
uint8_t max86150_get_register (const max86150_context_t * ctx, uint8_t reg, uint8_t mask)
Read register field.
void max86150_powerup (const max86150_context_t * ctx)
Takes chip out ofpower-save mode.
uint32_t max86150_read_fifo_samples (const max86150_context_t * ctx, uint32_t * buffer, max86150_slot_type * slots, uint8_t numSlots)
Reads all data available in FIFO.
void max86150_reset (const max86150_context_t * ctx)
This performs full power-on-reset. All registers are reset.
void max86150_set_alc_ovf_int_flag (const max86150_context_t * ctx, uint8_t enable)
Set ambient light cancellation (ALC) overflow interrupt enable flag.
void max86150_set_alm_full_int_flag (const max86150_context_t * ctx, uint8_t enable)
Set FIFO almost full interrupt enable flag.
void max86150_set_almost_full_flag_options (const max86150_context_t * ctx, uint8_t options)
Set FIFO almost full flag options.
void max86150_set_almost_full_int_options (const max86150_context_t * ctx, uint8_t options)
Set FIFO almost full interrupt options.
void max86150_set_almost_full_rollover (const max86150_context_t * ctx, uint8_t enable)
Set whether FIFO rolls over when full.
void max86150_set_almost_full_threshold (const max86150_context_t * ctx, uint8_t space)
Set FIFO almost full value (i.e. how many samples till interrupt is triggered)
void max86150_set_data_rdy_int_flag (const max86150_context_t * ctx, uint8_t enable)
void max86150_set_ecg_ia_gain (const max86150_context_t * ctx, uint8_t value)
Set ECG instrument amplifier gain.
void max86150_set_ecg_pga_gain (const max86150_context_t * ctx, uint8_t value)
Set ECG PGA gain. Gain = 2**value (V/V)
void max86150_set_ecg_rdy_int_flag (const max86150_context_t * ctx, uint8_t enable)
Set new ECG FIFO data ready interrupt enable flag.
void max86150_set_ecg_sample_rate (const max86150_context_t * ctx, uint8_t value)
void max86150_set_fifo_enable (const max86150_context_t * ctx, uint8_t enable)
Set FIFO enable state.
uint8_t max86150_set_fifo_overflow_counter (const max86150_context_t * ctx, uint8_t value)
Set FIFO overflow counter.
void max86150_set_fifo_rd_pointer (const max86150_context_t * ctx, uint8_t value)
Set FIFO read pointer.
void max86150_set_fifo_slot (const max86150_context_t * ctx, uint8_t slot, max86150_slot_type type)
Configure FIFO for given slot (element)
void max86150_set_fifo_slots (const max86150_context_t * ctx, max86150_slot_type * slots)
Configure all FIFO slots.
void max86150_set_fifo_wr_pointer (const max86150_context_t * ctx, uint8_t value)
Set FIFO write pointer.
void max86150_set_led_current_range (const max86150_context_t * ctx, uint8_t led, uint8_t value)
Set LED current range.
void max86150_set_led_pulse_amplitude (const max86150_context_t * ctx, uint8_t led, uint8_t value)
void max86150_set_ppg_adc_range (const max86150_context_t * ctx, uint8_t range)
Set PPG ADC range.
void max86150_set_ppg_pulse_width (const max86150_context_t * ctx, uint8_t value)
Set PPG pulse width.
void max86150_set_ppg_sample_average (const max86150_context_t * ctx, uint8_t value)
Set PPG sample averaging. Will average and decimate adjacent samples.
void max86150_set_ppg_sample_rate (const max86150_context_t * ctx, uint8_t value)
Set PPG sample rate and pulse rate. NOTE: If rate cant be acheived, then highest available will be selected.
void max86150_set_prox_int_flag (const max86150_context_t * ctx, uint8_t enable)
Set proximity interrupt enable flag.
void max86150_set_proximity_threshold (const max86150_context_t * ctx, uint8_t value)
Sets the IR ADC count that triggers the beginning of the PPG mode.
int max86150_set_register (const max86150_context_t * ctx, uint8_t reg, uint8_t value, uint8_t mask)
Set register field.
void max86150_set_vdd_oor_int_flag (const max86150_context_t * ctx, uint8_t enable)
Set VDD Out-of-Range indicator interrupt flag.
void max86150_shutdown (const max86150_context_t * ctx)
Put chip into power-save mode. Registers retain their values.

Detailed Description

Author:

Adam Page (adam.page@ambiq.com)

Version:

0.1

Date:

2022-11-02

Copyright:

Copyright (c) 2022

Public Types Documentation

enum max86150_slot_type

enum max86150_slot_type {
    Max86150SlotOff = 0,
    Max86150SlotPpgLed1 = 1,
    Max86150SlotPpgLed2 = 2,
    Max86150SlotPilotLed1 = 5,
    Max86150SlotPilotLed2 = 6,
    Max86150SlotEcg = 9
};

typedef pfnI2cRead

typedef int(* pfnI2cRead) (const void *buf, uint32_t num_bytes, uint16_t addr);

typedef pfnI2cWrite

typedef int(* pfnI2cWrite) (const void *buf, uint32_t num_bytes, uint16_t addr);

typedef pfnI2cWriteRead

typedef int(* pfnI2cWriteRead) (uint16_t addr, const void *write_buf, size_t num_write, void *read_buf, size_t num_read);

Public Static Attributes Documentation

variable MAX86150_FIFO_DEPTH

const uint8_t MAX86150_FIFO_DEPTH;

Public Functions Documentation

function max86150_clear_fifo

Clear FIFO.

void max86150_clear_fifo (
    const max86150_context_t * ctx
) 

Parameters:

  • ctx Device context

function max86150_disable_slots

Disables all FIFO slots data sources.

void max86150_disable_slots (
    const max86150_context_t * ctx
) 

Parameters:

  • ctx Device context

function max86150_get_fifo_overflow_counter

Get FIFO overflow counter.

uint8_t max86150_get_fifo_overflow_counter (
    const max86150_context_t * ctx
) 

Parameters:

  • ctx Device context

Returns:

FIFO overflow counter

function max86150_get_fifo_rd_pointer

Get FIFO write pointer.

uint8_t max86150_get_fifo_rd_pointer (
    const max86150_context_t * ctx
) 

Parameters:

  • ctx Device context

Returns:

FIFO write pointer

function max86150_get_fifo_wr_pointer

Get FIFO write pointer.

uint8_t max86150_get_fifo_wr_pointer (
    const max86150_context_t * ctx
) 

Parameters:

  • ctx Device context

Returns:

write pointer

function max86150_get_int1

Get interrupt 1 register A_FULL[7] PPG_RDY[6] ALC_OVF[5] PROX_INT[4] PWR_RDY[0].

uint8_t max86150_get_int1 (
    const max86150_context_t * ctx
) 

Parameters:

  • ctx Device context

Returns:

register value

function max86150_get_int2

Get interrupt 2 register VDD_OOR[7] ECG_RDY[2].

uint8_t max86150_get_int2 (
    const max86150_context_t * ctx
) 

Parameters:

  • ctx Device context

Returns:

register value

function max86150_get_part_id

Get part ID. Should be 0x1E for this part.

uint8_t max86150_get_part_id (
    const max86150_context_t * ctx
) 

Parameters:

  • ctx Device context

Returns:

return

function max86150_get_register

Read register field.

uint8_t max86150_get_register (
    const max86150_context_t * ctx,
    uint8_t reg,
    uint8_t mask
) 

Returns:

Register value

function max86150_powerup

Takes chip out ofpower-save mode.

void max86150_powerup (
    const max86150_context_t * ctx
) 

Parameters:

  • ctx Device context

function max86150_read_fifo_samples

Reads all data available in FIFO.

uint32_t max86150_read_fifo_samples (
    const max86150_context_t * ctx,
    uint32_t * buffer,
    max86150_slot_type * slots,
    uint8_t numSlots
) 

Parameters:

  • ctx Device context
  • buffer Buffer to store FIFO data. Should be at least 32*3*elementsPerSample (max 384 bytes)
  • elementsPerSample Number of elements per sample. Depends on values written to FD1-FD4

Returns:

Number of samples read

function max86150_reset

This performs full power-on-reset. All registers are reset.

void max86150_reset (
    const max86150_context_t * ctx
) 

Parameters:

  • ctx Device context

function max86150_set_alc_ovf_int_flag

Set ambient light cancellation (ALC) overflow interrupt enable flag.

void max86150_set_alc_ovf_int_flag (
    const max86150_context_t * ctx,
    uint8_t enable
) 

Parameters:

  • ctx Device context

function max86150_set_alm_full_int_flag

Set FIFO almost full interrupt enable flag.

void max86150_set_alm_full_int_flag (
    const max86150_context_t * ctx,
    uint8_t enable
) 

Parameters:

  • ctx Device context

function max86150_set_almost_full_flag_options

Set FIFO almost full flag options.

void max86150_set_almost_full_flag_options (
    const max86150_context_t * ctx,
    uint8_t options
) 

Parameters:

  • ctx Device context
  • options 1-bit: 0: Assert on a_full condition, clear by status reg read, and re-assert on subsequent samples 1: Assert on a_full condition, clear by status reg read, and not re-assert on subsequent samples

function max86150_set_almost_full_int_options

Set FIFO almost full interrupt options.

void max86150_set_almost_full_int_options (
    const max86150_context_t * ctx,
    uint8_t options
) 

Parameters:

  • ctx Device context
  • options 1-bit: 0: A_FULL interrupt does not get cleared by FIFO_DATA register read. It gets cleared by status register read. 1: A_FULL interrupt gets cleared by FIFO_DATA register read or status register read.

function max86150_set_almost_full_rollover

Set whether FIFO rolls over when full.

void max86150_set_almost_full_rollover (
    const max86150_context_t * ctx,
    uint8_t enable
) 

Parameters:

  • ctx Device context
  • enable 1-bit: 0: No rollover - FIFO stop on full 1: Rollover - FIFO auto rolls over on full

function max86150_set_almost_full_threshold

Set FIFO almost full value (i.e. how many samples till interrupt is triggered)

void max86150_set_almost_full_threshold (
    const max86150_context_t * ctx,
    uint8_t space
) 

Parameters:

  • ctx Device context
  • space Remaining FIFO space before intr trigger

function max86150_set_data_rdy_int_flag

void max86150_set_data_rdy_int_flag (
    const max86150_context_t * ctx,
    uint8_t enable
) 

function max86150_set_ecg_ia_gain

Set ECG instrument amplifier gain.

void max86150_set_ecg_ia_gain (
    const max86150_context_t * ctx,
    uint8_t value
) 

Parameters:

  • ctx Device context
  • value Gain table: 0: 5, 1: 9.5, 2: 20, 3: 50 (V/V)

function max86150_set_ecg_pga_gain

Set ECG PGA gain. Gain = 2**value (V/V)

void max86150_set_ecg_pga_gain (
    const max86150_context_t * ctx,
    uint8_t value
) 

Parameters:

  • ctx Device context
  • value 2-bit

function max86150_set_ecg_rdy_int_flag

Set new ECG FIFO data ready interrupt enable flag.

void max86150_set_ecg_rdy_int_flag (
    const max86150_context_t * ctx,
    uint8_t enable
) 

Parameters:

  • ctx Device context

function max86150_set_ecg_sample_rate

void max86150_set_ecg_sample_rate (
    const max86150_context_t * ctx,
    uint8_t value
) 

Parameters:

  • ctx Device context
  • value 3-bit Sample Rate Table (Hz) VALUE FS FBW_70 FBW_90 0 1600 420 232 1 800 210 116 2 400 105 58 3 200 52 29 4 3200 840 464 5 1600 420 232 6 800 210 116 7 400 105 58

function max86150_set_fifo_enable

Set FIFO enable state.

void max86150_set_fifo_enable (
    const max86150_context_t * ctx,
    uint8_t enable
) 

Parameters:

  • ctx Device context
  • enable Enable/disable FIFO. Clears on enable

function max86150_set_fifo_overflow_counter

Set FIFO overflow counter.

uint8_t max86150_set_fifo_overflow_counter (
    const max86150_context_t * ctx,
    uint8_t value
) 

Parameters:

  • ctx Device context

Returns:

FIFO overflow counter

function max86150_set_fifo_rd_pointer

Set FIFO read pointer.

void max86150_set_fifo_rd_pointer (
    const max86150_context_t * ctx,
    uint8_t value
) 

Parameters:

  • ctx Device context

function max86150_set_fifo_slot

Configure FIFO for given slot (element)

void max86150_set_fifo_slot (
    const max86150_context_t * ctx,
    uint8_t slot,
    max86150_slot_type type
) 

Parameters:

  • ctx Device context
  • slot Element 0-based index corresponding to FD1, FD2, FD3, FD4
  • type Data source to feed

function max86150_set_fifo_slots

Configure all FIFO slots.

void max86150_set_fifo_slots (
    const max86150_context_t * ctx,
    max86150_slot_type * slots
) 

Parameters:

  • ctx Device context
  • slot0 Element (FD1) data source
  • slot1 Element (FD2) data source
  • slot2 Element (FD3) data source
  • slot3 Element (FD4) data source

function max86150_set_fifo_wr_pointer

Set FIFO write pointer.

void max86150_set_fifo_wr_pointer (
    const max86150_context_t * ctx,
    uint8_t value
) 

Parameters:

  • ctx Device context
  • value Write pointer

function max86150_set_led_current_range

Set LED current range.

void max86150_set_led_current_range (
    const max86150_context_t * ctx,
    uint8_t led,
    uint8_t value
) 

Parameters:

  • ctx Device context
  • led 0: LED1 (IR), 1: LED2 (RED)
  • value 2-bit | 0: 50, 1: 100 (mA)

function max86150_set_led_pulse_amplitude

void max86150_set_led_pulse_amplitude (
    const max86150_context_t * ctx,
    uint8_t led,
    uint8_t value
) 

Parameters:

  • ctx Device context
  • led 0: LED1 (IR), 1: LED2 (RED), 2: LEDP (proximity)
  • value 7-bit | Pulse amplitude = 0.2*value*(LEDn_RANGE+1) (mA)

function max86150_set_ppg_adc_range

Set PPG ADC range.

void max86150_set_ppg_adc_range (
    const max86150_context_t * ctx,
    uint8_t range
) 

Parameters:

  • ctx Device context
  • value 2-bit | Full scale = 2**(14+value) nA, LSB = 7.8125 * (2 ** value)

function max86150_set_ppg_pulse_width

Set PPG pulse width.

void max86150_set_ppg_pulse_width (
    const max86150_context_t * ctx,
    uint8_t value
) 

Parameters:

  • ctx Device context
  • value 2-bit | 0: 50 1: 100 2: 200 3: 400 (us)

function max86150_set_ppg_sample_average

Set PPG sample averaging. Will average and decimate adjacent samples.

void max86150_set_ppg_sample_average (
    const max86150_context_t * ctx,
    uint8_t value
) 

Parameters:

  • ctx Device context
  • value avg = min(2**value, 32)

function max86150_set_ppg_sample_rate

Set PPG sample rate and pulse rate. NOTE: If rate cant be acheived, then highest available will be selected.

void max86150_set_ppg_sample_rate (
    const max86150_context_t * ctx,
    uint8_t value
) 

Parameters:

  • ctx Device context
  • value 4-bit | Samples/sec: [10, 20, 50, 84, 100, 200, 400, 800, 1000, 1600, 3200, 10, 20, 50, 84, 100] Pulses/sec: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]

function max86150_set_prox_int_flag

Set proximity interrupt enable flag.

void max86150_set_prox_int_flag (
    const max86150_context_t * ctx,
    uint8_t enable
) 

Parameters:

  • ctx Device context

function max86150_set_proximity_threshold

Sets the IR ADC count that triggers the beginning of the PPG mode.

void max86150_set_proximity_threshold (
    const max86150_context_t * ctx,
    uint8_t value
) 

Parameters:

  • ctx Device context

function max86150_set_register

Set register field.

int max86150_set_register (
    const max86150_context_t * ctx,
    uint8_t reg,
    uint8_t value,
    uint8_t mask
) 

Returns:

0 if successful

function max86150_set_vdd_oor_int_flag

Set VDD Out-of-Range indicator interrupt flag.

void max86150_set_vdd_oor_int_flag (
    const max86150_context_t * ctx,
    uint8_t enable
) 

Parameters:

  • ctx Device context

function max86150_shutdown

Put chip into power-save mode. Registers retain their values.

void max86150_shutdown (
    const max86150_context_t * ctx
) 

Parameters:

  • ctx Device context

The documentation for this class was generated from the following file neuralSPOT/neuralspot/ns-i2c/includes-api/ns_max86150_driver.h