ME11B Sample Code in Maxim Integrated Team

Dependencies:   BMI160 max32630hsp3 MemoryLCD USBDevice

Fork of Host_Software_MAX32664GWEB_HR_EXTENDED by Seyhmus Cacina

Committer:
seyhmuscacina
Date:
Mon Mar 25 07:40:37 2019 +0000
Revision:
3:b8989dab0f88
Parent:
0:ac4dea3e2894
Fork the repository

Who changed what in which revision?

UserRevisionLine numberNew contents of line
seyhmus.cacina 0:ac4dea3e2894 1 /*******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 2 * Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
seyhmus.cacina 0:ac4dea3e2894 3 *
seyhmus.cacina 0:ac4dea3e2894 4 * Permission is hereby granted, free of charge, to any person obtaining a
seyhmus.cacina 0:ac4dea3e2894 5 * copy of this software and associated documentation files (the "Software"),
seyhmus.cacina 0:ac4dea3e2894 6 * to deal in the Software without restriction, including without limitation
seyhmus.cacina 0:ac4dea3e2894 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
seyhmus.cacina 0:ac4dea3e2894 8 * and/or sell copies of the Software, and to permit persons to whom the
seyhmus.cacina 0:ac4dea3e2894 9 * Software is furnished to do so, subject to the following conditions:
seyhmus.cacina 0:ac4dea3e2894 10 *
seyhmus.cacina 0:ac4dea3e2894 11 * The above copyright notice and this permission notice shall be included
seyhmus.cacina 0:ac4dea3e2894 12 * in all copies or substantial portions of the Software.
seyhmus.cacina 0:ac4dea3e2894 13 *
seyhmus.cacina 0:ac4dea3e2894 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
seyhmus.cacina 0:ac4dea3e2894 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
seyhmus.cacina 0:ac4dea3e2894 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
seyhmus.cacina 0:ac4dea3e2894 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
seyhmus.cacina 0:ac4dea3e2894 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
seyhmus.cacina 0:ac4dea3e2894 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
seyhmus.cacina 0:ac4dea3e2894 20 * OTHER DEALINGS IN THE SOFTWARE.
seyhmus.cacina 0:ac4dea3e2894 21 *
seyhmus.cacina 0:ac4dea3e2894 22 * Except as contained in this notice, the name of Maxim Integrated
seyhmus.cacina 0:ac4dea3e2894 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
seyhmus.cacina 0:ac4dea3e2894 24 * Products, Inc. Branding Policy.
seyhmus.cacina 0:ac4dea3e2894 25 *
seyhmus.cacina 0:ac4dea3e2894 26 * The mere transfer of this software does not imply any licenses
seyhmus.cacina 0:ac4dea3e2894 27 * of trade secrets, proprietary technology, copyrights, patents,
seyhmus.cacina 0:ac4dea3e2894 28 * trademarks, maskwork rights, or any other form of intellectual
seyhmus.cacina 0:ac4dea3e2894 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
seyhmus.cacina 0:ac4dea3e2894 30 * ownership rights.
seyhmus.cacina 0:ac4dea3e2894 31 *******************************************************************************
seyhmus.cacina 0:ac4dea3e2894 32 */
seyhmus.cacina 0:ac4dea3e2894 33 #ifndef SH_Max8614x_BareMetal_H_
seyhmus.cacina 0:ac4dea3e2894 34 #define SH_Max8614x_BareMetal_H_
seyhmus.cacina 0:ac4dea3e2894 35
seyhmus.cacina 0:ac4dea3e2894 36 #include <stdint.h>
seyhmus.cacina 0:ac4dea3e2894 37 #include <stdio.h>
seyhmus.cacina 0:ac4dea3e2894 38 #include "demoDefinitions.h"
seyhmus.cacina 0:ac4dea3e2894 39
seyhmus.cacina 0:ac4dea3e2894 40
seyhmus.cacina 0:ac4dea3e2894 41 #define COMM_SUCCESS 0
seyhmus.cacina 0:ac4dea3e2894 42 #define COMM_GENERAL_ERROR -1
seyhmus.cacina 0:ac4dea3e2894 43 #define COMM_INVALID_PARAM -254
seyhmus.cacina 0:ac4dea3e2894 44 #define COMM_NOT_RECOGNIZED -255
seyhmus.cacina 0:ac4dea3e2894 45
seyhmus.cacina 0:ac4dea3e2894 46 enum enAlgoMode{
seyhmus.cacina 0:ac4dea3e2894 47 kAlgoModeHeartRate = 0,
seyhmus.cacina 0:ac4dea3e2894 48 reinitHeartRate = 1,
seyhmus.cacina 0:ac4dea3e2894 49 };
seyhmus.cacina 0:ac4dea3e2894 50
seyhmus.cacina 0:ac4dea3e2894 51 /**
seyhmus.cacina 0:ac4dea3e2894 52 * @brief Get the value of register at addr
seyhmus.cacina 0:ac4dea3e2894 53 *
seyhmus.cacina 0:ac4dea3e2894 54 * @param[in] addr - adress of the register
seyhmus.cacina 0:ac4dea3e2894 55 * @param[out] val - value at the register
seyhmus.cacina 0:ac4dea3e2894 56
seyhmus.cacina 0:ac4dea3e2894 57 */
seyhmus.cacina 0:ac4dea3e2894 58 void SH_Max8614x_get_reg(uint8_t addr, uint32_t *val);
seyhmus.cacina 0:ac4dea3e2894 59
seyhmus.cacina 0:ac4dea3e2894 60 /**
seyhmus.cacina 0:ac4dea3e2894 61 * @brief Write a value to the register at address addr
seyhmus.cacina 0:ac4dea3e2894 62 *
seyhmus.cacina 0:ac4dea3e2894 63 * @param[in] addr - adress of the register to write
seyhmus.cacina 0:ac4dea3e2894 64 * @param[in] val - value of the register to write
seyhmus.cacina 0:ac4dea3e2894 65 */
seyhmus.cacina 0:ac4dea3e2894 66 void SH_Max8614x_set_reg(uint8_t addr, uint32_t val);
seyhmus.cacina 0:ac4dea3e2894 67
seyhmus.cacina 0:ac4dea3e2894 68 /**
seyhmus.cacina 0:ac4dea3e2894 69 * @brief Initialize Max86140 with default configuration
seyhmus.cacina 0:ac4dea3e2894 70 *
seyhmus.cacina 0:ac4dea3e2894 71 * @param[in] paramAlgoMode - the mode of the algorithm to initialize
seyhmus.cacina 0:ac4dea3e2894 72 *
seyhmus.cacina 0:ac4dea3e2894 73 * @return 0 on SUCCESS
seyhmus.cacina 0:ac4dea3e2894 74 */
seyhmus.cacina 0:ac4dea3e2894 75 int SH_Max8614x_default_init(enum enAlgoMode paramAlgoMode);
seyhmus.cacina 0:ac4dea3e2894 76
seyhmus.cacina 0:ac4dea3e2894 77 /**
seyhmus.cacina 0:ac4dea3e2894 78 * @brief Check the data stored in the Sensor Hub. Reads and prints
seyhmus.cacina 0:ac4dea3e2894 79 * the data if available
seyhmus.cacina 0:ac4dea3e2894 80 *
seyhmus.cacina 0:ac4dea3e2894 81 */
seyhmus.cacina 0:ac4dea3e2894 82 int SH_Max8614x_data_report_execute(void);
seyhmus.cacina 0:ac4dea3e2894 83
seyhmus.cacina 0:ac4dea3e2894 84 /**
seyhmus.cacina 0:ac4dea3e2894 85 * @brief Stops the active sensors and algorithms
seyhmus.cacina 0:ac4dea3e2894 86 *
seyhmus.cacina 0:ac4dea3e2894 87 */
seyhmus.cacina 0:ac4dea3e2894 88 void SH_Max8614x_stop(void);
seyhmus.cacina 0:ac4dea3e2894 89
seyhmus.cacina 0:ac4dea3e2894 90
seyhmus.cacina 0:ac4dea3e2894 91 extern uint16_t HrmResult;
seyhmus.cacina 0:ac4dea3e2894 92 extern uint8_t HrmConfidence;
seyhmus.cacina 0:ac4dea3e2894 93
seyhmus.cacina 0:ac4dea3e2894 94
seyhmus.cacina 0:ac4dea3e2894 95 /* define to see debug messages*/
seyhmus.cacina 0:ac4dea3e2894 96 //#define DEBUG_INFO
seyhmus.cacina 0:ac4dea3e2894 97
seyhmus.cacina 0:ac4dea3e2894 98 /**
seyhmus.cacina 0:ac4dea3e2894 99 * @brief gets the data format of reported whrm algo result sample , in form of struct fields with number of bits they are represented.
seyhmus.cacina 0:ac4dea3e2894 100 *
seyhmus.cacina 0:ac4dea3e2894 101 * @param[in] null_arg : NULL string, just to match the form of command table function pointer type
seyhmus.cacina 0:ac4dea3e2894 102 *
seyhmus.cacina 0:ac4dea3e2894 103 * @return 0
seyhmus.cacina 0:ac4dea3e2894 104 */
seyhmus.cacina 0:ac4dea3e2894 105 int SH_Max8614x_get_whrm_dataformat(const char *null_arg);
seyhmus.cacina 0:ac4dea3e2894 106
seyhmus.cacina 0:ac4dea3e2894 107
seyhmus.cacina 0:ac4dea3e2894 108 /**
seyhmus.cacina 0:ac4dea3e2894 109 * @brief sets the register value of ppg sensor (8614x is connected to ME11 SENSOR HUB for this demo but can be used for all sensors physically
seyhmus.cacina 0:ac4dea3e2894 110 * connected to ME11 SENSOR HUB).
seyhmus.cacina 0:ac4dea3e2894 111 *
seyhmus.cacina 0:ac4dea3e2894 112 * @param[in] addr_value_args : byte string including command followed by register address in hex and register value in hex
seyhmus.cacina 0:ac4dea3e2894 113 * "set_reg ppgsensor 0xAB 0xCD" or "set_reg ppgsensor AB CD"
seyhmus.cacina 0:ac4dea3e2894 114 *
seyhmus.cacina 0:ac4dea3e2894 115 * @return 0x00 on success and prints on command console
seyhmus.cacina 0:ac4dea3e2894 116 */
seyhmus.cacina 0:ac4dea3e2894 117 int SH_Max8614x_set_ppgreg(const char *addr_value_args);
seyhmus.cacina 0:ac4dea3e2894 118
seyhmus.cacina 0:ac4dea3e2894 119 /**
seyhmus.cacina 0:ac4dea3e2894 120 * @brief gets the register value of ppg sensor (8614x is connected to ME11 SENSOR HUB for this demo but can be used for all sensors physically
seyhmus.cacina 0:ac4dea3e2894 121 * connected to ME11 SENSOR HUB).
seyhmus.cacina 0:ac4dea3e2894 122 *
seyhmus.cacina 0:ac4dea3e2894 123 * @param[in] addr_arg: byte string including command followed by register address in hex
seyhmus.cacina 0:ac4dea3e2894 124 * "set_reg ppgsensor 0xAB" or "set_reg ppgsensor AB"
seyhmus.cacina 0:ac4dea3e2894 125 *
seyhmus.cacina 0:ac4dea3e2894 126 * @return 0x00 on success and prints register value on command console
seyhmus.cacina 0:ac4dea3e2894 127 */
seyhmus.cacina 0:ac4dea3e2894 128 int SH_Max8614x_get_ppgreg(const char *addr_arg);
seyhmus.cacina 0:ac4dea3e2894 129
seyhmus.cacina 0:ac4dea3e2894 130 /**
seyhmus.cacina 0:ac4dea3e2894 131 * @brief initalizes and starts whrm measurement from ME11 SENSOR HUB.
seyhmus.cacina 0:ac4dea3e2894 132 * It default initilizes datatype(to BOTH) input fifo lenght(to 5 , this is FIFO used by accel data from host)
seyhmus.cacina 0:ac4dea3e2894 133 *
seyhmus.cacina 0:ac4dea3e2894 134 * @param[in] null_arg : NULL string, just to match the form of command table function pointer type
seyhmus.cacina 0:ac4dea3e2894 135 *
seyhmus.cacina 0:ac4dea3e2894 136 ** @return 0x00 on success and prints status on command console
seyhmus.cacina 0:ac4dea3e2894 137 */
seyhmus.cacina 0:ac4dea3e2894 138 int SH_Max8614x_measure_whrm(const char *null_arg);
seyhmus.cacina 0:ac4dea3e2894 139
seyhmus.cacina 0:ac4dea3e2894 140
seyhmus.cacina 0:ac4dea3e2894 141 /**
seyhmus.cacina 0:ac4dea3e2894 142 * @brief starts self test of ppg sensor
seyhmus.cacina 0:ac4dea3e2894 143 *
seyhmus.cacina 0:ac4dea3e2894 144 * @param[in] null_arg : NULL string, just to match the form of command table function pointer type
seyhmus.cacina 0:ac4dea3e2894 145 *
seyhmus.cacina 0:ac4dea3e2894 146 ** @return 0x00 on success and prints status on command console
seyhmus.cacina 0:ac4dea3e2894 147 */
seyhmus.cacina 0:ac4dea3e2894 148 int SH_Max8614x_self_test_ppg(const char *null_arg);
seyhmus.cacina 0:ac4dea3e2894 149
seyhmus.cacina 0:ac4dea3e2894 150 /**
seyhmus.cacina 0:ac4dea3e2894 151 * @brief starts self test of accelerometer sensor physically connected to ME11 SENSOR HUB
seyhmus.cacina 0:ac4dea3e2894 152 * NOTE:Not supported within this demo as Customer is assumed to feed accel data from HOST.
seyhmus.cacina 0:ac4dea3e2894 153 *
seyhmus.cacina 0:ac4dea3e2894 154 * @param[in] null_arg : NULL string, just to match the form of command table function pointer type
seyhmus.cacina 0:ac4dea3e2894 155 *
seyhmus.cacina 0:ac4dea3e2894 156 ** @return 0x00 on success and prints status on command console
seyhmus.cacina 0:ac4dea3e2894 157 */
seyhmus.cacina 0:ac4dea3e2894 158 int SH_Max8614x_self_test_acc(const char *null_arg);
seyhmus.cacina 0:ac4dea3e2894 159
seyhmus.cacina 0:ac4dea3e2894 160 /**
seyhmus.cacina 0:ac4dea3e2894 161 * @brief sets the aec algo usage of SPO2 algorithm
seyhmus.cacina 0:ac4dea3e2894 162 *
seyhmus.cacina 0:ac4dea3e2894 163 * @param[in] onoff_arg : byte string including command followed by mode value in HEX uo to 1 hexadecimal digits.
seyhmus.cacina 0:ac4dea3e2894 164 * "set_cfg whrm aecenable 0/1" 0:off 1: On
seyhmus.cacina 0:ac4dea3e2894 165 *
seyhmus.cacina 0:ac4dea3e2894 166 *@return status info, 0x00 on success
seyhmus.cacina 0:ac4dea3e2894 167 *
seyhmus.cacina 0:ac4dea3e2894 168 **/
seyhmus.cacina 0:ac4dea3e2894 169 int SH_Max8614x_set_whrm_aecusage(const char *onoff_arg);
seyhmus.cacina 0:ac4dea3e2894 170
seyhmus.cacina 0:ac4dea3e2894 171 /**
seyhmus.cacina 0:ac4dea3e2894 172 * @brief gets the aec algo usage of SPO2 algorithm
seyhmus.cacina 0:ac4dea3e2894 173 * prints aec algo usage usage on/off value commnad console. 0 : Off 1: On
seyhmus.cacina 0:ac4dea3e2894 174 *
seyhmus.cacina 0:ac4dea3e2894 175 * @param[in] null_arg : NULL string, just to match the form of command table function pointer type
seyhmus.cacina 0:ac4dea3e2894 176 *
seyhmus.cacina 0:ac4dea3e2894 177 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 178 **/
seyhmus.cacina 0:ac4dea3e2894 179 int SH_Max8614x_get_whrm_aecusage(const char *null_arg);
seyhmus.cacina 0:ac4dea3e2894 180
seyhmus.cacina 0:ac4dea3e2894 181 /**
seyhmus.cacina 0:ac4dea3e2894 182 * @brief sets the skin contact detection usage of SPO2 algorithm
seyhmus.cacina 0:ac4dea3e2894 183 *
seyhmus.cacina 0:ac4dea3e2894 184 * @param[in] onoff_arg : byte string including command followed by mode value in HEX uo to 1 hexadecimal digits.
seyhmus.cacina 0:ac4dea3e2894 185 * "set_cfg whrm aecenable 0/1" 0:off 1: On
seyhmus.cacina 0:ac4dea3e2894 186 *
seyhmus.cacina 0:ac4dea3e2894 187 *@return status info, 0x00 on success
seyhmus.cacina 0:ac4dea3e2894 188 *
seyhmus.cacina 0:ac4dea3e2894 189 **/
seyhmus.cacina 0:ac4dea3e2894 190 int SH_Max8614x_set_whrm_scdusage(const char *onoff_arg);
seyhmus.cacina 0:ac4dea3e2894 191
seyhmus.cacina 0:ac4dea3e2894 192 /**
seyhmus.cacina 0:ac4dea3e2894 193 * @brief gets the skin contact detection usage of SPO2 algorithm
seyhmus.cacina 0:ac4dea3e2894 194 * prints skin contact detection usage on/off value commnad console. 0 : Off 1: On
seyhmus.cacina 0:ac4dea3e2894 195 *
seyhmus.cacina 0:ac4dea3e2894 196 * @param[in] null_arg : NULL string, just to match the form of command table function pointer type
seyhmus.cacina 0:ac4dea3e2894 197 *
seyhmus.cacina 0:ac4dea3e2894 198 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 199 **/
seyhmus.cacina 0:ac4dea3e2894 200 int SH_Max8614x_get_whrm_scdusage(const char *null_arg);
seyhmus.cacina 0:ac4dea3e2894 201
seyhmus.cacina 0:ac4dea3e2894 202 /**
seyhmus.cacina 0:ac4dea3e2894 203 * @brief sets the adjustment period parameter for skin contact detection for SPO2 algorithm.
seyhmus.cacina 0:ac4dea3e2894 204 *
seyhmus.cacina 0:ac4dea3e2894 205 * @param[in] period_arg : byte string including command followed by period value in HEX up to 4 hexadecimal digits.
seyhmus.cacina 0:ac4dea3e2894 206 * "set_cfg whrm scdadjperiod 0xABCD"
seyhmus.cacina 0:ac4dea3e2894 207 *
seyhmus.cacina 0:ac4dea3e2894 208 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 209 **/
seyhmus.cacina 0:ac4dea3e2894 210 int SH_Max8614x_set_whrm_scdadjperiod(const char *period_arg);
seyhmus.cacina 0:ac4dea3e2894 211
seyhmus.cacina 0:ac4dea3e2894 212 /**
seyhmus.cacina 0:ac4dea3e2894 213 * @brief Gets the adjustment period parameter for skin contact detection for SPO2 algorithm.
seyhmus.cacina 0:ac4dea3e2894 214 * prints SPo2 period value on command console
seyhmus.cacina 0:ac4dea3e2894 215 *
seyhmus.cacina 0:ac4dea3e2894 216 * @param[in] null_arg : NULL string, just to match the form of command table function pointer type
seyhmus.cacina 0:ac4dea3e2894 217 *
seyhmus.cacina 0:ac4dea3e2894 218 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 219 *
seyhmus.cacina 0:ac4dea3e2894 220 **/
seyhmus.cacina 0:ac4dea3e2894 221 int SH_Max8614x_get_whrm_scdadjperiod(const char *null_arg);
seyhmus.cacina 0:ac4dea3e2894 222
seyhmus.cacina 0:ac4dea3e2894 223 /**
seyhmus.cacina 0:ac4dea3e2894 224 * @brief sets the debounce window parameter for skin contact detection for SPO2 algorithm.
seyhmus.cacina 0:ac4dea3e2894 225 *
seyhmus.cacina 0:ac4dea3e2894 226 * @param[in] dwindow_arg : byte string including command followed by debounce window value in HEX up to 4 hexadecimal digits.
seyhmus.cacina 0:ac4dea3e2894 227 * "set_cfg whrm scddebouncewin 0xABCD"
seyhmus.cacina 0:ac4dea3e2894 228 *
seyhmus.cacina 0:ac4dea3e2894 229 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 230 **/
seyhmus.cacina 0:ac4dea3e2894 231 int SH_Max8614x_set_whrm_scddebouncewin(const char *dwindow_arg);
seyhmus.cacina 0:ac4dea3e2894 232
seyhmus.cacina 0:ac4dea3e2894 233 /**
seyhmus.cacina 0:ac4dea3e2894 234 * @brief gets the debounce window parameter for skin contact detection for SPO2 algorithm.
seyhmus.cacina 0:ac4dea3e2894 235 *
seyhmus.cacina 0:ac4dea3e2894 236 * @param[in] null_arg : NULL string, just to match the form of command table function pointer type
seyhmus.cacina 0:ac4dea3e2894 237 *
seyhmus.cacina 0:ac4dea3e2894 238 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 239 **/
seyhmus.cacina 0:ac4dea3e2894 240 int SH_Max8614x_get_whrm_scddebouncewin(const char *null_arg);
seyhmus.cacina 0:ac4dea3e2894 241
seyhmus.cacina 0:ac4dea3e2894 242
seyhmus.cacina 0:ac4dea3e2894 243 /**
seyhmus.cacina 0:ac4dea3e2894 244 * @brief sets the motion threshold parameter for WHRM algorithm.
seyhmus.cacina 0:ac4dea3e2894 245 *
seyhmus.cacina 0:ac4dea3e2894 246 * @param[in] timeout_arg : byte string including command followed by motion threshold value in HEX up to 4 hexadecimal digits.
seyhmus.cacina 0:ac4dea3e2894 247 * "set_cfg whrm motionthreshold 0xABCD"
seyhmus.cacina 0:ac4dea3e2894 248 *
seyhmus.cacina 0:ac4dea3e2894 249 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 250 *
seyhmus.cacina 0:ac4dea3e2894 251 **/
seyhmus.cacina 0:ac4dea3e2894 252 int SH_Max8614x_set_whrm_motionthresh(const char *motion_arg);
seyhmus.cacina 0:ac4dea3e2894 253
seyhmus.cacina 0:ac4dea3e2894 254 /**
seyhmus.cacina 0:ac4dea3e2894 255 * @brief Gets the motion threshold for WHRM algorithm. prints WHRM algorith motion threshold value on command console
seyhmus.cacina 0:ac4dea3e2894 256 *
seyhmus.cacina 0:ac4dea3e2894 257 * @param[in] null_arg : NULL string, just to match the form of command table function pointer type
seyhmus.cacina 0:ac4dea3e2894 258 *
seyhmus.cacina 0:ac4dea3e2894 259 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 260 *
seyhmus.cacina 0:ac4dea3e2894 261 **/
seyhmus.cacina 0:ac4dea3e2894 262 int SH_Max8614x_get_whrm_motionthresh(const char *null_arg);
seyhmus.cacina 0:ac4dea3e2894 263
seyhmus.cacina 0:ac4dea3e2894 264 /**
seyhmus.cacina 0:ac4dea3e2894 265 * @brief sets the minimum photodiode current parameter for WHRM algorithm.
seyhmus.cacina 0:ac4dea3e2894 266 *
seyhmus.cacina 0:ac4dea3e2894 267 * @param[in] curr_arg : byte string including command followed by diode current value in HEX up to 4 hexadecimal digits.
seyhmus.cacina 0:ac4dea3e2894 268 * "set_cfg whrm motionthreshold 0xABCD"
seyhmus.cacina 0:ac4dea3e2894 269 *
seyhmus.cacina 0:ac4dea3e2894 270 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 271 *
seyhmus.cacina 0:ac4dea3e2894 272 **/
seyhmus.cacina 0:ac4dea3e2894 273 int SH_Max8614x_set_whrm_minpdiodecurr(const char *curr_arg);
seyhmus.cacina 0:ac4dea3e2894 274
seyhmus.cacina 0:ac4dea3e2894 275 /**
seyhmus.cacina 0:ac4dea3e2894 276 * @brief Gets the minimum photodiode current parameter for WHRM algorithm. prints WHRM algorithm photodiode current parameter value on command console
seyhmus.cacina 0:ac4dea3e2894 277 *
seyhmus.cacina 0:ac4dea3e2894 278 * @param[in] null_arg : NULL string, just to match the form of command table function pointer type
seyhmus.cacina 0:ac4dea3e2894 279 *
seyhmus.cacina 0:ac4dea3e2894 280 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 281 *
seyhmus.cacina 0:ac4dea3e2894 282 **/
seyhmus.cacina 0:ac4dea3e2894 283 int SH_Max8614x_get_whrm_minpdiodecurr(const char *null_arg);
seyhmus.cacina 0:ac4dea3e2894 284
seyhmus.cacina 0:ac4dea3e2894 285 /**
seyhmus.cacina 0:ac4dea3e2894 286 * @brief sets the sensor photodiode configuration for WHRM algorithm.
seyhmus.cacina 0:ac4dea3e2894 287 *
seyhmus.cacina 0:ac4dea3e2894 288 * @param[in] pdcfg_arg : byte string including command followed by photodiode configuration value in HEX up to 1 hexadecimal digits.
seyhmus.cacina 0:ac4dea3e2894 289 "set_cfg whrm pdconfig 0xA" or "set_cfg whrm pdconfig A"
seyhmus.cacina 0:ac4dea3e2894 290 *
seyhmus.cacina 0:ac4dea3e2894 291 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 292 **/
seyhmus.cacina 0:ac4dea3e2894 293 int SH_Max8614x_set_whrm_pdiodeconfig(const char *cfg_arg);
seyhmus.cacina 0:ac4dea3e2894 294
seyhmus.cacina 0:ac4dea3e2894 295 /**
seyhmus.cacina 0:ac4dea3e2894 296 * @brief Gets the sensor photodiode configuration for WHRM algorithm. prints WHRM algorithm photodiode configuration on command console
seyhmus.cacina 0:ac4dea3e2894 297 *
seyhmus.cacina 0:ac4dea3e2894 298 * @param[in] null_arg : NULL string, just to match the form of command table function pointer type
seyhmus.cacina 0:ac4dea3e2894 299 *
seyhmus.cacina 0:ac4dea3e2894 300 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 301 *
seyhmus.cacina 0:ac4dea3e2894 302 **/
seyhmus.cacina 0:ac4dea3e2894 303 int SH_Max8614x_get_whrm_pdiodeconfig(const char *null_arg);
seyhmus.cacina 0:ac4dea3e2894 304
seyhmus.cacina 0:ac4dea3e2894 305 /**
seyhmus.cacina 0:ac4dea3e2894 306 * @brief Sends raw byte stream to ME11 SENSOR HUB. For debug purposes mainly.
seyhmus.cacina 0:ac4dea3e2894 307 *
seyhmus.cacina 0:ac4dea3e2894 308 * @param[in] raw_data : byte stream to be send
seyhmus.cacina 0:ac4dea3e2894 309 *
seyhmus.cacina 0:ac4dea3e2894 310 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 311 *
seyhmus.cacina 0:ac4dea3e2894 312 **/
seyhmus.cacina 0:ac4dea3e2894 313 //int SH_Max8614x_send_raw(const char *raw_data);
seyhmus.cacina 0:ac4dea3e2894 314
seyhmus.cacina 0:ac4dea3e2894 315
seyhmus.cacina 0:ac4dea3e2894 316
seyhmus.cacina 0:ac4dea3e2894 317 /**
seyhmus.cacina 0:ac4dea3e2894 318 * @brief Stops sensor+algorithm data acquisition and operation for all algorithms of ME11 sensor HUB .
seyhmus.cacina 0:ac4dea3e2894 319 * Mainly for use in this demo code!!
seyhmus.cacina 0:ac4dea3e2894 320 *
seyhmus.cacina 0:ac4dea3e2894 321 * @param[in] null_arg : NULL string, just to match the form of command table function pointer type
seyhmus.cacina 0:ac4dea3e2894 322 *
seyhmus.cacina 0:ac4dea3e2894 323 * @return status info, 0x00 on success.
seyhmus.cacina 0:ac4dea3e2894 324 *
seyhmus.cacina 0:ac4dea3e2894 325 **/
seyhmus.cacina 0:ac4dea3e2894 326 int SH_Max8614x_stop_acquisition(const char *null_arg);
seyhmus.cacina 0:ac4dea3e2894 327
seyhmus.cacina 0:ac4dea3e2894 328
seyhmus.cacina 0:ac4dea3e2894 329 #if defined(RAW_DATA_ONLY)
seyhmus.cacina 0:ac4dea3e2894 330 int SH_Max8614x_disable_whrm(const char *onoff_arg);
seyhmus.cacina 0:ac4dea3e2894 331 int SH_Max8614x_enable_pureraw(const char *onoff_arg);
seyhmus.cacina 0:ac4dea3e2894 332 #define NUMCMDS8614X (24)
seyhmus.cacina 0:ac4dea3e2894 333 #else
seyhmus.cacina 0:ac4dea3e2894 334 #define NUMCMDS8614X (22)
seyhmus.cacina 0:ac4dea3e2894 335 #endif
seyhmus.cacina 0:ac4dea3e2894 336
seyhmus.cacina 0:ac4dea3e2894 337 /*Number of commands accosicated with 8614x sesnor command table*/
seyhmus.cacina 0:ac4dea3e2894 338
seyhmus.cacina 0:ac4dea3e2894 339 #define CONSOLE_STR_BUF_SZ ((int)1024);
seyhmus.cacina 0:ac4dea3e2894 340
seyhmus.cacina 0:ac4dea3e2894 341
seyhmus.cacina 0:ac4dea3e2894 342 typedef int (*cmdExecFunc)( const char*); // typedef void (*cmdExecFunc)( const void*);
seyhmus.cacina 0:ac4dea3e2894 343
seyhmus.cacina 0:ac4dea3e2894 344 typedef struct {
seyhmus.cacina 0:ac4dea3e2894 345 char const* cmdStr;
seyhmus.cacina 0:ac4dea3e2894 346 cmdExecFunc execute;
seyhmus.cacina 0:ac4dea3e2894 347 char const *help;
seyhmus.cacina 0:ac4dea3e2894 348 }cmd_interface_t;
seyhmus.cacina 0:ac4dea3e2894 349
seyhmus.cacina 0:ac4dea3e2894 350
seyhmus.cacina 0:ac4dea3e2894 351 static int command_help(const char *str);
seyhmus.cacina 0:ac4dea3e2894 352
seyhmus.cacina 0:ac4dea3e2894 353
seyhmus.cacina 0:ac4dea3e2894 354 const cmd_interface_t CMDTABLE8614x[] = {
seyhmus.cacina 0:ac4dea3e2894 355
seyhmus.cacina 0:ac4dea3e2894 356 { "get_format whrmdata" , SH_Max8614x_get_whrm_dataformat , "returns whrm algo sample format in terms of bit fileds" },
seyhmus.cacina 0:ac4dea3e2894 357 { "enable_measurement whrm" , SH_Max8614x_measure_whrm , "start whrm measurement with default settings" },
seyhmus.cacina 0:ac4dea3e2894 358 { "get_reg ppgsensor" , SH_Max8614x_get_ppgreg , "get register value of 8614x sensor, usage: get_reg ppgsensor rAddr(1byte)" },
seyhmus.cacina 0:ac4dea3e2894 359 { "set_reg ppgsensor" , SH_Max8614x_set_ppgreg , "set register value of 8614x sensor, usage : set_reg ppgsensor rAddr(1byte) rval(1byte)" },
seyhmus.cacina 0:ac4dea3e2894 360 { "self_test ppgsensor" , SH_Max8614x_self_test_ppg , "starts self test of onboard ppg sensor" },
seyhmus.cacina 0:ac4dea3e2894 361 { "self_test accel" , SH_Max8614x_self_test_acc , "starts self test of onboard accel sensor" },
seyhmus.cacina 0:ac4dea3e2894 362 { "set_cfg whrm aecenable" , SH_Max8614x_set_whrm_aecusage , "on/off whrm aec algo, usage: set_cfg whrm aec X , X: 0 off 1 on" },
seyhmus.cacina 0:ac4dea3e2894 363 { "get_cfg whrm aecenable" , SH_Max8614x_get_whrm_aecusage , "check if aec algo for whrm is on/off" },
seyhmus.cacina 0:ac4dea3e2894 364 { "set_cfg whrm scdenable" , SH_Max8614x_set_whrm_scdusage , "on/off whrm skin contact detection, usage: set_cfg whrm scd X , X: 0 off 1 on" },
seyhmus.cacina 0:ac4dea3e2894 365 { "get_cfg whrm scdenable" , SH_Max8614x_get_whrm_scdusage , "check if whrm skin contact detection is on/off" },
seyhmus.cacina 0:ac4dea3e2894 366 { "set_cfg whrm scdadjperiod" , SH_Max8614x_set_whrm_scdadjperiod , "sets photo diode adj peroiod for whrm scd algo, usage: set_cfg whrm scdadjperiod period(numeric)" },
seyhmus.cacina 0:ac4dea3e2894 367 { "get_cfg whrm scdadjperiod" , SH_Max8614x_get_whrm_scdadjperiod , "gets photo diode adj peroiod for whrm scd algo" },
seyhmus.cacina 0:ac4dea3e2894 368 { "set_cfg whrm scddebouncewin" , SH_Max8614x_set_whrm_scddebouncewin , "sets debounce window for whrm scd algo, usage: set_cfg whrm scddebouncewin window(numeric)" },
seyhmus.cacina 0:ac4dea3e2894 369 { "get_cfg whrm scddebouncewin" , SH_Max8614x_get_whrm_scddebouncewin , "gets debounce window for whrm scd algo" },
seyhmus.cacina 0:ac4dea3e2894 370 { "set_cfg whrm motionthreshold" , SH_Max8614x_set_whrm_motionthresh , "sets motion threshold for whrm, usage: set_cfg whrm motionthreshold threshold(numeric)" },
seyhmus.cacina 0:ac4dea3e2894 371 { "get_cfg whrm motionthreshold" , SH_Max8614x_get_whrm_motionthresh , "gets motion threshold for whrm" },
seyhmus.cacina 0:ac4dea3e2894 372 { "set_cfg whrm minpdcurrent" , SH_Max8614x_set_whrm_minpdiodecurr , "sets photodiode current range for whrm, usage: set_cfg whrm minpdcurrent current(numeric)" },
seyhmus.cacina 0:ac4dea3e2894 373 { "get_cfg whrm minpdcurrent" , SH_Max8614x_get_whrm_minpdiodecurr , "gets photodiode current rangefor whrm" },
seyhmus.cacina 0:ac4dea3e2894 374 { "set_cfg whrm pdconfig" , SH_Max8614x_set_whrm_pdiodeconfig , "sets photdiode config for whrm, usage: set_cfg whrmaecscd pdconfig configstring" },
seyhmus.cacina 0:ac4dea3e2894 375 { "get_cfg whrm pdconfig" , SH_Max8614x_get_whrm_pdiodeconfig , "gets photdiode config for whrm" },
seyhmus.cacina 0:ac4dea3e2894 376 { "stop" , SH_Max8614x_stop_acquisition , "stops raw&algorithm data acquisition within 8614x instance of hub" },
seyhmus.cacina 0:ac4dea3e2894 377 { "help" , command_help , "commnand info" },
seyhmus.cacina 0:ac4dea3e2894 378 #if defined(RAW_DATA_ONLY)
seyhmus.cacina 0:ac4dea3e2894 379 { "disable_whrm" , SH_Max8614x_disable_whrm , "disable algorithms" },
seyhmus.cacina 0:ac4dea3e2894 380 { "enable_raw_only" , SH_Max8614x_enable_pureraw , "enable just raw ppg data" },
seyhmus.cacina 0:ac4dea3e2894 381 #endif
seyhmus.cacina 0:ac4dea3e2894 382 // { "send_raw" , SH_Max8614x_send_raw , "sends raw data to sensor hub, usage: send_raw datastring" },
seyhmus.cacina 0:ac4dea3e2894 383 };
seyhmus.cacina 0:ac4dea3e2894 384
seyhmus.cacina 0:ac4dea3e2894 385
seyhmus.cacina 0:ac4dea3e2894 386 static int command_help(const char *str){
seyhmus.cacina 0:ac4dea3e2894 387 int cmdIdx = 0;
seyhmus.cacina 0:ac4dea3e2894 388
seyhmus.cacina 0:ac4dea3e2894 389 SERIALOUT("AVAILABLE COMMANDS: \r\n\r\n");
seyhmus.cacina 0:ac4dea3e2894 390 while( cmdIdx != NUMCMDS8614X){
seyhmus.cacina 0:ac4dea3e2894 391 SERIALOUT(" %s : \r\n %s \r\n\r\n", CMDTABLE8614x[cmdIdx].cmdStr , CMDTABLE8614x[cmdIdx].help );
seyhmus.cacina 0:ac4dea3e2894 392 cmdIdx++;
seyhmus.cacina 0:ac4dea3e2894 393 };
seyhmus.cacina 0:ac4dea3e2894 394
seyhmus.cacina 0:ac4dea3e2894 395 }
seyhmus.cacina 0:ac4dea3e2894 396
seyhmus.cacina 0:ac4dea3e2894 397
seyhmus.cacina 0:ac4dea3e2894 398 #endif
seyhmus.cacina 0:ac4dea3e2894 399
seyhmus.cacina 0:ac4dea3e2894 400
seyhmus.cacina 0:ac4dea3e2894 401