0
mirror of https://github.com/ltian059/Graduation-Project.git synced 2025-02-05 19:37:44 +00:00
itian059-grad-project/Watch/embeded_code/Keil/TEST3/algohub_config_api.c
2024-12-04 12:46:40 -05:00

789 lines
27 KiB
C

/*******************************************************************************
* Copyright (C) 2018 Maxim Integrated Products, Inc., All rights Reserved.
*
* This software is protected by copyright laws of the United States and
* of foreign countries. This material may also be protected by patent laws
* and technology transfer regulations of the United States and of foreign
* countries. This software is furnished under a license agreement and/or a
* nondisclosure agreement and may only be used or reproduced in accordance
* with the terms of those agreements. Dissemination of this information to
* any party or parties not specified in the license agreement and/or
* nondisclosure agreement is expressly prohibited.
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name of Maxim Integrated
* Products, Inc. shall not be used except as stated in the Maxim Integrated
* Products, Inc. Branding Policy.
*
* The mere transfer of this software does not imply any licenses
* of trade secrets, proprietary technology, copyrights, patents,
* trademarks, maskwork rights, or any other form of intellectual
* property whatsoever. Maxim Integrated Products, Inc. retains all
* ownership rights.
*******************************************************************************
*/
#include "algohub_config_api.h"
#include <stdio.h>
#include <string.h>
#include "sh_comm.h"
#define MIN_MACRO(a,b) ((a)<(b)?(a):(b))
int ah_set_cfg_wearablesuite_algomode( const uint8_t algoMode ){
uint8_t Temp[1] = { algoMode };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_ALGO_MODE, &Temp[0], 1);
return status;
}
int ah_get_cfg_wearablesuite_algomode( uint8_t *algoMode ){
uint8_t rxBuff[1+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_ALGO_MODE, &rxBuff[0], sizeof(rxBuff) );
*algoMode = rxBuff[1];
return status;
}
int ah_set_cfg_wearablesuite_afeenable(const uint8_t isAfeEnable ){
uint8_t Temp[1] = { isAfeEnable };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_AEC_ENABLE, &Temp[0], 1);
return status;
}
int ah_get_cfg_wearablesuite_afeenable( uint8_t *isAfecEnable ){
uint8_t rxBuff[1+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_AEC_ENABLE, &rxBuff[0], sizeof(rxBuff) );
*isAfecEnable = rxBuff[1];
return status;
}
int ah_set_cfg_wearablesuite_scdenable( const uint8_t isScdcEnable ){
uint8_t Temp[1] = { isScdcEnable };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_SCD_ENABLE, &Temp[0], 1);
return status;
}
int ah_get_cfg_wearablesuite_scdenable( uint8_t *isScdEnable ){
uint8_t rxBuff[1+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_SCD_ENABLE, &rxBuff[0], sizeof(rxBuff) );
*isScdEnable = rxBuff[1];
return status;
}
int ah_set_cfg_wearablesuite_targetpdcurrent(const uint16_t targetPdCurr_x1000){
uint8_t Temp[2] = { (uint8_t)((targetPdCurr_x1000 >> (1*8)) & 0xFF), (uint8_t)((targetPdCurr_x1000 >> (0*8)) & 0xFF)};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_TARGET_PD_CURRENT, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_targetpdcurrent( uint16_t *targetPdCurr_x1000){
uint8_t rxBuff[2+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_TARGET_PD_CURRENT, &rxBuff[0], sizeof(rxBuff));
*targetPdCurr_x1000 = (rxBuff[1] << 8) + rxBuff[2] ;
return status;
}
int ah_set_cfg_wearablesuite_minpdcurrent(const uint16_t minPdCurr_x1000){
uint8_t Temp[2] = { (uint8_t)((minPdCurr_x1000 >> (1*8)) & 0xFF), (uint8_t)((minPdCurr_x1000 >> (0*8)) & 0xFF)};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MIN_PD_CURRENT, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_minpdcurrent( uint16_t *minPdCurr_x1000){
uint8_t rxBuff[2+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MIN_PD_CURRENT, &rxBuff[0], sizeof(rxBuff));
*minPdCurr_x1000 = (rxBuff[1] << 8) + rxBuff[2] ;
return status;
}
int ah_set_cfg_wearablesuite_initialpdcurrent(const uint16_t initPdCurr_x1000){
uint8_t Temp[2] = { (uint8_t)((initPdCurr_x1000 >> (1*8)) & 0xFF), (uint8_t)((initPdCurr_x1000 >> (0*8)) & 0xFF)};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INIT_PD_CURRENT, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_initialpdcurrent( uint16_t *initPdCurr_x1000){
uint8_t rxBuff[2+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INIT_PD_CURRENT, &rxBuff[0], sizeof(rxBuff));
*initPdCurr_x1000 = (rxBuff[1] << 8) + rxBuff[2] ;
return status;
}
int ah_set_cfg_wearablesuite_autopdcurrentenable( const uint8_t isAutoPdCurrEnable ){
uint8_t Temp[1] = { isAutoPdCurrEnable };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_AUTO_PD_CURRENT_ENABLE, &Temp[0], 1);
return status;
}
int ah_get_cfg_wearablesuite_autopdcurrentenable( uint8_t *isAutoPdCurrEnable ){
uint8_t rxBuff[1+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_AUTO_PD_CURRENT_ENABLE, &rxBuff[0], sizeof(rxBuff) );
*isAutoPdCurrEnable = rxBuff[1];
return status;
}
int ah_set_cfg_wearablesuite_spo2cal( const uint32_t val[3] ){
uint8_t CalCoef[12] = { (uint8_t)((val[0] >> (3*8)) & 0xFF), (uint8_t)((val[0] >> (2*8)) & 0xFF), (uint8_t)((val[0] >> (1*8)) & 0xFF), (uint8_t)((val[0] >> (0*8)) & 0xFF), // A
(uint8_t)((val[1] >> (3*8)) & 0xFF), (uint8_t)((val[1] >> (2*8)) & 0xFF), (uint8_t)((val[1] >> (1*8)) & 0xFF), (uint8_t)((val[1] >> (0*8)) & 0xFF), // B
(uint8_t)((val[2] >> (3*8)) & 0xFF), (uint8_t)((val[2] >> (2*8)) & 0xFF), (uint8_t)((val[2] >> (1*8)) & 0xFF), (uint8_t)((val[2] >> (0*8)) & 0xFF) // C
};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_SPO2_CAL, &CalCoef[0], 12);
return status;
}
int ah_get_cfg_wearablesuite_spo2cal( int32_t val[3]){
uint8_t rxBuff[12+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_SPO2_CAL, &rxBuff[0], sizeof(rxBuff));
val[0] = (rxBuff[1] << 24) + (rxBuff[2] << 16) + (rxBuff[3] << 8) + (rxBuff[4] );
val[1] = (rxBuff[5] << 24) + (rxBuff[6] << 16) + (rxBuff[7] << 8) + (rxBuff[8] );
val[2] = (rxBuff[9] << 24) + (rxBuff[10] << 16) + (rxBuff[11] << 8) + (rxBuff[12] );
return status;
}
/* WARNING: GRANULARITY SHOULD BE 0.01 WILL TALK TO AFSHIN!!!!*/
int ah_set_cfg_wearablesuite_motionthreshold( const uint16_t motionThreah_x1000){
uint8_t Temp[2] = { (uint8_t)((motionThreah_x1000 >> (1*8)) & 0xFF), (uint8_t)((motionThreah_x1000 >> (0*8)) & 0xFF)};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MOTION_MAG_THRESHOLD, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_motionthreshold( uint16_t *motionThreah_x1000){
uint8_t rxBuff[2+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MOTION_MAG_THRESHOLD, &rxBuff[0], sizeof(rxBuff));
*motionThreah_x1000 = (rxBuff[1] << 8) + rxBuff[2];
return status;
}
int ah_set_cfg_wearablesuite_targetpdperiod( const uint16_t targPdPeriod){
uint8_t Temp[2] = { (uint8_t)((targPdPeriod >> (1*8)) & 0xFF), (uint8_t)((targPdPeriod >> (0*8)) & 0xFF)};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_TARGET_PD_CURRENT_PERIOD, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_targetpdperiod( uint16_t *targPdPeriod){
uint8_t rxBuff[2+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_TARGET_PD_CURRENT_PERIOD, &rxBuff[0], sizeof(rxBuff));
*targPdPeriod = (rxBuff[1] << 8) + rxBuff[2];
return status;
}
int ah_set_cfg_wearablesuite_spo2motionperiod( const uint16_t spo2MotnPeriod){
uint8_t Temp[2] = { (uint8_t)((spo2MotnPeriod >> (1*8)) & 0xFF), (uint8_t)((spo2MotnPeriod >> (0*8)) & 0xFF)};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_WSPO2_MOTION_PERIOD, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_spo2motionperiod( uint16_t *spo2MotnPeriod){
uint8_t rxBuff[2+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_WSPO2_MOTION_PERIOD, &rxBuff[0], sizeof(rxBuff));
*spo2MotnPeriod = (rxBuff[1] << 8) + rxBuff[2];
return status;
}
int ah_set_cfg_wearablesuite_spo2motionthreshold( const uint32_t spo2MotnThresh ){
uint8_t Temp[4] = { (uint8_t)((spo2MotnThresh >> (3*8)) & 0xFF), (uint8_t)((spo2MotnThresh >> (2*8)) & 0xFF),
(uint8_t)((spo2MotnThresh >> (1*8)) & 0xFF), (uint8_t)((spo2MotnThresh >> (0*8)) & 0xFF) };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_WSPO2_MOTION_THRESHOLD, &Temp[0], 4);
return status;
}
int ah_get_cfg_wearablesuite_spo2motionthreshold( uint32_t *spo2MotnThresh){
uint8_t rxBuff[4+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_WSPO2_MOTION_THRESHOLD, &rxBuff[0], sizeof(rxBuff));
*spo2MotnThresh = (rxBuff[1] << 24) + (rxBuff[2] << 16) + (rxBuff[3] << 8) + (rxBuff[4]);
return status;
}
int ah_set_cfg_wearablesuite_spo2afecontrltimeout( const uint8_t spo2AfeCtrlTimeout ){
uint8_t Temp[1] = { spo2AfeCtrlTimeout };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_WSPO2_AFE_TIMEOUT, &Temp[0], 1);
return status;
}
int ah_get_cfg_wearablesuite_spo2afecontrltimeout( uint8_t *spo2AfeCtrlTimeout ){
uint8_t rxBuff[1+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_WSPO2_AFE_TIMEOUT, &rxBuff[0], sizeof(rxBuff) );
*spo2AfeCtrlTimeout = rxBuff[1];
return status;
}
int ah_set_cfg_wearablesuite_spo2timeout( const uint8_t spo2AlgoTimeout ){
uint8_t Temp[1] = { spo2AlgoTimeout };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_WSPO2_TIMEOUT, &Temp[0], 1);
return status;
}
int ah_get_cfg_wearablesuite_spo2timeout( uint8_t *spo2AlgoTimeout ){
uint8_t rxBuff[1+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_WSPO2_TIMEOUT, &rxBuff[0], sizeof(rxBuff) );
*spo2AlgoTimeout = rxBuff[1];
return status;
}
int ah_set_cfg_wearablesuite_initialhr( const uint8_t initialHr ){
uint8_t Temp[1] = { initialHr };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INITIAL_HR, &Temp[0], 1);
return status;
}
int ah_get_cfg_wearablesuite_initialhr( uint8_t *initialHr ){
uint8_t rxBuff[1+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INITIAL_HR, &rxBuff[0], sizeof(rxBuff) );
*initialHr = rxBuff[1];
return status;
}
int ah_set_cfg_wearablesuite_personheight( const uint16_t personHeight){
uint8_t Temp[2] = { (uint8_t)((personHeight >> (1*8)) & 0xFF), (uint8_t)((personHeight >> (0*8)) & 0xFF)};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_PERSON_HEIGHT, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_personheight( uint16_t *personHeight){
uint8_t rxBuff[2+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_PERSON_HEIGHT, &rxBuff[0], sizeof(rxBuff));
*personHeight = (rxBuff[1] << 8) + rxBuff[2];
return status;
}
int ah_set_cfg_wearablesuite_personweight( const uint16_t personWeight){
uint8_t Temp[2] = { (uint8_t)((personWeight >> (1*8)) & 0xFF), (uint8_t)((personWeight >> (0*8)) & 0xFF)};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_PERSON_WEIGHT, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_personweight( uint16_t *personWeight){
uint8_t rxBuff[2+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_PERSON_WEIGHT, &rxBuff[0], sizeof(rxBuff));
*personWeight = (rxBuff[1] << 8) + rxBuff[2];
return status;
}
int ah_set_cfg_wearablesuite_personage( const uint8_t personAge ){
uint8_t Temp[1] = { personAge };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_PERSON_AGE, &Temp[0], 1);
return status;
}
int ah_get_cfg_wearablesuite_personage( uint8_t *personAge ){
uint8_t rxBuff[1+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_PERSON_AGE, &rxBuff[0], sizeof(rxBuff) );
*personAge = rxBuff[1];
return status;
}
int ah_set_cfg_wearablesuite_persongender( const uint8_t personGender ){
uint8_t Temp[1] = { personGender };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_PERSON_GENDER, &Temp[0], 1);
return status;
}
int ah_get_cfg_wearablesuite_persongender( uint8_t *personGender ){
uint8_t rxBuff[1+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_PERSON_GENDER, &rxBuff[0], sizeof(rxBuff) );
*personGender = rxBuff[1];
return status;
}
int ah_set_cfg_wearablesuite_mintintoption( const uint8_t measChan, const uint8_t minIntegrationTimeOpt ){
uint8_t Temp[2] = { measChan, minIntegrationTimeOpt };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MIN_INTEGRATION_TIME, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_mintintoption( uint8_t minIntegrationTimeOpt[9] ){
uint8_t rxBuff[1+9]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MIN_INTEGRATION_TIME, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; ++index)
minIntegrationTimeOpt[index] = rxBuff[1 + index];
return status;
}
int ah_set_cfg_wearablesuite_maxtintoption( const uint8_t measChan, const uint8_t maxIntegrationTimeOpt ){
uint8_t Temp[2] = { measChan, maxIntegrationTimeOpt };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MAX_INTEGRATION_TIME, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_maxtintoption( uint8_t maxIntegrationTimeOpt[9] ){
uint8_t rxBuff[1+9]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MAX_INTEGRATION_TIME, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; ++index)
maxIntegrationTimeOpt[index] = rxBuff[1 + index];
return status;
}
int ah_set_cfg_wearablesuite_minfsmpoption( const uint8_t measChan, const uint8_t minSampRateAveragingOpt ){
uint8_t Temp[2] = { measChan, minSampRateAveragingOpt };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MIN_SAMPLING_AVERAGE, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_minfsmpoption( uint8_t minSampRateAveragingOpt[9] ){
uint8_t rxBuff[1+9]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MIN_SAMPLING_AVERAGE, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; ++index)
minSampRateAveragingOpt[index] = rxBuff[1 + index];
return status;
}
int ah_set_cfg_wearablesuite_maxfsmpoption( const uint8_t measChan, const uint8_t maxSampRateAveragingOpt ){
uint8_t Temp[2] = { measChan, maxSampRateAveragingOpt };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MAX_SAMPLING_AVERAGE, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_maxfsmpoption( uint8_t maxSampRateAveragingOpt[9] ){
uint8_t rxBuff[1+9]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MAX_SAMPLING_AVERAGE, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; ++index)
maxSampRateAveragingOpt[index] = rxBuff[1 + index];
return status;
}
int ah_set_cfg_wearablesuite_maxdacoffset( const uint8_t measChan, const uint8_t maxDacOffset ){
uint8_t Temp[2] = { measChan, maxDacOffset };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MAX_D_OFT_OPTION, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_maxdacoffset( uint8_t maxDacOffsetOpt[9] ){
uint8_t rxBuff[1+9]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MAX_D_OFT_OPTION, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; ++index)
maxDacOffsetOpt[index] = rxBuff[1 + index];
return status;
}
int ah_set_cfg_wearablesuite_minledcurr( const uint8_t measChan, const uint16_t minLedCurr_x10 ){
uint8_t Temp[3] = { measChan, (uint8_t)(minLedCurr_x10 >> 8), (uint8_t)(minLedCurr_x10) };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MIN_LED_CURR_OPTION, &Temp[0], 3);
return status;
}
int ah_get_cfg_wearablesuite_minledcurr( uint16_t minLedCurr_x10[9] ){
uint8_t rxBuff[1+18]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MIN_LED_CURR_OPTION, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; index++)
minLedCurr_x10[index] = (((uint16_t)rxBuff[(2 * index) + 1] << 8 ) | ((uint16_t)rxBuff[(2 * index) + 2]));
return status;
}
int ah_set_cfg_wearablesuite_maxledcurr(const uint8_t measChan, const uint16_t maxLedCurr_x10)
{
uint8_t Temp[3] = { measChan, (uint8_t)(maxLedCurr_x10 >> 8), (uint8_t)(maxLedCurr_x10) };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MAX_LED_CURR_OPTION, &Temp[0], 3);
return status;
}
int ah_get_cfg_wearablesuite_maxledcurr( uint16_t maxLedCurr_x10[9] ){
uint8_t rxBuff[1+18]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MAX_LED_CURR_OPTION, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; index++)
maxLedCurr_x10[index] = (((uint16_t)rxBuff[(2 * index) + 1] << 8 ) | ((uint16_t)rxBuff[(2 * index) + 2]));
return status;
}
int ah_set_cfg_wearablesuite_minledcurrstep( const uint8_t measChan, const uint16_t minLedCurrStep_x10 ){
uint8_t Temp[3] = { measChan, (uint8_t)(minLedCurrStep_x10 >> 8), (uint8_t)(minLedCurrStep_x10) };
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MIN_LED_CURR_STEP_OPTION, &Temp[0], 3);
return status;
}
int ah_get_cfg_wearablesuite_minledcurrstep( uint16_t minLedCurrStep_x10[9] ){
uint8_t rxBuff[1+18]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MIN_LED_CURR_STEP_OPTION, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; index++)
minLedCurrStep_x10[index] = (((uint16_t)rxBuff[(2 * index) + 1] << 8 ) | ((uint16_t)rxBuff[(2 * index) + 2]));
return status;
}
int ah_set_cfg_wearablesuite_masterchsel( const uint8_t measChan, const uint8_t masterchsel){
uint8_t Temp[2] = { measChan, masterchsel};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MASTER_CH_SEL_OPTION, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_masterchsel( uint8_t masterchsel[9] ){
uint8_t rxBuff[1+9]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_MASTER_CH_SEL_OPTION, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; index++)
masterchsel[index] = rxBuff[1 + index];
return status;
}
int ah_set_cfg_wearablesuite_fulscalepdcurr( const uint8_t measChan, const uint8_t fullScalePdCurr ){
uint8_t Temp[2] = { measChan, fullScalePdCurr};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_FULL_SCALE_PD_CURR_OPTION, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_fulscalepdcurr( uint8_t fullScalePdCurr[9] ){
uint8_t rxBuff[1+9]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_FULL_SCALE_PD_CURR_OPTION, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; index++)
fullScalePdCurr[index] = rxBuff[1 + index];
return status;
}
int ah_set_cfg_wearablesuite_afetype( const uint8_t afeType ){
uint8_t Temp[1] = { afeType};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_AFE_TYPE_OPTION, &Temp[0], 1);
return status;
}
int ah_get_cfg_wearablesuite_afetype( uint8_t * afeType ){
uint8_t rxBuff[1+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_AFE_TYPE_OPTION, &rxBuff[0], sizeof(rxBuff) );
*afeType = rxBuff[1];
return status;
}
int ah_set_cfg_wearablesuite_initintoption( const uint8_t measChan, const uint8_t initTintTime ){
uint8_t Temp[2] = { measChan, initTintTime};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INITIAL_T_INT_OPTION, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_inittintoption( uint8_t initTintTime[9] ){
uint8_t rxBuff[1+9]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INITIAL_T_INT_OPTION, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; index++)
initTintTime[index] = rxBuff[1 + index];
return status;
}
int ah_set_cfg_wearablesuite_initfsmpoption( const uint8_t measChan, const uint8_t initSampRateAveragingOpt ){
uint8_t Temp[2] = { measChan, initSampRateAveragingOpt};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INITIAL_F_SMP_OPTION, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_initfsmpoption( uint8_t initSampRateAveragingOpt[9] ){
uint8_t rxBuff[1+9]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INITIAL_F_SMP_OPTION, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; index++)
initSampRateAveragingOpt[index] = rxBuff[1 + index];
return status;
}
int ah_set_cfg_wearablesuite_initdacoffppg1( const uint8_t measChan, const uint8_t initDacOffsetPPG1 ){
uint8_t Temp[2] = { measChan, initDacOffsetPPG1};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INITIAL_D_OFF_PPG1_OPTION, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_initdacoffppg1(uint8_t initDacOffsetPPG1[9] ){
uint8_t rxBuff[1+9]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INITIAL_D_OFF_PPG1_OPTION, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; index++)
initDacOffsetPPG1[index] = rxBuff[1 + index];
return status;
}
int ah_set_cfg_wearablesuite_initdacoffppg2( const uint8_t measChan, const uint8_t initDacOffsetPPG2 ){
uint8_t Temp[2] = { measChan, initDacOffsetPPG2};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INITIAL_D_OFF_PPG2_OPTION, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_initdacoffppg2(uint8_t initDacOffsetPPG2[9] ){
uint8_t rxBuff[1+9]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INITIAL_D_OFF_PPG2_OPTION, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; index++)
initDacOffsetPPG2[index] = rxBuff[1 + index];
return status;
}
int ah_set_cfg_wearablesuite_initledcurr( const uint8_t measChan, const uint16_t initLedCurr ){
uint8_t Temp[3] = { measChan, initLedCurr >> 8, initLedCurr};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INITIAL_LED_CURR_OPTION, &Temp[0], 3);
return status;
}
int ah_get_cfg_wearablesuite_initledcurr( uint16_t initLedCurr[9] ){
uint8_t rxBuff[1+18]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_INITIAL_LED_CURR_OPTION, &rxBuff[0], sizeof(rxBuff) );
int index = 0;
for(index = 0; index < 9; index++)
{
initLedCurr[index] = (uint16_t)rxBuff[1 + (2 * index)] << 8 | (uint16_t)rxBuff[1 + ((2 * index) + 1)];
}
return status;
}
int ah_set_cfg_wearablesuite_whrmledpdconfig( const uint16_t whrmledpdconfig ){
uint8_t Temp[2] = { (uint8_t)((whrmledpdconfig >> (1*8)) & 0xFF), (uint8_t)((whrmledpdconfig >> (0*8)) & 0xFF)};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_WHRMLEDPDCONFIGURATION, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_whrmledpdconfig( uint16_t *whrmledpdconfig) {
uint8_t rxBuff[2+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_WHRMLEDPDCONFIGURATION, &rxBuff[0], sizeof(rxBuff));
*whrmledpdconfig = (rxBuff[1] << 8) + rxBuff[2];
return status;
}
int ah_set_cfg_wearablesuite_spo2ledpdconfig( const uint16_t spo2ledpdconfig ){
uint8_t Temp[2] = { (uint8_t)((spo2ledpdconfig >> (1*8)) & 0xFF), (uint8_t)((spo2ledpdconfig >> (0*8)) & 0xFF)};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_SPO2LEDPDCONFIGURATION, &Temp[0], 2);
return status;
}
int ah_get_cfg_wearablesuite_spo2ledpdconfig( uint16_t *spo2ledpdconfig) {
uint8_t rxBuff[2+1]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_SPO2LEDPDCONFIGURATION, &rxBuff[0], sizeof(rxBuff));
*spo2ledpdconfig = (rxBuff[1] << 8) + rxBuff[2];
return status;
}
int ah_set_cfg_wearablesuite_reset_algo_config() {
uint8_t Temp[1] = {1};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_RESET_ALGO_CONFIG, &Temp[0], 1);
return status;
}
int ah_get_cfg_wearablesuite_aferequest( uint8_t afe_reqs[20] ) {
uint8_t rxBuff[1+20]; // first byte is status
int status = sh_get_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_GET_AFE_REQUEST_OPTION, &rxBuff[0], sizeof(rxBuff));
memcpy(afe_reqs, &rxBuff[1], 20);
return status;
}
int ah_set_cfg_wearablesuite_clear_aferequest( uint8_t isApplied ) {
uint8_t Temp[1] = {isApplied};
int status = sh_set_sens_cfg(SH_SENSORIDX_ALGOHUB, SS_CFGIDX_WHRM_WSPO2_SUITE_CLEAR_AFE_REQUEST_OPTION, &Temp[0], 1);
return status;
}
/* **********************************************************************************************
* *
* COMMAND INTERFACE RELATED METHODS *
* *
* **********************************************************************************************/