Maxim Integrated / Mbed OS MAXREFDES220#

Dependencies:   USBDevice max32630fthr

Revision:
5:795cffb6f01a
Parent:
4:5696ebf1c344
--- a/Interfaces/SmartSensor/SSInterface.h	Thu Apr 12 13:04:59 2018 -0700
+++ b/Interfaces/SmartSensor/SSInterface.h	Thu May 24 14:40:48 2018 -0700
@@ -36,6 +36,7 @@
 
 #include "mbed.h"
 #include "MaximSensor.h"
+#include "EventStats.h"
 
 #define SS_PLATFORM_MAX3263X    "SmartSensor_MAX3263X"
 #define SS_PLATFORM_MAX32660    "SmartSensor_MAX32660"
@@ -58,7 +59,7 @@
 #define SS_ALGOIDX_AEC	0x01
 #define SS_ALGOIDX_WHRM	0x02
 #define SS_ALGOIDX_ECG	0x03
-
+#define SS_ALGOIDX_BPT	0x04
 
 #define SS_FAM_R_STATUS		0x00
 	#define SS_CMDIDX_STATUS	0x00
@@ -120,6 +121,29 @@
 //TODO: Fill in known configuration parameters
 #define SS_FAM_W_ALGOCONFIG	0x50
 #define SS_FAM_R_ALGOCONFIG	0x51
+	#define SS_CFGIDX_AGC_TARGET		0x00
+	#define SS_CFGIDX_AGC_CORR_COEFF	0x01
+	#define SS_CFGIDX_AGC_SENSITIVITY	0x02
+	#define SS_CFGIDX_AGC_SMP_AVG		0x03
+
+	#define SS_CFGIDX_WHRM_SR			0x00
+	#define SS_CFGIDX_WHRM_MAX_HEIGHT	0x01
+	#define SS_CFGIDX_WHRM_MAX_WEIGHT	0x02
+	#define SS_CFGIDX_WHRM_MAX_AGE		0x03
+	#define SS_CFGIDX_WHRM_MIN_HEIGHT	0x04
+	#define SS_CFGIDX_WHRM_MIN_WEIGHT	0x05
+	#define SS_CFGIDX_WHRM_MIN_AGE		0x06
+	#define SS_CFGIDX_WHRM_DEF_HEIGHT	0x07
+	#define SS_CFGIDX_WHRM_DEF_WEIGHT	0x08
+	#define SS_CFGIDX_WHRM_DEF_AGE		0x09
+	#define SS_CFGIDX_WHRM_INIT_HR		0x0A
+
+	#define SS_CFGIDX_BP_USE_MED		0x00
+	#define SS_CFGIDX_BP_SYS_BP_CAL		0x01
+	#define SS_CFGIDX_BP_DIA_BP_CAL		0x02
+	#define SS_CFGIDX_BP_CAL_DATA		0x03
+	#define SS_CFGIDX_BP_EST_DATE		0x04
+	#define SS_CFGIDX_BP_EST_NONREST	0x05
 
 #define SS_FAM_W_ALGOMODE	0x52
 #define SS_FAM_R_ALGOMODE	0x53
@@ -135,10 +159,24 @@
 	#define SS_CMDIDX_SETNUMPAGES	0x02
 	#define SS_CMDIDX_ERASE			0x03
 	#define SS_CMDIDX_SENDPAGE		0x04
+	#define SS_CMDIDX_ERASE_PAGE	0x05
+	#define SS_CMDIDX_STAY_IN_BTLRD	0x06
 #define SS_FAM_R_BOOTLOADER	0x81
 	#define SS_CMDIDX_BOOTFWVERSION	0x00
 	#define SS_CMDIDX_PAGESIZE		0x01
 
+#define SS_FAM_W_BOOTLOADER_CFG	0x82
+#define SS_FAM_R_BOOTLOADER_CFG	0x83
+	#define SS_CMDIDX_BL_SAVE		0x00
+	#define SS_CMDIDX_BL_ENTRY		0x01
+		#define SS_BL_CFG_ENTER_BL_MODE		0x00
+		#define SS_BL_CFG_EBL_PIN			0x01
+		#define SS_BL_CFG_EBL_POL			0x02
+	#define SS_CMDIDX_BL_EXIT		0x02
+		#define SS_BL_CFG_EXIT_BL_MODE		0x00
+		#define SS_BL_CFG_TIMEOUT			0x01
+
+
 #define SS_FAM_R_IDENTITY	0xFF
 	#define SS_CMDIDX_PLATTYPE		0x00
 	#define SS_CMDIDX_PARTID		0x01
