Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BMI160 max32630hsp3 MemoryLCD USBDevice
SHComm.h
00001 /* 00002 * SHComm.h 00003 * 00004 * Created on: Nov 16, 2018 00005 * Author: Yagmur.Gok 00006 */ 00007 00008 #ifndef SOURCE_SHCOMM_H_ 00009 #define SOURCE_SHCOMM_H_ 00010 00011 /* 00012 #ifdef __cplusplus 00013 extern "C" { 00014 #endif 00015 */ 00016 00017 // Sensor/Algo indicies 00018 #define SH_SENSORIDX_MAX8614X 0x00 00019 #define SH_SENSORIDX_MAX30205 0x01 00020 #define SH_SENSORIDX_MAX30001 0x02 00021 #define SH_SENSORIDX_MAX30101 0x03 00022 #define SH_SENSORIDX_ACCEL 0x04 00023 #define SH_NUM_CURRENT_SENSORS 5 00024 00025 #define SH_ALGOIDX_AGC 0x00 00026 #define SH_ALGOIDX_AEC 0x01 00027 #define SH_ALGOIDX_WHRM 0x02 00028 #define SH_ALGOIDX_ECG 0x03 00029 #define SH_ALGOIDX_BPT 0x04 00030 #define SH_ALGOIDX_WSPO2 0x05 00031 #define SH_NUM_CURRENT_ALGOS 6 00032 00033 #define PADDING_BYTE (0xEE) 00034 #define DATA_BYTE (0xED) 00035 00036 00037 #define SS_I2C_8BIT_SLAVE_ADDR 0xAA 00038 #define SS_DEFAULT_CMD_SLEEP_MS 2 00039 #define SS_DUMP_REG_SLEEP_MS 100 00040 #define SS_ENABLE_SENSOR_SLEEP_MS 20 00041 #define SS_BOOTLOADER_ERASE_DELAY 1000 00042 00043 #define SH_INPUT_DATA_DIRECT_SENSOR 0x00 00044 #define SH_INPUT_DATA_FROM_HOST 0x01 00045 00046 #define SS_FAM_R_STATUS 0x00 00047 #define SS_CMDIDX_STATUS 0x00 00048 #define SS_SHIFT_STATUS_ERR 0 00049 #define SS_MASK_STATUS_ERR (0x07 << SS_SHIFT_STATUS_ERR) 00050 #define SS_SHIFT_STATUS_DATA_RDY 3 00051 #define SS_MASK_STATUS_DATA_RDY (1 << SS_SHIFT_STATUS_DATA_RDY) 00052 #define SS_SHIFT_STATUS_FIFO_OUT_OVR 4 00053 #define SS_MASK_STATUS_FIFO_OUT_OVR (1 << SS_SHIFT_STATUS_FIFO_OUT_OVR) 00054 #define SS_SHIFT_STATUS_FIFO_IN_OVR 5 00055 #define SS_MASK_STATUS_FIFO_IN_OVR (1 << SS_SHIFT_STATUS_FIFO_IN_OVR) 00056 00057 #define SS_SHIFT_STATUS_LOG_OVR 6 00058 #define SS_MASK_STATUS_LOG_OVR (1 << SS_SHIFT_STATUS_LOG_OVR) 00059 00060 #define SS_SHIFT_STATUS_LOG_RDY 7 00061 #define SS_MASK_STATUS_LOG_RDY (1 << SS_SHIFT_STATUS_LOG_RDY) 00062 00063 00064 00065 #define SS_FAM_W_MODE 0x01 00066 #define SS_FAM_R_MODE 0x02 00067 #define SS_CMDIDX_MODE 0x00 00068 #define SS_SHIFT_MODE_SHDN 0 00069 #define SS_MASK_MODE_SHDN (1 << SS_SHIFT_MODE_SHDN) 00070 #define SS_SHIFT_MODE_RESET 1 00071 #define SS_MASK_MODE_RESET (1 << SS_SHIFT_MODE_RESET) 00072 #define SS_SHIFT_MODE_FIFORESET 2 00073 #define SS_MASK_MODE_FIFORESET (1 << SS_SHIFT_MODE_FIFORESET) 00074 #define SS_SHIFT_MODE_BOOTLDR 3 00075 #define SS_MASK_MODE_BOOTLDR (1 << SS_SHIFT_MODE_BOOTLDR) 00076 00077 /*MYG*/ 00078 #define SH_MODE_REQUEST_RET_BYTES (2) 00079 #define SH_MODE_REQUEST_DELAY (2) 00080 #define SH_STATUS_REQUEST_RET_BYTES (2) 00081 #define SH_STATUS_REQUEST_DELAY (2) 00082 00083 00084 00085 #define SS_I2C_READ 0x03 00086 00087 #define SS_FAM_W_COMMCHAN 0x10 00088 #define SS_FAM_R_COMMCHAN 0x11 00089 #define SS_CMDIDX_OUTPUTMODE 0x00 00090 #define SS_SHIFT_OUTPUTMODE_DATATYPE 0 00091 #define SS_MASK_OUTPUTMODE_DATATYPE (0x03 << SS_SHIFT_OUTPUTMODE_DATATYPE) 00092 #define SS_DATATYPE_PAUSE 0 00093 #define SS_DATATYPE_RAW 1 00094 #define SS_DATATYPE_ALGO 2 00095 #define SS_DATATYPE_BOTH 3 00096 #define SS_SHIFT_OUTPUTMODE_SC_EN 2 00097 #define SS_MASK_OUTPUTMODE_SC_EN (1 << SS_SHIFT_OUTPUTMODE_SC_EN) 00098 #define SS_CMDIDX_FIFOAFULL 0x01 00099 00100 #define SS_FAM_R_OUTPUTFIFO 0x12 00101 #define SS_CMDIDX_OUT_NUMSAMPLES 0x00 00102 #define SS_CMDIDX_READFIFO 0x01 00103 00104 #define SS_FAM_R_INPUTFIFO 0x13 00105 #define SS_CMDIDX_SAMPLE_SIZE 0x00 00106 #define SS_CMDIDX_INPUT_FIFO_SIZE 0x01 00107 #define SS_CMDIDX_SENSOR_FIFO_SIZE 0x02 00108 #define SS_CMDIDX_NUM_SAMPLES_SENSOR_FIFO 0x03 00109 #define SS_CMDIDX_NUM_SAMPLES_INPUT_FIFO 0x04 00110 00111 #define SS_FAM_W_INPUTFIFO 0x14 00112 #define SS_CMDIDN_WRITEFIFO 0x00 00113 #define SS_CMDIDX_WRITE_FIFO 0x00 00114 00115 #define SS_FAM_W_WRITEREG 0x40 00116 #define SS_FAM_R_READREG 0x41 00117 #define SS_FAM_R_REGATTRIBS 0x42 00118 #define SS_FAM_R_DUMPREG 0x43 00119 00120 #define SS_FAM_W_SENSORMODE 0x44 00121 #define SS_FAM_R_SENSORMODE 0x45 00122 00123 //TODO: Fill in known configuration parameters 00124 #define SS_FAM_W_ALGOCONFIG 0x50 00125 #define SS_FAM_R_ALGOCONFIG 0x51 00126 #define SS_CFGIDX_AGC_TARGET 0x00 00127 #define SS_CFGIDX_AGC_CORR_COEFF 0x01 00128 #define SS_CFGIDX_AGC_SENSITIVITY 0x02 00129 #define SS_CFGIDX_AGC_SMP_AVG 0x03 00130 00131 #define SS_CFGIDX_WHRM_SR 0x00 00132 #define SS_CFGIDX_WHRM_MAX_HEIGHT 0x01 00133 #define SS_CFGIDX_WHRM_MAX_WEIGHT 0x02 00134 #define SS_CFGIDX_WHRM_MAX_AGE 0x03 00135 #define SS_CFGIDX_WHRM_MIN_HEIGHT 0x04 00136 #define SS_CFGIDX_WHRM_MIN_WEIGHT 0x05 00137 #define SS_CFGIDX_WHRM_MIN_AGE 0x06 00138 #define SS_CFGIDX_WHRM_DEF_HEIGHT 0x07 00139 #define SS_CFGIDX_WHRM_DEF_WEIGHT 0x08 00140 #define SS_CFGIDX_WHRM_DEF_AGE 0x09 00141 #define SS_CFGIDX_WHRM_INIT_HR 0x0A 00142 // additional for WHRM_AEC_SCD 00143 #define SS_CFGIDX_WHRM_AEC_ENABLE 0x0B 00144 #define SS_CFGIDX_WHRM_SCD_ENABLE 0x0C 00145 #define SS_CFGIDX_WHRM_ADJ_TARGET_PD_CURRENT_PERIOD 0x0D 00146 #define SS_CFGIDX_WHRM_SCD_DEBOUNCE_WINDOW 0x0E 00147 #define SS_CFGIDX_WHRM_MOTION_MAG_THRESHOLD 0x0F 00148 #define SS_CFGIDX_WHRM_MIN_PD_CURRENT 0x10 00149 #define SS_CFGIDX_WHRM_PD_CONFIG 0x11 00150 00151 // config for WSPO2 00152 #define SS_CFGIDX_WSPO2_CAL 0x00 00153 #define SS_CFGIDX_WSPO2_SR 0x01 00154 #define SS_CFGIDX_WSPO2_ALGO_MODE 0x02 00155 #define SS_CFGIDX_WSPO2_AGC_MODE 0x03 00156 #define SS_CFGIDX_WSPO2_MOTION_DET 0x04 00157 #define SS_CFGIDX_WSPO2_MOTION_PERIOD 0x05 00158 #define SS_CFGIDX_WSPO2_MOTION_THRESHOLD 0x06 00159 #define SS_CFGIDX_WSPO2_AGC_TIMEOUT 0x07 00160 #define SS_CFGIDX_WSPO2_TIMEOUT 0x08 00161 #define SS_CFGIDX_WSPO2_PD_CONFIG 0x09 00162 00163 #define SS_CFGIDX_BP_USE_MED 0x00 00164 #define SS_CFGIDX_BP_SYS_BP_CAL 0x01 00165 #define SS_CFGIDX_BP_DIA_BP_CAL 0x02 00166 #define SS_CFGIDX_BP_CAL_DATA 0x03 00167 #define SS_CFGIDX_BP_EST_DATE 0x04 00168 #define SS_CFGIDX_BP_EST_NONREST 0x05 00169 00170 #define SS_FAM_W_ALGOMODE 0x52 00171 #define SS_FAM_R_ALGOMODE 0x53 00172 00173 #define SS_FAM_W_EXTERNSENSORMODE 0x60 00174 #define SS_FAM_R_EXTERNSENSORMODE 0x61 00175 00176 #define SS_FAM_R_SELFTEST 0x70 00177 00178 #define SS_FAM_W_BOOTLOADER 0x80 00179 #define SS_CMDIDX_SETIV 0x00 00180 #define SS_CMDIDX_SETAUTH 0x01 00181 #define SS_CMDIDX_SETNUMPAGES 0x02 00182 #define SS_CMDIDX_ERASE 0x03 00183 #define SS_CMDIDX_SENDPAGE 0x04 00184 #define SS_CMDIDX_ERASE_PAGE 0x05 00185 #define SS_FAM_R_BOOTLOADER 0x81 00186 #define SS_CMDIDX_BOOTFWVERSION 0x00 00187 #define SS_CMDIDX_PAGESIZE 0x01 00188 00189 #define SS_FAM_W_BOOTLOADER_CFG 0x82 00190 #define SS_FAM_R_BOOTLOADER_CFG 0x83 00191 #define SS_CMDIDX_BL_SAVE 0x00 00192 #define SS_CMDIDX_BL_ENTRY 0x01 00193 #define SS_BL_CFG_ENTER_BL_MODE 0x00 00194 #define SS_BL_CFG_EBL_PIN 0x01 00195 #define SS_BL_CFG_EBL_POL 0x02 00196 #define SS_CMDIDX_BL_EXIT 0x02 00197 #define SS_BL_CFG_EXIT_BL_MODE 0x00 00198 #define SS_BL_CFG_TIMEOUT 0x01 00199 00200 /* Enable logging/debugging */ 00201 #define SS_FAM_R_LOG 0x90 00202 #define SS_CMDIDX_R_LOG_DATA 0x00 00203 #define SS_CMDIDX_R_LOG_LEN 0x01 00204 00205 #define SS_CMDIDX_R_LOG_LEVEL 0x02 00206 #define SS_LOG_DISABLE 0x00 00207 #define SS_LOG_CRITICAL 0x01 00208 #define SS_LOG_ERROR 0x02 00209 #define SS_LOG_INFO 0x04 00210 #define SS_LOG_DEBUG 0x08 00211 00212 #define SS_FAM_W_LOG_CFG 0x91 00213 #define SS_CMDIDX_LOG_GET_LEVEL 0x00 00214 #define SS_CMDIDX_LOG_SET_LEVEL 0x01 00215 00216 #define SS_FAM_R_IDENTITY 0xFF 00217 #define SS_CMDIDX_PLATTYPE 0x00 00218 #define SS_CMDIDX_PARTID 0x01 00219 #define SS_CMDIDX_REVID 0x02 00220 #define SS_CMDIDX_FWVERSION 0x03 00221 #define SS_CMDIDX_AVAILSENSORS 0x04 00222 #define SS_CMDIDX_DRIVERVER 0x05 00223 #define SS_CMDIDX_AVAILALGOS 0x06 00224 #define SS_CMDIDX_ALGOVER 0x07 00225 00226 00227 /* Newly added ones; checko for collosion or repeats with the ones above */ 00228 #define SS_RESET_TIME 10 00229 #define SS_STARTUP_TO_BTLDR_TIME 20 00230 #define SS_STARTUP_TO_MAIN_APP_TIME 1000 00231 00232 #define SS_MAX_SUPPORTED_SENSOR_NUM 0xFE 00233 #define SS_MAX_SUPPORTED_ALGO_NUM 0xFE 00234 00235 #define SS_APPPLICATION_MODE 0x00 00236 #define SS_BOOTLOADER_MODE 0x08 00237 00238 typedef enum { 00239 SS_SUCCESS =0x00, 00240 SS_ERR_COMMAND =0x01, 00241 SS_ERR_UNAVAILABLE =0x02, 00242 SS_ERR_DATA_FORMAT =0x03, 00243 SS_ERR_INPUT_VALUE =0x04, 00244 SS_ERR_BTLDR_GENERAL =0x80, 00245 SS_ERR_BTLDR_CHECKSUM =0x81, 00246 SS_ERR_TRY_AGAIN =0xFE, 00247 SS_ERR_UNKNOWN =0xFF, 00248 00249 } SS_STATUS; 00250 00251 00252 00253 /* ***************************************************************************************** * 00254 * * 00255 * SENSOR HUB COMMUNICATION INTERFACE ( Defined in MAX32664 User Guide ) API FUNCTIONS * 00256 * * 00257 * * 00258 * ***************************************************************************************** */ 00259 00260 00261 /** 00262 * @brief Func to write to sensor hub via sending generic command byte sequences 00263 * 00264 * @param[in] tx_buf - command byte sequence 00265 * @param[in] tx_len - command byte sequence length in bytes 00266 * @param[in] sleep_ms - time to wait for sensor hub to report statuss 00267 * 00268 * @return 1 byte status: 0x00 (SS_SUCCESS) on success 00269 */ 00270 int sh_write_cmd( uint8_t *tx_buf, 00271 int tx_len, 00272 int sleep_ms ); 00273 00274 00275 /** 00276 * @brief Func to write to sensor hub via sending generic command byte sequences and data bytes 00277 * 00278 * @param[in] cmd_bytes - command byte sequence 00279 * @param[in] cmd_bytes_len - command byte sequence length in bytes 00280 * @param[in] data - data byte array to be sent following cmd bytes 00281 * @param[in] data_len - data array size in bytes 00282 * @param[in] cmd_delay_ms - time to wait for sensor hub to report status 00283 * 00284 * @return 1 byte status: 0x00 (SS_SUCCESS) on success 00285 */ 00286 int sh_write_cmd_with_data(uint8_t *cmd_bytes, 00287 int cmd_bytes_len, 00288 uint8_t *data, 00289 int data_len, 00290 int cmd_delay_ms); 00291 00292 00293 /** 00294 * @brief Func to read from sensor hub via sending generic command byte sequences 00295 * 00296 * @param[in] cmd_bytes - command byte sequence 00297 * @param[in] cmd_bytes_len - command byte sequence length in bytes 00298 * @param[in] data - data byte array to be sent following cmd bytes 00299 * @param[in] data_len - data array size in bytes 00300 * @param[out] rxbuf - byte buffer to store incoming data (including status byte) 00301 * @param[in] rxbuf_sz - incoming data buffer size in bytes ( to prevent overflow) 00302 * @param[in] cmd_delay_ms - time to wait for sensor hub to report status 00303 * 00304 * @return 1 byte status: 0x00 (SS_SUCCESS) on success 00305 */ 00306 int sh_read_cmd( uint8_t *cmd_bytes, 00307 int cmd_bytes_len, 00308 uint8_t *data, 00309 int data_len, 00310 uint8_t *rxbuf, 00311 int rxbuf_sz, 00312 int sleep_ms ); 00313 00314 00315 /** 00316 * @brief func to read sensor hub status 00317 * @param[out] hubStatus - pointer to output byte sesnor hub status will be written 00318 * @details ensor hub status byte: [2:0] -> 0 : no Err , 1: comm failure with sensor 00319 * [3] -> 0 : FIFO below threshold; 1: FIFO filled to threshold or above. 00320 * [4] -> 0 : No FIFO overflow; 1: Sensor Hub Output FIFO overflowed, data lost. 00321 * [5] -> 0 : No FIFO overflow; 1: Sensor Hub Input FIFO overflowed, data lost. 00322 * [6] -> 0 : Sensor Hub ready; 1: Sensor Hub is busy processing. 00323 * [6] -> reserved. 00324 * 00325 * @return 1 byte status: 0x00 (SS_SUCCESS) on success 00326 */ 00327 int sh_get_sensorhub_status(uint8_t *hubStatus); 00328 00329 00330 /** 00331 * @brief func to read sensor operating mode 00332 * 00333 * @param[in] hubMode - pointer to output byte mode will be written 00334 * @details 0x00: application operating mode 00335 * 0x08: bootloader operating mode 00336 * 00337 * @return 1 byte status: 0x00 (SS_SUCCESS) on success 00338 */ 00339 int sh_get_sensorhub_operating_mode(uint8_t *hubMode); 00340 00341 00342 /** 00343 * @brief func to set sensor hub operating mode 00344 * 00345 * @param[out] hubMode - pointer to output byte mode will be written 00346 * @details 0x00: application operating mode 00347 * 0x02: soft reset 00348 * 0x08: bootloader operating mode 00349 * 00350 * @return 1 byte status: 0x00 (SS_SUCCESS) on success 00351 */ 00352 int sh_set_sensorhub_operating_mode(uint8_t hubMode); 00353 00354 00355 /** 00356 * @brief func to set sensorhub data output mode 00357 * 00358 * @param[in] data_type : 1 byte output format 00359 * @details outpur format 0x00 : no data 00360 * 0x01 : sensor data SS_DATATYPE_RAW 00361 * 0x02 : algo data SS_DATATYPE_ALGO 00362 * 0x03 : algo+sensor SS_DATATYPE_BOTH 00363 * 00364 * @return 1 byte status: 0x00 (SS_SUCCESS) on success 00365 */ 00366 int sh_set_data_type(int data_type, bool sc_en); 00367 00368 00369 /** 00370 * @brief func to get sensorhub data output mode 00371 * 00372 * @param[out] data_type - pointer to byte, output format will be written to. 00373 * 00374 * @param[out] sc_en - pointer to boolean, sample count enable/disable status format will be written to. 00375 * If true, SmartSensor is prepending data with 1 byte sample count. 00376 * 00377 * @details output format 0x00 : only algorithm data 00378 * 0x01 : only raw sensor data 00379 * 0x02 : algo + raw sensor data 00380 * 0x03 : no data 00381 * 00382 * @return 1 byte status: 0x00 (SS_SUCCESS) on success 00383 */ 00384 int sh_get_data_type(int *data_type, bool *sc_en); 00385 00386 00387 /** 00388 * @brief func to set the number of samples for the SmartSensor to collect 00389 * before issuing an mfio event reporting interrupt 00390 * 00391 * @param[in] thresh - Number of samples (1-255) to collect before interrupt 00392 * 00393 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00394 */ 00395 int sh_set_fifo_thresh( int threshold ); 00396 00397 00398 /** 00399 * @brief func to get the number of samples the SmartSensor will collect 00400 * before issuing an mfio event reporting interrupt 00401 * 00402 * @param[out] thresh - Number of samples (1-255) collected before interrupt 00403 * 00404 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00405 */ 00406 int sh_get_fifo_thresh(int *thresh); 00407 00408 00409 /** 00410 * @brief func to check that the SmartSensor is connected 00411 * 00412 * @return 1 byte connection status 0x00: on connection 00413 */ 00414 int sh_ss_comm_check(void); 00415 00416 00417 /** 00418 * @brief func to get the number of available samples in SmartSensor output FIFO 00419 * 00420 * @param[out] numSamples - number of data struct samples (1-255) 00421 * 00422 * @return 1 byte status: 0x00 (SS_SUCCESS) on success 00423 */ 00424 int sh_num_avail_samples(int *numSamples); 00425 00426 00427 /** 00428 * @brief func to pull samples from SmartSensor output FIFO 00429 * 00430 * @param[in] numSamples - number of data struct samples to be pulled 00431 * @param[in] sampleSize - size of cumulative data sample struct (based on enabled sesnors+algorithms) in bytes 00432 * @param[out] databuf - buffer samples be written 00433 * @param[in] databufSize - size of provided buffer size samples to be written 00434 * 00435 * @return 1 byte status: 0x00 (SS_SUCCESS) on success 00436 */ 00437 int sh_read_fifo_data( int numSamples, int sampleSize, uint8_t* databuf, int databufSz); 00438 00439 00440 /** 00441 * @brief func to set register of a device onboard SmartSensor 00442 * 00443 * @param[in] idx - Index of device to read 00444 * @param[in] addr - Register address 00445 * @param[in] val - Register value 00446 * @param[in] regSz - Size of sensor device register in bytes 00447 * 00448 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00449 */ 00450 int sh_set_reg(int idx, uint8_t addr, uint32_t val, int regSz); 00451 00452 00453 /** 00454 * @brief func to read register from a device onboard SmartSensor 00455 * 00456 * @param[in] idx - Index of device to read 00457 * @param[in] addr - Register address 00458 * @param[out] val - Register value 00459 * 00460 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00461 */ 00462 int sh_get_reg(int idx, uint8_t addr, uint32_t *val); 00463 00464 00465 // depricated: int sh_sensor_enable( int idx , int sensorSampleSz); 00466 /** 00467 * @brief func to enable a sensor device onboard SmartSensor 00468 * 00469 * @param[in] idx - index of sensor device( i.e max8614x) to enable 00470 * @param[in] sensorSampleSz - sample size of sensor device( i.e max8614x) to enable 00471 * @param[in] ext_mode - enable extermal data input to Sensot Hub, ie accelerometer data for WHRM+WSPo2 00472 * 00473 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00474 */ 00475 int sh_sensor_enable( int idx , int sensorSampleSz , uint8_t ext_mode ); 00476 00477 00478 /** 00479 * @brief func to disable a device on the SmartSensor 00480 * 00481 * @param[in] idx - Index of device 00482 * 00483 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00484 */ 00485 int sh_sensor_disable( int idx ); 00486 00487 00488 /** 00489 * @brief func to get the total number of samples the input FIFO can hold 00490 * 00491 * @param[in] fifo_size - intger input FIFO capacity will be written to. 00492 * 00493 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00494 */ 00495 int sh_get_input_fifo_size(int *fifo_size); 00496 00497 00498 /** 00499 * @brief func to send ass external sensor data (accelerometer) to sensor hub's input FIFO 00500 * 00501 * @param[in] tx_buf - host sample data to be send to sensor hub input FIFO 00502 * @param[in] tx_buf_sz - number of bytes of tx_buf 00503 * @param[out] nb_written - number of samples succesfully written to sensor hub's input FIFO 00504 * 00505 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00506 */ 00507 int sh_feed_to_input_fifo(uint8_t *tx_buf, int tx_buf_sz, int *nb_written); 00508 00509 00510 /** 00511 * @brief func to get the total number of bytes in the sensor hub's input FIFO 00512 * 00513 * @param[in] fifo_size - total number of sample bytes available in input FIFO 00514 * 00515 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00516 */ 00517 int sh_get_num_bytes_in_input_fifo(int *fifo_size); 00518 00519 00520 /** 00521 * @brief func to enable an algorithm on SmartSensor 00522 * 00523 * @param[in] idx - index of algorithm to enable 00524 * @param[in] sensorSampleSz - sample size of algorithm to enable 00525 * 00526 * @details idx - 0x00 : AGC 00527 * 0x01 : AEC 00528 * 0x02 : WHRM/Maximfast 00529 * 0x03 : ECG 00530 * 0x04 : BPT 00531 * 0x05 : SPo2 00532 * 0x06 : HRM/Maximfast finger 00533 * 00534 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00535 */ 00536 int sh_enable_algo(int idx , int algoSampleSz); 00537 00538 /* @sh_enable_algo + mode of the algorithm: 00539 * 00540 * 00541 * 00542 * */ 00543 int sh_enable_algo_withmode(int idx, int mode, int algoSampleSz); 00544 00545 /** 00546 * @brief func to disable an algorithm on the SmartSensor 00547 * 00548 * @param[in] idx - index of algorithm to disable 00549 * 00550 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00551 */ 00552 int sh_disable_algo(int idx); 00553 00554 00555 /** 00556 * @brief func to set the value of an algorithm configuration parameter 00557 * 00558 * @param[in] algo_idx - index of algorithm 00559 * @param[in] cfg_idx - index of configuration parameter 00560 * @param[in] cfg Array - byte array of configuration 00561 * @param[in] cfg_sz - size of cfg array 00562 * 00563 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00564 */ 00565 int sh_set_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz); 00566 00567 00568 /** 00569 * @brief func to get the value of an algorithm configuration parameter 00570 * 00571 * @param[in] algo_idx - index of algorithm 00572 * @param[in] cfg_idx - index of configuration parameter 00573 * @param[out] cfg - array of configuration bytes to be filled in 00574 * @param[in] cfg_sz - number of configuration parameter bytes to be read 00575 * 00576 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00577 */ 00578 int sh_get_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz); 00579 00580 /** 00581 * @brief func to pull sensor, algo data sample bytes from sensor hub. outpur buffer, Content of the buffer depends on 00582 * enabled sensors, algorithms and their sample sizes. 00583 * 00584 * @param[out] databuf - byte buffer to hold pulled samples 00585 * @param[in] databufLen - size of provided databuf in bytes 00586 * @param[out] nSamplesRea - number of pulled samples in databuf 00587 * 00588 * @return N/A 00589 */ 00590 //void sh_ss_execute_once( uint8_t *databuf , int databufLen , int *nSamplesRead); 00591 int sh_ss_execute_once( uint8_t *databuf , int databufLen , int *nSamplesRead); 00592 00593 00594 00595 00596 00597 00598 /* ***************************************************************************************** * 00599 * * 00600 * PHASE2 ADDITIONS * 00601 * * 00602 * ***************************************************************************************** */ 00603 00604 00605 /** 00606 * @brief run the self test commands 00607 * param[in] idx - the id of the sensor for the self test 00608 * param[in] result - self-test response 00609 * param[in] sleep_ms - duration of wait for read command 00610 * 00611 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00612 */ 00613 SS_STATUS self_test(int idx, uint8_t *result, int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS); 00614 int sh_self_test(int idx, uint8_t *result, int sleep_ms); 00615 00616 00617 /** 00618 * @brief transition from bootloder mode to application mode 00619 * 00620 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00621 */ 00622 int sh_exit_from_bootloader(void); 00623 00624 00625 /** 00626 * @brief transition from application mode to bootloader mode 00627 * 00628 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00629 */ 00630 int sh_put_in_bootloader(void); 00631 00632 /** 00633 * @brief Check if SmartSensor is in bootloader mode 00634 * 00635 * @return 1 byte mode info : 1 if in bootloader mode, 0 if in main app, -1 if comm error 00636 */ 00637 int sh_checkif_bootldr_mode(void); 00638 00639 /** 00640 * @brief Get a string representing the SmartSensor firmware version 00641 * @details If in bootloader mode, returns bootloader version 00642 * 00643 * @return Pointer to firmware version string 00644 */ 00645 const char* sh_get_hub_fw_version(void); 00646 00647 /** 00648 * @brief Get a string representing the SmartSensor algo version 00649 * @details If in bootloader mode, returns bootloader version 00650 * 00651 * @return Pointer to algo version string 00652 */ 00653 const char* sh_get_hub_algo_version(void); 00654 00655 00656 /** 00657 * @brief send raw string to I2C 00658 * @param[in] rawdata - Raw data string, after slave address 00659 * @param[out] rawdata_sz - Raw data size 00660 * 00661 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00662 */ 00663 int sh_send_raw(uint8_t *rawdata, int rawdata_sz); 00664 00665 /** 00666 * @brief get length of hub debug log data available 00667 * @param[out] log_len - length of hub log data available 00668 * 00669 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00670 */ 00671 int sh_get_log_len(int *log_len); 00672 00673 00674 /** 00675 * @brief read hub debug log data available 00676 * @details first call sh_get_log_len() to get available log data in bytes then 00677 * call this function with parameter num_bytes with a value smaller then available log data in bytes 00678 * 00679 * @param[in] num_bytes - number of log data bytes to be read 00680 * @param[in] log_buf_sz - byte size of buffer log data will be dumped to 00681 * @param[out] log_buf - byte buffer log data will be dumped to 00682 * 00683 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00684 */ 00685 int sh_read_ss_log(int num_bytes, uint8_t *log_buf, int log_buf_sz); 00686 00687 00688 00689 /** 00690 * @brief read sensor hub firmaware version 00691 * 00692 * @param[out] fwDesciptor - byte array fw version will be written to 00693 * @param[out] fwDescSz - array size of firmware descriptor in bytes 00694 * 00695 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00696 * 00697 **/ 00698 int sh_get_ss_fw_version(uint8_t *fwDesciptor , uint8_t *fwDescSz); 00699 00700 00701 00702 00703 /* ***************************************************************************************** * 00704 * * 00705 * BOOTLOADER ADDITIONS * 00706 * * 00707 * ***************************************************************************************** */ 00708 00709 /** 00710 * @brief read sensor hub bootloader page size 00711 * 00712 * @param[out] pagesz - page size in terms of bytes 00713 * 00714 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00715 * 00716 **/ 00717 int sh_get_bootloader_pagesz(int *pagesz); 00718 00719 /** 00720 * @brief sends bootloader number of MSBL app pages to be send/flashed 00721 * 00722 * @param[in] pageCount - page size in terms of bytes 00723 * 00724 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00725 * 00726 **/ 00727 int sh_set_bootloader_numberofpages(const int pageCount); 00728 00729 /** 00730 * @brief sends bootloader iv vector dor decryption 00731 * 00732 * @param[in] ivbytes - 22 character long iv byte vector 00733 * 00734 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00735 * 00736 **/ 00737 int sh_set_bootloader_iv(uint8_t iv_bytes[]); 00738 00739 /** 00740 * @brief sends bootloader authentication data 00741 * 00742 * @param[in] ivbytes - 36 character long authentication data 00743 * 00744 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00745 * 00746 **/ 00747 int sh_set_bootloader_auth(uint8_t auth_bytes[]); 00748 00749 /** 00750 * @brief erases ME11 Sensor hub app flash memory 00751 * 00752 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00753 * 00754 **/ 00755 int sh_set_bootloader_erase(void); 00756 00757 /** 00758 * @brief sends MSBL page to sensor hub to be written to flash 00759 * 00760 * @param[in] flashDataPreceedByCmdBytes - page bytes of page_size + 2 cmd bytes for flashing 00761 * @param[in] page_size - size of MSBL file app page 00762 * 00763 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00764 * 00765 **/ 00766 int sh_bootloader_flashpage(uint8_t *flashDataPreceedByCmdBytes , const int page_size); 00767 00768 /** 00769 * @brief sends delay factor multipler to sensor hub for seting wait duration s between bootloade commands 00770 * 00771 * @param[in] factor - delay factor multipler 1 to 4 practical 00772 * 00773 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00774 * 00775 **/ 00776 int sh_set_bootloader_delayfactor(const int factor ); 00777 00778 /** 00779 * @brief gets delay factor multipler to sensor hub for seting wait duration s between bootloade commands 00780 * 00781 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00782 * 00783 **/ 00784 00785 const int sh_get_bootloader_delayfactor(void); 00786 00787 /** 00788 * @brief sets sensor hub reset mode to commnad based reset or GPIO based reset. GPIO based is default and preferred. 00789 * 00790 * @param[in] mode - mode flag 0: CMD 1: GPIO 00791 * 00792 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00793 * 00794 **/ 00795 int sh_set_ebl_mode(const uint8_t mode); 00796 00797 /** 00798 * @brief gets sensor hub reset mode to commnad based reset or GPIO based reset. GPIO based is default and preferred. 00799 * 00800 * @return 1 byte ebl mode, 0: CMD , 1: GPIO 00801 * 00802 **/ 00803 const int sh_get_ebl_mode(void); 00804 00805 /** 00806 * @brief resets sensor hub mode to booloader mode 00807 * 00808 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00809 * 00810 **/ 00811 int sh_reset_to_bootloader(void); 00812 00813 /** 00814 * @brief resets sensor hub mode to application mode 00815 * 00816 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00817 * 00818 **/ 00819 int sh_reset_to_main_app(void); 00820 00821 /** 00822 * @brief command based exit from bootloader mode. 00823 * 00824 * @return 1 byte status (SS_STATUS) : 0x00 (SS_SUCCESS) on success 00825 * 00826 **/ 00827 00828 int exit_from_bootloader(void); 00829 00830 /*FOR DEBUG DEPRICATED*/ 00831 int sh_debug_reset_to_bootloader(void); 00832 00833 00834 /* *************************************************************************************** * 00835 * DEMO SPECIFIC DECLERATIONS, NOT RELATED TO SENSOR HUB INTERFACE API. * 00836 * * 00837 * * * 00838 * *****************************************************************************************/ 00839 00840 void sh_init_hwcomm_interface(); 00841 bool sh_has_mfio_event(void); 00842 void sh_enable_irq_mfioevent(void); 00843 void sh_disable_irq_mfioevent(void); 00844 void sh_clear_mfio_event_flag(void); 00845 int sh_hard_reset(int wakeupMode); 00846 00847 extern uint8_t sh_write_buf[]; 00848 00849 /* 00850 #ifdef __cplusplus 00851 } 00852 #endif 00853 */ 00854 00855 00856 00857 #endif /* _SENSOR_HUB_H */ 00858 00859 00860 00861 00862 00863
Generated on Fri Jul 15 2022 22:42:36 by
