Maxim Integrated / Mbed OS MAXREFDES220_HR_SPO2_MONITOR

Dependencies:   max32630fthr USBDevice

Fork of MAXREFDES220_HEART_RATE_MONITOR by Maxim Integrated

Finger Heart Rate Monitor and SpO2 Monitor

The MAXREFDES220 Smart Sensor FeatherWing board is a integrated solution for providing finger-based heart rate measurements and SpO2 (blood oxygen saturation). This evaluation board interfaces to the host computer using the I2C interface. Heart rate outpu is available in beats per minute (BPM) and SpO2 is reported in percentages.; the PPG (photoplethysmography) raw data is also available. The board has an MAX30101 chip which is a low power heart rate monitor with adjustable sample rates and adjustable LED currents. The low cost MAX32664 microcontroller is pre-flashed with C code for finger-based pulse rate and SpO2 monitoring. Bootloader software is included to allow for future algorithms or updates to the algorithm from Maxim Integrated.

Ordering information will be available soon.

Note: SpO2 values are not calibrated. Calibration should be performed using the final end product.

Warning

The MAXREFDES220 source code listed is dated and only compatible with the 1.2.8a.msbl. The latest sample host source code is available on the MAX32664 website.

MAXREFDES220 FeatherWing Pinout Connections

/media/uploads/phonemacro/maxrefdes220_pinouts_heart_rate_monitor.jpg

