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:
keremsahin
Date:
Mon Jul 02 21:07:27 2018 +0000
Revision:
8:0f55f59ca341
Parent:
7:3e2a5545f1d8
Child:
10:022b2cad9e9b
MAX30001/MAX30205/MAX8614X driver updates; EcgComm/TempComm/MAX30101Comm updates; Bootloader updates; EventStats/LEDStatus updates

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
keremsahin 8:0f55f59ca341 75 #define SS_SHIFT_STATUS_LOG_OVR 6
keremsahin 8:0f55f59ca341 76 #define SS_MASK_STATUS_LOG_OVR (1 << SS_SHIFT_STATUS_LOG_OVR)
keremsahin 8:0f55f59ca341 77
keremsahin 8:0f55f59ca341 78 #define SS_SHIFT_STATUS_LOG_RDY 7
keremsahin 8:0f55f59ca341 79 #define SS_MASK_STATUS_LOG_RDY (1 << SS_SHIFT_STATUS_LOG_RDY)
keremsahin 8:0f55f59ca341 80
keremsahin 8:0f55f59ca341 81
Shaun Kelsey 0:da5f5b56060a 82 #define SS_FAM_W_MODE 0x01
Shaun Kelsey 0:da5f5b56060a 83 #define SS_FAM_R_MODE 0x02
Shaun Kelsey 0:da5f5b56060a 84 #define SS_CMDIDX_MODE 0x00
Shaun Kelsey 0:da5f5b56060a 85 #define SS_SHIFT_MODE_SHDN 0
Shaun Kelsey 0:da5f5b56060a 86 #define SS_MASK_MODE_SHDN (1 << SS_SHIFT_MODE_SHDN)
Shaun Kelsey 0:da5f5b56060a 87 #define SS_SHIFT_MODE_RESET 1
Shaun Kelsey 0:da5f5b56060a 88 #define SS_MASK_MODE_RESET (1 << SS_SHIFT_MODE_RESET)
Shaun Kelsey 0:da5f5b56060a 89 #define SS_SHIFT_MODE_FIFORESET 2
Shaun Kelsey 0:da5f5b56060a 90 #define SS_MASK_MODE_FIFORESET (1 << SS_SHIFT_MODE_FIFORESET)
Shaun Kelsey 0:da5f5b56060a 91 #define SS_SHIFT_MODE_BOOTLDR 3
Shaun Kelsey 0:da5f5b56060a 92 #define SS_MASK_MODE_BOOTLDR (1 << SS_SHIFT_MODE_BOOTLDR)
Shaun Kelsey 0:da5f5b56060a 93
Shaun Kelsey 0:da5f5b56060a 94 #define SS_I2C_READ 0x03
Shaun Kelsey 0:da5f5b56060a 95
Shaun Kelsey 0:da5f5b56060a 96 #define SS_FAM_W_COMMCHAN 0x10
Shaun Kelsey 0:da5f5b56060a 97 #define SS_FAM_R_COMMCHAN 0x11
Shaun Kelsey 0:da5f5b56060a 98 #define SS_CMDIDX_OUTPUTMODE 0x00
Shaun Kelsey 0:da5f5b56060a 99 #define SS_SHIFT_OUTPUTMODE_DATATYPE 0
Shaun Kelsey 0:da5f5b56060a 100 #define SS_MASK_OUTPUTMODE_DATATYPE (0x03 << SS_SHIFT_OUTPUTMODE_DATATYPE)
Shaun Kelsey 0:da5f5b56060a 101 #define SS_DATATYPE_PAUSE 0
Shaun Kelsey 0:da5f5b56060a 102 #define SS_DATATYPE_RAW 1
Shaun Kelsey 0:da5f5b56060a 103 #define SS_DATATYPE_ALGO 2
Shaun Kelsey 0:da5f5b56060a 104 #define SS_DATATYPE_BOTH 3
Shaun Kelsey 0:da5f5b56060a 105 #define SS_SHIFT_OUTPUTMODE_SC_EN 2
Shaun Kelsey 0:da5f5b56060a 106 #define SS_MASK_OUTPUTMODE_SC_EN (1 << SS_SHIFT_OUTPUTMODE_SC_EN)
Shaun Kelsey 0:da5f5b56060a 107 #define SS_CMDIDX_FIFOAFULL 0x01
Shaun Kelsey 0:da5f5b56060a 108
Shaun Kelsey 0:da5f5b56060a 109 #define SS_FAM_R_OUTPUTFIFO 0x12
Shaun Kelsey 0:da5f5b56060a 110 #define SS_CMDIDX_OUT_NUMSAMPLES 0x00
Shaun Kelsey 0:da5f5b56060a 111 #define SS_CMDIDX_READFIFO 0x01
Shaun Kelsey 0:da5f5b56060a 112
Shaun Kelsey 0:da5f5b56060a 113 #define SS_FAM_R_INPUTFIFO 0x13
Shaun Kelsey 0:da5f5b56060a 114 #define SS_CMDIDX_SAMPLESIZE 0x00
Shaun Kelsey 0:da5f5b56060a 115 #define SS_CMDIDX_FIFOSIZE 0x01
Shaun Kelsey 0:da5f5b56060a 116 #define SS_CMDIDX_IN_NUMSAMPLES 0x02
Shaun Kelsey 0:da5f5b56060a 117 #define SS_FAM_W_INPUTFIFO 0x14
Shaun Kelsey 0:da5f5b56060a 118 #define SS_CMDIDN_WRITEFIFO 0x00
Shaun Kelsey 0:da5f5b56060a 119
Shaun Kelsey 0:da5f5b56060a 120 #define SS_FAM_W_WRITEREG 0x40
Shaun Kelsey 0:da5f5b56060a 121 #define SS_FAM_R_READREG 0x41
Shaun Kelsey 0:da5f5b56060a 122 #define SS_FAM_R_REGATTRIBS 0x42
Shaun Kelsey 0:da5f5b56060a 123 #define SS_FAM_R_DUMPREG 0x43
Shaun Kelsey 0:da5f5b56060a 124
Shaun Kelsey 0:da5f5b56060a 125 #define SS_FAM_W_SENSORMODE 0x44
Shaun Kelsey 0:da5f5b56060a 126 #define SS_FAM_R_SENSORMODE 0x45
Shaun Kelsey 0:da5f5b56060a 127
Shaun Kelsey 0:da5f5b56060a 128 //TODO: Fill in known configuration parameters
Shaun Kelsey 0:da5f5b56060a 129 #define SS_FAM_W_ALGOCONFIG 0x50
Shaun Kelsey 0:da5f5b56060a 130 #define SS_FAM_R_ALGOCONFIG 0x51
Shaun Kelsey 5:e458409e913f 131 #define SS_CFGIDX_AGC_TARGET 0x00
Shaun Kelsey 5:e458409e913f 132 #define SS_CFGIDX_AGC_CORR_COEFF 0x01
Shaun Kelsey 5:e458409e913f 133 #define SS_CFGIDX_AGC_SENSITIVITY 0x02
Shaun Kelsey 5:e458409e913f 134 #define SS_CFGIDX_AGC_SMP_AVG 0x03
Shaun Kelsey 5:e458409e913f 135
Shaun Kelsey 5:e458409e913f 136 #define SS_CFGIDX_WHRM_SR 0x00
Shaun Kelsey 5:e458409e913f 137 #define SS_CFGIDX_WHRM_MAX_HEIGHT 0x01
Shaun Kelsey 5:e458409e913f 138 #define SS_CFGIDX_WHRM_MAX_WEIGHT 0x02
Shaun Kelsey 5:e458409e913f 139 #define SS_CFGIDX_WHRM_MAX_AGE 0x03
Shaun Kelsey 5:e458409e913f 140 #define SS_CFGIDX_WHRM_MIN_HEIGHT 0x04
Shaun Kelsey 5:e458409e913f 141 #define SS_CFGIDX_WHRM_MIN_WEIGHT 0x05
Shaun Kelsey 5:e458409e913f 142 #define SS_CFGIDX_WHRM_MIN_AGE 0x06
Shaun Kelsey 5:e458409e913f 143 #define SS_CFGIDX_WHRM_DEF_HEIGHT 0x07
Shaun Kelsey 5:e458409e913f 144 #define SS_CFGIDX_WHRM_DEF_WEIGHT 0x08
Shaun Kelsey 5:e458409e913f 145 #define SS_CFGIDX_WHRM_DEF_AGE 0x09
Shaun Kelsey 5:e458409e913f 146 #define SS_CFGIDX_WHRM_INIT_HR 0x0A
Shaun Kelsey 5:e458409e913f 147
Shaun Kelsey 5:e458409e913f 148 #define SS_CFGIDX_BP_USE_MED 0x00
Shaun Kelsey 5:e458409e913f 149 #define SS_CFGIDX_BP_SYS_BP_CAL 0x01
Shaun Kelsey 5:e458409e913f 150 #define SS_CFGIDX_BP_DIA_BP_CAL 0x02
Shaun Kelsey 5:e458409e913f 151 #define SS_CFGIDX_BP_CAL_DATA 0x03
Shaun Kelsey 5:e458409e913f 152 #define SS_CFGIDX_BP_EST_DATE 0x04
Shaun Kelsey 5:e458409e913f 153 #define SS_CFGIDX_BP_EST_NONREST 0x05
Shaun Kelsey 0:da5f5b56060a 154
Shaun Kelsey 0:da5f5b56060a 155 #define SS_FAM_W_ALGOMODE 0x52
Shaun Kelsey 0:da5f5b56060a 156 #define SS_FAM_R_ALGOMODE 0x53
Shaun Kelsey 0:da5f5b56060a 157
Shaun Kelsey 0:da5f5b56060a 158 #define SS_FAM_W_EXTERNSENSORMODE 0x60
Shaun Kelsey 0:da5f5b56060a 159 #define SS_FAM_R_EXTERNSENSORMODE 0x61
Shaun Kelsey 0:da5f5b56060a 160
Shaun Kelsey 0:da5f5b56060a 161 #define SS_FAM_R_SELFTEST 0x70
Shaun Kelsey 0:da5f5b56060a 162
Shaun Kelsey 0:da5f5b56060a 163 #define SS_FAM_W_BOOTLOADER 0x80
Shaun Kelsey 0:da5f5b56060a 164 #define SS_CMDIDX_SETIV 0x00
Shaun Kelsey 0:da5f5b56060a 165 #define SS_CMDIDX_SETAUTH 0x01
Shaun Kelsey 0:da5f5b56060a 166 #define SS_CMDIDX_SETNUMPAGES 0x02
Shaun Kelsey 0:da5f5b56060a 167 #define SS_CMDIDX_ERASE 0x03
Shaun Kelsey 0:da5f5b56060a 168 #define SS_CMDIDX_SENDPAGE 0x04
Shaun Kelsey 5:e458409e913f 169 #define SS_CMDIDX_ERASE_PAGE 0x05
Shaun Kelsey 0:da5f5b56060a 170 #define SS_FAM_R_BOOTLOADER 0x81
Shaun Kelsey 0:da5f5b56060a 171 #define SS_CMDIDX_BOOTFWVERSION 0x00
Shaun Kelsey 0:da5f5b56060a 172 #define SS_CMDIDX_PAGESIZE 0x01
Shaun Kelsey 0:da5f5b56060a 173
Shaun Kelsey 5:e458409e913f 174 #define SS_FAM_W_BOOTLOADER_CFG 0x82
Shaun Kelsey 5:e458409e913f 175 #define SS_FAM_R_BOOTLOADER_CFG 0x83
Shaun Kelsey 5:e458409e913f 176 #define SS_CMDIDX_BL_SAVE 0x00
Shaun Kelsey 5:e458409e913f 177 #define SS_CMDIDX_BL_ENTRY 0x01
Shaun Kelsey 5:e458409e913f 178 #define SS_BL_CFG_ENTER_BL_MODE 0x00
Shaun Kelsey 5:e458409e913f 179 #define SS_BL_CFG_EBL_PIN 0x01
Shaun Kelsey 5:e458409e913f 180 #define SS_BL_CFG_EBL_POL 0x02
Shaun Kelsey 5:e458409e913f 181 #define SS_CMDIDX_BL_EXIT 0x02
Shaun Kelsey 5:e458409e913f 182 #define SS_BL_CFG_EXIT_BL_MODE 0x00
Shaun Kelsey 5:e458409e913f 183 #define SS_BL_CFG_TIMEOUT 0x01
Shaun Kelsey 5:e458409e913f 184
keremsahin 8:0f55f59ca341 185 /* Enable logging/debugging */
keremsahin 8:0f55f59ca341 186 #define SS_FAM_R_LOG 0x90
keremsahin 8:0f55f59ca341 187 #define SS_CMDIDX_R_LOG_DATA 0x00
keremsahin 8:0f55f59ca341 188 #define SS_CMDIDX_R_LOG_LEN 0x01
Shaun Kelsey 5:e458409e913f 189
keremsahin 8:0f55f59ca341 190 #define SS_CMDIDX_R_LOG_LEVEL 0x02
keremsahin 8:0f55f59ca341 191 #define SS_LOG_DISABLE 0x00
keremsahin 8:0f55f59ca341 192 #define SS_LOG_CRITICAL 0x01
keremsahin 8:0f55f59ca341 193 #define SS_LOG_ERROR 0x02
keremsahin 8:0f55f59ca341 194 #define SS_LOG_INFO 0x04
keremsahin 8:0f55f59ca341 195 #define SS_LOG_DEBUG 0x08
keremsahin 8:0f55f59ca341 196
keremsahin 8:0f55f59ca341 197 #define SS_FAM_W_LOG_CFG 0x91
keremsahin 8:0f55f59ca341 198 #define SS_CMDIDX_LOG_GET_LEVEL 0x00
keremsahin 8:0f55f59ca341 199 #define SS_CMDIDX_LOG_SET_LEVEL 0x01
keremsahin 8:0f55f59ca341 200
keremsahin 8:0f55f59ca341 201 #define SS_FAM_R_IDENTITY 0xFF
Shaun Kelsey 0:da5f5b56060a 202 #define SS_CMDIDX_PLATTYPE 0x00
Shaun Kelsey 0:da5f5b56060a 203 #define SS_CMDIDX_PARTID 0x01
Shaun Kelsey 0:da5f5b56060a 204 #define SS_CMDIDX_REVID 0x02
Shaun Kelsey 0:da5f5b56060a 205 #define SS_CMDIDX_FWVERSION 0x03
Shaun Kelsey 0:da5f5b56060a 206 #define SS_CMDIDX_AVAILSENSORS 0x04
Shaun Kelsey 0:da5f5b56060a 207 #define SS_CMDIDX_DRIVERVER 0x05
Shaun Kelsey 0:da5f5b56060a 208 #define SS_CMDIDX_AVAILALGOS 0x06
Shaun Kelsey 0:da5f5b56060a 209 #define SS_CMDIDX_ALGOVER 0x07
Shaun Kelsey 0:da5f5b56060a 210
Shaun Kelsey 0:da5f5b56060a 211
Shaun Kelsey 0:da5f5b56060a 212 typedef enum {
Shaun Kelsey 0:da5f5b56060a 213 SS_SUCCESS=0x00,
Shaun Kelsey 0:da5f5b56060a 214
Shaun Kelsey 0:da5f5b56060a 215 SS_ERR_COMMAND=0x01,
Shaun Kelsey 0:da5f5b56060a 216 SS_ERR_UNAVAILABLE=0x02,
Shaun Kelsey 0:da5f5b56060a 217 SS_ERR_DATA_FORMAT=0x03,
Shaun Kelsey 0:da5f5b56060a 218 SS_ERR_INPUT_VALUE=0x04,
Shaun Kelsey 0:da5f5b56060a 219
Shaun Kelsey 0:da5f5b56060a 220 SS_ERR_BTLDR_GENERAL=0x80,
Shaun Kelsey 0:da5f5b56060a 221 SS_ERR_BTLDR_CHECKSUM=0x81,
Shaun Kelsey 0:da5f5b56060a 222
Shaun Kelsey 5:e458409e913f 223 SS_ERR_TRY_AGAIN=0xFE,
Shaun Kelsey 5:e458409e913f 224 SS_ERR_UNKNOWN=0xFF,
Shaun Kelsey 0:da5f5b56060a 225 } SS_STATUS;
Shaun Kelsey 0:da5f5b56060a 226
Shaun Kelsey 0:da5f5b56060a 227 typedef enum {
Shaun Kelsey 0:da5f5b56060a 228 SS_PLAT_MAX3263X=0,
Shaun Kelsey 0:da5f5b56060a 229 SS_PLAT_MAX32660=1,
Shaun Kelsey 0:da5f5b56060a 230 } SS_PLAT_TYPE;
Shaun Kelsey 0:da5f5b56060a 231
Shaun Kelsey 0:da5f5b56060a 232 //self test result masks
Shaun Kelsey 0:da5f5b56060a 233 #define FAILURE_COMM 0x01
Shaun Kelsey 0:da5f5b56060a 234 #define FAILURE_INTERRUPT 0x02
Shaun Kelsey 0:da5f5b56060a 235
Shaun Kelsey 0:da5f5b56060a 236 #define SS_SMALL_BUF_SIZE 32
Shaun Kelsey 5:e458409e913f 237 #define SS_MED_BUF_SIZE 512
Shaun Kelsey 0:da5f5b56060a 238 #define SS_LARGE_BUF_SIZE 8224
Shaun Kelsey 0:da5f5b56060a 239
Shaun Kelsey 0:da5f5b56060a 240 #define SS_RESET_TIME 10
keremsahin 8:0f55f59ca341 241 #define SS_STARTUP_TO_BTLDR_TIME 50
keremsahin 8:0f55f59ca341 242 #define SS_STARTUP_TO_MAIN_APP_TIME 1000
Shaun Kelsey 0:da5f5b56060a 243
Shaun Kelsey 0:da5f5b56060a 244 #define SS_MAX_SUPPORTED_SENSOR_NUM 0xFE
Shaun Kelsey 0:da5f5b56060a 245 #define SS_MAX_SUPPORTED_ALGO_NUM 0xFE
Shaun Kelsey 5:e458409e913f 246 #define SS_MAX_SUPPORTED_ALGO_CFG_NUM 0xFE
Shaun Kelsey 0:da5f5b56060a 247 #define SS_MAX_SUPPORTED_MODE_NUM 0xFF
Shaun Kelsey 0:da5f5b56060a 248
Shaun Kelsey 0:da5f5b56060a 249 typedef struct {
Shaun Kelsey 0:da5f5b56060a 250 int data_size;
Shaun Kelsey 0:da5f5b56060a 251 Callback<void(uint8_t*)> callback;
Shaun Kelsey 0:da5f5b56060a 252 } ss_data_req;
Shaun Kelsey 0:da5f5b56060a 253
keremsahin 8:0f55f59ca341 254 typedef union {
keremsahin 8:0f55f59ca341 255 struct {
keremsahin 8:0f55f59ca341 256 uint16_t whrm_enabled :1;
keremsahin 8:0f55f59ca341 257 uint16_t bpt_enabled :1;
keremsahin 8:0f55f59ca341 258 uint16_t agc_enabled :1;
keremsahin 8:0f55f59ca341 259 uint16_t max8614x_enabled:1;
keremsahin 8:0f55f59ca341 260 uint16_t max3010x_enabled:1;
keremsahin 8:0f55f59ca341 261 uint16_t kx122_enabled :1;
keremsahin 8:0f55f59ca341 262 uint16_t placeholder :10;
keremsahin 8:0f55f59ca341 263 };
keremsahin 8:0f55f59ca341 264 uint16_t status_vals;
keremsahin 8:0f55f59ca341 265 } status_algo_sensors_st;
keremsahin 8:0f55f59ca341 266
Shaun Kelsey 0:da5f5b56060a 267
Shaun Kelsey 0:da5f5b56060a 268 /**
Shaun Kelsey 0:da5f5b56060a 269 * @brief SSInterface is Maxim's SmartSensor Interface class
Shaun Kelsey 0:da5f5b56060a 270 */
Shaun Kelsey 0:da5f5b56060a 271 class SSInterface
Shaun Kelsey 0:da5f5b56060a 272 {
Shaun Kelsey 0:da5f5b56060a 273 public:
Shaun Kelsey 0:da5f5b56060a 274
Shaun Kelsey 0:da5f5b56060a 275 /* PUBLIC FUNCTION DECLARATIONS */
Shaun Kelsey 0:da5f5b56060a 276 /**
Shaun Kelsey 0:da5f5b56060a 277 * @brief SSInterface constructor.
Shaun Kelsey 0:da5f5b56060a 278 *
Shaun Kelsey 0:da5f5b56060a 279 * @param[in] i2cBus - reference to the I2C bus for the SmartSensor
Shaun Kelsey 0:da5f5b56060a 280 * @param[in] ss_mfio - name of SmartSensor multi-function IO pin
Shaun Kelsey 0:da5f5b56060a 281 * @param[in] ss_reset - name of SmartSensor Reset pin
Shaun Kelsey 0:da5f5b56060a 282 *
Shaun Kelsey 0:da5f5b56060a 283 */
Shaun Kelsey 0:da5f5b56060a 284 SSInterface(I2C &i2cBus, PinName ss_mfio, PinName ss_reset);
Shaun Kelsey 0:da5f5b56060a 285
Shaun Kelsey 0:da5f5b56060a 286 /**
Shaun Kelsey 0:da5f5b56060a 287 * @brief SSInterface constructor.
Shaun Kelsey 0:da5f5b56060a 288 *
Shaun Kelsey 0:da5f5b56060a 289 * @param[in] spiBus - reference to the SPI bus for the SmartSensor
Shaun Kelsey 0:da5f5b56060a 290 * @param[in] ss_mfio - name of SmartSensor multi-function IO pin
Shaun Kelsey 0:da5f5b56060a 291 * @param[in] ss_reset - name of SmartSensor Reset pin
Shaun Kelsey 0:da5f5b56060a 292 *
Shaun Kelsey 0:da5f5b56060a 293 */
Shaun Kelsey 0:da5f5b56060a 294 SSInterface(SPI &spiBus, PinName ss_mfio, PinName ss_reset);
Shaun Kelsey 0:da5f5b56060a 295
Shaun Kelsey 0:da5f5b56060a 296 /**
Shaun Kelsey 0:da5f5b56060a 297 * @brief DSInterface destructor.
Shaun Kelsey 0:da5f5b56060a 298 *
Shaun Kelsey 0:da5f5b56060a 299 */
Shaun Kelsey 0:da5f5b56060a 300 ~SSInterface();
Shaun Kelsey 0:da5f5b56060a 301
Shaun Kelsey 0:da5f5b56060a 302 /**
Shaun Kelsey 0:da5f5b56060a 303 * @brief Write a command to the SmartSensor and get status response
Shaun Kelsey 0:da5f5b56060a 304 *
Shaun Kelsey 0:da5f5b56060a 305 * @param[in] cmd_bytes - Pointer to the command's family and index bytes
Shaun Kelsey 0:da5f5b56060a 306 * @param[in] cmd_idx_len - The number of bytes in the command
Shaun Kelsey 0:da5f5b56060a 307 * @param[in] data - Pointer to the command's data bytes
Shaun Kelsey 0:da5f5b56060a 308 * @param[in] data_len - The number data bytes
Shaun Kelsey 0:da5f5b56060a 309 *
Shaun Kelsey 0:da5f5b56060a 310 * @return SS_STATUS byte
Shaun Kelsey 0:da5f5b56060a 311 */
Shaun Kelsey 0:da5f5b56060a 312 SS_STATUS write_cmd(uint8_t *cmd_bytes, int cmd_bytes_len,
Shaun Kelsey 0:da5f5b56060a 313 uint8_t *data, int data_len,
Shaun Kelsey 0:da5f5b56060a 314 int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 0:da5f5b56060a 315
Shaun Kelsey 0:da5f5b56060a 316
Shaun Kelsey 0:da5f5b56060a 317 /**
Shaun Kelsey 0:da5f5b56060a 318 * @brief Write a command to the SmartSensor and get status response
Shaun Kelsey 0:da5f5b56060a 319 *
Shaun Kelsey 0:da5f5b56060a 320 * @param[in] tx_buf - Pointer to the command's family, index bytes and data bytes
Shaun Kelsey 0:da5f5b56060a 321 * @param[in] tx_len - Total transaction lenght to send
Shaun Kelsey 0:da5f5b56060a 322 *
Shaun Kelsey 0:da5f5b56060a 323 * @return SS_STATUS byte
Shaun Kelsey 0:da5f5b56060a 324 */
Shaun Kelsey 0:da5f5b56060a 325 SS_STATUS write_cmd(uint8_t *tx_buf, int tx_len,
Shaun Kelsey 0:da5f5b56060a 326 int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 0:da5f5b56060a 327
Shaun Kelsey 0:da5f5b56060a 328 /**
Shaun Kelsey 0:da5f5b56060a 329 * @brief Write a command to the SmartSensor and get status response
Shaun Kelsey 0:da5f5b56060a 330 *
Shaun Kelsey 0:da5f5b56060a 331 * @param[in] cmd_bytes - Pointer to the command's family and index bytes
Shaun Kelsey 0:da5f5b56060a 332 * @param[in] cmd_idx_len - The number of bytes in the command
Shaun Kelsey 0:da5f5b56060a 333 * @param[in] data - Pointer to the command's data bytes
Shaun Kelsey 0:da5f5b56060a 334 * @param[in] data_len - The number data bytes
Shaun Kelsey 0:da5f5b56060a 335 * @param[in] rxbuf - Buffer to fill in with read data (including status byte)
Shaun Kelsey 0:da5f5b56060a 336 * @param[in] rxbuf_sz - Size of the rx buffer (to prevent overflow)
Shaun Kelsey 0:da5f5b56060a 337 *
Shaun Kelsey 0:da5f5b56060a 338 * @return SS_STATUS byte
Shaun Kelsey 0:da5f5b56060a 339 */
Shaun Kelsey 0:da5f5b56060a 340 SS_STATUS read_cmd( uint8_t *cmd_bytes, int cmd_bytes_len,
Shaun Kelsey 0:da5f5b56060a 341 uint8_t *data, int data_len,
Shaun Kelsey 0:da5f5b56060a 342 uint8_t *rxbuf, int rxbuf_sz,
Shaun Kelsey 0:da5f5b56060a 343 int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 0:da5f5b56060a 344
Shaun Kelsey 0:da5f5b56060a 345 /**
Shaun Kelsey 0:da5f5b56060a 346 * @brief Get a string representing the SmartSensor firmware version
Shaun Kelsey 0:da5f5b56060a 347 * @details If in bootloader mode, returns bootloader version
Shaun Kelsey 0:da5f5b56060a 348 *
Shaun Kelsey 0:da5f5b56060a 349 * @return Pointer to firmware version string
Shaun Kelsey 0:da5f5b56060a 350 */
Shaun Kelsey 0:da5f5b56060a 351 const char* get_ss_fw_version();
Shaun Kelsey 0:da5f5b56060a 352
Shaun Kelsey 0:da5f5b56060a 353 /**
keremsahin 8:0f55f59ca341 354 * @brief Get a string representing the SmartSensor algo version
keremsahin 8:0f55f59ca341 355 * @details If in bootloader mode, returns bootloader version
keremsahin 8:0f55f59ca341 356 *
keremsahin 8:0f55f59ca341 357 * @return Pointer to algo version string
keremsahin 8:0f55f59ca341 358 */
keremsahin 8:0f55f59ca341 359 const char* get_ss_algo_version();
keremsahin 8:0f55f59ca341 360
keremsahin 8:0f55f59ca341 361 /**
Shaun Kelsey 0:da5f5b56060a 362 * @brief Get a string representing the SmartSensor platform type
Shaun Kelsey 0:da5f5b56060a 363 *
Shaun Kelsey 0:da5f5b56060a 364 * @return Pointer to platform type string
Shaun Kelsey 0:da5f5b56060a 365 */
Shaun Kelsey 0:da5f5b56060a 366 const char* get_ss_platform_name();
Shaun Kelsey 0:da5f5b56060a 367
Shaun Kelsey 0:da5f5b56060a 368 /**
Shaun Kelsey 0:da5f5b56060a 369 * @brief Reset the SmartSensor and jump to main application
Shaun Kelsey 0:da5f5b56060a 370 *
Shaun Kelsey 0:da5f5b56060a 371 * @return SS_STATUS code indicating success
Shaun Kelsey 0:da5f5b56060a 372 */
Shaun Kelsey 0:da5f5b56060a 373 SS_STATUS reset_to_main_app();
Shaun Kelsey 0:da5f5b56060a 374
Shaun Kelsey 0:da5f5b56060a 375 /**
Shaun Kelsey 0:da5f5b56060a 376 * @brief Reset the SmartSensor and jump to bootloader
Shaun Kelsey 0:da5f5b56060a 377 *
Shaun Kelsey 0:da5f5b56060a 378 * @return SS_STATUS code indicating success
Shaun Kelsey 0:da5f5b56060a 379 */
Shaun Kelsey 0:da5f5b56060a 380 SS_STATUS reset_to_bootloader();
Shaun Kelsey 0:da5f5b56060a 381
Shaun Kelsey 0:da5f5b56060a 382 /**
Shaun Kelsey 0:da5f5b56060a 383 * @brief Reset the SmartSensor
Shaun Kelsey 0:da5f5b56060a 384 * @details If the SmartSensor was in bootloader, it will jump back into bootloader
Shaun Kelsey 0:da5f5b56060a 385 * If the SmartSensor was in main app, it will jump back into main app
Shaun Kelsey 0:da5f5b56060a 386 *
Shaun Kelsey 0:da5f5b56060a 387 * @return SS_STATUS code indicating success
Shaun Kelsey 0:da5f5b56060a 388 */
Shaun Kelsey 0:da5f5b56060a 389 SS_STATUS reset();
Shaun Kelsey 0:da5f5b56060a 390
Shaun Kelsey 0:da5f5b56060a 391 /**
Shaun Kelsey 0:da5f5b56060a 392 * @brief run the self test commands
Shaun Kelsey 0:da5f5b56060a 393 * param[in] idx - the id of the sensor for the self test
Shaun Kelsey 0:da5f5b56060a 394 * param[in] result - self-test response
Shaun Kelsey 0:da5f5b56060a 395 * param[in] sleep_ms - duration of wait for read command
Shaun Kelsey 0:da5f5b56060a 396 * @return SS_STATUS code indicating success
Shaun Kelsey 0:da5f5b56060a 397 */
Shaun Kelsey 0:da5f5b56060a 398 SS_STATUS self_test(int idx, uint8_t *result, int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 0:da5f5b56060a 399
Shaun Kelsey 0:da5f5b56060a 400 /**
Shaun Kelsey 0:da5f5b56060a 401 * @brief Check if SmartSensor is in bootloader mode
Shaun Kelsey 0:da5f5b56060a 402 *
Shaun Kelsey 0:da5f5b56060a 403 * @return 1 if in bootloader mode, 0 if in main app, -1 if comm error
Shaun Kelsey 0:da5f5b56060a 404 */
Shaun Kelsey 0:da5f5b56060a 405 int in_bootldr_mode();
Shaun Kelsey 0:da5f5b56060a 406
Shaun Kelsey 0:da5f5b56060a 407
Shaun Kelsey 0:da5f5b56060a 408 /**
Shaun Kelsey 0:da5f5b56060a 409 * @brief Read register from a device onboard SmartSensor
Shaun Kelsey 0:da5f5b56060a 410 *
Shaun Kelsey 0:da5f5b56060a 411 * @param[in] idx - Index of device to read
Shaun Kelsey 0:da5f5b56060a 412 * @param[in] addr - Register address
Shaun Kelsey 0:da5f5b56060a 413 * @param[out] val - Register value
Shaun Kelsey 0:da5f5b56060a 414 *
Shaun Kelsey 0:da5f5b56060a 415 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 416 */
Shaun Kelsey 0:da5f5b56060a 417 SS_STATUS get_reg(int idx, uint8_t addr, uint32_t *val);
Shaun Kelsey 0:da5f5b56060a 418
Shaun Kelsey 0:da5f5b56060a 419 /**
Shaun Kelsey 0:da5f5b56060a 420 * @brief Set register of a device onboard SmartSensor
Shaun Kelsey 0:da5f5b56060a 421 *
Shaun Kelsey 0:da5f5b56060a 422 * @param[in] idx - Index of device to read
Shaun Kelsey 0:da5f5b56060a 423 * @param[in] addr - Register address
Shaun Kelsey 0:da5f5b56060a 424 * @param[in] val - Register value
Shaun Kelsey 0:da5f5b56060a 425 * @param[in] byte_size - Size of IC register in bytes
Shaun Kelsey 0:da5f5b56060a 426 *
Shaun Kelsey 0:da5f5b56060a 427 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 428 */
Shaun Kelsey 0:da5f5b56060a 429 SS_STATUS set_reg(int idx, uint8_t addr, uint32_t val, int byte_size);
Shaun Kelsey 0:da5f5b56060a 430
Shaun Kelsey 0:da5f5b56060a 431 /**
Shaun Kelsey 0:da5f5b56060a 432 * @brief Dump registers of a device onboard SmartSensor
Shaun Kelsey 0:da5f5b56060a 433 *
Shaun Kelsey 0:da5f5b56060a 434 * @param[in] idx - Index of device
Shaun Kelsey 0:da5f5b56060a 435 * @param[in] reg_vals - Array of addr_val_pairs
Shaun Kelsey 0:da5f5b56060a 436 * @param[in] reg_vals_sz - Number of items reg_vals can hold
Shaun Kelsey 0:da5f5b56060a 437 * @param[out] num_regs - Number of registers returned by command
Shaun Kelsey 0:da5f5b56060a 438 *
Shaun Kelsey 0:da5f5b56060a 439 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 440 */
Shaun Kelsey 0:da5f5b56060a 441 SS_STATUS dump_reg(int idx, addr_val_pair* reg_vals, int reg_vals_sz, int* num_regs);
Shaun Kelsey 0:da5f5b56060a 442
Shaun Kelsey 0:da5f5b56060a 443
Shaun Kelsey 0:da5f5b56060a 444 /**
Shaun Kelsey 0:da5f5b56060a 445 * @brief Enable a device on the SmartSensor
Shaun Kelsey 0:da5f5b56060a 446 *
Shaun Kelsey 0:da5f5b56060a 447 * @param[in] idx - Index of device
Shaun Kelsey 0:da5f5b56060a 448 * @param[in] mode - Mode to set the device to
Shaun Kelsey 0:da5f5b56060a 449 * @param[in] data_req - Data request
Shaun Kelsey 0:da5f5b56060a 450 *
Shaun Kelsey 0:da5f5b56060a 451 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 452 */
Shaun Kelsey 0:da5f5b56060a 453 SS_STATUS enable_sensor(int idx, int mode, ss_data_req* data_req);
Shaun Kelsey 0:da5f5b56060a 454
Shaun Kelsey 0:da5f5b56060a 455 /**
Shaun Kelsey 0:da5f5b56060a 456 * @brief Disable a device on the SmartSensor
Shaun Kelsey 0:da5f5b56060a 457 *
Shaun Kelsey 0:da5f5b56060a 458 * @param[in] idx - Index of device
Shaun Kelsey 0:da5f5b56060a 459 *
Shaun Kelsey 0:da5f5b56060a 460 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 461 */
Shaun Kelsey 0:da5f5b56060a 462 SS_STATUS disable_sensor(int idx);
Shaun Kelsey 0:da5f5b56060a 463
Shaun Kelsey 0:da5f5b56060a 464 /**
Shaun Kelsey 0:da5f5b56060a 465 * @brief Enable an algorithm on the SmartSensor
Shaun Kelsey 0:da5f5b56060a 466 *
Shaun Kelsey 0:da5f5b56060a 467 * @param[in] idx - Index of device
Shaun Kelsey 0:da5f5b56060a 468 * @param[in] mode - Mode to set the device to
Shaun Kelsey 0:da5f5b56060a 469 * @param[in] data_req - Data request
Shaun Kelsey 0:da5f5b56060a 470 *
Shaun Kelsey 0:da5f5b56060a 471 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 472 */
Shaun Kelsey 0:da5f5b56060a 473 SS_STATUS enable_algo(int idx, int mode, ss_data_req* data_req);
Shaun Kelsey 0:da5f5b56060a 474
Shaun Kelsey 0:da5f5b56060a 475 /**
Shaun Kelsey 0:da5f5b56060a 476 * @brief Disable an algorithm on the SmartSensor
Shaun Kelsey 0:da5f5b56060a 477 *
Shaun Kelsey 0:da5f5b56060a 478 * @param[in] idx - Index of device
Shaun Kelsey 0:da5f5b56060a 479 *
Shaun Kelsey 0:da5f5b56060a 480 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 481 */
Shaun Kelsey 0:da5f5b56060a 482 SS_STATUS disable_algo(int idx);
Shaun Kelsey 0:da5f5b56060a 483
Shaun Kelsey 5:e458409e913f 484 /**
Shaun Kelsey 5:e458409e913f 485 * @brief Set the value of an algorithm configuration parameter
Shaun Kelsey 5:e458409e913f 486 *
Shaun Kelsey 5:e458409e913f 487 * @param[in] algo_idx Index of algorithm
Shaun Kelsey 5:e458409e913f 488 * @param[in] cfg_idx Index of configuration parameter
Shaun Kelsey 5:e458409e913f 489 * @param[in] cfg Array of configuration bytes
Shaun Kelsey 5:e458409e913f 490 * @param[in] cfg_sz Size of cfg array
Shaun Kelsey 5:e458409e913f 491 *
Shaun Kelsey 5:e458409e913f 492 * @return SS_SUCCESS on success
Shaun Kelsey 5:e458409e913f 493 */
Shaun Kelsey 5:e458409e913f 494 SS_STATUS set_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz);
Shaun Kelsey 5:e458409e913f 495
Shaun Kelsey 5:e458409e913f 496 /**
Shaun Kelsey 5:e458409e913f 497 * @brief Get the value of an algorithm configuration parameter
Shaun Kelsey 5:e458409e913f 498 *
Shaun Kelsey 5:e458409e913f 499 * @param[in] algo_idx Index of algorithm
Shaun Kelsey 5:e458409e913f 500 * @param[in] cfg_idx Index of configuration parameter
Shaun Kelsey 5:e458409e913f 501 * @param[in] cfg Array of configuration bytes to be filled in
Shaun Kelsey 5:e458409e913f 502 * @param[in] cfg_sz Number of bytes to be read
Shaun Kelsey 5:e458409e913f 503 *
Shaun Kelsey 5:e458409e913f 504 * @return SS_SUCCESS on success
Shaun Kelsey 5:e458409e913f 505 */
Shaun Kelsey 5:e458409e913f 506 SS_STATUS get_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz);
Shaun Kelsey 0:da5f5b56060a 507
Shaun Kelsey 0:da5f5b56060a 508 /**
Shaun Kelsey 0:da5f5b56060a 509 * @brief Set the CommChannel Output Mode options
Shaun Kelsey 0:da5f5b56060a 510 *
Shaun Kelsey 0:da5f5b56060a 511 * @param[in] data_type - Set to 0 for only algorithm data
Shaun Kelsey 0:da5f5b56060a 512 * Set to 1 for only raw sensor data
Shaun Kelsey 0:da5f5b56060a 513 * Set to 2 for algo + raw sensor data
Shaun Kelsey 0:da5f5b56060a 514 * Set to 3 for no data
Shaun Kelsey 0:da5f5b56060a 515 * @param[in] sc_en - Set to true to receive 1 byte sample count from SmartSensor
Shaun Kelsey 0:da5f5b56060a 516 *
Shaun Kelsey 0:da5f5b56060a 517 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 518 */
Shaun Kelsey 0:da5f5b56060a 519 SS_STATUS set_data_type(int data_type, bool sc_en);
Shaun Kelsey 0:da5f5b56060a 520
Shaun Kelsey 0:da5f5b56060a 521 /**
Shaun Kelsey 0:da5f5b56060a 522 * @brief Get the CommChannel Output Mode options
Shaun Kelsey 0:da5f5b56060a 523 *
Shaun Kelsey 0:da5f5b56060a 524 * @param[out] data_type - 0 for only algorithm data
Shaun Kelsey 0:da5f5b56060a 525 * 1 for only raw sensor data
Shaun Kelsey 0:da5f5b56060a 526 * 2 for algo + raw sensor data
Shaun Kelsey 0:da5f5b56060a 527 * 3 for no data
Shaun Kelsey 0:da5f5b56060a 528 * @param[in] sc_en - If true, SmartSensor prepends data with 1 byte sample count
Shaun Kelsey 0:da5f5b56060a 529 *
Shaun Kelsey 0:da5f5b56060a 530 * @return SS_SUCCESS on success
Shaun Kelsey 0:da5f5b56060a 531 */
Shaun Kelsey 0:da5f5b56060a 532 SS_STATUS get_data_type(int* data_type, bool *sc_en);
Shaun Kelsey 0:da5f5b56060a 533
Shaun Kelsey 5:e458409e913f 534 /**
Shaun Kelsey 5:e458409e913f 535 * @brief Set the number of samples for the SmartSensor to collect
Shaun Kelsey 5:e458409e913f 536 * before issuing an interrupt
Shaun Kelsey 5:e458409e913f 537 *
Shaun Kelsey 5:e458409e913f 538 * @param[in] thresh - Number of samples (1-255) to collect before interrupt
Shaun Kelsey 5:e458409e913f 539 *
Shaun Kelsey 5:e458409e913f 540 * @return SS_SUCCESS on success
Shaun Kelsey 5:e458409e913f 541 */
Shaun Kelsey 5:e458409e913f 542 SS_STATUS set_fifo_thresh(int thresh);
Shaun Kelsey 5:e458409e913f 543
Shaun Kelsey 5:e458409e913f 544 /**
Shaun Kelsey 5:e458409e913f 545 * @brief Get the number of samples the SmartSensor will collect
Shaun Kelsey 5:e458409e913f 546 * before issuing an interrupt
Shaun Kelsey 5:e458409e913f 547 *
Shaun Kelsey 5:e458409e913f 548 * @param[out] thresh - Number of samples (1-255) collected before interrupt
Shaun Kelsey 5:e458409e913f 549 *
Shaun Kelsey 5:e458409e913f 550 * @return SS_SUCCESS on success
Shaun Kelsey 5:e458409e913f 551 */
Shaun Kelsey 5:e458409e913f 552 SS_STATUS get_fifo_thresh(int *thresh);
Shaun Kelsey 5:e458409e913f 553
Shaun Kelsey 5:e458409e913f 554 /**
Shaun Kelsey 5:e458409e913f 555 * @brief Check that the SmartSensor is connected
Shaun Kelsey 5:e458409e913f 556 */
Shaun Kelsey 5:e458409e913f 557 SS_STATUS ss_comm_check();
Shaun Kelsey 5:e458409e913f 558
Ismail Kose 7:3e2a5545f1d8 559 SS_STATUS stay_in_bootloader();
Ismail Kose 7:3e2a5545f1d8 560 SS_STATUS exit_from_bootloader();
Shaun Kelsey 5:e458409e913f 561
Shaun Kelsey 0:da5f5b56060a 562 void enable_irq();
Shaun Kelsey 0:da5f5b56060a 563 void disable_irq();
Shaun Kelsey 0:da5f5b56060a 564
Shaun Kelsey 0:da5f5b56060a 565 void mfio_selftest();
Shaun Kelsey 0:da5f5b56060a 566 bool reset_mfio_irq();
Shaun Kelsey 0:da5f5b56060a 567
Shaun Kelsey 5:e458409e913f 568 void ss_execute_once();
Shaun Kelsey 5:e458409e913f 569 void ss_clear_interrupt_flag();
Shaun Kelsey 5:e458409e913f 570
Shaun Kelsey 0:da5f5b56060a 571 private:
Shaun Kelsey 0:da5f5b56060a 572
Shaun Kelsey 0:da5f5b56060a 573 /* PRIVATE VARIABLES */
Shaun Kelsey 0:da5f5b56060a 574 I2C *m_i2cBus;
Shaun Kelsey 0:da5f5b56060a 575 SPI *m_spiBus;
Shaun Kelsey 0:da5f5b56060a 576 DigitalInOut mfio_pin;
Shaun Kelsey 0:da5f5b56060a 577 DigitalInOut reset_pin;
Shaun Kelsey 0:da5f5b56060a 578 InterruptIn irq_pin;
Shaun Kelsey 0:da5f5b56060a 579
Shaun Kelsey 0:da5f5b56060a 580 char fw_version[128];
keremsahin 8:0f55f59ca341 581 char algo_version[128];
Shaun Kelsey 0:da5f5b56060a 582 const char* plat_name;
Shaun Kelsey 0:da5f5b56060a 583
Ismail Kose 7:3e2a5545f1d8 584 bool in_bootldr;
Shaun Kelsey 0:da5f5b56060a 585 bool sc_en;
Shaun Kelsey 0:da5f5b56060a 586 int data_type;
Shaun Kelsey 0:da5f5b56060a 587
Shaun Kelsey 0:da5f5b56060a 588 int sensor_enabled_mode[SS_MAX_SUPPORTED_SENSOR_NUM];
Shaun Kelsey 0:da5f5b56060a 589 int algo_enabled_mode[SS_MAX_SUPPORTED_ALGO_NUM];
Shaun Kelsey 0:da5f5b56060a 590 ss_data_req* sensor_data_reqs[SS_MAX_SUPPORTED_SENSOR_NUM];
Shaun Kelsey 0:da5f5b56060a 591 ss_data_req* algo_data_reqs[SS_MAX_SUPPORTED_ALGO_NUM];
Shaun Kelsey 0:da5f5b56060a 592
Shaun Kelsey 0:da5f5b56060a 593 /* PRIVATE METHODS */
Shaun Kelsey 0:da5f5b56060a 594 SS_STATUS write_cmd_small(uint8_t *cmd_bytes, int cmd_bytes_len,
Shaun Kelsey 0:da5f5b56060a 595 uint8_t *data, int data_len,
Shaun Kelsey 0:da5f5b56060a 596 int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 5:e458409e913f 597 SS_STATUS write_cmd_medium(uint8_t *cmd_bytes, int cmd_bytes_len,
Shaun Kelsey 5:e458409e913f 598 uint8_t *data, int data_len,
Shaun Kelsey 5:e458409e913f 599 int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 0:da5f5b56060a 600 SS_STATUS write_cmd_large(uint8_t *cmd_bytes, int cmd_bytes_len,
Shaun Kelsey 0:da5f5b56060a 601 uint8_t *data, int data_len,
Shaun Kelsey 0:da5f5b56060a 602 int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
Shaun Kelsey 0:da5f5b56060a 603 void cfg_mfio(PinDirection);
Shaun Kelsey 0:da5f5b56060a 604
Shaun Kelsey 0:da5f5b56060a 605 void irq_handler();
Shaun Kelsey 5:e458409e913f 606 volatile bool m_irq_received_;
Shaun Kelsey 5:e458409e913f 607
Shaun Kelsey 0:da5f5b56060a 608
Shaun Kelsey 0:da5f5b56060a 609 void irq_handler_selftest();
Shaun Kelsey 0:da5f5b56060a 610 volatile bool mfio_int_happened;
Shaun Kelsey 0:da5f5b56060a 611
Shaun Kelsey 0:da5f5b56060a 612 SS_STATUS read_fifo_data(int num_samples, int sample_size, uint8_t* databuf, int databuf_sz);
Shaun Kelsey 0:da5f5b56060a 613 SS_STATUS num_avail_samples(int* num_samples);
keremsahin 8:0f55f59ca341 614 SS_STATUS get_log_len(int *log_len);
keremsahin 8:0f55f59ca341 615 SS_STATUS read_ss_log(int num_bytes, uint8_t *log_buf, int log_buf_sz);
Shaun Kelsey 0:da5f5b56060a 616 void fifo_sample_size(int data_type, int* sample_size);
Shaun Kelsey 5:e458409e913f 617
keremsahin 8:0f55f59ca341 618 // EventStats irq_evt;
Shaun Kelsey 0:da5f5b56060a 619 };
Shaun Kelsey 0:da5f5b56060a 620
Shaun Kelsey 0:da5f5b56060a 621
Shaun Kelsey 0:da5f5b56060a 622 #endif