@@ -162,7 +200,8 @@
 	SS_ERR_BTLDR_GENERAL=0x80,
 	SS_ERR_BTLDR_CHECKSUM=0x81,
 
-	SS_ERR_UNKNOWN=0xFF
+	SS_ERR_TRY_AGAIN=0xFE,
+	SS_ERR_UNKNOWN=0xFF,
 } SS_STATUS;
 
 typedef enum {
@@ -175,6 +214,7 @@
 #define FAILURE_INTERRUPT   0x02
 
 #define SS_SMALL_BUF_SIZE 32
+#define SS_MED_BUF_SIZE 512
 #define SS_LARGE_BUF_SIZE 8224
 
 #define SS_RESET_TIME	10
@@ -182,6 +222,7 @@
 
 #define SS_MAX_SUPPORTED_SENSOR_NUM	0xFE
 #define SS_MAX_SUPPORTED_ALGO_NUM	0xFE
+#define SS_MAX_SUPPORTED_ALGO_CFG_NUM	0xFE
 #define SS_MAX_SUPPORTED_MODE_NUM	0xFF
 
 typedef struct {
@@ -398,6 +439,29 @@
 	 */
 	SS_STATUS disable_algo(int idx);
 
+	/**
+	 * @brief	Set the value of an algorithm configuration parameter
+	 *
+	 * @param[in] algo_idx Index of algorithm
+	 * @param[in] cfg_idx Index of configuration parameter
+	 * @param[in] cfg Array of configuration bytes
+	 * @param[in] cfg_sz Size of cfg array
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS set_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz);
+
+	/**
+	 * @brief	Get the value of an algorithm configuration parameter
+	 *
+	 * @param[in] algo_idx Index of algorithm
+	 * @param[in] cfg_idx Index of configuration parameter
+	 * @param[in] cfg Array of configuration bytes to be filled in
+	 * @param[in] cfg_sz Number of bytes to be read
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS get_algo_cfg(int algo_idx, int cfg_idx, uint8_t *cfg, int cfg_sz);
 
 	/**
 	 * @brief	Set the CommChannel Output Mode options
@@ -425,12 +489,41 @@
 	 */
 	SS_STATUS get_data_type(int* data_type, bool *sc_en);
 
+	/**
+	 * @brief	Set the number of samples for the SmartSensor to collect
+	 * 			before issuing an interrupt
+	 *
+	 * @param[in]	thresh - Number of samples (1-255) to collect before interrupt
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS set_fifo_thresh(int thresh);
+
+	/**
+	 * @brief	Get the number of samples the SmartSensor will collect
+	 * 			before issuing an interrupt
+	 *
+	 * @param[out]	thresh - Number of samples (1-255) collected before interrupt
+	 *
+	 * @return SS_SUCCESS on success
+	 */
+	SS_STATUS get_fifo_thresh(int *thresh);
+
+	/**
+	 * @brief	Check that the SmartSensor is connected
+	 */
+	SS_STATUS ss_comm_check();
+
+
 	void enable_irq();
 	void disable_irq();
 
 	void mfio_selftest();
 	bool reset_mfio_irq();
 
+	void ss_execute_once();
+	void ss_clear_interrupt_flag();
+
 private:
 
 	/* PRIVATE VARIABLES */
@@ -455,12 +548,17 @@
     SS_STATUS write_cmd_small(uint8_t *cmd_bytes, int cmd_bytes_len,
                             uint8_t *data, int data_len,
                             int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
+    SS_STATUS write_cmd_medium(uint8_t *cmd_bytes, int cmd_bytes_len,
+                            uint8_t *data, int data_len,
+                            int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
     SS_STATUS write_cmd_large(uint8_t *cmd_bytes, int cmd_bytes_len,
                             uint8_t *data, int data_len,
                             int sleep_ms = SS_DEFAULT_CMD_SLEEP_MS);
 	void cfg_mfio(PinDirection);
 
 	void irq_handler();
+	volatile bool m_irq_received_;
+
 
 	void irq_handler_selftest();
 	volatile bool mfio_int_happened;
@@ -468,6 +566,8 @@
 	SS_STATUS read_fifo_data(int num_samples, int sample_size, uint8_t* databuf, int databuf_sz);
 	SS_STATUS num_avail_samples(int* num_samples);
 	void fifo_sample_size(int data_type, int* sample_size);
+
+	EventStats irq_evt;
 };