Index: firmware/App/Services/TDInterface.c =================================================================== diff -u -r105b259d8643b6d50a42bbeb230d408bc6d20cf5 -r12623fcb04a27427fc9bf894eac6fda798f17207 --- firmware/App/Services/TDInterface.c (.../TDInterface.c) (revision 105b259d8643b6d50a42bbeb230d408bc6d20cf5) +++ firmware/App/Services/TDInterface.c (.../TDInterface.c) (revision 12623fcb04a27427fc9bf894eac6fda798f17207) @@ -38,8 +38,33 @@ // ********** private definitions ********** -#define TD_DATA_FRESHNESS_TIMEOUT_MS ( 3 * MS_PER_SECOND ) ///< TD data freshness timeout (in ms). +#define TD_DATA_FRESHNESS_TIMEOUT_MS ( 3 * MS_PER_SECOND ) ///< TD data freshness timeout (in ms). +#define TD_DIALYSATE_FLOWRATE_MIN_ML_MIN ( 50.0F ) ///< TD Min dialysate flow rate (mL/min) +#define TD_DIALYSATE_FLOWRATE_MAX_ML_MIN ( 600.0F ) ///< TD Max dialysate flow rate (mL/min) + +#define TD_UF_RATE_MIN_ML_MIN ( 0.0F ) ///< TD Min UF rate (mL/min) +#define TD_UF_RATE_MAX_ML_MIN ( 400.0F ) ///< TD Max UF rate (mL/min) + +#define TD_DIALYSATE_TEMP_MIN_DEGC ( 35.0F ) ///< TD Min dialysate temperature (deg C) +#define TD_DIALYSATE_TEMP_MAX_DEGC ( 38.0F ) ///< TD Max dialysate temperature (deg C) + +#define TD_ACID_TYPE_MIN ( 0U ) ///< TD Min acid type index +#define TD_ACID_TYPE_MAX ( (U32)( NUM_OF_ACID_TYPE - 1U ) ) ///< TD Max acid type index + +#define TD_BICARB_TYPE_MIN ( 0U ) ///< TD Min bicarb type index +#define TD_BICARB_TYPE_MAX ( (U32)( NUM_OF_BICARB_TYPE - 1U ) ) ///< TD Max bicarb type index + +typedef enum +{ + TD_TREATMENT_OVERRIDE_DIALYSATE_FLOWRATE = 0, ///< TD Dialysate flow rate + TD_TREATMENT_OVERRIDE_UF_RATE, ///< TD Ultrafilteration rate + TD_TREATMENT_OVERRIDE_DIALYSATE_TEMP, ///< TD Target Dialysate Temperature + TD_TREATMENT_OVERRIDE_ACID_TYPE, ///< TD Acid type + TD_TREATMENT_OVERRIDE_BICARB_TYPE, ///< TD Bicarb type + TD_TREATMENT_OVERRIDE_PARAM_COUNT ///< Number of TD override treatment parameters +} TD_TREATMENT_OVERRIDE_INDEX_T; + // ********** private data ********** // TD status @@ -50,10 +75,18 @@ static F32 tdTargetDialysateTemp; ///< TD target dialysate temperature static BOOL tdDialyzerBypass; ///< TD dialyzer bypass static DD_ACID_TYPES_T tdAcidType; ///< TD Acid type. -static DD_BICARB_TYPES_T tdBicarbType; ///< TD Bicarb type. +static DD_BICARB_TYPES_T tdBicarbType; ///< TD Bicarb type +static BOOL tdDialyzerBypass; ///< TD dialyzer bypass + static BOOL tdOpModeDataFreshFlag = FALSE; ///< Flag to signal/process fresh TD op mode data +static OVERRIDE_F32_T tdDialysateFlowrateOverride; ///< TD override Dialysate flow rate +static OVERRIDE_F32_T tdUFRateOverride; ///< TD override ultrafiltration rate +static OVERRIDE_F32_T tdDialysateTempOverride; ///< TD override Target Dialysate Temperature +static OVERRIDE_U32_T tdAcidTypeOverride; ///< TD override Acid type +static OVERRIDE_U32_T tdBicarbTypeOverride; ///< TD override Bicarb type + // ********** private function prototypes ********** static void checkTDDataFreshness( ALARM_ID_T alarmID, BOOL *tdFreshDataFlag ); @@ -68,14 +101,31 @@ void initTDInterface( void ) { // Initialize unit variables - tdCurrentOpMode = MODE_INIT; - tdSubMode = 0; - tdDialysateFlowrate = MAX_DIALYSATE_FLOW_RATE; // Will update later based on the TD value - tdUFRate = 0.0F; - tdTargetDialysateTemp = 0.0F; - tdDialyzerBypass = FALSE; - tdAcidType = ACID_08_1251_1; - tdBicarbType = BICARB_08_677753_0; + tdCurrentOpMode = MODE_INIT; + tdSubMode = 0U; + tdDialyzerBypass = FALSE; + tdOpModeDataFreshFlag = FALSE; + + // Intialize for override variables + tdDialysateFlowrateOverride.ovData = 0.0F; + tdDialysateFlowrateOverride.ovInitData = TD_DIALYSATE_FLOWRATE_MIN_ML_MIN; + tdDialysateFlowrateOverride.override = OVERRIDE_RESET; + + tdUFRateOverride.ovData = 0.0F; + tdUFRateOverride.ovInitData = TD_UF_RATE_MIN_ML_MIN; + tdUFRateOverride.override = OVERRIDE_RESET; + + tdDialysateTempOverride.ovData = 0.0F; + tdDialysateTempOverride.ovInitData = TD_DIALYSATE_TEMP_MIN_DEGC; + tdDialysateTempOverride.override = OVERRIDE_RESET; + + tdAcidTypeOverride.ovData = TD_ACID_TYPE_MIN; + tdAcidTypeOverride.ovInitData = TD_ACID_TYPE_MIN; + tdAcidTypeOverride.override = OVERRIDE_RESET; + + tdBicarbTypeOverride.ovData = TD_BICARB_TYPE_MIN; + tdBicarbTypeOverride.ovInitData = TD_BICARB_TYPE_MIN; + tdBicarbTypeOverride.override = OVERRIDE_RESET; } /**********************************************************************//** @@ -465,44 +515,116 @@ * TEST SUPPORT FUNCTIONS *************************************************************************/ -/*********************************************************************//** + + +/****************************************************************************** * @brief - * Apply DD treatment parameter overrides received from Dialin. + * Handles TD treatment parameter override requests. * @details - * Handles DD_TREATMENT_PARAMS_OVERRIDE_PAYLOAD_T and updates: - * dialysate flow (F32), UF rate (F32), dialysate temperature (F32) - * acid and bicarbonate concentrate options (U32) Overrides - * are applied only in DD_MODE_GEND, followed by - * setTreatmentParamUpdate(). - * @param message Pointer to override message from Dialin. - * @return TRUE if override applied, FALSE otherwise. - *************************************************************************/ + * Applies override values for treatment parameters when a tester is logged in. + * \b Inputs: TEST_OVERRIDE_ARRAY_PAYLOAD_T structure from Dialin. + * \b Outputs: Updated F32/U32 override values for applicable parameters. + * @param message Pointer to the override message received from Dialin. + * @return TRUE if the override is successfully applied, FALSE otherwise. + ******************************************************************************/ BOOL testTDTreatmentParamsOverride( MESSAGE_T *message ) { - BOOL result = FALSE; + BOOL result = FALSE; + TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + OVERRIDE_TYPE_T ovType; - if( message->hdr.payloadLen == sizeof( DD_TREATMENT_PARAMS_OVERRIDE_PAYLOAD_T ) ) + ovType = getOverrideArrayPayloadFromMessage( message, &payload ); + + if ( ( TRUE == isTestingActivated() ) && ( DD_MODE_GEND == getCurrentOperationMode() ) && ( ovType != OVERRIDE_INVALID ) && ( ovType < NUM_OF_OVERRIDE_TYPES ) ) { - DD_TREATMENT_PARAMS_OVERRIDE_PAYLOAD_T payload; - DD_OP_MODE_T ddMode = getCurrentOperationMode(); + switch ( (TD_TREATMENT_OVERRIDE_INDEX_T)payload.index ) + { + case TD_TREATMENT_OVERRIDE_DIALYSATE_FLOWRATE: + { + // Dialysate flow rate (mL/min) + if ( OVERRIDE_OVERRIDE == ovType ) + { + F32 value = payload.state.f32; + if ( ( value >= TD_DIALYSATE_FLOWRATE_MIN_ML_MIN ) && ( value <= TD_DIALYSATE_FLOWRATE_MAX_ML_MIN ) ) + { + result = f32Override( message, &tdDialysateFlowrateOverride ); + } + else + { + result = FALSE; + } + } + else + { + result = f32Override( message, &tdDialysateFlowrateOverride ); + } + break; + } - memcpy( &payload, message->payload, sizeof( DD_TREATMENT_PARAMS_OVERRIDE_PAYLOAD_T ) ); + case TD_TREATMENT_OVERRIDE_UF_RATE: + { + // UF rate (mL/min) + if ( OVERRIDE_OVERRIDE == ovType ) + { + F32 value = payload.state.f32; + if ( ( value >= TD_UF_RATE_MIN_ML_MIN ) && ( value <= TD_UF_RATE_MAX_ML_MIN ) ) + { + result = f32Override( message, &tdUFRateOverride ); + } + else + { + result = FALSE; + } + } + else + { + result = f32Override( message, &tdUFRateOverride ); + } + break; + } - if( DD_MODE_GEND == ddMode ) - { - // Overrides to DD working parameters - setTDDialysateFlowrate( payload.dialFlowRate_ml_min ); - setTDUFRate( payload.ufRate_ml_h ); - setTDTargetDialysateTemperature( payload.dialTemp_degC ); - setTDAcidAndBicarbType( (DD_ACID_TYPES_T)payload.acidConcentrate, ( DD_BICARB_TYPES_T )payload.bicarbConcentrate ); + case TD_TREATMENT_OVERRIDE_DIALYSATE_TEMP: + { + // Dialysate temperature (deg C) + if ( OVERRIDE_OVERRIDE == ovType ) + { + F32 value = payload.state.f32; + if ( ( value >= TD_DIALYSATE_TEMP_MIN_DEGC ) && ( value <= TD_DIALYSATE_TEMP_MAX_DEGC ) ) + { + result = f32Override( message, &tdDialysateTempOverride ); + } + else + { + result = FALSE; + } + } + else + { + result = f32Override( message, &tdDialysateTempOverride ); + } + break; + } - // Notify to the system DD parameters changed - setTreatmentParamUpdate(); + case TD_TREATMENT_OVERRIDE_ACID_TYPE: + // Acid type (dd_acid_types range) + result = u32Override( message, &tdAcidTypeOverride, TD_ACID_TYPE_MIN, TD_ACID_TYPE_MAX ); + break; - result = TRUE; + case TD_TREATMENT_OVERRIDE_BICARB_TYPE: + // Bicarb type (dd_bicarb_types range) + result = u32Override( message, &tdBicarbTypeOverride, TD_BICARB_TYPE_MIN, TD_BICARB_TYPE_MAX ); + break; + + default: + result = FALSE; + break; } + + if ( TRUE == result ) + { + setTreatmentParamUpdate(); + } } - sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DD_2_TD, result ); return result; }