Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -r2f68e3a96bb03d12141a84f1da6df83e66fed72d -r031ad982a60a1cb2a385aaaf7c7cb5e83130d798 --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 2f68e3a96bb03d12141a84f1da6df83e66fed72d) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 031ad982a60a1cb2a385aaaf7c7cb5e83130d798) @@ -90,6 +90,7 @@ static BOOL treatParamsConfirmed = FALSE; ///< Flag indicates user has confirmed the treatment parameters. static BOOL treatParamsRejected = FALSE; ///< Flag indicates user has rejected the treatment parameters. static BOOL treatmentCancelled = FALSE; ///< Flag indicates user has cancelled the treatment. +static HD_INSTITUTIONAL_RECORD_T hdInstitutionalRecord; ///< Institutional record. // ********** private function prototypes ********** @@ -697,6 +698,164 @@ /*********************************************************************//** * @brief + * The getU32TreatmentParamLowerRangeLimit function returns the lower range + * limit for a given unsigned integer treatment parameter. + * @details Inputs: none + * @details Outputs: none + * @param param ID of parameter to get lower range limit for + * @return lower range limit for given unsigned integer treatment parameter + *************************************************************************/ +U32 getU32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_T param ) +{ + U32 result = 0; + + if ( param < NUM_OF_TREATMENT_PARAMS ) + { + result = TREAT_PARAMS_PROPERTIES[ param ].min.uInt; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_U32_PARAM_MIN_LIMIT, (U32)param ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getU32TreatmentParamUpperRangeLimit function returns the upper range + * limit for a given unsigned integer treatment parameter. + * @details Inputs: none + * @details Outputs: none + * @param param ID of parameter to get upper range limit for + * @return upper range limit for given unsigned integer treatment parameter + *************************************************************************/ +U32 getU32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_T param ) +{ + U32 result = 0; + + if ( param < NUM_OF_TREATMENT_PARAMS ) + { + result = TREAT_PARAMS_PROPERTIES[ param ].max.uInt; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_U32_PARAM_MAX_LIMIT, (U32)param ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getF32TreatmentParamLowerRangeLimit function returns the lower range + * limit for a given float treatment parameter. + * @details Inputs: none + * @details Outputs: none + * @param param ID of parameter to get lower range limit for + * @return lower range limit for given float treatment parameter + *************************************************************************/ +F32 getF32TreatmentParamLowerRangeLimit( TREATMENT_PARAM_T param ) +{ + F32 result = 0; + + if ( param < NUM_OF_TREATMENT_PARAMS ) + { + result = TREAT_PARAMS_PROPERTIES[ param ].min.sFlt; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_F32_PARAM_MIN_LIMIT, (U32)param ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getF32TreatmentParamUpperRangeLimit function returns the upper range + * limit for a given float treatment parameter. + * @details Inputs: none + * @details Outputs: none + * @param param ID of parameter to get lower range limit for + * @return upper range limit for given float treatment parameter + *************************************************************************/ +F32 getF32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_T param ) +{ + F32 result = 0; + + if ( param < NUM_OF_TREATMENT_PARAMS ) + { + result = TREAT_PARAMS_PROPERTIES[ param ].max.sFlt; + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_TREATMENT_PARAMS_INVALID_GET_F32_PARAM_MAX_LIMIT, (U32)param ) + } + + return result; +} + +/*********************************************************************//** + * @brief + * The isNVInstitutionalRecordInRange function checks whether all the + * institutional NV records are valid and within range or not. + * @details Inputs: none + * @details Outputs: none + * @param nvInstRcrd pointer to the institutional record in the non-volatile + * data management + * @return TRUE if all of the parameters are valid otherwise, FALSE + *************************************************************************/ +BOOL isNVInstitutionalRecordInRange( HD_INSTITUTIONAL_RECORD_T* nvInstRcrd ) +{ + BOOL result = TRUE; + + result &= ( nvInstRcrd->minBloodFlowMLPM >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_BLOOD_FLOW ].min.uInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->maxBloodFlowMLPM <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_BLOOD_FLOW ].max.uInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->minDialysateFlowMLPM >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_DIALYSATE_FLOW ].min.uInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->maxDialysateFlowMLPM <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_DIALYSATE_FLOW ].max.uInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->minTxDurationMIN >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_TREATMENT_DURATION ].min.uInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->maxTxDurationMIN <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_TREATMENT_DURATION ].max.uInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->minStopHeparinDispBeforeTxEndMIN >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ].min.uInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->maxStopHeparinDispBeforeTxEndMIN <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ].max.uInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->minSalineBolusVolumeML >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_SALINE_BOLUS_VOLUME ].min.uInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->maxSalineBolusVolumeML <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_SALINE_BOLUS_VOLUME ].max.uInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->minDialysateTempC >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_DIALYSATE_TEMPERATURE ].min.sFlt ? TRUE : FALSE ); + result &= ( nvInstRcrd->maxDialysateTempC <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_DIALYSATE_TEMPERATURE ].max.sFlt ? TRUE : FALSE ); + result &= ( nvInstRcrd->minArtPressLimitWindowMMHG >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ].min.sInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->maxArtPressLimitWindowMMHG <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_ART_PRES_LIMIT_WINDOW ].max.sInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->minVenPressLimitWindowMMHG >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ].min.sInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->maxVenPressLimitWindowMMHG <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_VEN_PRES_LIMIT_WINDOW ].max.sInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->minVenAsymPressLimitMMHG >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ].min.sInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->maxVenAsymPressLimitMMHG <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_VEN_PRES_LIMIT_ASYMMETRIC ].max.sInt ? TRUE : FALSE ); + result &= ( nvInstRcrd->minUFVolumeL >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_UF_VOLUME ].min.sFlt ? TRUE : FALSE ); + result &= ( nvInstRcrd->maxUFVolumeL <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_UF_VOLUME ].max.sFlt ? TRUE : FALSE ); + result &= ( nvInstRcrd->minHeparinDispRateMLPM >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ].min.sFlt ? TRUE : FALSE ); + result &= ( nvInstRcrd->maxHeparinDispRateMLPM <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ].max.sFlt ? TRUE : FALSE ); + result &= ( nvInstRcrd->minHeparinBolusVolumeML >= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ].min.sFlt ? TRUE : FALSE ); + result &= ( nvInstRcrd->maxHeparinBolusVolumeML <= TREAT_PARAMS_PROPERTIES[ TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ].max.sFlt ? TRUE : FALSE ); + + return result; +} + +/*********************************************************************//** + * @brief + * The setNVInstitutionalRecordToTxParamsRecord function sets the newly received + * institutional record from the non-volatile memory to the local copy in the + * treatment parameters. + * @details Inputs: none + * @details Outputs: hdInstitutionalRecord + * @param nvInstitutionalRecord pointer to the newly received institutional record + * in the non-volatile data management. + * @return none + *************************************************************************/ +void setNVInstitutionalRecordToTxParamsRecord( HD_INSTITUTIONAL_RECORD_T* nvInstitutionalRecord ) +{ + memcpy( &hdInstitutionalRecord, nvInstitutionalRecord, sizeof(HD_INSTITUTIONAL_RECORD_T) ); +} + +/*********************************************************************//** + * @brief * The extractTreatmentParamsFromPayload function extracts the individual * treatment parameters received from the UI into a staging array where * they will be validated and stay until user confirms them.