YOSHIHISA TABUCHI / Mbed OS Host_Software_MAX32664GWEB_HR_EXTENDEDtest

Dependencies:   BMI160 max32630hsp3 MemoryLCD USBDevice

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SHComm.h Source File

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