Index: dialin/common/dg_defs.py =================================================================== diff -u -rb031f612a81d0333bf78a7e4675e5d0a0aeb6d1d -r33155246625e9e2f69db4a70069095fe1e342b15 --- dialin/common/dg_defs.py (.../dg_defs.py) (revision b031f612a81d0333bf78a7e4675e5d0a0aeb6d1d) +++ dialin/common/dg_defs.py (.../dg_defs.py) (revision 33155246625e9e2f69db4a70069095fe1e342b15) @@ -58,6 +58,7 @@ DG_POST_STATE_LOAD_CELL = 19 DG_POST_STATE_COMPLETED = 20 DG_POST_STATE_FAILED = 21 + NUM_OF_DG_POST_STATES = 22 @unique @@ -121,6 +122,7 @@ DG_FLUSH_STATE_CANCEL_BASIC_PATH = 11 DG_FLUSH_STATE_CANCEL_WATER_PATH = 12 DG_FLUSH_STATE_COMPLETE = 13 + NUM_OF_DG_FLUSH_STATES = 14 @unique @@ -163,6 +165,7 @@ HEAT_DISINFECT_UI_STATE_FLUSH_AFTER_DISINFECT = 7 HEAT_DISINFECT_UI_STATE_CANCEL_DISINFECT = 8 HEAT_DISINFECT_UI_STATE_COMPLETE = 9 + NUM_OF_HEAT_DISINFECT_UI_STATES = 10 @unique @@ -192,6 +195,7 @@ DG_CHEM_DISINFECT_STATE_CANCEL_BASIC_PATH = 22 DG_CHEM_DISINFECT_STATE_CANCEL_WATER_PATH = 23 DG_CHEM_DISINFECT_STATE_COMPLETE = 24 + NUM_OF_DG_CHEM_DISINFECT_STATES = 25 @unique @@ -204,13 +208,15 @@ CHEM_DISINFECT_UI_STATE_FLUSH_AFTER_DISINFECT = 5 CHEM_DISINFECT_UI_STATE_CANCEL_DISINFECT = 6 CHEM_DISINFECT_UI_STATE_COMPLETE = 7 + NUM_OF_CHEM_DISINFECT_UI_STATES = 8 @unique class DGEventList(DialinEnum): DG_EVENT_STARTUP = 0 DG_EVENT_OP_MODE_CHANGE = 1 DG_EVENT_SUB_MODE_CHANGE = 2 + NUM_OF_DG_EVENT_IDS = 3 @unique @@ -220,5 +226,6 @@ EVENT_DATA_TYPE_S32 = 2 EVENT_DATA_TYPE_F32 = 3 EVENT_DATA_TYPE_BOOL = 4 + NUM_OF_EVENT_DATA_TYPES = 5 Index: dialin/common/msg_ids.py =================================================================== diff -u -rae4c305558f0e0dd2fd5326fa4d5ba9edca84fcc -r33155246625e9e2f69db4a70069095fe1e342b15 --- dialin/common/msg_ids.py (.../msg_ids.py) (revision ae4c305558f0e0dd2fd5326fa4d5ba9edca84fcc) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 33155246625e9e2f69db4a70069095fe1e342b15) @@ -372,6 +372,7 @@ MSG_ID_DG_FLUSH_PUBLISH_INTERVAL_OVERRIDE = 0XA041 MSG_ID_FILTER_FLUSH_TIME_PERIOD_OVERRIDE = 0XA042 MSG_ID_DG_FANS_RPM_OVERRIDE = 0xA043 + MSG_ID_DIALYSATE_FLOW_SEND_INTERVAL_OVERRIDE = 0xA044 MSG_ID_DG_STOP_RTC_CLOCK = 0xA045 MSG_ID_DG_DRAIN_PUMP_MEASURED_RPM_OVERRIDE = 0xA046 MSG_ID_HD_DEBUG_EVENT = 0XFFF1 Index: dialin/dg/concentrate_pumps.py =================================================================== diff -u -ra901fe931c08daea69337c1f44135637a764ce7a -r33155246625e9e2f69db4a70069095fe1e342b15 --- dialin/dg/concentrate_pumps.py (.../concentrate_pumps.py) (revision a901fe931c08daea69337c1f44135637a764ce7a) +++ dialin/dg/concentrate_pumps.py (.../concentrate_pumps.py) (revision 33155246625e9e2f69db4a70069095fe1e342b15) @@ -79,20 +79,15 @@ @return: None """ - cp1_current = struct.unpack('f', bytearray( + self.concentrate_pump_cp1_current_set_speed = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - cp1_measured = struct.unpack('f', bytearray( + self.concentrate_pump_cp1_measured_speed = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - cp2_current = struct.unpack('f', bytearray( + self.concentrate_pump_cp2_current_set_speed = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - cp2_measured = struct.unpack('f', bytearray( + self.concentrate_pump_cp2_measured_speed = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - self.concentrate_pump_cp1_current_set_speed = cp1_current - self.concentrate_pump_cp1_measured_speed = cp1_measured - self.concentrate_pump_cp2_current_set_speed = cp2_current - self.concentrate_pump_cp2_measured_speed = cp2_measured - def cmd_concentrate_pump_state_change_request(self, pump_id: int, on: bool = False) -> int: """ Constructs and sends the concentrate pump state change request command Index: dialin/dg/drain_pump.py =================================================================== diff -u -rae4c305558f0e0dd2fd5326fa4d5ba9edca84fcc -r33155246625e9e2f69db4a70069095fe1e342b15 --- dialin/dg/drain_pump.py (.../drain_pump.py) (revision ae4c305558f0e0dd2fd5326fa4d5ba9edca84fcc) +++ dialin/dg/drain_pump.py (.../drain_pump.py) (revision 33155246625e9e2f69db4a70069095fe1e342b15) @@ -100,23 +100,17 @@ @param message: published drain pump data message @return: none """ - tgt_rpm = struct.unpack('i', bytearray( + self.target_drain_pump_rpm = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - dac = struct.unpack('i', bytearray( + self.dac_value = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - state = struct.unpack('i', bytearray( + self.drain_pump_state = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - curr_rpm = struct.unpack('i', bytearray( + self.current_drain_pump_rpm = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - tgt_prsr = struct.unpack('f', bytearray( + self.target_drain_pump_outlet_pressure = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - self.target_drain_pump_rpm = tgt_rpm - self.dac_value = dac - self.drain_pump_state = state - self.current_drain_pump_rpm = curr_rpm - self.target_drain_pump_outlet_pressure = tgt_prsr - def cmd_drain_pump_set_outlet_target_pressure(self, pressure: float) -> int: """ Constructs and sends the drain pump target outlet pressure command Index: dialin/dg/fans.py =================================================================== diff -u -ra901fe931c08daea69337c1f44135637a764ce7a -r33155246625e9e2f69db4a70069095fe1e342b15 --- dialin/dg/fans.py (.../fans.py) (revision a901fe931c08daea69337c1f44135637a764ce7a) +++ dialin/dg/fans.py (.../fans.py) (revision 33155246625e9e2f69db4a70069095fe1e342b15) @@ -138,32 +138,23 @@ @param message: published thermistors message @return: none """ - tgt_pwm = struct.unpack('f', bytearray( + self.dg_fans_duty_cycle = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - tgt_rpm = struct.unpack('f', bytearray( + self.dg_fans_target_rpm = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - inlet_1_rpm = struct.unpack('f', bytearray( + self.inlet_1_rpm = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - inlet_2_rpm = struct.unpack('f', bytearray( + self.inlet_2_rpm = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - inlet_3_rpm = struct.unpack('f', bytearray( + self.inlet_3_rpm = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - outlet_1_rpm = struct.unpack('f', bytearray( + self.outlet_1_rpm = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - outlet_2_rpm = struct.unpack('f', bytearray( + self.outlet_2_rpm = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - outlet_3_rpm = struct.unpack('f', bytearray( + self.outlet_3_rpm = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - self.dg_fans_duty_cycle = tgt_pwm - self.dg_fans_target_rpm = tgt_rpm - self.inlet_1_rpm = inlet_1_rpm - self.inlet_2_rpm = inlet_2_rpm - self.inlet_3_rpm = inlet_3_rpm - self.outlet_1_rpm = outlet_1_rpm - self.outlet_2_rpm = outlet_2_rpm - self.outlet_3_rpm = outlet_3_rpm - def cmd_dg_fan_rpm_override(self, fan: int, rpm: float, reset: int = NO_RESET) -> int: """ Constructs and sends the dg fan RPM override command Index: dialin/dg/heaters.py =================================================================== diff -u -rae4c305558f0e0dd2fd5326fa4d5ba9edca84fcc -r33155246625e9e2f69db4a70069095fe1e342b15 --- dialin/dg/heaters.py (.../heaters.py) (revision ae4c305558f0e0dd2fd5326fa4d5ba9edca84fcc) +++ dialin/dg/heaters.py (.../heaters.py) (revision 33155246625e9e2f69db4a70069095fe1e342b15) @@ -63,7 +63,8 @@ self.primary_heaters_target_temperature = 0.0 self.trimmer_heater_target_temperature = 0.0 self.primary_heater_state = 0 - self.primary_efficiency = 0 + self.trimmer_heater_state = 0 + self.primary_efficiency = 0.0 if self.can_interface is not None: channel_id = DenaliChannels.dg_sync_broadcast_ch_id @@ -111,39 +112,32 @@ return self.trimmer_heater_target_temperature @publish(["main_primary_heater_duty_cycle", "small_primary_heater_duty_cycle", "trimmer_heater_duty_cycle", - "primary_heaters_target_temperature", "trimmer_heater_target_temperature", "primary_efficiency"]) + "trimmer_heater_state", "primary_heaters_target_temperature", "trimmer_heater_target_temperature", + "primary_efficiency"]) def _handler_heaters_sync(self, message): """ Handles published heaters message @param message: published heaters data message @returns none """ - main_primary_heater_pwm = struct.unpack('f', bytearray( + self.main_primary_heater_duty_cycle = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] - small_primary_heater_pwm = struct.unpack('f', bytearray( + self.small_primary_heater_duty_cycle = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - trimmer_heater_pwm = struct.unpack('f', bytearray( + self.trimmer_heater_duty_cycle = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - primary_heaters_temp = struct.unpack('f', bytearray( + self.primary_heaters_target_temperature = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] - trimmer_heater_temp = struct.unpack('f', bytearray( + self.trimmer_heater_target_temperature = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] - primary_heater_state = struct.unpack('i', bytearray( + self.primary_heater_state = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - trimmer_heater_state = struct.unpack('i', bytearray( + self.trimmer_heater_state = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] - primary_eff = struct.unpack('f', bytearray( + self.primary_efficiency = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] - self.main_primary_heater_duty_cycle = main_primary_heater_pwm - self.small_primary_heater_duty_cycle = small_primary_heater_pwm - self.trimmer_heater_duty_cycle = trimmer_heater_pwm - self.primary_heaters_target_temperature = primary_heaters_temp - self.trimmer_heater_target_temperature = trimmer_heater_temp - self.primary_heater_state = primary_heater_state - self.primary_efficiency = primary_eff - def cmd_start_stop_primary_heater(self, state: int = HeatersStartStop.STOP.name) -> None: """ Constructs and sends a start/stop primary heater command Index: dialin/dg/ro_pump.py =================================================================== diff -u -r840ed25b933e32a993cadfe0d0c44343573c84cb -r33155246625e9e2f69db4a70069095fe1e342b15 --- dialin/dg/ro_pump.py (.../ro_pump.py) (revision 840ed25b933e32a993cadfe0d0c44343573c84cb) +++ dialin/dg/ro_pump.py (.../ro_pump.py) (revision 33155246625e9e2f69db4a70069095fe1e342b15) @@ -61,6 +61,7 @@ self.pwm_duty_cycle_pct = 0.0 self.ro_pump_state = 0.0 self.target_flow_lpm = 0.0 + self.feedback_duty_cycle_pct = 0.0 def get_target_pressure(self): """ @@ -94,7 +95,8 @@ """ return self.ro_pump_state - @publish(["target_pressure_psi", "measured_flow_rate_lpm", "pwm_duty_cycle_pct", "ro_pump_state"]) + @publish(["target_pressure_psi", "measured_flow_rate_lpm", "pwm_duty_cycle_pct", "ro_pump_state", + "feedback_duty_cycle_pct"]) def _handler_ro_pump_sync(self, message): """ Handles published ro pump data messages. RO pump data are captured @@ -114,12 +116,15 @@ message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] tgt_flow = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] + feedback_dc = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] self.target_pressure_psi = tgt_pres self.measured_flow_rate_lpm = flow self.pwm_duty_cycle_pct = pwm self.ro_pump_state = ROPumpStates(ro_state).name if ROPumpStates.has_value(ro_state) else 'State Unknown' self.target_flow_lpm = tgt_flow + self.feedback_duty_cycle_pct = feedback_dc def cmd_ro_pump_duty_cycle_pct(self, duty: float) -> int: """ Index: dialin/dg/rtc.py =================================================================== diff -u -rae4c305558f0e0dd2fd5326fa4d5ba9edca84fcc -r33155246625e9e2f69db4a70069095fe1e342b15 --- dialin/dg/rtc.py (.../rtc.py) (revision ae4c305558f0e0dd2fd5326fa4d5ba9edca84fcc) +++ dialin/dg/rtc.py (.../rtc.py) (revision 33155246625e9e2f69db4a70069095fe1e342b15) @@ -95,7 +95,7 @@ def cmd_set_rtc_time_and_date(self, second: int, minute: int, hour: int, day: int, month: int, year: int) -> int: """ - Sets the RTC time and date from the provided + Sets the RTC time and date with the provided date and time @param second: (int) Second @param minute: (int) Minute Index: tests/test_flush.py =================================================================== diff -u -raa875b4eb67d0688f9700d109c395620422ece90 -r33155246625e9e2f69db4a70069095fe1e342b15 --- tests/test_flush.py (.../test_flush.py) (revision aa875b4eb67d0688f9700d109c395620422ece90) +++ tests/test_flush.py (.../test_flush.py) (revision 33155246625e9e2f69db4a70069095fe1e342b15) @@ -24,12 +24,18 @@ def get_flush_mode_info(): + """ info = ('State, {}, Overall_elapsed_time, {}, State_elapsed_time, {}, Drain_vol, {:5.3f}, Top_alarm, {}, Op, {}, ' 'Sub, {}, History, {}, ' .format(dg.flush.flush_state, dg.flush.overall_elapsed_time, dg.flush.state_elapsed_time, dg.flush.flush_drain_line_volume_l, hd.alarms.alarm_top, dg.events.get_dg_events(1, 0), dg.events.get_dg_nth_event(2), dg.events.get_dg_events(2, 70))) + """ + info = ('State, {}, Overall_elapsed_time, {}, State_elapsed_time, {}, Drain_vol, {:5.3f}, Top_alarm, {}, ' + .format(dg.flush.flush_state, dg.flush.overall_elapsed_time, dg.flush.state_elapsed_time, + dg.flush.flush_drain_line_volume_l, hd.alarms.alarm_top)) + return info @@ -86,10 +92,10 @@ def get_ro_info(): - info = ('RO, {}, PPi, {:5.3f}, PPo, {:5.3f}, PWM, {:5.3f}, Flow, {:5.3f}, ' + info = ('RO, {}, PPi, {:5.3f}, PPo, {:5.3f}, PWM, {:5.3f}, Flow, {:5.3f}, Feedback_PWM, {:5.3f},' .format(dg.ro_pump.ro_pump_state, dg.pressures.ro_pump_inlet_pressure, dg.pressures.ro_pump_outlet_pressure, dg.ro_pump.pwm_duty_cycle_pct, - dg.ro_pump.measured_flow_rate_lpm)) + dg.ro_pump.measured_flow_rate_lpm, dg.ro_pump.feedback_duty_cycle_pct)) return info