Index: firmware/App/Services/NVRecordsDD.h =================================================================== diff -u -rbe1ff666dbd2ff03342c22c8e50b21d0f9b988a9 -rac72b3fa86015b2c60c7687a4597dd4ae5c24dc8 --- firmware/App/Services/NVRecordsDD.h (.../NVRecordsDD.h) (revision be1ff666dbd2ff03342c22c8e50b21d0f9b988a9) +++ firmware/App/Services/NVRecordsDD.h (.../NVRecordsDD.h) (revision ac72b3fa86015b2c60c7687a4597dd4ae5c24dc8) @@ -17,6 +17,7 @@ #include "Common.h" #include "ConcentratePumps.h" +#include "ConductivitySensors.h" #include "DDDefs.h" #include "DialysatePumps.h" #include "FlowSensor.h" @@ -69,67 +70,25 @@ DD_EVENT_ID_T nvEvent; ///< Jobs non-volatile DD event (i.e calibration, system). } PROCESS_RECORD_SPECS_T; -/// Enum for all the subcomponents for the DD calibration record -typedef enum DD_Cal_Records_Type -{ - DD_CAL_RECORD_PRESSURE_SENSOR = 0, ///< Index for pressure sensors calibration data. - DD_CAL_RECORD_TEMPERATURE_SENSOR, ///< Index for temperature sensors calibration data. - DD_CAL_RECORD_CONCENTRATE_PUMP, ///< Index for concentrate pumps calibration record. - DD_CAL_RECORD_D12_PUMP, ///< Index for D12 dialysate pump calibration record. - DD_CAL_RECORD_D48_PUMP, ///< Index for D48 dialysate pump calibration record. - DD_CAL_RECORD_ACID_CONCENTRATE, ///< Index for acid concentrates calibration data. - DD_CAL_RECORD_BICARB_CONCENTRATE, ///< Index for bicarb concentrates calibration data. - DD_CAL_RECORD_ACCELEROMETER_SENSOR, ///< Index for accelerometers calibration data. - DD_CAL_RECORD_BLLOD_LEAK_SENSOR, ///< Index for blood leak sensor calibration data. - NUM_OF_CAL_RECORD_TYPE ///< Total number of components in calibration record -}DD_CAL_REC_TYPE; - -/// Enum for all the subcomponents for the DD institutional record -typedef enum DD_Instit_Records_Type -{ - DD_INSTIT_MIN_DIALYSATE_FLOW_MLPM = 0, ///< Index for Min dialysate flow in mL/min. - DD_INSTIT_MAX_DIALYSATE_FLOW_MLPM, ///< Index for Max dialysate flow in mL/min. - DD_INSTIT_MIN_DIALYSATE_TEMP_C, ///< Index for Min dialysate temperature in C. - DD_INSTIT_MAX_DIALYSATE_TEMP_C, ///< Index for Max dialysate temperature in C. - DD_INSTIT_MIN_ACID_CONCENTRATE, ///< Index for Min acid concentrate - DD_INSTIT_MAX_ACID_CONCENTRATE, ///< Index for Max acid concentrate - DD_INSTIT_MIN_BICARB_CARTRIDGE_SIZE_G, ///< Index for Min bicarbonate cartridge size in grams. - DD_INSTIT_MAX_BICARB_CARTRIDGE_SIZE_G, ///< Index for Max bicarbonate cartridge size in grams. - DD_INSTIT_MIN_SODIUM_MEQL, ///< Index for Min sodium in mEq/L - DD_INSTIT_MAX_SODIUM_MEQL, ///< Index for Max sodium in mEq/L - DD_INSTIT_MIN_BICARBONATE_MEQL, ///< Index for Min bicarbonate in mEq/L - DD_INSTIT_MAX_BICARBONATE_MEQL, ///< Index for Max bicarbonate in mEq/L - DD_INSTIT_MIN_RO_REJECTION_RATIO_PCT, ///< Index for Min RO rejection ratio in percent. - DD_INSTIT_DISINFECTION_FREQUENCY, ///< Index for Disinfection days between cycles. - DD_INSTIT_DISINFECTION_CYCLE_TIME, ///< Index for Disinfection Cycle Time - DD_INSTIT_MIN_INLET_WATER_COND_ALARM_LIMIT_USPCM, ///< Index for Min inlet water conductivity alarm limit in uS/cm. - DD_INSTIT_MAX_INLET_WATER_COND_ALARM_LIMIT_USPCM, ///< Index for Max inlet water conductivity alarm limit in uS/cm. - DD_INSTIT_ACID_CONCENTRATE_JUG_SIZE_L, ///< Index for acid concentrate jug size in Liters - DD_INSTIT_MIN_ACID_ALARM_LIMIT_PCT, ///< Index for Min acid alarm limit in percent. - DD_INSTIT_MIN_BICARB_ALARM_LIMIT_PCT, ///< Index for Min bicarbonate alarm limit in percent. - DD_INSTIT_POST_TREAT_DRAIN_OPTION, ///< Index for Dialysate Post Treatment Drain Option  - DD_INSTIT_POST_TREAT_DRY_BICARB_OPTION, ///< Index for Dry Bicarbonate Post Treatment Option  - DD_INSTIT_CALIBRATION_TIME, ///< Index for Calibration time in epoch. - DD_INSTIT_CRC, ///< Index for CRC of the institutional record. - NUM_OF_DD_INSTIT_RECORD_TYPE ///< Total number of components in institutional record -}DD_INSTIT_REC_TYPE; - /// DD available NV data to get typedef enum DD_nv_commands { - GET_CAL_PRESSURE_SENOSRS = 0, ///< Get pressure sensors calibration data. - GET_CAL_TEMP_SENSORS, ///< Get temperature sensors calibration data. - GET_CAL_CONCENTRATE_PUMPS_RECORD, ///< Get concentrate pumps calibration record. - GET_CAL_D12_PUMP_RECORD, ///< Get D12 dialysate pump calibration record. - GET_CAL_D48_PUMP_RECORD, ///< Get D48 dialysate pump calibration record. - GET_CAL_ACID_CONCENTREATES, ///< Get acid concentrates calibration data. - GET_CAL_BICARB_CONCENTRATES, ///< Get bicarb concentrates calibration data. - GET_CAL_ACCEL_SENSORS, ///< Get accelerometers calibration data. - GET_CAL_BLOOD_LEAK_SENSOR, ///< Get blood leak sensor calibration data. - GET_SYSTEM_RECORD, ///< Get system record. - GET_SERVICE_RECORD, ///< Get service record. - GET_INSTITUTIONAL_RECORD, ///< Get institutional record. - GET_USAGE_RECORD, ///< Get usage record. + NV_DD_DATA_SYSTEM_RECORD = 0, ///< System record. + NV_DD_DATA_SERVICE_RECORD, ///< Service record + NV_DD_DATA_CAL_PRESSURE_SENOSRS, ///< Pressure sensors calibration data. + NV_DD_DATA_CAL_TEMPERATURE_SENSORS, ///< Temperature sensors calibration data. + NV_DD_DATA_CAL_CONCENTRATE_PUMPS_RECORD, ///< Concentrate pumps calibration record. + NV_DD_DATA_CAL_D12_PUMP_RECORD, ///< D12 dialysate pump calibration record. + NV_DD_DATA_CAL_D48_PUMP_RECORD, ///< D48 dialysate pump calibration record. + NV_DD_DATA_CAL_ACID_CONCENTREATES, ///< Acid concentrates calibration data. + NV_DD_DATA_CAL_BICARB_CONCENTRATES, ///< Bicarb concentrates calibration data. + NV_DD_DATA_CAL_ACCELEROMETER_SENSOR, //< Accelerometer calibration data. + NV_DD_DATA_CAL_BLOOD_LEAK_SENSOR, ///< Blood leak sensor calibration data. + NV_DD_DATA_CAL_CONDUCTIVITY_SENSORS, ///< Conductivity sensor calibration data. + NV_DD_DATA_INSTIT_BASIC_RECORD, ///< Basic institutional record. + NV_DD_DATA_INSTIT_ADVANCED_RECORD, ///< Advanced institutional record. + NV_DD_DATA_INSTIT_ADDITIONAL_RECORD, ///< Additional institutional record. + NV_DD_DATA_USAGE_INFO_RECORD, ///< Usage record. NUM_OF_NV_DD_DATA ///< Number of non-volatile data. } NV_DATA_T; @@ -152,52 +111,88 @@ NUM_OF_USAGE_INFO_ITEMS ///< Number of usage info items. } DD_USAGE_INFO_ITEMS_T; +/// DD Institutional basic items +typedef enum DD_instit_basic_items +{ + INSTIT_PARAM_DIALYSATE_FLOW = 0, ///< Dialysate Flow Rate + FIRST_INSTIT_BASIC_PARAM = INSTIT_PARAM_DIALYSATE_FLOW, ///< First Institutional basic parameter + INSTIT_PARAM_DIALYSATE_TEMPERATURE, ///< Dialysate Temperature + INSTIT_PARAM_ACID_CONCENTRATE, ///< Acid Concentrate + INSTIT_PARAM_DRY_BICARB_CART_SIZE, ///< Bicarbonate Cartridge Size + INSTIT_PARAM_SODIUM, ///< Sodium + INSTIT_PARAM_BICARBONATE, ///< Bicarbonate + NUM_OF_INSTIT_BASIC, ///< Total number of Institutional basic parameters +}DD_INSTIT_BASIC_ITEMS_T; + +/// DD Institutional advanced items +typedef enum DD_instit_advanced_items +{ + INSTIT_PARAM_RO_REJECTION_RATIO_ALRAM = 0, ///< RO Rejection Ratio Alarm Threshold + FIRST_INSTIT_ADVANCED_PARAM = INSTIT_PARAM_RO_REJECTION_RATIO_ALRAM, ///< First Institutional advanced parameter + INSTIT_PARAM_DISINFECTION_FREQUENCY, ///< Disinfection Frequency + INSTIT_PARAM_DISINFECTION_CYCLE_TIME, ///< Disinfection Parameters, Cycle Time + INSTIT_PARAM_INLET_WATER_COND_LOW_ALARM, ///< Inlet Water Conductivity Low Alarm Threshold (RO Featured) + INSTIT_PARAM_INLET_WATER_COND_HIGH_ALARM, ///< Inlet Water Conductivity High Alarm Threshold (RO Defeatured) + INSTIT_PARAM_ACID_CONCENTRATE_JUG_SIZE, ///< Acid Concentrate Jug Size + INSTIT_PARAM_LOW_ACID_ALARM, ///< Low Acid Alarm Threshold + INSTIT_PARAM_LOW_BICARB_ALARM, ///< Low Bicarb Alarm Threshold + INSTIT_PARAM_DIALYSATE_POST_TREAT_DRAIN_OPTION, ///< Dialysate Post Treatment Drain Option  + INSTIT_PARAM_BICARB_POST_TREAT_DRAIN_OPTION, ///< Dry Bicarbonate Post Treatment Option  + NUM_OF_INSTIT_ADVANCED, ///< Total number of Institutional advanced parameters +} DD_INSTIT_ADVANCED_ITEMS_T; + +/// DD Institutional additional items +typedef enum DD_instit_additional_items +{ + INSTIT_ADDITIONAL_PARAM = 0, ///< Institutional additional param  + FIRST_INSTIT_ADDITIONAL_PARAM = INSTIT_ADDITIONAL_PARAM, ///< First Institutional additional parameter + NUM_OF_INSTIT_ADDITIONAL, ///< Total number of Institutional additional parameters +} DD_INSTIT_ADDITIONAL_ITEMS_T; + #pragma pack(push, 1) -/// Polynomial calibration structure + +/// Linear calibration structure typedef struct { - F32 fourthOrderCoeff; ///< Fourth order coefficient. - F32 thirdOrderCoeff; ///< Third order coefficient. - F32 secondOrderCoeff; ///< Second order coefficient. F32 gain; ///< Gain. F32 offset; ///< Offset. U32 calibrationTime; ///< Calibration time. - U16 crc; ///< CRC for the polynomial calibration payload. -} POLYNOMIAL_CAL_PAYLOAD_T; + U16 crc; ///< CRC for the linear calibration payload. +} LINEAR_CAL_PAYLOAD_T; -/// Pressure sensors calibration structure +/// Pressure sensors calibration record typedef struct { - POLYNOMIAL_CAL_PAYLOAD_T pressureSensors[ NUM_OF_PRESSURE_SENSORS ]; ///< Pressure sensors to calibrate. + LINEAR_CAL_PAYLOAD_T pressureSensors[ NUM_OF_PRESSURE_SENSORS ]; ///< Pressure sensors to calibrate. } DD_PRES_SENSORS_CAL_RECORD_T; -/// Temperature sensors calibration structure +/// Temperature sensors calibration record typedef struct { - POLYNOMIAL_CAL_PAYLOAD_T tempSensors[ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature sensors to calibrate. + LINEAR_CAL_PAYLOAD_T tempSensors[ NUM_OF_TEMPERATURE_SENSORS ]; ///< Temperature sensors to calibrate. } DD_TEMP_SENSORS_CAL_RECORD_T; /// DD concentrate pumps calibration record typedef struct { - POLYNOMIAL_CAL_PAYLOAD_T concentratePumps[ NUM_OF_CONCENTRATE_PUMPS ]; ///< DD concentrate pumps calibration data. + LINEAR_CAL_PAYLOAD_T concentratePumps[ NUM_OF_CONCENTRATE_PUMPS ]; ///< DD concentrate pumps calibration data. } DD_CONC_PUMPS_CAL_RECORD_T; -/// DD D12 dialysate pump calibration structure +/// DD D12 dialysate pump calibration record typedef struct { - F32 targetPumpSpeed; ///< Target Pump Speed - U32 calibrationTime; ///< Calibration time. - U16 crc; ///< CRC for the polynomial calibration payload. + F32 targetPumpSpeed; ///< Target Pump Speed + U32 calibrationTime; ///< Calibration time. + U16 crc; ///< CRC for the polynomial calibration payload. } DD_D12_DIALYSATE_PUMP_RECORD_T; /// DD dialysate pumps calibration record typedef struct { - POLYNOMIAL_CAL_PAYLOAD_T d48DialysatePump; ///< DD dialysate pump d48 calibration data. + LINEAR_CAL_PAYLOAD_T d48DialysatePump; ///< DD dialysate pump d48 calibration data. } DD_D48_DIALYSATE_PUMP_RECORD_T; -/// DD acid concentrate +/// DD acid concentrate structure typedef struct { F32 acidConcMixRatio; ///< Acid concentrate mix ratio. @@ -208,7 +203,7 @@ U16 crc; ///< CRC. } DD_ACID_CONCENTRATE_T; -/// DD bicarb concentrate +/// DD bicarb concentrate structure typedef struct { F32 bicarbConcMixRatio; ///< Bicarb concentrate mix ratio. @@ -219,19 +214,19 @@ U16 crc; ///< CRC. } DD_BICARB_CONCENTRATE_T; -/// DD acid concentrates +/// DD acid concentrates calibration record typedef struct { DD_ACID_CONCENTRATE_T acidConcentrate[ NUM_OF_ACID_TYPE ]; ///< DD acid concentrates. } DD_ACID_CONCENTRATES_RECORD_T; -/// DD bicarb concentrates +/// DD bicarb concentrates calibration record typedef struct { DD_BICARB_CONCENTRATE_T bicarbConcentrate[ NUM_OF_BICARB_TYPE ]; ///< DD bicarb concentrates. } DD_BICARB_CONCENTRATES_RECORD_T; -/// HD accelerometer sensor calibration record +/// DD accelerometer sensor calibration record typedef struct { F32 accelXOffset; ///< DD accelerometer X axis offset. @@ -241,14 +236,20 @@ U16 crc; ///< CRC for the DD accelerometer sensor. } DD_ACCEL_SENSOR_CAL_RECORD_T; -/// DD blood leak calibration structure +/// DD blood leak sensor calibration record typedef struct { U16 setPoint; ///< Blood leak sensor set point. U32 calibrationTime; ///< Calibration time. - U16 crc; ///< CRC for the HD blood leak calibration payload. + U16 crc; ///< CRC for the DD blood leak calibration payload. } DD_BLOOD_LEAK_SENSOR_CAL_RECORD_T; +/// DD conductivity sensor calibration record. +typedef struct +{ + CONDUCTIVITY_COEFFICIENTS_T condSensors[ NUM_OF_CONDUCTIVITY_SENSORS ]; ///< DD Conductivity Sensors +} DD_CONDUCTIVITY_SENSOR_CAL_RECORD_T; + /// DD systems record structure typedef struct { @@ -264,7 +265,7 @@ /// DD service record structure typedef struct { - BOOL isHDFOnlineFluid; ///< True : HDF Online Fluid feature is available, False if not. + BOOL isHDFOnlineFluidAvailable; ///< True : HDF Online Fluid feature is available, False if not. U32 waterRecovery; ///< Low : 0, Medium : 1, High : 2. U08 serviceLoc; ///< DD service location. U32 lastServiceEpochDate; ///< DD last service date in epoch. @@ -273,35 +274,42 @@ U16 crc; ///< CRC for the DD service record structure. } DD_SERVICE_RECORD_T; -/// DD institutional record structure +/// Institutional data structure. typedef struct { - U32 minDialysateFlowMLPM; ///< Min dialysate flow in mL/min. - U32 maxDialysateFlowMLPM; ///< Max dialysate flow in mL/min. - F32 minDialysateTempC; ///< Min dialysate temperature in C. - F32 maxDialysateTempC; ///< Max dialysate temperature in C. - U32 minAcidConcentrate; ///< Min acid concentrate - U32 maxAcidConcentrate; ///< Max acid concentrate - U32 minBicarbCartridgeSizeG; ///< Min bicarbonate cartridge size in grams. - U32 maxBicarbCartridgeSizeG; ///< Max bicarbonate cartridge size in grams. - U32 minSodiumMEQL; ///< Min sodium in mEq/L - U32 maxSodiumMEQL; ///< Max sodium in mEq/L - U32 minBicarbonateMEQL; ///< Min bicarbonate in mEq/L - U32 maxBicarbonateMEQL; ///< Max bicarbonate in mEq/L - U32 minRORejectionRatioPCT; ///< Min RO rejection ratio in percent. - U32 disinfectionFrequency; ///< Disinfection days between cycles. - F32 disinfectionCycleTime; ///< Disinfection Cycle Time - F32 minInletWaterCondAlarmLimitUSPCM; ///< Min inlet water conductivity alarm limit in uS/cm. - F32 maxInletWaterCondAlarmLimitUSPCM; ///< Max inlet water conductivity alarm limit in uS/cm. - F32 acidConcentrateJugSizeL; ///< acid concentrate jug size in Liters - F32 minAcidAlarmLimitPCT; ///< Min acid alarm limit in percent. - F32 minBicarbAlarmLimitPCT; ///< Min bicarbonate alarm limit in percent. - U32 postTreatDrainOption; ///< Dialysate Post Treatment Drain Option  - U32 postTreatDryBicarbOption; ///< Dry Bicarbonate Post Treatment Option  - U32 calibrationTime; ///< Calibration time in epoch. + CRITICAL_DATAS_T min; ///< Minimum value for valid data + CRITICAL_DATAS_T max; ///< Maximum value for valid data + CRITICAL_DATAS_T def; ///< Default value +} INSTIT_DATA_T; + +/// Record for range and default of institutional settings. +typedef struct +{ + CRITICAL_DATA_TYPES_T dataType; ///< Data type for the institutional parameter + INSTIT_DATA_T data; ///< Institutional data +} INSTIT_PARAMS_PROPERTIES_T; + +/// DD institutional basic record structure +typedef struct +{ + INSTIT_DATA_T param[ NUM_OF_INSTIT_BASIC ]; ///< DD basic institutional record U16 crc; ///< CRC of the institutional record. -} DD_INSTITUTIONAL_RECORD_T; +} DD_INSTIT_BASIC_RECORD_T; +/// DD institutional advanced record structure +typedef struct +{ + INSTIT_DATA_T param[ NUM_OF_INSTIT_ADVANCED ]; ///< DD advanced institutional record + U16 crc; ///< CRC of the institutional record. +} DD_INSTIT_ADVANCED_RECORD_T; + +/// DD institutional additional record structure +typedef struct +{ + INSTIT_DATA_T param[ NUM_OF_INSTIT_ADDITIONAL ]; ///< DD additional institutional record + U16 crc; ///< CRC of the institutional record. +} DD_INSTIT_ADDITIONAL_RECORD_T; + /// DD usage info structure. typedef struct { @@ -322,29 +330,15 @@ void initNVRecordsDD( void ); SELF_TEST_STATUS_T execNVMRecordsSelfTest( void ); PROCESS_RECORD_SPECS_T getProcessRecord( NVM_RECORD_TYPE_T job ); -void benignPolynomialCalRecord( POLYNOMIAL_CAL_PAYLOAD_T* record ); +void benignLinearCalRecord( LINEAR_CAL_PAYLOAD_T* record ); BOOL setLastDisinfectDate( DD_USAGE_INFO_ITEMS_T disinfect, U32 epochTime ); BOOL setServiceTime( void ); U32 getMinRORejectionRatioInInstitRecordPCT( void ); F32 getMinInletWaterConductivityLimitInstitRecordUSPCM( void ); -POLYNOMIAL_CAL_PAYLOAD_T getPressureSensorCalRecord( U08 snsrIdx ); -POLYNOMIAL_CAL_PAYLOAD_T getTemperatureSensorCalRecord( U08 snsrIdx ); -POLYNOMIAL_CAL_PAYLOAD_T getConcPumpCalRecord( U08 pumpIdx ); -DD_D12_DIALYSATE_PUMP_RECORD_T getD12PumpCalRecord( void ); -DD_D48_DIALYSATE_PUMP_RECORD_T getD48PumpCalRecord( void ); -DD_ACID_CONCENTRATE_T getAcidConcentrateCalRecord( U08 acidIdx ); -DD_BICARB_CONCENTRATE_T getBicarbConcentrateCalRecord( U08 bicarbIdx ); -DD_ACCEL_SENSOR_CAL_RECORD_T getAccelSensorCalRecord( void ); -DD_BLOOD_LEAK_SENSOR_CAL_RECORD_T getBloodLeakSensorCalRecord( void ); - BOOL getNVMRecord( NV_DATA_T nvData, U08* bufferAddress, U32 bufferLength, U08 numOfSnsrs2Check, ALARM_ID_T nvAlarm ); -BOOL setNVMRecord( NVM_RECORD_TYPE_T recType, U08* bufferAddress ); -BOOL setNVMCalRecord(DD_CAL_REC_TYPE calRecType, U08* bufferAddress, U08 idx); -BOOL getNVMInstitRecord( DD_INSTIT_REC_TYPE institRecType, U08 *valuePtr ); -BOOL setNVMInstitRecord(DD_INSTIT_REC_TYPE institRecType, U08 *valuePtr); -CRITICAL_DATA_TYPES_T getInstitRecDataType( DD_INSTIT_REC_TYPE institRecType ); +BOOL setNVMMRecord(NV_DATA_T recType, U08* bufferAddress, U08 idx); void sendNVEvent( NVM_RECORD_TYPE_T recType, U32 d1, U32 d2 ); void updateRecordCRC( NVM_RECORD_TYPE_T recType );