HSP Platform firmware evaluating ECG data and hearth rate over PPG data.
Dependencies: max32630fthr Adafruit_FeatherOLED USBDevice
Interfaces/SensorComm/SmartSensorComm/SSMAX8614X/SSMAX8614XComm.h@1:f60eafbf009a, 2019-04-10 (annotated)
- Committer:
- gmehmet
- Date:
- Wed Apr 10 14:56:25 2019 +0300
- Revision:
- 1:f60eafbf009a
upload from local
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| gmehmet | 1:f60eafbf009a | 1 | /******************************************************************************* |
| gmehmet | 1:f60eafbf009a | 2 | * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved. |
| gmehmet | 1:f60eafbf009a | 3 | * |
| gmehmet | 1:f60eafbf009a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| gmehmet | 1:f60eafbf009a | 5 | * copy of this software and associated documentation files (the "Software"), |
| gmehmet | 1:f60eafbf009a | 6 | * to deal in the Software without restriction, including without limitation |
| gmehmet | 1:f60eafbf009a | 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
| gmehmet | 1:f60eafbf009a | 8 | * and/or sell copies of the Software, and to permit persons to whom the |
| gmehmet | 1:f60eafbf009a | 9 | * Software is furnished to do so, subject to the following conditions: |
| gmehmet | 1:f60eafbf009a | 10 | * |
| gmehmet | 1:f60eafbf009a | 11 | * The above copyright notice and this permission notice shall be included |
| gmehmet | 1:f60eafbf009a | 12 | * in all copies or substantial portions of the Software. |
| gmehmet | 1:f60eafbf009a | 13 | * |
| gmehmet | 1:f60eafbf009a | 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| gmehmet | 1:f60eafbf009a | 15 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| gmehmet | 1:f60eafbf009a | 16 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| gmehmet | 1:f60eafbf009a | 17 | * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES |
| gmehmet | 1:f60eafbf009a | 18 | * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
| gmehmet | 1:f60eafbf009a | 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
| gmehmet | 1:f60eafbf009a | 20 | * OTHER DEALINGS IN THE SOFTWARE. |
| gmehmet | 1:f60eafbf009a | 21 | * |
| gmehmet | 1:f60eafbf009a | 22 | * Except as contained in this notice, the name of Maxim Integrated |
| gmehmet | 1:f60eafbf009a | 23 | * Products, Inc. shall not be used except as stated in the Maxim Integrated |
| gmehmet | 1:f60eafbf009a | 24 | * Products, Inc. Branding Policy. |
| gmehmet | 1:f60eafbf009a | 25 | * |
| gmehmet | 1:f60eafbf009a | 26 | * The mere transfer of this software does not imply any licenses |
| gmehmet | 1:f60eafbf009a | 27 | * of trade secrets, proprietary technology, copyrights, patents, |
| gmehmet | 1:f60eafbf009a | 28 | * trademarks, maskwork rights, or any other form of intellectual |
| gmehmet | 1:f60eafbf009a | 29 | * property whatsoever. Maxim Integrated Products, Inc. retains all |
| gmehmet | 1:f60eafbf009a | 30 | * ownership rights. |
| gmehmet | 1:f60eafbf009a | 31 | ******************************************************************************* |
| gmehmet | 1:f60eafbf009a | 32 | */ |
| gmehmet | 1:f60eafbf009a | 33 | |
| gmehmet | 1:f60eafbf009a | 34 | #ifndef _SSMAX8614XCOMM_H_ |
| gmehmet | 1:f60eafbf009a | 35 | #define _SSMAX8614XCOMM_H_ |
| gmehmet | 1:f60eafbf009a | 36 | |
| gmehmet | 1:f60eafbf009a | 37 | #include "mbed.h" |
| gmehmet | 1:f60eafbf009a | 38 | #include "SensorComm.h" |
| gmehmet | 1:f60eafbf009a | 39 | #include "USBSerial.h" |
| gmehmet | 1:f60eafbf009a | 40 | #include "SSInterface.h" |
| gmehmet | 1:f60eafbf009a | 41 | #include "queue.h" |
| gmehmet | 1:f60eafbf009a | 42 | #include "bmi160.h" |
| gmehmet | 1:f60eafbf009a | 43 | |
| gmehmet | 1:f60eafbf009a | 44 | #define SENSOR_ID_SSMAX8614X 0x04 |
| gmehmet | 1:f60eafbf009a | 45 | |
| gmehmet | 1:f60eafbf009a | 46 | #define PPG_CONF_LEVEL_FLASH_ADDRESS 0x0010F100 |
| gmehmet | 1:f60eafbf009a | 47 | #define PPG_EXPIRE_DURATION_FLASH_ADDRESS 0x0010F104 |
| gmehmet | 1:f60eafbf009a | 48 | |
| gmehmet | 1:f60eafbf009a | 49 | |
| gmehmet | 1:f60eafbf009a | 50 | /** |
| gmehmet | 1:f60eafbf009a | 51 | * @brief SSMAX8614XComm Command handler class for communication with MAX30101 on SmartSensor board |
| gmehmet | 1:f60eafbf009a | 52 | * @details |
| gmehmet | 1:f60eafbf009a | 53 | */ |
| gmehmet | 1:f60eafbf009a | 54 | class SSMAX8614XComm: public SensorComm |
| gmehmet | 1:f60eafbf009a | 55 | { |
| gmehmet | 1:f60eafbf009a | 56 | public: |
| gmehmet | 1:f60eafbf009a | 57 | |
| gmehmet | 1:f60eafbf009a | 58 | /* PUBLIC FUNCTION DECLARATIONS */ |
| gmehmet | 1:f60eafbf009a | 59 | /** |
| gmehmet | 1:f60eafbf009a | 60 | * @brief SSMAX8614XComm constructor. |
| gmehmet | 1:f60eafbf009a | 61 | * |
| gmehmet | 1:f60eafbf009a | 62 | */ |
| gmehmet | 1:f60eafbf009a | 63 | SSMAX8614XComm(USBSerial* USB, SSInterface* ssInterface, DSInterface* dsInterface); |
| gmehmet | 1:f60eafbf009a | 64 | |
| gmehmet | 1:f60eafbf009a | 65 | /** |
| gmehmet | 1:f60eafbf009a | 66 | * @brief Parses DeviceStudio-style commands. |
| gmehmet | 1:f60eafbf009a | 67 | * @details Parses and executes commands. Prints return code to i/o device. |
| gmehmet | 1:f60eafbf009a | 68 | * @returns true if sensor acted upon the command, false if command was unknown |
| gmehmet | 1:f60eafbf009a | 69 | */ |
| gmehmet | 1:f60eafbf009a | 70 | bool parse_command(const char* cmd); |
| gmehmet | 1:f60eafbf009a | 71 | |
| gmehmet | 1:f60eafbf009a | 72 | /** |
| gmehmet | 1:f60eafbf009a | 73 | * @brief Fill in buffer with sensor data |
| gmehmet | 1:f60eafbf009a | 74 | * |
| gmehmet | 1:f60eafbf009a | 75 | * @param[in] buf Buffer to fill data into |
| gmehmet | 1:f60eafbf009a | 76 | * @param[in] size Maximum size of buffer |
| gmehmet | 1:f60eafbf009a | 77 | * @param[out] Number of bytes written to buffer |
| gmehmet | 1:f60eafbf009a | 78 | */ |
| gmehmet | 1:f60eafbf009a | 79 | int data_report_execute(char* buf, int size); |
| gmehmet | 1:f60eafbf009a | 80 | |
| gmehmet | 1:f60eafbf009a | 81 | /** |
| gmehmet | 1:f60eafbf009a | 82 | * @brief Stop collecting data and disable sensor |
| gmehmet | 1:f60eafbf009a | 83 | */ |
| gmehmet | 1:f60eafbf009a | 84 | void stop(); |
| gmehmet | 1:f60eafbf009a | 85 | |
| gmehmet | 1:f60eafbf009a | 86 | /** |
| gmehmet | 1:f60eafbf009a | 87 | * @brief Get the maxim part number of the device |
| gmehmet | 1:f60eafbf009a | 88 | */ |
| gmehmet | 1:f60eafbf009a | 89 | const char* get_part_name() { return "max8614x"; } |
| gmehmet | 1:f60eafbf009a | 90 | |
| gmehmet | 1:f60eafbf009a | 91 | /** |
| gmehmet | 1:f60eafbf009a | 92 | * @brief Execute the smart sensor self test routine |
| gmehmet | 1:f60eafbf009a | 93 | * |
| gmehmet | 1:f60eafbf009a | 94 | * @return SS_SUCCESS or error code |
| gmehmet | 1:f60eafbf009a | 95 | */ |
| gmehmet | 1:f60eafbf009a | 96 | int selftest_max8614x(); |
| gmehmet | 1:f60eafbf009a | 97 | |
| gmehmet | 1:f60eafbf009a | 98 | /** |
| gmehmet | 1:f60eafbf009a | 99 | * @brief Execute the accelerometer self test routine |
| gmehmet | 1:f60eafbf009a | 100 | * @return SS_SUCCESS or error code |
| gmehmet | 1:f60eafbf009a | 101 | */ |
| gmehmet | 1:f60eafbf009a | 102 | int selftest_accelerometer(); |
| gmehmet | 1:f60eafbf009a | 103 | |
| gmehmet | 1:f60eafbf009a | 104 | /** |
| gmehmet | 1:f60eafbf009a | 105 | * @brief Evaluate the accelerometer self test routine |
| gmehmet | 1:f60eafbf009a | 106 | * |
| gmehmet | 1:f60eafbf009a | 107 | * @param message - message to be printed in the failure cases |
| gmehmet | 1:f60eafbf009a | 108 | * @param value - result of the self test passed as parameter |
| gmehmet | 1:f60eafbf009a | 109 | * @return true if result is SUCCESSFULL false otherwise |
| gmehmet | 1:f60eafbf009a | 110 | */ |
| gmehmet | 1:f60eafbf009a | 111 | bool self_test_result_evaluate(const char *message, uint8_t value); |
| gmehmet | 1:f60eafbf009a | 112 | |
| gmehmet | 1:f60eafbf009a | 113 | unsigned char get_sensor_id(); |
| gmehmet | 1:f60eafbf009a | 114 | |
| gmehmet | 1:f60eafbf009a | 115 | void setBMI160(BMI160_I2C *pbmi160); |
| gmehmet | 1:f60eafbf009a | 116 | |
| gmehmet | 1:f60eafbf009a | 117 | uint16_t instant_hr; |
| gmehmet | 1:f60eafbf009a | 118 | uint16_t instant_hr_conf; |
| gmehmet | 1:f60eafbf009a | 119 | uint8_t instant_hr_activityClass; |
| gmehmet | 1:f60eafbf009a | 120 | |
| gmehmet | 1:f60eafbf009a | 121 | uint16_t instant_spo2; |
| gmehmet | 1:f60eafbf009a | 122 | uint16_t instant_spo2_conf; |
| gmehmet | 1:f60eafbf009a | 123 | uint8_t instant_spo2_percentage; |
| gmehmet | 1:f60eafbf009a | 124 | uint8_t instant_lowSignalQualityFlag; |
| gmehmet | 1:f60eafbf009a | 125 | |
| gmehmet | 1:f60eafbf009a | 126 | private: |
| gmehmet | 1:f60eafbf009a | 127 | /* PRIVATE TYPE DEFINITIONS */ |
| gmehmet | 1:f60eafbf009a | 128 | typedef enum _cmd_state_t { |
| gmehmet | 1:f60eafbf009a | 129 | get_format_ppg_0, |
| gmehmet | 1:f60eafbf009a | 130 | read_ppg_0, // moved here to match parser index "3" |
| gmehmet | 1:f60eafbf009a | 131 | get_reg_ppg, |
| gmehmet | 1:f60eafbf009a | 132 | set_reg_ppg, |
| gmehmet | 1:f60eafbf009a | 133 | dump_reg_ppg, |
| gmehmet | 1:f60eafbf009a | 134 | set_agc_dis, |
| gmehmet | 1:f60eafbf009a | 135 | set_agc_en, |
| gmehmet | 1:f60eafbf009a | 136 | self_test_ppg_os58, |
| gmehmet | 1:f60eafbf009a | 137 | self_test_ppg_acc, |
| gmehmet | 1:f60eafbf009a | 138 | //---------------------------WHRM_AEC_SCD ------- |
| gmehmet | 1:f60eafbf009a | 139 | set_cfg_whrmaecscd_aecenable, |
| gmehmet | 1:f60eafbf009a | 140 | get_cfg_whrmaecscd_aecenable, |
| gmehmet | 1:f60eafbf009a | 141 | set_cfg_whrmaecscd_scdenable, |
| gmehmet | 1:f60eafbf009a | 142 | get_cfg_whrmaecscd_scdenable, |
| gmehmet | 1:f60eafbf009a | 143 | set_cfg_whrmaecscd_adjpdperiod, |
| gmehmet | 1:f60eafbf009a | 144 | get_cfg_whrmaecscd_adjpdperiod, |
| gmehmet | 1:f60eafbf009a | 145 | set_cfg_whrmaecscd_debouncewin, |
| gmehmet | 1:f60eafbf009a | 146 | get_cfg_whrmaecscd_debouncewin, |
| gmehmet | 1:f60eafbf009a | 147 | set_cfg_whrmaecscd_motionthreshold, |
| gmehmet | 1:f60eafbf009a | 148 | get_cfg_whrmaecscd_motionthreshold, |
| gmehmet | 1:f60eafbf009a | 149 | set_cfg_whrmaecscd_minpdcurrent, |
| gmehmet | 1:f60eafbf009a | 150 | get_cfg_whrmaecscd_minpdcurrent, |
| gmehmet | 1:f60eafbf009a | 151 | set_cfg_whrmaecscd_pdconfig, |
| gmehmet | 1:f60eafbf009a | 152 | get_cfg_whrmaecscd_pdconfig, |
| gmehmet | 1:f60eafbf009a | 153 | set_cfg_whrmaecscd_ledconfig, |
| gmehmet | 1:f60eafbf009a | 154 | get_cfg_whrmaecscd_ledconfig, |
| gmehmet | 1:f60eafbf009a | 155 | //------------------------------------------------ |
| gmehmet | 1:f60eafbf009a | 156 | send_raw, |
| gmehmet | 1:f60eafbf009a | 157 | set_cfg_accel_sh_dis, |
| gmehmet | 1:f60eafbf009a | 158 | set_cfg_accel_sh_en, |
| gmehmet | 1:f60eafbf009a | 159 | set_cfg_ppg_conf_level, |
| gmehmet | 1:f60eafbf009a | 160 | set_cfg_ppg_expire_duration, |
| gmehmet | 1:f60eafbf009a | 161 | NUM_CMDS, |
| gmehmet | 1:f60eafbf009a | 162 | } cmd_state_t; |
| gmehmet | 1:f60eafbf009a | 163 | |
| gmehmet | 1:f60eafbf009a | 164 | |
| gmehmet | 1:f60eafbf009a | 165 | typedef struct { |
| gmehmet | 1:f60eafbf009a | 166 | uint32_t led1; |
| gmehmet | 1:f60eafbf009a | 167 | uint32_t led2; |
| gmehmet | 1:f60eafbf009a | 168 | uint32_t led3; |
| gmehmet | 1:f60eafbf009a | 169 | uint32_t led4; |
| gmehmet | 1:f60eafbf009a | 170 | uint32_t led5; |
| gmehmet | 1:f60eafbf009a | 171 | uint32_t led6; |
| gmehmet | 1:f60eafbf009a | 172 | } max8614x_mode1_data; |
| gmehmet | 1:f60eafbf009a | 173 | |
| gmehmet | 1:f60eafbf009a | 174 | typedef struct __attribute__((packed)){ |
| gmehmet | 1:f60eafbf009a | 175 | uint16_t hr; // mode 1 & 2 |
| gmehmet | 1:f60eafbf009a | 176 | uint8_t hr_conf; // mode 1 & 2 |
| gmehmet | 1:f60eafbf009a | 177 | uint16_t rr; // mode 1 & 2 |
| gmehmet | 1:f60eafbf009a | 178 | uint8_t activity_class; // mode 1 & 2 |
| gmehmet | 1:f60eafbf009a | 179 | uint8_t rr_conf; // mode 2 |
| gmehmet | 1:f60eafbf009a | 180 | uint32_t walk_steps; // mode 2 |
| gmehmet | 1:f60eafbf009a | 181 | uint32_t run_steps; // mode 2 |
| gmehmet | 1:f60eafbf009a | 182 | uint32_t kcal; // mode 2 |
| gmehmet | 1:f60eafbf009a | 183 | uint32_t cadence; // mode 2 |
| gmehmet | 1:f60eafbf009a | 184 | uint8_t is_led_cur_adj; // mode 2 |
| gmehmet | 1:f60eafbf009a | 185 | uint16_t adj_led_cur; // mode 2 |
| gmehmet | 1:f60eafbf009a | 186 | uint8_t is_t_int_cur_adj;// mode 2 |
| gmehmet | 1:f60eafbf009a | 187 | uint16_t adj_t_int_cur; // mode 2 |
| gmehmet | 1:f60eafbf009a | 188 | uint8_t is_f_smp_adj; // mode 2 |
| gmehmet | 1:f60eafbf009a | 189 | uint8_t adj_f_smp; // mode 2 |
| gmehmet | 1:f60eafbf009a | 190 | uint8_t smp_ave; // mode 2 |
| gmehmet | 1:f60eafbf009a | 191 | uint8_t state; // mode 2 |
| gmehmet | 1:f60eafbf009a | 192 | uint8_t is_high_motion; // mode 2 |
| gmehmet | 1:f60eafbf009a | 193 | uint8_t status; // mode 2 |
| gmehmet | 1:f60eafbf009a | 194 | } whrm_modeX_data; |
| gmehmet | 1:f60eafbf009a | 195 | |
| gmehmet | 1:f60eafbf009a | 196 | typedef struct { |
| gmehmet | 1:f60eafbf009a | 197 | int16_t x; |
| gmehmet | 1:f60eafbf009a | 198 | int16_t y; |
| gmehmet | 1:f60eafbf009a | 199 | int16_t z; |
| gmehmet | 1:f60eafbf009a | 200 | } accel_mode1_data; |
| gmehmet | 1:f60eafbf009a | 201 | |
| gmehmet | 1:f60eafbf009a | 202 | |
| gmehmet | 1:f60eafbf009a | 203 | typedef struct __attribute__((packed)) { |
| gmehmet | 1:f60eafbf009a | 204 | uint32_t start_byte :8; |
| gmehmet | 1:f60eafbf009a | 205 | |
| gmehmet | 1:f60eafbf009a | 206 | uint32_t sample_cnt :32; |
| gmehmet | 1:f60eafbf009a | 207 | uint32_t led1 :20; |
| gmehmet | 1:f60eafbf009a | 208 | uint32_t led2 :20; |
| gmehmet | 1:f60eafbf009a | 209 | uint32_t led3 :20; |
| gmehmet | 1:f60eafbf009a | 210 | uint32_t led4 :20; |
| gmehmet | 1:f60eafbf009a | 211 | uint32_t led5 :20; |
| gmehmet | 1:f60eafbf009a | 212 | uint32_t led6 :20; |
| gmehmet | 1:f60eafbf009a | 213 | uint32_t x :14; //Represent values of 0.000 through 8.191 |
| gmehmet | 1:f60eafbf009a | 214 | uint32_t y :14; //Represent values of 0.000 through 8.191 |
| gmehmet | 1:f60eafbf009a | 215 | uint32_t z :14; //Represent values of 0.000 through 8.191 |
| gmehmet | 1:f60eafbf009a | 216 | uint32_t hr :12; //Represent values of 0.0 through 204.7 |
| gmehmet | 1:f60eafbf009a | 217 | uint32_t spo2 :11; //Represent values of 0.0 through 102.3 (only need up to 100.0) |
| gmehmet | 1:f60eafbf009a | 218 | uint32_t status :8; |
| gmehmet | 1:f60eafbf009a | 219 | |
| gmehmet | 1:f60eafbf009a | 220 | uint8_t :0; //Align CRC byte on byte boundary |
| gmehmet | 1:f60eafbf009a | 221 | uint8_t crc8:8; |
| gmehmet | 1:f60eafbf009a | 222 | } ds_pkt_data_mode1; |
| gmehmet | 1:f60eafbf009a | 223 | |
| gmehmet | 1:f60eafbf009a | 224 | |
| gmehmet | 1:f60eafbf009a | 225 | typedef struct __attribute__((packed)) { |
| gmehmet | 1:f60eafbf009a | 226 | uint32_t start_byte :8; |
| gmehmet | 1:f60eafbf009a | 227 | uint32_t sample_cnt :16; |
| gmehmet | 1:f60eafbf009a | 228 | uint32_t grnCnt :20; |
| gmehmet | 1:f60eafbf009a | 229 | uint32_t grn2Cnt :20; |
| gmehmet | 1:f60eafbf009a | 230 | uint32_t x :14; //Represent values of 0.000 through 8.191 |
| gmehmet | 1:f60eafbf009a | 231 | uint32_t y :14; //Represent values of 0.000 through 8.191 |
| gmehmet | 1:f60eafbf009a | 232 | uint32_t z :14; //Represent values of 0.000 through 8.191 |
| gmehmet | 1:f60eafbf009a | 233 | uint32_t hr :12; //Represent values of 0.0 through 204.7 |
| gmehmet | 1:f60eafbf009a | 234 | uint32_t hr_confidence :8; //Represent values of 0.0 through 100 |
| gmehmet | 1:f60eafbf009a | 235 | uint32_t rr :11; //Represent values of 0.0 through 102.3 (only need up to 100.0) |
| gmehmet | 1:f60eafbf009a | 236 | uint32_t status :8; |
| gmehmet | 1:f60eafbf009a | 237 | uint8_t :0; //Align CRC byte on byte boundary |
| gmehmet | 1:f60eafbf009a | 238 | uint8_t crc8:8; |
| gmehmet | 1:f60eafbf009a | 239 | } ds_pkt_data_mode2_compact; |
| gmehmet | 1:f60eafbf009a | 240 | |
| gmehmet | 1:f60eafbf009a | 241 | typedef struct _accel_data_t { |
| gmehmet | 1:f60eafbf009a | 242 | float x; |
| gmehmet | 1:f60eafbf009a | 243 | float y; |
| gmehmet | 1:f60eafbf009a | 244 | float z; |
| gmehmet | 1:f60eafbf009a | 245 | int16_t x_raw; |
| gmehmet | 1:f60eafbf009a | 246 | int16_t y_raw; |
| gmehmet | 1:f60eafbf009a | 247 | int16_t z_raw; |
| gmehmet | 1:f60eafbf009a | 248 | } accel_data_t; |
| gmehmet | 1:f60eafbf009a | 249 | |
| gmehmet | 1:f60eafbf009a | 250 | /* PRIVATE VARIABLES */ |
| gmehmet | 1:f60eafbf009a | 251 | int input_fifo_size; |
| gmehmet | 1:f60eafbf009a | 252 | bool sensor_data_from_host; |
| gmehmet | 1:f60eafbf009a | 253 | |
| gmehmet | 1:f60eafbf009a | 254 | BMI160_I2C *m_bmi160; |
| gmehmet | 1:f60eafbf009a | 255 | |
| gmehmet | 1:f60eafbf009a | 256 | USBSerial *m_USB; |
| gmehmet | 1:f60eafbf009a | 257 | SSInterface *ss_int; |
| gmehmet | 1:f60eafbf009a | 258 | DSInterface *ds_int; |
| gmehmet | 1:f60eafbf009a | 259 | |
| gmehmet | 1:f60eafbf009a | 260 | queue_t max8614x_queue; |
| gmehmet | 1:f60eafbf009a | 261 | uint8_t max8614x_queue_buf[64 * sizeof(max8614x_mode1_data)]; |
| gmehmet | 1:f60eafbf009a | 262 | |
| gmehmet | 1:f60eafbf009a | 263 | queue_t whrm_queue; |
| gmehmet | 1:f60eafbf009a | 264 | uint8_t whrm_queue_buf[64 * sizeof(whrm_modeX_data)]; // use the bigger of model and 2 |
| gmehmet | 1:f60eafbf009a | 265 | |
| gmehmet | 1:f60eafbf009a | 266 | queue_t accel_output_queue; |
| gmehmet | 1:f60eafbf009a | 267 | uint8_t accel_output_queue_buf[64 * sizeof(accel_mode1_data)]; |
| gmehmet | 1:f60eafbf009a | 268 | |
| gmehmet | 1:f60eafbf009a | 269 | queue_t accel_input_queue; |
| gmehmet | 1:f60eafbf009a | 270 | uint8_t accel_input_queue_buf[64 * sizeof(accel_mode1_data)]; |
| gmehmet | 1:f60eafbf009a | 271 | |
| gmehmet | 1:f60eafbf009a | 272 | |
| gmehmet | 1:f60eafbf009a | 273 | ss_data_req max8614x_mode1_data_req; |
| gmehmet | 1:f60eafbf009a | 274 | ss_data_req whrm_mode1_data_req; |
| gmehmet | 1:f60eafbf009a | 275 | ss_data_req whrm_mode2_data_req; |
| gmehmet | 1:f60eafbf009a | 276 | |
| gmehmet | 1:f60eafbf009a | 277 | ss_data_req accel_mode1_data_req; |
| gmehmet | 1:f60eafbf009a | 278 | ss_data_req agc_mode1_data_req; |
| gmehmet | 1:f60eafbf009a | 279 | |
| gmehmet | 1:f60eafbf009a | 280 | |
| gmehmet | 1:f60eafbf009a | 281 | bool agc_enabled; |
| gmehmet | 1:f60eafbf009a | 282 | |
| gmehmet | 1:f60eafbf009a | 283 | // sensor and algo status |
| gmehmet | 1:f60eafbf009a | 284 | status_algo_sensors_st sensor_algo_en_dis_; |
| gmehmet | 1:f60eafbf009a | 285 | |
| gmehmet | 1:f60eafbf009a | 286 | /* PRIVATE CONST VARIABLES */ |
| gmehmet | 1:f60eafbf009a | 287 | static const int SSMAX8614X_REG_SIZE = 1; |
| gmehmet | 1:f60eafbf009a | 288 | static const int SSMAX8614X_MODE1_DATASIZE = 18; //Taken from API doc |
| gmehmet | 1:f60eafbf009a | 289 | static const int SSWHRM_MODE1_DATASIZE = 6; //Taken from API doc |
| gmehmet | 1:f60eafbf009a | 290 | static const int SSWHRM_MODEX_DATASIZE = 35; // For WHRM_AEC_SCD |
| gmehmet | 1:f60eafbf009a | 291 | static const int SSACCEL_MODE1_DATASIZE = 6; //Taken from API doc |
| gmehmet | 1:f60eafbf009a | 292 | static const int SSAGC_MODE1_DATASIZE = 0; //Taken from API doc |
| gmehmet | 1:f60eafbf009a | 293 | |
| gmehmet | 1:f60eafbf009a | 294 | |
| gmehmet | 1:f60eafbf009a | 295 | /* PRIVATE METHODS */ |
| gmehmet | 1:f60eafbf009a | 296 | void max8614x_data_rx(uint8_t *data_ptr); |
| gmehmet | 1:f60eafbf009a | 297 | void whrm_data_rx_mode1(uint8_t *data_ptr); |
| gmehmet | 1:f60eafbf009a | 298 | void whrm_data_rx_mode2(uint8_t *data_ptr); |
| gmehmet | 1:f60eafbf009a | 299 | void accel_data_rx(uint8_t *data_ptr); |
| gmehmet | 1:f60eafbf009a | 300 | void agc_data_rx(uint8_t *data_ptr); |
| gmehmet | 1:f60eafbf009a | 301 | int get_sensor_xyz(accel_data_t&); |
| gmehmet | 1:f60eafbf009a | 302 | int parse_cal_str(const char *ptr_ch, const char *cmd, uint8_t *cal_data, int cal_data_sz); |
| gmehmet | 1:f60eafbf009a | 303 | int parse_str(const char *ptr_ch, const char *cmd, uint8_t *data, int data_sz); |
| gmehmet | 1:f60eafbf009a | 304 | }; |
| gmehmet | 1:f60eafbf009a | 305 | |
| gmehmet | 1:f60eafbf009a | 306 | #endif /* _SSMAX8614XCOMM_H_ */ |