Maxim Integrated / Mbed OS MAXREFDES220#

Dependencies:   USBDevice max32630fthr

Committer:
Shaun Kelsey
Date:
Thu May 24 14:40:48 2018 -0700
Revision:
5:795cffb6f01a
Parent:
4:5696ebf1c344
Bootloader feature additions

New configuration options for bootloader

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:795cffb6f01a 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:5696ebf1c344 52 #define SS_SENSORIDX_MAX86140 0x00
Shaun Kelsey 4:5696ebf1c344 53 #define SS_SENSORIDX_MAX30205 0x01
Shaun Kelsey 4:5696ebf1c344 54 #define SS_SENSORIDX_MAX30001 0x02
Shaun Kelsey 4:5696ebf1c344 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:795cffb6f01a 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:795cffb6f01a 124 #define SS_CFGIDX_AGC_TARGET 0x00
Shaun Kelsey 5:795cffb6f01a 125 #define SS_CFGIDX_AGC_CORR_COEFF 0x01
Shaun Kelsey 5:795cffb6f01a 126 #define SS_CFGIDX_AGC_SENSITIVITY 0x02
Shaun Kelsey 5:795cffb6f01a 127 #define SS_CFGIDX_AGC_SMP_AVG 0x03
Shaun Kelsey 5:795cffb6f01a 128
Shaun Kelsey 5:795cffb6f01a 129 #define SS_CFGIDX_WHRM_SR 0x00
Shaun Kelsey 5:795cffb6f01a 130 #define SS_CFGIDX_WHRM_MAX_HEIGHT 0x01
Shaun Kelsey 5:795cffb6f01a 131 #define SS_CFGIDX_WHRM_MAX_WEIGHT 0x02
Shaun Kelsey 5:795cffb6f01a 132 #define SS_CFGIDX_WHRM_MAX_AGE 0x03
Shaun Kelsey 5:795cffb6f01a 133 #define SS_CFGIDX_WHRM_MIN_HEIGHT 0x04
Shaun Kelsey 5:795cffb6f01a 134 #define SS_CFGIDX_WHRM_MIN_WEIGHT 0x05
Shaun Kelsey 5:795cffb6f01a 135 #define SS_CFGIDX_WHRM_MIN_AGE 0x06
Shaun Kelsey 5:795cffb6f01a 136 #define SS_CFGIDX_WHRM_DEF_HEIGHT 0x07
Shaun Kelsey 5:795cffb6f01a 137 #define SS_CFGIDX_WHRM_DEF_WEIGHT 0x08
Shaun Kelsey 5:795cffb6f01a 138 #define SS_CFGIDX_WHRM_DEF_AGE 0x09
Shaun Kelsey 5:795cffb6f01a 139 #define SS_CFGIDX_WHRM_INIT_HR 0x0A
Shaun Kelsey 5:795cffb6f01a 140
Shaun Kelsey 5:795cffb6f01a 141 #define SS_CFGIDX_BP_USE_MED 0x00
Shaun Kelsey 5:795cffb6f01a 142 #define SS_CFGIDX_BP_SYS_BP_CAL 0x01
Shaun Kelsey 5:795cffb6f01a 143 #define SS_CFGIDX_BP_DIA_BP_CAL 0x02
Shaun Kelsey 5:795cffb6f01a 144 #define SS_CFGIDX_BP_CAL_DATA 0x03
Shaun Kelsey 5:795cffb6f01a 145 #define SS_CFGIDX_BP_EST_DATE 0x04
Shaun Kelsey 5:795cffb6f01a 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:795cffb6f01a 162 #define SS_CMDIDX_ERASE_PAGE 0x05
Shaun Kelsey 5:795cffb6f01a 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:795cffb6f01a 168 #define SS_FAM_W_BOOTLOADER_CFG 0x82
Shaun Kelsey 5:795cffb6f01a 169 #define SS_FAM_R_BOOTLOADER_CFG 0x83
Shaun Kelsey 5:795cffb6f01a 170 #define SS_CMDIDX_BL_SAVE 0x00
Shaun Kelsey 5:795cffb6f01a 171 #define SS_CMDIDX_BL_ENTRY 0x01
Shaun Kelsey 5:795cffb6f01a 172 #define SS_BL_CFG_ENTER_BL_MODE 0x00
Shaun Kelsey 5:795cffb6f01a 173 #define SS_BL_CFG_EBL_PIN 0x01
Shaun Kelsey 5:795cffb6f01a 174 #define SS_BL_CFG_EBL_POL 0x02
Shaun Kelsey 5:795cffb6f01a 175 #define SS_CMDIDX_BL_EXIT 0x02
Shaun Kelsey 5:795cffb6f01a 176 #define SS_BL_CFG_EXIT_BL_MODE 0x00
Shaun Kelsey 5:795cffb6f01a 177 #define SS_BL_CFG_TIMEOUT 0x01
Shaun Kelsey 5:795cffb6f01a 178
Shaun Kelsey 5:795cffb6f01a 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:795cffb6f01a 203 SS_ERR_TRY_AGAIN=0xFE,
Shaun Kelsey 5:795cffb6f01a 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:795cffb6f01a 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:795cffb6f01a 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:795cffb6f01a 442 /**
Shaun Kelsey 5:795cffb6f01a 443 * @brief Set the value of an algorithm configuration parameter
Shaun Kelsey 5:795cffb6f01a 444 *
Shaun Kelsey 5:795cffb6f01a 445 * @param[in] algo_idx Index of algorithm
Shaun Kelsey 5:795cffb6f01a 446 * @param[in] cfg_idx Index of configuration parameter
Shaun Kelsey 5:795cffb6f01a 447 * @param[in] cfg Array of configuration bytes
Shaun Kelsey 5:795cffb6f01a 448 * @param[in] cfg_sz Size of cfg array
Shaun Kelsey 5:795cffb6f01a 449 *
Shaun Kelsey 5:795cffb6f01a 450 * @return SS_SUCCESS on success
Shaun Kelsey 5:795cffb6f01a 451 */
Shaun Kelsey 5:795cffb6f01a 452 SS_STATUS set_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz);
Shaun Kelsey 5:795cffb6f01a 453
Shaun Kelsey 5:795cffb6f01a 454 /**
Shaun Kelsey 5:795cffb6f01a 455 * @brief Get the value of an algorithm configuration parameter
Shaun Kelsey 5:795cffb6f01a 456 *
Shaun Kelsey 5:795cffb6f01a 457 * @param[in] algo_idx Index of algorithm
Shaun Kelsey 5:795cffb6f01a 458 * @param[in] cfg_idx Index of configuration parameter
Shaun Kelsey 5:795cffb6f01a 459 * @param[in] cfg Array of configuration bytes to be filled in
Shaun Kelsey 5:795cffb6f01a 460 * @param[in] cfg_sz Number of bytes to be read
Shaun Kelsey 5:795cffb6f01a 461 *
Shaun Kelsey 5:795cffb6f01a 462 * @return SS_SUCCESS on success
Shaun Kelsey 5:795cffb6f01a 463 */
Shaun Kelsey 5:795cffb6f01a 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:795cffb6f01a 492 /**
Shaun Kelsey 5:795cffb6f01a 493 * @brief Set the number of samples for the SmartSensor to collect
Shaun Kelsey 5:795cffb6f01a 494 * before issuing an interrupt
Shaun Kelsey 5:795cffb6f01a 495 *
Shaun Kelsey 5:795cffb6f01a 496 * @param[in] thresh - Number of samples (1-255) to collect before interrupt
Shaun Kelsey 5:795cffb6f01a 497 *
Shaun Kelsey 5:795cffb6f01a 498 * @return SS_SUCCESS on success
Shaun Kelsey 5:795cffb6f01a 499 */
Shaun Kelsey 5:795cffb6f01a 500 SS_STATUS set_fifo_thresh(int thresh);
Shaun Kelsey 5:795cffb6f01a 501
Shaun Kelsey 5:795cffb6f01a 502 /**
Shaun Kelsey 5:795cffb6f01a 503 * @brief Get the number of samples the SmartSensor will collect
Shaun Kelsey 5:795cffb6f01a 504 * before issuing an interrupt
Shaun Kelsey 5:795cffb6f01a 505 *
Shaun Kelsey 5:795cffb6f01a 506 * @param[out] thresh - Number of samples (1-255) collected before interrupt
Shaun Kelsey 5:795cffb6f01a 507 *
Shaun Kelsey 5:795cffb6f01a 508 * @return SS_SUCCESS on success
Shaun Kelsey 5:795cffb6f01a 509 */
Shaun Kelsey 5:795cffb6f01a 510 SS_STATUS get_fifo_thresh(int *thresh);
Shaun Kelsey 5:795cffb6f01a 511
Shaun Kelsey 5:795cffb6f01a 512 /**
Shaun Kelsey 5:795cffb6f01a 513 * @brief Check that the SmartSensor is connected
Shaun Kelsey 5:795cffb6f01a 514 */
Shaun Kelsey 5:795cffb6f01a 515 SS_STATUS ss_comm_check();
Shaun Kelsey 5:795cffb6f01a 516
Shaun Kelsey 5:795cffb6f01a 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:795cffb6f01a 524 void ss_execute_once();
Shaun Kelsey 5:795cffb6f01a 525 void ss_clear_interrupt_flag();
Shaun Kelsey 5:795cffb6f01a 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:795cffb6f01a 551 SS_STATUS write_cmd_medium(uint8_t *cmd_bytes, int cmd_bytes_len,
Shaun Kelsey 5:795cffb6f01a 552 uint8_t *data, int data_len,
Shaun Kelsey 5:795cffb6f01a 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:795cffb6f01a 560 volatile bool m_irq_received_;
Shaun Kelsey 5:795cffb6f01a 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:795cffb6f01a 569
Shaun Kelsey 5:795cffb6f01a 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