Index: leahi_dialin/common/generic_defs.py =================================================================== diff -u -r4c11f61e1e328407ed98a1b81a3e8b0adb278bd5 -r436742844a3fbbb6a3b0bc81dc87bc6385c3e368 --- leahi_dialin/common/generic_defs.py (.../generic_defs.py) (revision 4c11f61e1e328407ed98a1b81a3e8b0adb278bd5) +++ leahi_dialin/common/generic_defs.py (.../generic_defs.py) (revision 436742844a3fbbb6a3b0bc81dc87bc6385c3e368) @@ -17,7 +17,7 @@ from enum import unique from ..utils.enums import DialinEnum -from .dd_defs import DDPressureSensorNames, DDTemperatureSensorNames, DDConcentratePumpNames, DDDialysatePumpNames +from .dd_defs import DDPressureSensorNames, DDTemperatureSensorNames, DDConcentratePumpNames, DDConductivitySensorNames, DDDialysatePumpNames from .disp_defs import AcidTypes, BicarbTypes from .fp_defs import FPPressureSensorNames @@ -191,32 +191,28 @@ 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 - CRC = (4, DataTypes.U16) # CRC - NUM_OF_CALIBRATION_RECORD_ACCELEROMETER_FIELDS = (5, DataTypes.NONE) # Number of Calibration Record Accelerometer's Fields + 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': [], - 'CRC': [], 'NUM_OF_CALIBRATION_RECORD_ACCELEROMETER_FIELDS': [], } @unique class CalibRecordBloodLeakFields(RecordsBaseEnum): SET_POINT = (0, DataTypes.U16) # DD Blood leak sensor set point - CALIBRATION_TIME = (3, DataTypes.U32) # Calibration time - CRC = (4, DataTypes.U16) # CRC - NUM_OF_CALIBRATION_RECORD_BLOOD_LEAK_FIELDS = (5, DataTypes.NONE) # Number of Calibration Record Accelerometer's Fields + 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': [], - 'CRC': [], 'NUM_OF_CALIBRATION_RECORD_BLOOD_LEAK_FIELDS': [], } @@ -228,8 +224,7 @@ 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 - CRC = (5, DataTypes.U16) # CRC - NUM_OF_CALIBRATION_RECORD_CONCENTRATE_FIELDS = (6, DataTypes.NONE) # Number of Calibration Record Acid and Bicarb Concentrate's Fields + 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 @@ -238,31 +233,58 @@ 'CONDUCTIVITY_USPCM': [], 'BOTTLE_TEMPERATURE_C': [], 'CALIBRATION_TIME': [], - 'CRC': [], '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): - FOURTH_ORDER_COEFF = (0, DataTypes.F32) # Sensor's Fourth order coefficient - THIRD_ORDER_COEFF = (1, DataTypes.F32) # Sensor's Third order coefficient - SECOND_ORDER_COEFF = (2, DataTypes.F32) # Sensor's Second order coefficient - GAIN = (3, DataTypes.F32) # Sensor's Gain - OFFSET = (4, DataTypes.F32) # Sensor's Offset - CALIBRATION_TIME = (5, DataTypes.U32) # Sensor's Calibration time - CRC = (6, DataTypes.U16) # Sensor's CRC - NUM_OF_CALIBRATION_RECORD_SENSOR_FIELDS = (7, DataTypes.NONE) # Number of Calibration Record Sensor's Fields + 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 - 'FORTH_ORDER_COEFF': [], - 'THIRD_ORDER_COEFF': [], - 'SECOND_ORDER_COEFF': [], 'GAIN': [], 'OFFSET': [], 'CALIBRATION_TIME': [], - 'CRC': [], 'NUM_OF_CALIBRATION_RECORD_SENSOR_FIELDS': [], } @@ -296,16 +318,14 @@ 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 - CRC = (6, DataTypes.U16) # CRC - NUM_OF_SYSTEM_RECORD_FIELDS = (7, DataTypes.NONE) # Number of System Record Fields + 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'], - 'CRC': [], 'NUM_OF_SYSTEM_RECORD_FIELDS': [], } @@ -318,8 +338,7 @@ 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 - CRC = (6, DataTypes.U16) # CRC - NUM_OF_SERVICE_RECORD_FIELDS = (7, DataTypes.NONE) # Number of Service Record Fields + NUM_OF_SERVICE_RECORD_FIELDS = (6, DataTypes.NONE) # Number of Service Record Fields ServiceRecordFields._str_list = { # Official Name : Accepted strings @@ -329,7 +348,6 @@ 'LAST_SERVICE_EPOCH_DATE': [], 'SERVICE_INTERVAL_SECONDS': [], 'LAST_RESET_TIME_EPOCH': [], - 'CRC': [], 'NUM_OF_SERVICE_RECORD_FIELDS': [], } @@ -380,8 +398,6 @@ i += 1 members[f'DIAL__{dial_pump.name}__{CalibRecordSensorFields.CALIBRATION_TIME.name}'] = (i, CalibRecordSensorFields.CALIBRATION_TIME.datatype()) i += 1 - members[f'DIAL__{dial_pump.name}__{CalibRecordSensorFields.CRC.name}'] = (i, CalibRecordSensorFields.CRC.datatype()) - i += 1 else: for field_name in CalibRecordSensorFields: if 'num_' in field_name.name.lower(): @@ -414,6 +430,14 @@ 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 @@ -428,34 +452,33 @@ @unique -class InstitutionalRecordFields(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.U32) # 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. - CRC = (23, DataTypes.U16) # CRC - NUM_OF_INSTITUTIONAL_RECORD_FIELDS = (24, DataTypes.NONE) # Number of Institutional Record Fields +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 -InstitutionalRecordFields._str_list = { +InstitutionalRecordBasicFields._str_list = { # Official Name : Accepted strings 'MIN_DIALYSATE_SYSTEM_FLOW_MLPM': [], 'MAX_DIALYSATE_SYSTEM_FLOW_MLPM': [], @@ -478,12 +501,35 @@ 'POST_TREAT_DRAIN_OPTION': [], 'POST_TREAT_DRY_BICARB_OPTION': [], 'CALIBRATION_TIME': [], - 'CRC': [], + '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 @@ -492,8 +538,7 @@ 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. - CRC = (7, DataTypes.U16) # CRC - NUM_OF_USAGE_INFO_RECORD_FIELDS = (8, DataTypes.NONE) # Number of Usage Information Record Fields + NUM_OF_USAGE_INFO_RECORD_FIELDS = (7, DataTypes.NONE) # Number of Usage Information Record Fields UsageInformationRecordFields._str_list = { # Official Name : Accepted strings @@ -504,6 +549,5 @@ 'LAST_HEAT_ACTIVE_COOL_COMPLETE_DATE_EPOCH': [], 'LAST_FILTER_FLUSH_COMPLETE_DATE_EPOCH': [], 'LAST_RESET_TIME_EPOCH': [], - 'CRC': [], 'NUM_OF_USAGE_INFO_RECORD_FIELDS': [], }