Index: leahi_dialin/common/generic_defs.py =================================================================== diff -u -r436742844a3fbbb6a3b0bc81dc87bc6385c3e368 -rbe799e12803dba3054ff893b68f8b79a9dde440b --- leahi_dialin/common/generic_defs.py (.../generic_defs.py) (revision 436742844a3fbbb6a3b0bc81dc87bc6385c3e368) +++ leahi_dialin/common/generic_defs.py (.../generic_defs.py) (revision be799e12803dba3054ff893b68f8b79a9dde440b) @@ -14,12 +14,11 @@ # ############################################################################ +# Moudle imports from enum import unique -from ..utils.enums import DialinEnum -from .dd_defs import DDPressureSensorNames, DDTemperatureSensorNames, DDConcentratePumpNames, DDConductivitySensorNames, DDDialysatePumpNames -from .disp_defs import AcidTypes, BicarbTypes -from .fp_defs import FPPressureSensorNames +# Project imports +from leahi_dialin.utils.enums import DialinEnum # ================================================== Enum Creators: DataTypes ================================================== @@ -65,6 +64,8 @@ } + +# ================================================== Enum Creators: Alarms ================================================== @unique class AlarmLampPatterns(DialinEnum): OFF = 0 @@ -166,7 +167,7 @@ -# ================================================== Enum Creators: Record Base ================================================== +# ================================================== Enum Creators: Records ================================================== @unique class RecordsBaseEnum(DialinEnum): def __new__(cls, value, unpack_type, unpack_length: int=1): @@ -183,114 +184,7 @@ return self.unpack_length - -# ================================================== Enum Creators: Record Sub Fields ================================================== @unique -class CalibRecordAccelerometerFields(RecordsBaseEnum): - ACCEL_X_OFFSET = (0, DataTypes.F32) # DD accelerometer X axis offset - ACCEL_Y_OFFSET = (1, DataTypes.F32) # DD accelerometer Y axis offset - ACCEL_Z_OFFSET = (2, DataTypes.F32) # DD accelerometer Z axis offset - CALIBRATION_TIME = (3, DataTypes.U32) # Calibration time - NUM_OF_CALIBRATION_RECORD_ACCELEROMETER_FIELDS = (4, DataTypes.NONE) # Number of Calibration Record Accelerometer's Fields - -CalibRecordAccelerometerFields._str_list = { - # Official Name : Accepted strings - 'ACCEL_X_OFFSET': [], - 'ACCEL_Y_OFFSET': [], - 'ACCEL_Z_OFFSET': [], - 'CALIBRATION_TIME': [], - 'NUM_OF_CALIBRATION_RECORD_ACCELEROMETER_FIELDS': [], -} - - -@unique -class CalibRecordBloodLeakFields(RecordsBaseEnum): - SET_POINT = (0, DataTypes.U16) # DD Blood leak sensor set point - CALIBRATION_TIME = (1, DataTypes.U32) # Calibration time - NUM_OF_CALIBRATION_RECORD_BLOOD_LEAK_FIELDS = (2, DataTypes.NONE) # Number of Calibration Record Accelerometer's Fields - -CalibRecordBloodLeakFields._str_list = { - # Official Name : Accepted strings - 'SET_POINT': [], - 'CALIBRATION_TIME': [], - 'NUM_OF_CALIBRATION_RECORD_BLOOD_LEAK_FIELDS': [], -} - - -@unique -class CalibRecordConcentrateFields(RecordsBaseEnum): - CONCENTRATE_MIX_RATIO = (0, DataTypes.F32) # Acid or Bicarb Concentrate mix ratio. - FULL_BOTTLE_VOLUME_ML = (1, DataTypes.F32) # Acid or Bicarb full bottle volume in milliliters. - CONDUCTIVITY_USPCM = (2, DataTypes.F32) # Acid or Bicarb conductivity in uS/cm. - BOTTLE_TEMPERATURE_C = (3, DataTypes.F32) # Acid or Bicarb bottle temperature in C. - CALIBRATION_TIME = (4, DataTypes.U32) # Calibration time - NUM_OF_CALIBRATION_RECORD_CONCENTRATE_FIELDS = (5, DataTypes.NONE) # Number of Calibration Record Acid and Bicarb Concentrate's Fields - -CalibRecordConcentrateFields._str_list = { - # Official Name : Accepted strings - 'CONCENTRATE_MIX_RATIO': [], - 'FULL_BOTTLE_VOLUME_ML': [], - 'CONDUCTIVITY_USPCM': [], - 'BOTTLE_TEMPERATURE_C': [], - 'CALIBRATION_TIME': [], - 'NUM_OF_CALIBRATION_RECORD_CONCENTRATE_FIELDS': [], -} - - -@unique -class CalibRecordConductivityFields(RecordsBaseEnum): - K_HIGH = (0, DataTypes.F32) # Cell Coefficient High - ALPHA_HIGH = (1, DataTypes.F32) # Temperature correction High - ETA_HIGH = (2, DataTypes.F32) # Resistance Scale Factor High - ZETA_HIGH = (3, DataTypes.F32) # Resistance Offset High - K_LOW = (4, DataTypes.F32) # Cell Coefficient Low - ALPHA_LOW = (5, DataTypes.F32) # Temperature correction Low - ETA_LOW = (6, DataTypes.F32) # Resistance Scale Factor Low - ZETA_LOW = (7, DataTypes.F32) # Resistance Offset Low - BETA = (8, DataTypes.F32) # Temperature Scale Factor - DELTA = (9, DataTypes.F32) # Temperature Offset - RSRVD_1 = (10, DataTypes.F32) # Reserved slot - RSRVD_2 = (11, DataTypes.F32) # Reserved slot - CALIBRATION_TIME = (12, DataTypes.U32) # Calibration time - NUM_OF_CALIBRATION_RECORD_CONDUCTIVITY_FIELDS = (13, DataTypes.NONE) # Number of Calibration Record Conductivity Fields - -CalibRecordConductivityFields._str_list = { - # Official Name : Accepted strings - 'K_HIGH': [], - 'ALPHA_HIGH': [], - 'ETA_HIGH': [], - 'ZETA_HIGH': [], - 'K_LOW': [], - 'ALPHA_LOW': [], - 'ETA_LOW': [], - 'ZETA_LOW': [], - 'BETA': [], - 'DELTA': [], - 'RSRVD_1': [], - 'RSRVD_2': [], - 'CALIBRATION_TIME': [], - 'NUM_OF_CALIBRATION_RECORD_CONCENTRATE_FIELDS': [], -} - - -@unique -class CalibRecordSensorFields(RecordsBaseEnum): - GAIN = (0, DataTypes.F32) # Sensor's Gain - OFFSET = (1, DataTypes.F32) # Sensor's Offset - CALIBRATION_TIME = (2, DataTypes.U32) # Sensor's Calibration time - NUM_OF_CALIBRATION_RECORD_SENSOR_FIELDS = (3, DataTypes.NONE) # Number of Calibration Record Sensor's Fields - -CalibRecordSensorFields._str_list = { - # Official Name : Accepted strings - 'GAIN': [], - 'OFFSET': [], - 'CALIBRATION_TIME': [], - 'NUM_OF_CALIBRATION_RECORD_SENSOR_FIELDS': [], -} - - -# ================================================== Enum Creators: Record Fields ================================================== -@unique class RecordTypes(DialinEnum): SYSTEM_RECORD = 0 # System Record SERVICE_RECORD = 1 # System Record @@ -308,246 +202,3 @@ 'USAGE_INFORMATION_RECORD': [], 'NUM_OF_RECORD_TYPES': [], } - - -@unique -class SystemRecordFields(RecordsBaseEnum): - IS_RO_FEATURED = (0, DataTypes.BOOL) # Is RO featured or defeatured - IS_RO_BOOST_PUMP_ADDED = (1, DataTypes.BOOL) # Is RO have boost pump or not - TOP_LEVEL_PN = (2, DataTypes.U08, 10) # Top level part number - TOP_LEVEL_SN = (3, DataTypes.U08, 20) # Top level serial number - MFG_LOCATION = (4, DataTypes.U08) # Manufacturing Location - MFG_DATE = (5, DataTypes.U32) # Manufacturing Date - NUM_OF_SYSTEM_RECORD_FIELDS = (6, DataTypes.NONE) # Number of System Record Fields - -SystemRecordFields._str_list = { - # Official Name : Accepted strings - 'TOP_LEVEL_PN': ['pn', 'part number'], - 'TOP_LEVEL_SN': ['sn', 'serial number'], - 'MFG_LOCATION': ['location', 'manufacturing location'], - 'MFG_DATE': ['date', 'manufacturing date'], - 'NUM_OF_SYSTEM_RECORD_FIELDS': [], -} - - -@unique -class ServiceRecordFields(RecordsBaseEnum): - IS_HDF_ONLINE_FLUID = (0, DataTypes.BOOL) # DD Is HDF Online - WATER_RECOVERY = (1, DataTypes.U32) # DD Water Recovery - SERVICE_LOC = (2, DataTypes.U08) # DD service location - LAST_SERVICE_EPOCH_DATE = (3, DataTypes.U32) # DD last service date in epoch - SERVICE_INTERVAL_SECONDS = (4, DataTypes.U32) # DD service interval in seconds - LAST_RESET_TIME_EPOCH = (5, DataTypes.U32) # Last time the record was reset in epoch - NUM_OF_SERVICE_RECORD_FIELDS = (6, DataTypes.NONE) # Number of Service Record Fields - -ServiceRecordFields._str_list = { - # Official Name : Accepted strings - 'IS_HDF_ONLINE_FLUID': [], - 'WATER_RECOVERY': [], - 'SERVICE_LOC': [], - 'LAST_SERVICE_EPOCH_DATE': [], - 'SERVICE_INTERVAL_SECONDS': [], - 'LAST_RESET_TIME_EPOCH': [], - 'NUM_OF_SERVICE_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 CalibRecordSensorFields: - 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 CalibRecordSensorFields: - 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 CalibRecordSensorFields: - 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 CalibRecordSensorFields: - 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}__{CalibRecordSensorFields.CALIBRATION_TIME.name}'] = (i, CalibRecordSensorFields.CALIBRATION_TIME.datatype()) - i += 1 - else: - for field_name in CalibRecordSensorFields: - 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 CalibRecordConcentrateFields: - 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 CalibRecordConcentrateFields: - 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 CalibRecordAccelerometerFields: - if 'num_' in field_name.name.lower(): - continue - members[f'ACCEL__{field_name.name}'] = (i, field_name.datatype()) - i += 1 - for field_name in CalibRecordBloodLeakFields: - 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 CalibRecordConductivityFields: - 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 - CalibrationRecordFields = RecordsBaseEnum('CalibrationRecordFields', members,) - - # Setting the _str_list values for the enum - CalibrationRecordFields._str_list = {} - for member in members: - CalibrationRecordFields._str_list[member] = [] - - return CalibrationRecordFields - - -@unique -class InstitutionalRecordBasicFields(RecordsBaseEnum): - MIN_DIALYSATE_SYSTEM_FLOW_MLPM = (0, DataTypes.U32) # Min dialysate flow in mL/min - MAX_DIALYSATE_SYSTEM_FLOW_MLPM = (1, DataTypes.U32) # Max dialysate flow in mL/min - MIN_DIALYSATE_TEMP_C = (2, DataTypes.F32) # Min dialysate temperature in C - MAX_DIALYSATE_TEMP_C = (3, DataTypes.F32) # Max dialysate temperature in C - MIN_ACID_CONCENTRATE = (4, DataTypes.U32) # Min Acid concentrate - MAX_ACID_CONCENTRATE = (5, DataTypes.U32) # Max Acid concentrate - MIN_BICARB_CARTRIDGE_SIZE_G = (6, DataTypes.U32) # Min Bicarbonate cartridge size in grams - MAX_BICARB_CARTRIDGE_SIZE_G = (7, DataTypes.U32) # Max Bicarbonate cartridge size in grams - MIN_SODIUM_MEQPL = (8, DataTypes.U32) # Min sodium in mEq/L - MAX_SODIUM_MEQPL = (9, DataTypes.U32) # Max sodium in mEq/L - MIN_BICARBONATE_MEQPL = (10, DataTypes.U32) # Min bicarbonate in mEq/L - MAX_BICARBONATE_MEQPL = (11, DataTypes.U32) # Max bicarbonate in mEq/L - MIN_RO_REJECTION_RATIO_PCT = (12, DataTypes.F32) # Min RO rejection ratio in percent - DISINFECTION_FREQUENCY = (13, DataTypes.U32) # Disinfection days between cycles - DISINFECTION_CYCLE_TIME = (14, DataTypes.F32) # Disinfection Cycle Time - MIN_INLET_WATER_CIND_AKARN_LIMIT_USPCM = (15, DataTypes.F32) # Min inlet water conductivity alarm limit in uS/cm - MAX_INLET_WATER_CIND_AKARN_LIMIT_USPCM = (16, DataTypes.F32) # Max inlet water conductivity alarm limit in uS/cm - ACID_CONCENTRATE_JUG_SIZE_L = (17, DataTypes.F32) # acid concentrate jug size in Liters - MIN_ACID_ALARM_LIMIT_PCT = (18, DataTypes.F32) # Min acid alarm limit in percent - MIN_BICARB_ALARM_LIMIT_PCT = (19, DataTypes.F32) # Min bicarbonate alarm limit in percent - POST_TREAT_DRAIN_OPTION = (20, DataTypes.U32) # Dialysate Post Treatment Drain OptionĀ  - POST_TREAT_DRY_BICARB_OPTION = (21, DataTypes.U32) # Dry Bicarbonate Post Treatment OptionĀ  - CALIBRATION_TIME = (22, DataTypes.U32) # Calibration time in epoch. - NUM_OF_INSTITUTIONAL_RECORD_BASIC_FIELDS = (23, DataTypes.NONE) # Number of Institutional Record Basic Fields - -InstitutionalRecordBasicFields._str_list = { - # Official Name : Accepted strings - 'MIN_DIALYSATE_SYSTEM_FLOW_MLPM': [], - 'MAX_DIALYSATE_SYSTEM_FLOW_MLPM': [], - 'MIN_DIALYSATE_TEMP_C': [], - 'MAX_DIALYSATE_TEMP_C': [], - 'ACID_CONCENTRATE': [], - 'BICARB_CARTRIDGE_SIZE_G': [], - 'MIN_SODIUM_MEQPL': [], - 'MAX_SODIUM_MEQPL': [], - 'MIN_BICARBONATE_MEQPL': [], - 'MAX_BICARBONATE_MEQPL': [], - 'MIN_RO_REJECTION_RATIO_PCT': [], - 'DISINFECTION_FREQUENCY': [], - 'DISINFECTION_CYCLE_TIME': [], - 'MIN_INLET_WATER_CIND_AKARN_LIMIT_USPCM': [], - 'MAX_INLET_WATER_CIND_AKARN_LIMIT_USPCM': [], - 'ACID_CONCENTRATE_JUG_SIZE_L': [], - 'MIN_ACID_ALARM_LIMIT_PCT': [], - 'MIN_BICARB_ALARM_LIMIT_PCT': [], - 'POST_TREAT_DRAIN_OPTION': [], - 'POST_TREAT_DRY_BICARB_OPTION': [], - 'CALIBRATION_TIME': [], - 'NUM_OF_INSTITUTIONAL_RECORD_BASIC_FIELDS': [], -} - - -@unique -class InstitutionalRecordAdvancedFields(RecordsBaseEnum): - CALIBRATION_TIME = (0, DataTypes.U32) # Calibration time in epoch. - NUM_OF_INSTITUTIONAL_RECORD_ADVANCED_FIELDS = (1, DataTypes.NONE) # Number of Institutional Record Advanced Fields - -InstitutionalRecordAdvancedFields._str_list = { - # Official Name : Accepted strings - 'CALIBRATION_TIME': [], - 'NUM_OF_INSTITUTIONAL_RECORD_FIELDS': [], -} - - -@unique -class InstitutionalRecordAdditionalFields(RecordsBaseEnum): - CALIBRATION_TIME = (0, DataTypes.U32) # Calibration time in epoch. - NUM_OF_INSTITUTIONAL_RECORD_ADDITIONAL_FIELDS = (1, DataTypes.NONE) # Number of Institutional Record Additional Fields - -InstitutionalRecordAdditionalFields._str_list = { - # Official Name : Accepted strings - 'CALIBRATION_TIME': [], - 'NUM_OF_INSTITUTIONAL_RECORD_ADDITIONAL_FIELDS': [], -} - - -@unique -class UsageInformationRecordFields(RecordsBaseEnum): - RO_WATER_GEN_TOTAL_L = (0, DataTypes.F32) # Total RO water generated in liters. (Cannot be reset) - RO_WATER_GEN_SINCE_LAST_SERVICE_L = (1, DataTypes.F32) # RO water generated since last treatment in liters - LAST_BASIC_FLUSH_COMPLETE_DATE_EPOCH = (2, DataTypes.U32) # Last basic flush complete date in epoch. - LAST_HEAT_DISINFECT_COMPLETE_DATE_EPOCH = (3, DataTypes.U32) # Last heat disinfect complete date in epoch. - LAST_HEAT_ACTIVE_COOL_COMPLETE_DATE_EPOCH = (4, DataTypes.U32) # Last heat disinfect active cool complete date in epoch. - LAST_FILTER_FLUSH_COMPLETE_DATE_EPOCH = (5, DataTypes.U32) # Last filter flush complete date in epoch. - 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 - -UsageInformationRecordFields._str_list = { - # Official Name : Accepted strings - 'RO_WATER_GEN_TOTAL_L': [], - 'RO_WATER_GEN_SINCE_LAST_SERVICE_L': [], - 'LAST_BASIC_FLUSH_COMPLETE_DATE_EPOCH': [], - 'LAST_HEAT_DISINFECT_COMPLETE_DATE_EPOCH': [], - 'LAST_HEAT_ACTIVE_COOL_COMPLETE_DATE_EPOCH': [], - 'LAST_FILTER_FLUSH_COMPLETE_DATE_EPOCH': [], - 'LAST_RESET_TIME_EPOCH': [], - 'NUM_OF_USAGE_INFO_RECORD_FIELDS': [], -}