Index: leahi_dialin/common/fp_defs.py =================================================================== diff -u -r9c1ee405a484654486ee23393f0b8e6b33a17154 -r5f16af73fb80a76c6dc767661f11a8f3508770a1 --- leahi_dialin/common/fp_defs.py (.../fp_defs.py) (revision 9c1ee405a484654486ee23393f0b8e6b33a17154) +++ leahi_dialin/common/fp_defs.py (.../fp_defs.py) (revision 5f16af73fb80a76c6dc767661f11a8f3508770a1) @@ -14,13 +14,19 @@ # ############################################################################ +# Module import from enum import unique -from .dd_defs import DDConductivitySensorNames, DDPressureSensorNames, DDValveNames, DDLevelSensorNames -from ..utils.enums import DialinEnum +# Project imports +from leahi_dialin.common.disp_defs import AcidTypes, BicarbTypes +from leahi_dialin.common.dd_defs import DDConcentratePumpNames, DDConductivitySensorNames, DDDialysatePumpNames, DDEventList, DDLevelSensorNames, DDPressureSensorNames, DDTemperatureSensorNames, DDValveNames, \ + DDCalibRecordSensorFields, DDCalibRecordAccelerometerFields, DDCalibRecordBloodLeakFields, DDCalibRecordConcentrateFields, DDCalibRecordConductivityFields +from leahi_dialin.common.generic_defs import RecordsBaseEnum, DataTypes +from leahi_dialin.utils.enums import DialinEnum # ================================================== Constants ================================================== +BETA_IOFP_EVENT_OFFSET = DDEventList.NUM_OF_DD_EVENT_IDS.value # Offset to translate Dialin FPEventList to DD firmware DD Event List enum BETA_IOFP_COND_SENSOR_OFFSET = DDConductivitySensorNames.NUM_OF_CONDUCTIVITY_SENSORS.value # Offset to translate Dialin FPTemperaturesNames to DD firmware DD Conductivity Sensors enum BETA_IOFP_PRES_SENSOR_OFFSET = DDPressureSensorNames.NUM_OF_PRESSURE_SENSORS.value # Offset to translate Dialin FPTemperaturesNames to DD firmware DD Pressure Sensors enum BETA_IOFP_VALVE_OFFSET = DDValveNames.NUM_OF_DD_VALVES.value # Offset to translate Dialin FPValveNames to DD firmware DD_Valves @@ -645,3 +651,162 @@ 'VALVE_STATE_OPEN': ['open', 'on'], 'NUM_OF_VALVE_STATES': [], } + + + +# ================================================== Enum Creators: Record Fields ================================================== +def get_calibration_record_fields() -> RecordsBaseEnum: + # Creating the enum members list + i = 0 + members = {} + for pres_sensor in DDPressureSensorNames: + if 'num_' in pres_sensor.name.lower(): + continue + for field_name in DDCalibRecordSensorFields: + if 'num_' in field_name.name.lower(): + continue + members[f'PRES__{pres_sensor.name}__{field_name.name}'] = (i, field_name.datatype()) + i += 1 + for pres_sensor in FPPressureSensorNames: + if 'num_' in pres_sensor.name.lower(): + continue + for field_name in DDCalibRecordSensorFields: + if 'num_' in field_name.name.lower(): + continue + members[f'PRES__{pres_sensor.name}__{field_name.name}'] = (i, field_name.datatype()) + i += 1 + for temp_sensor in DDTemperatureSensorNames: + if 'num_' in temp_sensor.name.lower(): + continue + elif temp_sensor.value >= DDTemperatureSensorNames.FIRST_CONDUCTIVITY_SENSOR.value: + continue + for field_name in DDCalibRecordSensorFields: + if 'num_' in field_name.name.lower(): + continue + members[f'TEMP__{temp_sensor.name}__{field_name.name}'] = (i, field_name.datatype()) + i += 1 + for conc_pump in DDConcentratePumpNames: + if 'num_' in conc_pump.name.lower(): + continue + for field_name in DDCalibRecordSensorFields: + if 'num_' in field_name.name.lower(): + continue + members[f'CONC__{conc_pump.name}__{field_name.name}'] = (i, field_name.datatype()) + i += 1 + for dial_pump in DDDialysatePumpNames: + if 'num_' in dial_pump.name.lower(): + continue + elif 'd12' in dial_pump.name.lower(): + members[f'DIAL__{dial_pump.name}__TARGET_SPEED'] = (i, DataTypes.F32) + i += 1 + members[f'DIAL__{dial_pump.name}__{DDCalibRecordSensorFields.CALIBRATION_TIME.name}'] = (i, DDCalibRecordSensorFields.CALIBRATION_TIME.datatype()) + i += 1 + else: + for field_name in DDCalibRecordSensorFields: + if 'num_' in field_name.name.lower(): + continue + members[f'DIAL__{dial_pump.name}__{field_name.name}'] = (i, field_name.datatype()) + i += 1 + for acid in AcidTypes: + if 'num_' in acid.name.lower(): + continue + for field_name in DDCalibRecordConcentrateFields: + if 'num_' in field_name.name.lower(): + continue + members[f'ACID__{acid.name}__{field_name.name}'] = (i, field_name.datatype()) + i += 1 + for bicarb in BicarbTypes: + if 'num_' in bicarb.name.lower(): + continue + for field_name in DDCalibRecordConcentrateFields: + if 'num_' in field_name.name.lower(): + continue + members[f'BICARB__{bicarb.name}__{field_name.name}'] = (i, field_name.datatype()) + i += 1 + for field_name in DDCalibRecordAccelerometerFields: + if 'num_' in field_name.name.lower(): + continue + members[f'ACCEL__{field_name.name}'] = (i, field_name.datatype()) + i += 1 + for field_name in DDCalibRecordBloodLeakFields: + if 'num_' in field_name.name.lower(): + continue + members[f'BLOOD_LEAK__{field_name.name}'] = (i, field_name.datatype()) + i += 1 + for cond_sensor in DDConductivitySensorNames: + if 'num_' in cond_sensor.name.lower(): + continue + for field_name in DDCalibRecordConductivityFields: + if 'num_' in field_name.name.lower(): + continue + members[f'COND__{cond_sensor.name}__{field_name.name}'] = (i, field_name.datatype()) + i += 1 + for cond_sensor in FPConductivitySensorNames: + if 'num_' in cond_sensor.name.lower(): + continue + for field_name in DDCalibRecordConductivityFields: + if 'num_' in field_name.name.lower(): + continue + members[f'COND__{cond_sensor.name}__{field_name.name}'] = (i, field_name.datatype()) + i += 1 + members[f'NUM_OF_CALIBRATION_RECORD_FIELDS'] = (i, DataTypes.NONE) + + # Enum creation + DDCalibrationRecordFields = RecordsBaseEnum('DDCalibrationRecordFields', members,) + + # Setting the _str_list values for the enum + DDCalibrationRecordFields._str_list = {} + for member in members: + DDCalibrationRecordFields._str_list[member] = [] + + return DDCalibrationRecordFields + + +@unique +class FPServiceRecordFields(RecordsBaseEnum): + WATER_RECOVERY = (0, DataTypes.BOOL) # Low : 0, Medium : 1, High : 2. + PRIMARY_FILTER_REPLACEMENT_DATE = (1, DataTypes.U32) # Last replacement date of primary carbon filter + SECONDARY_FILTER_REPLACEMENT_DATE = (2, DataTypes.U32) # Last replacement date of secondary carbon filter + RO_MEMBRANE_REPLACEMENT_DATE = (3, DataTypes.U32) # Last replacement date of RO Membrane + SERVICE_LOC = (4, DataTypes.U32) # FP service location. + LAST_SERVICE_EPOCH_DATE = (5, DataTypes.U32) # FP last service date in epoch. + SERVICE_INTERVAL_SECONDS = (6, DataTypes.U32) # FP service interval in seconds. + LAST_RESET_TIME_EPOCH = (7, DataTypes.U32) # Last time the record was reset in epoch. + NUM_OF_SERVICE_RECORD_FIELDS = (8, DataTypes.NONE) # Number of Service Record Fields + +FPServiceRecordFields._str_list = { + # Official Name : Accepted strings + 'WATER_RECOVERY': [], + 'PRIMARY_FILTER_REPLACEMENT_DATE': [], + 'SECONDARY_FILTER_REPLACEMENT_DATE': [], + 'RO_MEMBRANE_REPLACEMENT_DATE': [], + 'SERVICE_LOC': [], + 'LAST_SERVICE_EPOCH_DATE': [], + 'SERVICE_INTERVAL_SECONDS': [], + 'LAST_RESET_TIME_EPOCH': [], + 'NUM_OF_SERVICE_RECORD_FIELDS': [], +} + + +@unique +class FPUsageInformationRecordFields(RecordsBaseEnum): + PRIMARY_FILTER_TREATMENT_COUNT = (0, DataTypes.U32) # Number of treatments performed on ultrafilter 1 since last replaced + PRIMARY_FILTER_DISINFECTION_COUNT = (1, DataTypes.U32) # Number of disinfections performed on ultrafilter 1 since last replaced + SECONDARY_FILTER_TREATMENT_COUNT = (2, DataTypes.U32) # Number of treatments performed on ultrafilter 2 since last replaced + SECONDARY_FILTER_DISINFECTION_COUNT = (3, DataTypes.U32) # Number of disinfections performed on ultrafilter 2 since last replaced + RO_MEMBRANE_TREATMENT_COUNT = (4, DataTypes.U32) # Number of treatments performed on UF Pump Tubing since last replaced + RO_MEMBRANE_DISINFECTION_COUNT = (5, DataTypes.U32) # Number of disinfections performed on UF Pump Tubing since last replaced + LAST_RESET_TIME_EPOCH = (6, DataTypes.U32) # Last time the record was reset in epoch. + NUM_OF_USAGE_INFO_RECORD_FIELDS = (7, DataTypes.NONE) # Number of Usage Information Record Fields + +FPUsageInformationRecordFields._str_list = { + # Official Name : Accepted strings + 'PRIMARY_FILTER_TREATMENT_COUNT': [], + 'PRIMARY_FILTER_DISINFECTION_COUNT': [], + 'SECONDARY_FILTER_TREATMENT_COUNT': [], + 'SECONDARY_FILTER_DISINFECTION_COUNT': [], + 'RO_MEMBRANE_TREATMENT_COUNT': [], + 'RO_MEMBRANE_DISINFECTION_COUNT': [], + 'LAST_RESET_TIME_EPOCH': [], + 'NUM_OF_USAGE_INFO_RECORD_FIELDS': [], +}