Committer:
Shaun Kelsey
Date:
Thu May 24 14:54:28 2018 -0700
Revision:
5:e458409e913f
Parent:
4:998fb975b0d7
Child:
7:3e2a5545f1d8
Bootloader feature additions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Shaun Kelsey 0:da5f5b56060a 1 /***************************************************************************
Shaun Kelsey 0:da5f5b56060a 2 * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
Shaun Kelsey 0:da5f5b56060a 3 *
Shaun Kelsey 0:da5f5b56060a 4 * Permission is hereby granted, free of charge, to any person obtaining a
Shaun Kelsey 0:da5f5b56060a 5 * copy of this software and associated documentation files (the "Software"),
Shaun Kelsey 0:da5f5b56060a 6 * to deal in the Software without restriction, including without limitation
Shaun Kelsey 0:da5f5b56060a 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Shaun Kelsey 0:da5f5b56060a 8 * and/or sell copies of the Software, and to permit persons to whom the
Shaun Kelsey 0:da5f5b56060a 9 * Software is furnished to do so, subject to the following conditions:
Shaun Kelsey 0:da5f5b56060a 10 *
Shaun Kelsey 0:da5f5b56060a 11 * The above copyright notice and this permission notice shall be included
Shaun Kelsey 0:da5f5b56060a 12 * in all copies or substantial portions of the Software.
Shaun Kelsey 0:da5f5b56060a 13 *
Shaun Kelsey 0:da5f5b56060a 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Shaun Kelsey 0:da5f5b56060a 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Shaun Kelsey 0:da5f5b56060a 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Shaun Kelsey 0:da5f5b56060a 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
Shaun Kelsey 0:da5f5b56060a 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Shaun Kelsey 0:da5f5b56060a 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Shaun Kelsey 0:da5f5b56060a 20 * OTHER DEALINGS IN THE SOFTWARE.
Shaun Kelsey 0:da5f5b56060a 21 *
Shaun Kelsey 0:da5f5b56060a 22 * Except as contained in this notice, the name of Maxim Integrated
Shaun Kelsey 0:da5f5b56060a 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
Shaun Kelsey 0:da5f5b56060a 24 * Products, Inc. Branding Policy.
Shaun Kelsey 0:da5f5b56060a 25 *
Shaun Kelsey 0:da5f5b56060a 26 * The mere transfer of this software does not imply any licenses
Shaun Kelsey 0:da5f5b56060a 27 * of trade secrets, proprietary technology, copyrights, patents,
Shaun Kelsey 0:da5f5b56060a 28 * trademarks, maskwork rights, or any other form of intellectual
Shaun Kelsey 0:da5f5b56060a 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
Shaun Kelsey 0:da5f5b56060a 30 * ownership rights.
Shaun Kelsey 0:da5f5b56060a 31 ****************************************************************************
Shaun Kelsey 0:da5f5b56060a 32 */
Shaun Kelsey 0:da5f5b56060a 33
Shaun Kelsey 0:da5f5b56060a 34 #ifndef _SSINTERFACE_H_
Shaun Kelsey 0:da5f5b56060a 35 #define _SSINTERFACE_H_
Shaun Kelsey 0:da5f5b56060a 36
Shaun Kelsey 0:da5f5b56060a 37 #include "mbed.h"
Shaun Kelsey 0:da5f5b56060a 38 #include "MaximSensor.h"
Shaun Kelsey 5:e458409e913f 39 #include "EventStats.h"
Shaun Kelsey 0:da5f5b56060a 40
Shaun Kelsey 0:da5f5b56060a 41 #define SS_PLATFORM_MAX3263X "SmartSensor_MAX3263X"
Shaun Kelsey 0:da5f5b56060a 42 #define SS_PLATFORM_MAX32660 "SmartSensor_MAX32660"
Shaun Kelsey 0:da5f5b56060a 43 #define SS_BOOTLOADER_PLATFORM_MAX3263X "Bootloader_MAX3263X"
Shaun Kelsey 0:da5f5b56060a 44 #define SS_BOOTLOADER_PLATFORM_MAX32660 "Bootloader_MAX32660"
Shaun Kelsey 0:da5f5b56060a 45
Shaun Kelsey 0:da5f5b56060a 46
Shaun Kelsey 0:da5f5b56060a 47 #define SS_I2C_8BIT_SLAVE_ADDR 0xAA
Shaun Kelsey 0:da5f5b56060a 48 #define SS_DEFAULT_CMD_SLEEP_MS 2
Shaun Kelsey 0:da5f5b56060a 49 #define SS_DUMP_REG_SLEEP_MS 100
Shaun Kelsey 0:da5f5b56060a 50 #define SS_ENABLE_SENSOR_SLEEP_MS 20
Shaun Kelsey 0:da5f5b56060a 51
Shaun Kelsey 4:998fb975b0d7 52 #define SS_SENSORIDX_MAX86140 0x00
Shaun Kelsey 4:998fb975b0d7 53 #define SS_SENSORIDX_MAX30205 0x01
Shaun Kelsey 4:998fb975b0d7 54 #define SS_SENSORIDX_MAX30001 0x02
Shaun Kelsey 4:998fb975b0d7 55 #define SS_SENSORIDX_MAX30101 0x03
Shaun Kelsey 0:da5f5b56060a 56 #define SS_SENSORIDX_ACCEL 0x04
Shaun Kelsey 0:da5f5b56060a 57
Shaun Kelsey 0:da5f5b56060a 58 #define SS_ALGOIDX_AGC 0x00
Shaun Kelsey 0:da5f5b56060a 59 #define SS_ALGOIDX_AEC 0x01
Shaun Kelsey 0:da5f5b56060a 60 #define SS_ALGOIDX_WHRM 0x02
Shaun Kelsey 0:da5f5b56060a 61 #define SS_ALGOIDX_ECG 0x03
Shaun Kelsey 5:e458409e913f 62 #define SS_ALGOIDX_BPT 0x04
Shaun Kelsey 0:da5f5b56060a 63
Shaun Kelsey 0:da5f5b56060a 64 #define SS_FAM_R_STATUS 0x00
Shaun Kelsey 0:da5f5b56060a 65 #define SS_CMDIDX_STATUS 0x00
Shaun Kelsey 0:da5f5b56060a 66 #define SS_SHIFT_STATUS_ERR 0
Shaun Kelsey 0:da5f5b56060a 67 #define SS_MASK_STATUS_ERR (0x07 << SS_SHIFT_STATUS_ERR)
Shaun Kelsey 0:da5f5b56060a 68 #define SS_SHIFT_STATUS_DATA_RDY 3
Shaun Kelsey 0:da5f5b56060a 69 #define SS_MASK_STATUS_DATA_RDY (1 << SS_SHIFT_STATUS_DATA_RDY)
Shaun Kelsey 0:da5f5b56060a 70 #define SS_SHIFT_STATUS_FIFO_OUT_OVR 4
Shaun Kelsey 0:da5f5b56060a 71 #define SS_MASK_STATUS_FIFO_OUT_OVR (1 << SS_SHIFT_STATUS_FIFO_OUT_OVR)
Shaun Kelsey 0:da5f5b56060a 72 #define SS_SHIFT_STATUS_FIFO_IN_OVR 5
Shaun Kelsey 0:da5f5b56060a 73 #define SS_MASK_STATUS_FIFO_IN_OVR (1 << SS_SHIFT_STATUS_FIFO_IN_OVR)
Shaun Kelsey 0:da5f5b56060a 74
Shaun Kelsey 0:da5f5b56060a 75 #define SS_FAM_W_MODE 0x01
Shaun Kelsey 0:da5f5b56060a 76 #define SS_FAM_R_MODE 0x02
Shaun Kelsey 0:da5f5b56060a 77 #define SS_CMDIDX_MODE 0x00
Shaun Kelsey 0:da5f5b56060a 78 #define SS_SHIFT_MODE_SHDN 0
Shaun Kelsey 0:da5f5b56060a 79 #define SS_MASK_MODE_SHDN (1 << SS_SHIFT_MODE_SHDN)
Shaun Kelsey 0:da5f5b56060a 80 #define SS_SHIFT_MODE_RESET 1
Shaun Kelsey 0:da5f5b56060a 81 #define SS_MASK_MODE_RESET (1 << SS_SHIFT_MODE_RESET)
Shaun Kelsey 0:da5f5b56060a 82 #define SS_SHIFT_MODE_FIFORESET 2
Shaun Kelsey 0:da5f5b56060a 83 #define SS_MASK_MODE_FIFORESET (1 << SS_SHIFT_MODE_FIFORESET)
Shaun Kelsey 0:da5f5b56060a 84 #define SS_SHIFT_MODE_BOOTLDR 3
Shaun Kelsey 0:da5f5b56060a 85 #define SS_MASK_MODE_BOOTLDR (1 << SS_SHIFT_MODE_BOOTLDR)
Shaun Kelsey 0:da5f5b56060a 86
Shaun Kelsey 0:da5f5b56060a 87 #define SS_I2C_READ 0x03
Shaun Kelsey 0:da5f5b56060a 88
Shaun Kelsey 0:da5f5b56060a 89 #define SS_FAM_W_COMMCHAN 0x10
Shaun Kelsey 0:da5f5b56060a 90 #define SS_FAM_R_COMMCHAN 0x11
Shaun Kelsey 0:da5f5b56060a 91 #define SS_CMDIDX_OUTPUTMODE 0x00
Shaun Kelsey 0:da5f5b56060a 92 #define SS_SHIFT_OUTPUTMODE_DATATYPE 0
Shaun Kelsey 0:da5f5b56060a 93 #define SS_MASK_OUTPUTMODE_DATATYPE (0x03 << SS_SHIFT_OUTPUTMODE_DATATYPE)
Shaun Kelsey 0:da5f5b56060a 94 #define SS_DATATYPE_PAUSE 0
Shaun Kelsey 0:da5f5b56060a 95 #define SS_DATATYPE_RAW 1
Shaun Kelsey 0:da5f5b56060a 96 #define SS_DATATYPE_ALGO 2
Shaun Kelsey 0:da5f5b56060a 97 #define SS_DATATYPE_BOTH 3
Shaun Kelsey 0:da5f5b56060a 98 #define SS_SHIFT_OUTPUTMODE_SC_EN 2
Shaun Kelsey 0:da5f5b56060a 99 #define SS_MASK_OUTPUTMODE_SC_EN (1 << SS_SHIFT_OUTPUTMODE_SC_EN)
Shaun Kelsey 0:da5f5b56060a 100 #define SS_CMDIDX_FIFOAFULL 0x01
Shaun Kelsey 0:da5f5b56060a 101
Shaun Kelsey 0:da5f5b56060a 102 #define SS_FAM_R_OUTPUTFIFO 0x12
Shaun Kelsey 0:da5f5b56060a 103 #define SS_CMDIDX_OUT_NUMSAMPLES 0x00
Shaun Kelsey 0:da5f5b56060a 104 #define SS_CMDIDX_READFIFO 0x01
Shaun Kelsey 0:da5f5b56060a 105
Shaun Kelsey 0:da5f5b56060a 106 #define SS_FAM_R_INPUTFIFO 0x13
Shaun Kelsey 0:da5f5b56060a 107 #define SS_CMDIDX_SAMPLESIZE 0x00
Shaun Kelsey 0:da5f5b56060a 108 #define SS_CMDIDX_FIFOSIZE 0x01
Shaun Kelsey 0:da5f5b56060a 109 #define SS_CMDIDX_IN_NUMSAMPLES 0x02
Shaun Kelsey 0:da5f5b56060a 110 #define SS_FAM_W_INPUTFIFO 0x14
Shaun Kelsey 0:da5f5b56060a 111 #define SS_CMDIDN_WRITEFIFO 0x00
Shaun Kelsey 0:da5f5b56060a 112
Shaun Kelsey 0:da5f5b56060a 113 #define SS_FAM_W_WRITEREG 0x40
Shaun Kelsey 0:da5f5b56060a 114 #define SS_FAM_R_READREG 0x41
Shaun Kelsey 0:da5f5b56060a 115 #define SS_FAM_R_REGATTRIBS 0x42
Shaun Kelsey 0:da5f5b56060a 116 #define SS_FAM_R_DUMPREG 0x43
Shaun Kelsey 0:da5f5b56060a 117
Shaun Kelsey 0:da5f5b56060a 118 #define SS_FAM_W_SENSORMODE 0x44
Shaun Kelsey 0:da5f5b56060a 119 #define SS_FAM_R_SENSORMODE 0x45
Shaun Kelsey 0:da5f5b56060a 120
Shaun Kelsey 0:da5f5b56060a 121 //TODO: Fill in known configuration parameters
Shaun Kelsey 0:da5f5b56060a 122 #define SS_FAM_W_ALGOCONFIG 0x50
Shaun Kelsey 0:da5f5b56060a 123 #define SS_FAM_R_ALGOCONFIG 0x51
Shaun Kelsey 5:e458409e913f 124 #define SS_CFGIDX_AGC_TARGET 0x00
Shaun Kelsey 5:e458409e913f 125 #define SS_CFGIDX_AGC_CORR_COEFF 0x01
Shaun Kelsey 5:e458409e913f 126 #define SS_CFGIDX_AGC_SENSITIVITY 0x02
Shaun Kelsey 5:e458409e913f 127 #define SS_CFGIDX_AGC_SMP_AVG 0x03
Shaun Kelsey 5:e458409e913f 128
Shaun Kelsey 5:e458409e913f 129 #define SS_CFGIDX_WHRM_SR 0x00
Shaun Kelsey 5:e458409e913f 130 #define SS_CFGIDX_WHRM_MAX_HEIGHT 0x01
Shaun Kelsey 5:e458409e913f 131 #define SS_CFGIDX_WHRM_MAX_WEIGHT 0x02
Shaun Kelsey 5:e458409e913f 132 #define SS_CFGIDX_WHRM_MAX_AGE 0x03
Shaun Kelsey 5:e458409e913f 133 #define SS_CFGIDX_WHRM_MIN_HEIGHT 0x04
Shaun Kelsey 5:e458409e913f 134 #define SS_CFGIDX_WHRM_MIN_WEIGHT 0x05
Shaun Kelsey 5:e458409e913f 135 #define SS_CFGIDX_WHRM_MIN_AGE 0x06
Shaun Kelsey 5:e458409e913f 136 #define SS_CFGIDX_WHRM_DEF_HEIGHT 0x07
Shaun Kelsey 5:e458409e913f 137 #define SS_CFGIDX_WHRM_DEF_WEIGHT 0x08
Shaun Kelsey 5:e458409e913f 138 #define SS_CFGIDX_WHRM_DEF_AGE 0x09
Shaun Kelsey 5:e458409e913f 139 #define SS_CFGIDX_WHRM_INIT_HR 0x0A
Shaun Kelsey 5:e458409e913f 140
Shaun Kelsey 5:e458409e913f 141 #define SS_CFGIDX_BP_USE_MED 0x00
Shaun Kelsey 5:e458409e913f 142 #define SS_CFGIDX_BP_SYS_BP_CAL 0x01
Shaun Kelsey 5:e458409e913f 143 #define SS_CFGIDX_BP_DIA_BP_CAL 0x02
Shaun Kelsey 5:e458409e913f 144 #define SS_CFGIDX_BP_CAL_DATA 0x03
Shaun Kelsey 5:e458409e913f 145 #define SS_CFGIDX_BP_EST_DATE 0x04
Shaun Kelsey 5:e458409e913f 146 #define SS_CFGIDX_BP_EST_NONREST 0x05
Shaun Kelsey 0:da5f5b56060a 147
Shaun Kelsey 0:da5f5b56060a 148 #define SS_FAM_W_ALGOMODE 0x52
Shaun Kelsey 0:da5f5b56060a 149 #define SS_FAM_R_ALGOMODE 0x53
Shaun Kelsey 0:da5f5b56060a 150
Shaun Kelsey 0:da5f5b56060a 151 #define SS_FAM_W_EXTERNSENSORMODE 0x60
Shaun Kelsey 0:da5f5b56060a 152 #define SS_FAM_R_EXTERNSENSORMODE 0x61
Shaun Kelsey 0:da5f5b56060a 153
Shaun Kelsey 0:da5f5b56060a 154 #define SS_FAM_R_SELFTEST 0x70
Shaun Kelsey 0:da5f5b56060a 155
Shaun Kelsey 0:da5f5b56060a 156 #define SS_FAM_W_BOOTLOADER 0x80
Shaun Kelsey 0:da5f5b56060a 157 #define SS_CMDIDX_SETIV 0x00
Shaun Kelsey 0:da5f5b56060a 158 #define SS_CMDIDX_SETAUTH 0x01
Shaun Kelsey 0:da5f5b56060a 159 #define SS_CMDIDX_SETNUMPAGES 0x02
Shaun Kelsey 0:da5f5b56060a 160 #define SS_CMDIDX_ERASE 0x03
Shaun Kelsey 0:da5f5b56060a 161 #define SS_CMDIDX_SENDPAGE 0x04
Shaun Kelsey 5:e458409e913f 162 #define SS_CMDIDX_ERASE_PAGE 0x05
Shaun Kelsey 5:e458409e913f 163 #define SS_CMDIDX_STAY_IN_BTLRD 0x06
Shaun Kelsey 0:da5f5b56060a 164 #define SS_FAM_R_BOOTLOADER 0x81
Shaun Kelsey 0:da5f5b56060a 165 #define SS_CMDIDX_BOOTFWVERSION 0x00
Shaun Kelsey 0:da5f5b56060a 166 #define SS_CMDIDX_PAGESIZE 0x01
Shaun Kelsey 0:da5f5b56060a 167
Shaun Kelsey 5:e458409e913f 168 #define SS_FAM_W_BOOTLOADER_CFG 0x82
Shaun Kelsey 5:e458409e913f 169 #define SS_FAM_R_BOOTLOADER_CFG 0x83
Shaun Kelsey 5:e458409e913f 170 #define SS_CMDIDX_BL_SAVE 0x00
Shaun Kelsey 5:e458409e913f 171 #define SS_CMDIDX_BL_ENTRY 0x01
Shaun Kelsey 5:e458409e913f 172 #define SS_BL_CFG_ENTER_BL_MODE 0x00
Shaun Kelsey 5:e458409e913f 173 #define SS_BL_CFG_EBL_PIN 0x01
Shaun Kelsey 5:e458409e913f 174 #define SS_BL_CFG_EBL_POL 0x02
Shaun Kelsey 5:e458409e913f 175 #define SS_CMDIDX_BL_EXIT 0x02
Shaun Kelsey 5:e458409e913f 176 #define SS_BL_CFG_EXIT_BL_MODE 0x00
Shaun Kelsey 5:e458409e913f 177 #define SS_BL_CFG_TIMEOUT 0x01
Shaun Kelsey 5:e458409e913f 178
Shaun Kelsey 5:e458409e913f 179
Shaun Kelsey 0:da5f5b56060a 180 #define SS_FAM_R_IDENTITY 0xFF
Shaun Kelsey 0:da5f5b56060a 181 #define SS_CMDIDX_PLATTYPE 0x00
Shaun Kelsey 0:da5f5b56060a 182 #define SS_CMDIDX_PARTID 0x01
Shaun Kelsey 0:da5f5b56060a 183 #define SS_CMDIDX_REVID 0x02
Shaun Kelsey 0:da5f5b56060a 184 #define SS_CMDIDX_FWVERSION 0x03
Shaun Kelsey 0:da5f5b56060a 185 #define SS_CMDIDX_AVAILSENSORS 0x04
Shaun Kelsey 0:da5f5b56060a 186 #define SS_CMDIDX_DRIVERVER 0x05
Shaun Kelsey 0:da5f5b56060a 187 #define SS_CMDIDX_AVAILALGOS 0x06
Shaun Kelsey 0:da5f5b56060a 188 #define SS_CMDIDX_ALGOVER 0x07
Shaun Kelsey 0:da5f5b56060a 189
Shaun Kelsey 0:da5f5b56060a 190
Shaun Kelsey 0:da5f5b56060a 191
Shaun Kelsey 0:da5f5b56060a 192 typedef enum {
Shaun Kelsey 0:da5f5b56060a 193 SS_SUCCESS=0x00,
Shaun Kelsey 0:da5f5b56060a 194
Shaun Kelsey 0:da5f5b56060a 195 SS_ERR_COMMAND=0x01,
Shaun Kelsey 0:da5f5b56060a 196 SS_ERR_UNAVAILABLE=0x02,
Shaun Kelsey 0:da5f5b56060a 197 SS_ERR_DATA_FORMAT=0x03,
Shaun Kelsey 0:da5f5b56060a 198 SS_ERR_INPUT_VALUE=0x04,
Shaun Kelsey 0:da5f5b56060a 199
Shaun Kelsey 0:da5f5b56060a 200 SS_ERR_BTLDR_GENERAL=0x80,
Shaun Kelsey 0:da5f5b56060a 201 SS_ERR_BTLDR_CHECKSUM=0x81,
Shaun Kelsey 0:da5f5b56060a 202
Shaun Kelsey 5:e458409e913f 203 SS_ERR_TRY_AGAIN=0xFE,
Shaun Kelsey 5:e458409e913f 204 SS_ERR_UNKNOWN=0xFF,
Shaun Kelsey 0:da5f5b56060a 205 } SS_STATUS;
Shaun Kelsey 0:da5f5b56060a 206
Shaun Kelsey 0:da5f5b56060a 207 typedef enum {
Shaun Kelsey 0:da5f5b56060a 208 SS_PLAT_MAX3263X=0,
Shaun Kelsey 0:da5f5b56060a 209 SS_PLAT_MAX32660=1,
Shaun Kelsey 0:da5f5b56060a 210 } SS_PLAT_TYPE;
Shaun Kelsey 0:da5f5b56060a 211
Shaun Kelsey 0:da5f5b56060a 212 //self test result masks
Shaun Kelsey 0:da5f5b56060a 213 #define FAILURE_COMM 0x01
Shaun Kelsey 0:da5f5b56060a 214 #define FAILURE_INTERRUPT 0x02
Shaun Kelsey 0:da5f5b56060a 215
Shaun Kelsey 0:da5f5b56060a 216 #define SS_SMALL_BUF_SIZE 32
Shaun Kelsey 5:e458409e913f 217 #define SS_MED_BUF_SIZE 512
Shaun Kelsey 0:da5f5b56060a 218 #define SS_LARGE_BUF_SIZE 8224
Shaun Kelsey 0:da5f5b56060a 219
Shaun Kelsey 0:da5f5b56060a 220 #define SS_RESET_TIME 10
Shaun Kelsey 0:da5f5b56060a 221 #define SS_STARTUP_TIME 1000
Shaun Kelsey 0:da5f5b56060a 222
Shaun Kelsey 0:da5f5b56060a 223 #define SS_MAX_SUPPORTED_SENSOR_NUM 0xFE
Shaun Kelsey 0:da5f5b56060a 224 #define SS_MAX_SUPPORTED_ALGO_NUM 0xFE
Shaun Kelsey 5:e458409e913f 225 #define SS_MAX_SUPPORTED_ALGO_CFG_NUM 0xFE
Shaun Kelsey 0:da5f5b56060a 226 #define SS_MAX_SUPPORTED_MODE_NUM 0xFF
Shaun Kelsey 0:da5f5b56060a 227
Shaun Kelsey 0:da5f5b56060a 228 typedef struct {
Shaun Kelsey 0:da5f5b56060a 229 int data_size;
Shaun Kelsey 0:da5f5b56060a 230 Callback<void(uint8_t*)> callback;
Shaun Kelsey 0:da5f5b56060a 231 } ss_data_req;
Shaun Kelsey 0:da5f5b56060a 232
Shaun Kelsey 0:da5f5b56060a 233
Shaun Kelsey 0:da5f5b56060a 234 /**
Shaun Kelsey 0:da5f5b56060a 235 * @brief SSInterface is Maxim's SmartSensor Interface class
Shaun Kelsey 0:da5f5b56060a 236 */
Shaun Kelsey 0:da5f5b56060a 237 class SSInterface
Shaun Kelsey 0:da5f5b56060a 238 {
Shaun Kelsey 0:da5f5b56060a 239 public:
Shaun Kelsey 0:da5f5b56060a 240
Shaun Kelsey 0:da5f5b56060a 241 /* PUBLIC FUNCTION DECLARATIONS */
Shaun Kelsey 0:da5f5b56060a 242 /**
Shaun Kelsey 0:da5f5b56060a 243 * @brief SSInterface constructor.
Shaun Kelsey 0:da5f5b56060a 244 *
Shaun Kelsey 0:da5f5b56060a 245 * @param[in] i2cBus - reference to the I2C bus for the SmartSensor
Shaun Kelsey 0:da5f5b56060a 246 * @param[in] ss_mfio - name of SmartSensor multi-function IO pin
Shaun Kelsey 0:da5f5b56060a 247 * @param[in] ss_reset - name of SmartSensor Reset pin
Shaun Kelsey 0:da5f5b56060a 248 *
Shaun Kelsey 0:da5f5b56060a 249 */
Shaun Kelsey 0:da5f5b56060a 250 SSInterface(I2C &i2cBus, PinName ss_mfio, PinName ss_reset);
Shaun Kelsey 0:da5f5b56060a 251
Shaun Kelsey 0:da5f5b56060a 252 /**
Shaun Kelsey 0:da5f5b56060a 253 * @brief SSInterface constructor.
Shaun Kelsey 0:da5f5b56060a 254 *
Shaun Kelsey 0:da5f5b56060a 255 * @param[in] spiBus - reference to the SPI bus for the SmartSensor
Shaun Kelsey 0:da5f5b56060a 256 * @param[in] ss_mfio - name of SmartSensor multi-function IO pin
Shaun Kelsey 0:da5f5b56060a 257 * @param[in] ss_reset - name of SmartSensor Reset pin
Shaun Kelsey 0:da5f5b56060a 258 *
Shaun Kelsey 0:da5f5b56060a 259 */
Shaun Kelsey 0:da5f5b56060a 260 SSInterface(SPI &spiBus, PinName ss_mfio, PinName ss_reset);
Shaun Kelsey 0:da5f5b56060a 261
Shaun Kelsey 0:da5f5b56060a 262 /**
Shaun Kelsey 0:da5f5b56060a 263 * @brief DSInterface destructor.
Shaun Kelsey 0:da5f5b56060a 264 *
Shaun Kelsey 0:da5f5b56060a 265 */
Shaun Kelsey 0:da5f5b56060a 266 ~SSInterface();
Shaun Kelsey 0:da5f5b56060a 267
Shaun Kelsey 0:da5f5b56060a 268 /**
Shaun Kelsey 0:da5f5b56060a 269 * @brief Write a command to the SmartSensor and get status response
Shaun Kelsey 0:da5f5b56060a 270 *
Shaun Kelsey 0:da5f5b56060a 271 * @param[in] cmd_bytes - Pointer to the command's family and index bytes
Shaun Kelsey 0:da5f5b56060a 272 * @param[in] cmd_idx_len - The number of bytes in the command
Shaun Kelsey 0:da5f5b56060a 273 * @param[in] data - Pointer to the command's data bytes
Shaun Kelsey 0:da5f5b56060a 274 * @param[in] data_len - The number data bytes
Shaun Kelsey 0:da5f5b56060a 275 *
Shaun Kelsey 0:da5f5b56060a 276 * @return SS_STATUS byte
Shaun Kelsey 0:da5f5b56060a 277 */
Shaun Kelsey 0:da5f5b56060a 278 SS_STATUS write_cmd(uint8_t *cmd_bytes, int cmd_bytes_len,
Shaun Kelsey 0:da5f5b56060a 279 uint8_t *data, int data_len,
Shaun Kelsey 0:da5f5b56060a 280 int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 0:da5f5b56060a 281
Shaun Kelsey 0:da5f5b56060a 282
Shaun Kelsey 0:da5f5b56060a 283 /**
Shaun Kelsey 0:da5f5b56060a 284 * @brief Write a command to the SmartSensor and get status response
Shaun Kelsey 0:da5f5b56060a 285 *
Shaun Kelsey 0:da5f5b56060a 286 * @param[in] tx_buf - Pointer to the command's family, index bytes and data bytes
Shaun Kelsey 0:da5f5b56060a 287 * @param[in] tx_len - Total transaction lenght to send
Shaun Kelsey 0:da5f5b56060a 288 *
Shaun Kelsey 0:da5f5b56060a 289 * @return SS_STATUS byte
Shaun Kelsey 0:da5f5b56060a 290 */
Shaun Kelsey 0:da5f5b56060a 291 SS_STATUS write_cmd(uint8_t *tx_buf, int tx_len,
Shaun Kelsey 0:da5f5b56060a 292 int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 0:da5f5b56060a 293
Shaun Kelsey 0:da5f5b56060a 294 /**
Shaun Kelsey 0:da5f5b56060a 295 * @brief Write a command to the SmartSensor and get status response
Shaun Kelsey 0:da5f5b56060a 296 *
Shaun Kelsey 0:da5f5b56060a 297 * @param[in] cmd_bytes - Pointer to the command's family and index bytes
Shaun Kelsey 0:da5f5b56060a 298 * @param[in] cmd_idx_len - The number of bytes in the command
Shaun Kelsey 0:da5f5b56060a 299 * @param[in] data - Pointer to the command's data bytes
Shaun Kelsey 0:da5f5b56060a 300 * @param[in] data_len - The number data bytes
Shaun Kelsey 0:da5f5b56060a 301 * @param[in] rxbuf - Buffer to fill in with read data (including status byte)
Shaun Kelsey 0:da5f5b56060a 302 * @param[in] rxbuf_sz - Size of the rx buffer (to prevent overflow)
Shaun Kelsey 0:da5f5b56060a 303 *
Shaun Kelsey 0:da5f5b56060a 304 * @return SS_STATUS byte
Shaun Kelsey 0:da5f5b56060a 305 */
Shaun Kelsey 0:da5f5b56060a 306 SS_STATUS read_cmd( uint8_t *cmd_bytes, int cmd_bytes_len,
Shaun Kelsey 0:da5f5b56060a 307 uint8_t *data, int data_len,
Shaun Kelsey 0:da5f5b56060a 308 uint8_t *rxbuf, int rxbuf_sz,
Shaun Kelsey 0:da5f5b56060a 309 int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 0:da5f5b56060a 310
Shaun Kelsey 0:da5f5b56060a 311 /**
Shaun Kelsey 0:da5f5b56060a 312 * @brief Get a string representing the SmartSensor firmware version
Shaun Kelsey 0:da5f5b56060a 313 * @details If in bootloader mode, returns bootloader version
Shaun Kelsey 0:da5f5b56060a 314 *
Shaun Kelsey 0:da5f5b56060a 315 * @return Pointer to firmware version string
Shaun Kelsey 0:da5f5b56060a 316 */
Shaun Kelsey 0:da5f5b56060a 317 const char* get_ss_fw_version();
Shaun Kelsey 0:da5f5b56060a 318
Shaun Kelsey 0:da5f5b56060a 319 /**
Shaun Kelsey 0:da5f5b56060a 320 * @brief Get a string representing the SmartSensor platform type
Shaun Kelsey 0:da5f5b56060a 321 *
Shaun Kelsey 0:da5f5b56060a 322 * @return Pointer to platform type string
Shaun Kelsey 0:da5f5b56060a 323 */
Shaun Kelsey 0:da5f5b56060a 324 const char* get_ss_platform_name();
Shaun Kelsey 0:da5f5b56060a 325
Shaun Kelsey 0:da5f5b56060a 326 /**
Shaun Kelsey 0:da5f5b56060a 327 * @brief Reset the SmartSensor and jump to main application
Shaun Kelsey 0:da5f5b56060a 328 *
Shaun Kelsey 0:da5f5b56060a 329 * @return SS_STATUS code indicating success
Shaun Kelsey 0:da5f5b56060a 330 */
Shaun Kelsey 0:da5f5b56060a 331 SS_STATUS reset_to_main_app();
Shaun Kelsey 0:da5f5b56060a 332
Shaun Kelsey 0:da5f5b56060a 333 /**
Shaun Kelsey 0:da5f5b56060a 334 * @brief Reset the SmartSensor and jump to bootloader
Shaun Kelsey 0:da5f5b56060a 335 *
Shaun Kelsey 0:da5f5b56060a 336 * @return SS_STATUS code indicating success
Shaun Kelsey 0:da5f5b56060a 337 */
Shaun Kelsey 0:da5f5b56060a 338 SS_STATUS reset_to_bootloader();
Shaun Kelsey 0:da5f5b56060a 339
Shaun Kelsey 0:da5f5b56060a 340 /**
Shaun Kelsey 0:da5f5b56060a 341 * @brief Reset the SmartSensor
Shaun Kelsey 0:da5f5b56060a 342 * @details If the SmartSensor was in bootloader, it will jump back into bootloader
Shaun Kelsey 0:da5f5b56060a 343 * If the SmartSensor was in main app, it will jump back into main app
Shaun Kelsey 0:da5f5b56060a 344 *
Shaun Kelsey 0:da5f5b56060a 345 * @return SS_STATUS code indicating success
Shaun Kelsey 0:da5f5b56060a 346 */
Shaun Kelsey 0:da5f5b56060a 347 SS_STATUS reset();
Shaun Kelsey 0:da5f5b56060a 348
Shaun Kelsey 0:da5f5b56060a 349 /**
Shaun Kelsey 0:da5f5b56060a 350 * @brief run the self test commands
Shaun Kelsey 0:da5f5b56060a 351 * param[in] idx - the id of the sensor for the self test
Shaun Kelsey 0:da5f5b56060a 352 * param[in] result - self-test response
Shaun Kelsey 0:da5f5b56060a 353 * param[in] sleep_ms - duration of wait for read command
Shaun Kelsey 0:da5f5b56060a 354 * @return SS_STATUS code indicating success
Shaun Kelsey 0:da5f5b56060a 355 */
Shaun Kelsey 0:da5f5b56060a 356 SS_STATUS self_test(int idx, uint8_t *result, int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 0:da5f5b56060a 357
Shaun Kelsey 0:da5f5b56060a 358 /**
Shaun Kelsey 0:da5f5b56060a 359 * @brief Check if SmartSensor is in bootloader mode
Shaun Kelsey 0:da5f5b56060a 360 *
Shaun Kelsey 0:da5f5b56060a 361 * @return 1 if in bootloader mode, 0 if in main app, -1 if comm error
Shaun Kelsey 0:da5f5b56060a 362 */
Shaun Kelsey 0:da5f5b56060a 363 int in_bootldr_mode();
Shaun Kelsey 0:da5f5b56060a 364
Shaun Kelsey 0:da5f5b56060a 365
Shaun Kelsey 0:da5f5b56060a 366 /**
Shaun Kelsey 0:da5f5b56060a 367 * @brief Read register from a device onboard SmartSensor
Shaun Kelsey 0:da5f5b56060a 368 *
Shaun Kelsey 0:da5f5b56060a 369 * @param[in] idx - Index of device to read
Shaun Kelsey 0:da5f5b56060a 370 * @param[in] addr - Register address
Shaun Kelsey 0:da5f5b56060a 371 * @param[out] val - Register value
Shaun Kelsey 0:da5f5b56060a 372 *
Shaun Kelsey 0:da5f5b56060a 373 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 374 */
Shaun Kelsey 0:da5f5b56060a 375 SS_STATUS get_reg(int idx, uint8_t addr, uint32_t *val);
Shaun Kelsey 0:da5f5b56060a 376
Shaun Kelsey 0:da5f5b56060a 377 /**
Shaun Kelsey 0:da5f5b56060a 378 * @brief Set register of a device onboard SmartSensor
Shaun Kelsey 0:da5f5b56060a 379 *
Shaun Kelsey 0:da5f5b56060a 380 * @param[in] idx - Index of device to read
Shaun Kelsey 0:da5f5b56060a 381 * @param[in] addr - Register address
Shaun Kelsey 0:da5f5b56060a 382 * @param[in] val - Register value
Shaun Kelsey 0:da5f5b56060a 383 * @param[in] byte_size - Size of IC register in bytes
Shaun Kelsey 0:da5f5b56060a 384 *
Shaun Kelsey 0:da5f5b56060a 385 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 386 */
Shaun Kelsey 0:da5f5b56060a 387 SS_STATUS set_reg(int idx, uint8_t addr, uint32_t val, int byte_size);
Shaun Kelsey 0:da5f5b56060a 388
Shaun Kelsey 0:da5f5b56060a 389 /**
Shaun Kelsey 0:da5f5b56060a 390 * @brief Dump registers of a device onboard SmartSensor
Shaun Kelsey 0:da5f5b56060a 391 *
Shaun Kelsey 0:da5f5b56060a 392 * @param[in] idx - Index of device
Shaun Kelsey 0:da5f5b56060a 393 * @param[in] reg_vals - Array of addr_val_pairs
Shaun Kelsey 0:da5f5b56060a 394 * @param[in] reg_vals_sz - Number of items reg_vals can hold
Shaun Kelsey 0:da5f5b56060a 395 * @param[out] num_regs - Number of registers returned by command
Shaun Kelsey 0:da5f5b56060a 396 *
Shaun Kelsey 0:da5f5b56060a 397 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 398 */
Shaun Kelsey 0:da5f5b56060a 399 SS_STATUS dump_reg(int idx, addr_val_pair* reg_vals, int reg_vals_sz, int* num_regs);
Shaun Kelsey 0:da5f5b56060a 400
Shaun Kelsey 0:da5f5b56060a 401
Shaun Kelsey 0:da5f5b56060a 402 /**
Shaun Kelsey 0:da5f5b56060a 403 * @brief Enable a device on the SmartSensor
Shaun Kelsey 0:da5f5b56060a 404 *
Shaun Kelsey 0:da5f5b56060a 405 * @param[in] idx - Index of device
Shaun Kelsey 0:da5f5b56060a 406 * @param[in] mode - Mode to set the device to
Shaun Kelsey 0:da5f5b56060a 407 * @param[in] data_req - Data request
Shaun Kelsey 0:da5f5b56060a 408 *
Shaun Kelsey 0:da5f5b56060a 409 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 410 */
Shaun Kelsey 0:da5f5b56060a 411 SS_STATUS enable_sensor(int idx, int mode, ss_data_req* data_req);
Shaun Kelsey 0:da5f5b56060a 412
Shaun Kelsey 0:da5f5b56060a 413 /**
Shaun Kelsey 0:da5f5b56060a 414 * @brief Disable a device on the SmartSensor
Shaun Kelsey 0:da5f5b56060a 415 *
Shaun Kelsey 0:da5f5b56060a 416 * @param[in] idx - Index of device
Shaun Kelsey 0:da5f5b56060a 417 *
Shaun Kelsey 0:da5f5b56060a 418 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 419 */
Shaun Kelsey 0:da5f5b56060a 420 SS_STATUS disable_sensor(int idx);
Shaun Kelsey 0:da5f5b56060a 421
Shaun Kelsey 0:da5f5b56060a 422 /**
Shaun Kelsey 0:da5f5b56060a 423 * @brief Enable an algorithm on the SmartSensor
Shaun Kelsey 0:da5f5b56060a 424 *
Shaun Kelsey 0:da5f5b56060a 425 * @param[in] idx - Index of device
Shaun Kelsey 0:da5f5b56060a 426 * @param[in] mode - Mode to set the device to
Shaun Kelsey 0:da5f5b56060a 427 * @param[in] data_req - Data request
Shaun Kelsey 0:da5f5b56060a 428 *
Shaun Kelsey 0:da5f5b56060a 429 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 430 */
Shaun Kelsey 0:da5f5b56060a 431 SS_STATUS enable_algo(int idx, int mode, ss_data_req* data_req);
Shaun Kelsey 0:da5f5b56060a 432
Shaun Kelsey 0:da5f5b56060a 433 /**
Shaun Kelsey 0:da5f5b56060a 434 * @brief Disable an algorithm on the SmartSensor
Shaun Kelsey 0:da5f5b56060a 435 *
Shaun Kelsey 0:da5f5b56060a 436 * @param[in] idx - Index of device
Shaun Kelsey 0:da5f5b56060a 437 *
Shaun Kelsey 0:da5f5b56060a 438 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 439 */
Shaun Kelsey 0:da5f5b56060a 440 SS_STATUS disable_algo(int idx);
Shaun Kelsey 0:da5f5b56060a 441
Shaun Kelsey 5:e458409e913f 442 /**
Shaun Kelsey 5:e458409e913f 443 * @brief Set the value of an algorithm configuration parameter
Shaun Kelsey 5:e458409e913f 444 *
Shaun Kelsey 5:e458409e913f 445 * @param[in] algo_idx Index of algorithm
Shaun Kelsey 5:e458409e913f 446 * @param[in] cfg_idx Index of configuration parameter
Shaun Kelsey 5:e458409e913f 447 * @param[in] cfg Array of configuration bytes
Shaun Kelsey 5:e458409e913f 448 * @param[in] cfg_sz Size of cfg array
Shaun Kelsey 5:e458409e913f 449 *
Shaun Kelsey 5:e458409e913f 450 * @return SS_SUCCESS on success
Shaun Kelsey 5:e458409e913f 451 */
Shaun Kelsey 5:e458409e913f 452 SS_STATUS set_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz);
Shaun Kelsey 5:e458409e913f 453
Shaun Kelsey 5:e458409e913f 454 /**
Shaun Kelsey 5:e458409e913f 455 * @brief Get the value of an algorithm configuration parameter
Shaun Kelsey 5:e458409e913f 456 *
Shaun Kelsey 5:e458409e913f 457 * @param[in] algo_idx Index of algorithm
Shaun Kelsey 5:e458409e913f 458 * @param[in] cfg_idx Index of configuration parameter
Shaun Kelsey 5:e458409e913f 459 * @param[in] cfg Array of configuration bytes to be filled in
Shaun Kelsey 5:e458409e913f 460 * @param[in] cfg_sz Number of bytes to be read
Shaun Kelsey 5:e458409e913f 461 *
Shaun Kelsey 5:e458409e913f 462 * @return SS_SUCCESS on success
Shaun Kelsey 5:e458409e913f 463 */
Shaun Kelsey 5:e458409e913f 464 SS_STATUS get_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz);
Shaun Kelsey 0:da5f5b56060a 465
Shaun Kelsey 0:da5f5b56060a 466 /**
Shaun Kelsey 0:da5f5b56060a 467 * @brief Set the CommChannel Output Mode options
Shaun Kelsey 0:da5f5b56060a 468 *
Shaun Kelsey 0:da5f5b56060a 469 * @param[in] data_type - Set to 0 for only algorithm data
Shaun Kelsey 0:da5f5b56060a 470 * Set to 1 for only raw sensor data
Shaun Kelsey 0:da5f5b56060a 471 * Set to 2 for algo + raw sensor data
Shaun Kelsey 0:da5f5b56060a 472 * Set to 3 for no data
Shaun Kelsey 0:da5f5b56060a 473 * @param[in] sc_en - Set to true to receive 1 byte sample count from SmartSensor
Shaun Kelsey 0:da5f5b56060a 474 *
Shaun Kelsey 0:da5f5b56060a 475 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 476 */
Shaun Kelsey 0:da5f5b56060a 477 SS_STATUS set_data_type(int data_type, bool sc_en);
Shaun Kelsey 0:da5f5b56060a 478
Shaun Kelsey 0:da5f5b56060a 479 /**
Shaun Kelsey 0:da5f5b56060a 480 * @brief Get the CommChannel Output Mode options
Shaun Kelsey 0:da5f5b56060a 481 *
Shaun Kelsey 0:da5f5b56060a 482 * @param[out] data_type - 0 for only algorithm data
Shaun Kelsey 0:da5f5b56060a 483 * 1 for only raw sensor data
Shaun Kelsey 0:da5f5b56060a 484 * 2 for algo + raw sensor data
Shaun Kelsey 0:da5f5b56060a 485 * 3 for no data
Shaun Kelsey 0:da5f5b56060a 486 * @param[in] sc_en - If true, SmartSensor prepends data with 1 byte sample count
Shaun Kelsey 0:da5f5b56060a 487 *
Shaun Kelsey 0:da5f5b56060a 488 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 489 */
Shaun Kelsey 0:da5f5b56060a 490 SS_STATUS get_data_type(int* data_type, bool *sc_en);
Shaun Kelsey 0:da5f5b56060a 491
Shaun Kelsey 5:e458409e913f 492 /**
Shaun Kelsey 5:e458409e913f 493 * @brief Set the number of samples for the SmartSensor to collect
Shaun Kelsey 5:e458409e913f 494 * before issuing an interrupt
Shaun Kelsey 5:e458409e913f 495 *
Shaun Kelsey 5:e458409e913f 496 * @param[in] thresh - Number of samples (1-255) to collect before interrupt
Shaun Kelsey 5:e458409e913f 497 *
Shaun Kelsey 5:e458409e913f 498 * @return SS_SUCCESS on success
Shaun Kelsey 5:e458409e913f 499 */
Shaun Kelsey 5:e458409e913f 500 SS_STATUS set_fifo_thresh(int thresh);
Shaun Kelsey 5:e458409e913f 501
Shaun Kelsey 5:e458409e913f 502 /**
Shaun Kelsey 5:e458409e913f 503 * @brief Get the number of samples the SmartSensor will collect
Shaun Kelsey 5:e458409e913f 504 * before issuing an interrupt
Shaun Kelsey 5:e458409e913f 505 *
Shaun Kelsey 5:e458409e913f 506 * @param[out] thresh - Number of samples (1-255) collected before interrupt
Shaun Kelsey 5:e458409e913f 507 *
Shaun Kelsey 5:e458409e913f 508 * @return SS_SUCCESS on success
Shaun Kelsey 5:e458409e913f 509 */
Shaun Kelsey 5:e458409e913f 510 SS_STATUS get_fifo_thresh(int *thresh);
Shaun Kelsey 5:e458409e913f 511
Shaun Kelsey 5:e458409e913f 512 /**
Shaun Kelsey 5:e458409e913f 513 * @brief Check that the SmartSensor is connected
Shaun Kelsey 5:e458409e913f 514 */
Shaun Kelsey 5:e458409e913f 515 SS_STATUS ss_comm_check();
Shaun Kelsey 5:e458409e913f 516
Shaun Kelsey 5:e458409e913f 517
Shaun Kelsey 0:da5f5b56060a 518 void enable_irq();
Shaun Kelsey 0:da5f5b56060a 519 void disable_irq();
Shaun Kelsey 0:da5f5b56060a 520
Shaun Kelsey 0:da5f5b56060a 521 void mfio_selftest();
Shaun Kelsey 0:da5f5b56060a 522 bool reset_mfio_irq();
Shaun Kelsey 0:da5f5b56060a 523
Shaun Kelsey 5:e458409e913f 524 void ss_execute_once();
Shaun Kelsey 5:e458409e913f 525 void ss_clear_interrupt_flag();
Shaun Kelsey 5:e458409e913f 526
Shaun Kelsey 0:da5f5b56060a 527 private:
Shaun Kelsey 0:da5f5b56060a 528
Shaun Kelsey 0:da5f5b56060a 529 /* PRIVATE VARIABLES */
Shaun Kelsey 0:da5f5b56060a 530 I2C *m_i2cBus;
Shaun Kelsey 0:da5f5b56060a 531 SPI *m_spiBus;
Shaun Kelsey 0:da5f5b56060a 532 DigitalInOut mfio_pin;
Shaun Kelsey 0:da5f5b56060a 533 DigitalInOut reset_pin;
Shaun Kelsey 0:da5f5b56060a 534 InterruptIn irq_pin;
Shaun Kelsey 0:da5f5b56060a 535
Shaun Kelsey 0:da5f5b56060a 536 char fw_version[128];
Shaun Kelsey 0:da5f5b56060a 537 const char* plat_name;
Shaun Kelsey 0:da5f5b56060a 538
Shaun Kelsey 0:da5f5b56060a 539 bool sc_en;
Shaun Kelsey 0:da5f5b56060a 540 int data_type;
Shaun Kelsey 0:da5f5b56060a 541
Shaun Kelsey 0:da5f5b56060a 542 int sensor_enabled_mode[SS_MAX_SUPPORTED_SENSOR_NUM];
Shaun Kelsey 0:da5f5b56060a 543 int algo_enabled_mode[SS_MAX_SUPPORTED_ALGO_NUM];
Shaun Kelsey 0:da5f5b56060a 544 ss_data_req* sensor_data_reqs[SS_MAX_SUPPORTED_SENSOR_NUM];
Shaun Kelsey 0:da5f5b56060a 545 ss_data_req* algo_data_reqs[SS_MAX_SUPPORTED_ALGO_NUM];
Shaun Kelsey 0:da5f5b56060a 546
Shaun Kelsey 0:da5f5b56060a 547 /* PRIVATE METHODS */
Shaun Kelsey 0:da5f5b56060a 548 SS_STATUS write_cmd_small(uint8_t *cmd_bytes, int cmd_bytes_len,
Shaun Kelsey 0:da5f5b56060a 549 uint8_t *data, int data_len,
Shaun Kelsey 0:da5f5b56060a 550 int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 5:e458409e913f 551 SS_STATUS write_cmd_medium(uint8_t *cmd_bytes, int cmd_bytes_len,
Shaun Kelsey 5:e458409e913f 552 uint8_t *data, int data_len,
Shaun Kelsey 5:e458409e913f 553 int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 0:da5f5b56060a 554 SS_STATUS write_cmd_large(uint8_t *cmd_bytes, int cmd_bytes_len,
Shaun Kelsey 0:da5f5b56060a 555 uint8_t *data, int data_len,
Shaun Kelsey 0:da5f5b56060a 556 int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 0:da5f5b56060a 557 void cfg_mfio(PinDirection);
Shaun Kelsey 0:da5f5b56060a 558
Shaun Kelsey 0:da5f5b56060a 559 void irq_handler();
Shaun Kelsey 5:e458409e913f 560 volatile bool m_irq_received_;
Shaun Kelsey 5:e458409e913f 561
Shaun Kelsey 0:da5f5b56060a 562
Shaun Kelsey 0:da5f5b56060a 563 void irq_handler_selftest();
Shaun Kelsey 0:da5f5b56060a 564 volatile bool mfio_int_happened;
Shaun Kelsey 0:da5f5b56060a 565
Shaun Kelsey 0:da5f5b56060a 566 SS_STATUS read_fifo_data(int num_samples, int sample_size, uint8_t* databuf, int databuf_sz);
Shaun Kelsey 0:da5f5b56060a 567 SS_STATUS num_avail_samples(int* num_samples);
Shaun Kelsey 0:da5f5b56060a 568 void fifo_sample_size(int data_type, int* sample_size);
Shaun Kelsey 5:e458409e913f 569
Shaun Kelsey 5:e458409e913f 570 EventStats irq_evt;
Shaun Kelsey 0:da5f5b56060a 571 };
Shaun Kelsey 0:da5f5b56060a 572
Shaun Kelsey 0:da5f5b56060a 573
Shaun Kelsey 0:da5f5b56060a 574 #endif