Index: dialin/dg/dialysate_generator.py =================================================================== diff -u -ra26a5f04dba3e525469d3039e993909df7389d70 -r7b0e7a8562d035de041244e38e1811ddba69694b --- dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision a26a5f04dba3e525469d3039e993909df7389d70) +++ dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 7b0e7a8562d035de041244e38e1811ddba69694b) @@ -73,14 +73,13 @@ def __init__(self, can_interface="can0"): """ - DG constructor using can bus + Initializes the DG object For example: dg_object = DG(can_interface='can0') or dg_object = DG('can0') @param can_interface: string with can bus name, e.g. "can0" - @return: DG object that allows communication with board via port """ # Create listener self.can_interface = DenaliCanMessenger(can_interface=can_interface) @@ -111,6 +110,30 @@ self.ro_pump = DGROPump(self.can_interface) self.drain_pump = DGDrainPump(self.can_interface) + def get_version(self): + """ + Gets the DG version. Assumes DG version has already been requested. + + @return: The dg version string + """ + return self.dg_version + + def get_operation_mode(self): + """ + Gets the operation mode + + @return: The operation mode + """ + return self.dg_operation_mode + + def get_operation_sub_mode(self): + """ + Gets the operation sub mode + + @return: The operation sub mode + """ + return self.dg_operation_sub_mode + def _handler_dg_version(self, message): """ Handler for response from DG regarding its version. Index: dialin/dg/drain_pump.py =================================================================== diff -u -r02e6bbf85f0699488317daa135d2530bc5b19507 -r7b0e7a8562d035de041244e38e1811ddba69694b --- dialin/dg/drain_pump.py (.../drain_pump.py) (revision 02e6bbf85f0699488317daa135d2530bc5b19507) +++ dialin/dg/drain_pump.py (.../drain_pump.py) (revision 7b0e7a8562d035de041244e38e1811ddba69694b) @@ -54,6 +54,21 @@ self.target_drain_pump_speed_RPM = 0 self.dac_value = 0 + def get_target_drain_pump_speed(self): + """ + Gets the target drain pump speed + + @return: The target drain pump speed (RPM) + """ + return self.target_drain_pump_speed_RPM + + def get_dac_value(self): + """ + Gets the dac value + @return: The dac value (int) + """ + return self.dac_value + def _handler_drain_pump_sync(self, message): """ Handles published drain pump data messages. Drain pump data are captured Index: dialin/dg/hd_proxy.py =================================================================== diff -u -rc6596d42d995bed3789849bd85c83da5a3837fac -r7b0e7a8562d035de041244e38e1811ddba69694b --- dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision c6596d42d995bed3789849bd85c83da5a3837fac) +++ dialin/dg/hd_proxy.py (.../hd_proxy.py) (revision 7b0e7a8562d035de041244e38e1811ddba69694b) @@ -37,11 +37,8 @@ def __init__(self, can_interface=None): """ - DGHDProxy constructor - @param outer_instance: reference to the DG (outer) class. - - @return: DGHDProxy object. + @param can_interface: Denali CAN Messenger object """ self.can_interface = can_interface Index: dialin/dg/load_cells.py =================================================================== diff -u -r02e6bbf85f0699488317daa135d2530bc5b19507 -r7b0e7a8562d035de041244e38e1811ddba69694b --- dialin/dg/load_cells.py (.../load_cells.py) (revision 02e6bbf85f0699488317daa135d2530bc5b19507) +++ dialin/dg/load_cells.py (.../load_cells.py) (revision 7b0e7a8562d035de041244e38e1811ddba69694b) @@ -20,6 +20,7 @@ from ..protocols.CAN import (DenaliMessage, DenaliChannels) + class DGLoadCells: """ \class DGLoadCells @@ -53,8 +54,6 @@ DGLoadCells constructor @param outer_instance: reference to the DG (outer) class. - - @return: DGLoadCells object. """ self.can_interface = can_interface @@ -69,13 +68,21 @@ self.load_cell_B1 = 0.0 self.load_cell_B2 = 0.0 + def get_load_cells(self): + """ + Gets the current load cell weights + + @return: List containing load cell values: [A1, A2, B1, B2] + """ + return [self.load_cell_A1, self.load_cell_A2, self.load_cell_B1, self.load_cell_B2] + def _handler_load_cells_sync(self, message): """ Handles published load cell data messages. Load cell data are captured for reference. @param message: published load cell data message - @return: none + @return: None """ a1 = struct.unpack('f', bytearray( @@ -101,7 +108,7 @@ @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise - \details Load Cell sensor IDs: \n + Load Cell sensor IDs: \n 0 = A1 \n 1 = A2 \n 2 = B1 \n Index: dialin/dg/pressures.py =================================================================== diff -u -r02e6bbf85f0699488317daa135d2530bc5b19507 -r7b0e7a8562d035de041244e38e1811ddba69694b --- dialin/dg/pressures.py (.../pressures.py) (revision 02e6bbf85f0699488317daa135d2530bc5b19507) +++ dialin/dg/pressures.py (.../pressures.py) (revision 7b0e7a8562d035de041244e38e1811ddba69694b) @@ -64,6 +64,17 @@ self.drain_pump_inlet_pressure = 0.0 self.drain_pump_outlet_pressure = 0.0 + def get_pressures(self): + """ + Gets the pressure values + + @return: [ro pump inlet, ro pump outlet, drain pump inlet, drain pump outlet] + """ + return [self.ro_pump_inlet_pressure, + self.ro_pump_outlet_pressure, + self.drain_pump_inlet_pressure, + self.drain_pump_outlet_pressure] + def _handler_pressures_sync(self, message): """ Handles published pressure data messages. Pressure data are captured Index: dialin/dg/reservoirs.py =================================================================== diff -u -r02e6bbf85f0699488317daa135d2530bc5b19507 -r7b0e7a8562d035de041244e38e1811ddba69694b --- dialin/dg/reservoirs.py (.../reservoirs.py) (revision 02e6bbf85f0699488317daa135d2530bc5b19507) +++ dialin/dg/reservoirs.py (.../reservoirs.py) (revision 7b0e7a8562d035de041244e38e1811ddba69694b) @@ -41,11 +41,8 @@ def __init__(self, can_interface=None): """ - DGReservoirs constructor - @param outer_instance: reference to the DG (outer) class. - - @return: HDPressureOcclusion object. + @param can_interface: The DenaliCANMessenger object """ self.can_interface = can_interface @@ -59,6 +56,32 @@ self.fill_to_vol_ml = 0 self.drain_to_vol_ml = 0 + def get_active_reservoir(self): + """ + Gets the active reservoir + RESERVOIR1 = 0 \n + RESERVOIR2 = 1 \n + + @return: 0 or 1 + """ + return self.active_reservoir + + + def get_fill_to_vol(self): + """ + Gets the fill to volume + + @return: The fill to volume (mL) + """ + return self.fill_to_vol_ml + + def get_drain_to_vol(self): + """ + Gets the drain to volume + @return: The drain to volume (mL) + """ + return self.drain_to_vol_ml + def _handler_reservoirs_sync(self, message): """ Handles published reservoir data messages. Reservoir data are captured Index: dialin/dg/ro_pump.py =================================================================== diff -u -r02e6bbf85f0699488317daa135d2530bc5b19507 -r7b0e7a8562d035de041244e38e1811ddba69694b --- dialin/dg/ro_pump.py (.../ro_pump.py) (revision 02e6bbf85f0699488317daa135d2530bc5b19507) +++ dialin/dg/ro_pump.py (.../ro_pump.py) (revision 7b0e7a8562d035de041244e38e1811ddba69694b) @@ -58,13 +58,34 @@ self.measured_flow_rate_lpm = 0.0 self.pwm_duty_cycle_pct = 0.0 + def get_target_pressure(self): + """ + Gets the target pressure + @return: the target pressure (PSI) + """ + return self.target_pressure_psi + + def get_measured_flow_rate(self): + """ + Gets the measured flow rate (lpm) + @return: The measured flow rate (float) + """ + return self.measured_flow_rate_lpm + + def get_pwm_duty_cycle_pct(self): + """ + Gets the PWM duty cycle pct + @return: The PWM duty cycle pct (float) + """ + return self.pwm_duty_cycle_pct + def _handler_ro_pump_sync(self, message): """ Handles published ro pump data messages. RO pump data are captured for reference. @param message: published RO pump data message - @return: none + @return: None """ tgt = struct.unpack('i', bytearray( Index: dialin/dg/valves.py =================================================================== diff -u -r02e6bbf85f0699488317daa135d2530bc5b19507 -r7b0e7a8562d035de041244e38e1811ddba69694b --- dialin/dg/valves.py (.../valves.py) (revision 02e6bbf85f0699488317daa135d2530bc5b19507) +++ dialin/dg/valves.py (.../valves.py) (revision 7b0e7a8562d035de041244e38e1811ddba69694b) @@ -82,7 +82,49 @@ self.valve_state_VR2 = DEENERGIZED self.valve_state_VPD = DEENERGIZED - def binary_to_valve_state(self, binary): + def get_valve_states(self): + """ + Gets the valve states + + @return: All valve states: \n + [\n + Valve Reservoir Fill \n + Valve Reservoir Inlet \n + Valve Reservoir Drain \n + Valve Reservoir Outlet \n + Valve Pressure Outlet \n + Valve Bypass Filter \n + Valve Recirculate \n + Valve Drain \n + Valve Pressure Inlet \n + Valve Sampling Port \n + Valve Reservoir 1 (spare for now including DG FPGA, as valve is of passive air relief type) \n + Valve Reservoir 2 (spare for now including DG FPGA, as valve is of passive air relief type) \n + Valve Production Drain \n + ]\n + """ + return [ + self.valve_state_VRF, + self.valve_state_VRI, + self.valve_state_VRD, + self.valve_state_VRO, + self.valve_state_VPO, + self.valve_state_VBF, + self.valve_state_VRC, + self.valve_state_VDR, + self.valve_state_VPI, + self.valve_state_VSP, + self.valve_state_VR1, + self.valve_state_VR2, + self.valve_state_VPD + ] + + def _binary_to_valve_state(self, binary): + """ + @param binary: binary value + @return: 1 = energized, otherwise de-energized + """ + if binary == 1: return ENERGIZED else: @@ -99,19 +141,19 @@ vst = struct.unpack('H', bytearray(message['message'][self.START_POS_VALVES_STATES:self.END_POS_VALVES_STATES])) self.valve_states_all = vst[0] # Extract each valve state from U16 valves states using bit-masking - self.valve_state_VRF = self.binary_to_valve_state(vst[0] & 0x0001) - self.valve_state_VRI = self.binary_to_valve_state(vst[0] & 0x0002) - self.valve_state_VRD = self.binary_to_valve_state(vst[0] & 0x0003) - self.valve_state_VRO = self.binary_to_valve_state(vst[0] & 0x0004) - self.valve_state_VPO = self.binary_to_valve_state(vst[0] & 0x0005) - self.valve_state_VBF = self.binary_to_valve_state(vst[0] & 0x0006) - self.valve_state_VRC = self.binary_to_valve_state(vst[0] & 0x0007) - self.valve_state_VDR = self.binary_to_valve_state(vst[0] & 0x0008) - self.valve_state_VPI = self.binary_to_valve_state(vst[0] & 0x0009) - self.valve_state_VSP = self.binary_to_valve_state(vst[0] & 0x0010) - self.valve_state_VR1 = self.binary_to_valve_state(vst[0] & 0x0011) - self.valve_state_VR2 = self.binary_to_valve_state(vst[0] & 0x0012) - self.valve_state_VPD = self.binary_to_valve_state(vst[0] & 0x0013) + self.valve_state_VRF = self._binary_to_valve_state(vst[0] & 0x0001) + self.valve_state_VRI = self._binary_to_valve_state(vst[0] & 0x0002) + self.valve_state_VRD = self._binary_to_valve_state(vst[0] & 0x0003) + self.valve_state_VRO = self._binary_to_valve_state(vst[0] & 0x0004) + self.valve_state_VPO = self._binary_to_valve_state(vst[0] & 0x0005) + self.valve_state_VBF = self._binary_to_valve_state(vst[0] & 0x0006) + self.valve_state_VRC = self._binary_to_valve_state(vst[0] & 0x0007) + self.valve_state_VDR = self._binary_to_valve_state(vst[0] & 0x0008) + self.valve_state_VPI = self._binary_to_valve_state(vst[0] & 0x0009) + self.valve_state_VSP = self._binary_to_valve_state(vst[0] & 0x0010) + self.valve_state_VR1 = self._binary_to_valve_state(vst[0] & 0x0011) + self.valve_state_VR2 = self._binary_to_valve_state(vst[0] & 0x0012) + self.valve_state_VPD = self._binary_to_valve_state(vst[0] & 0x0013) def cmd_valve_override(self, state, valve, reset=NO_RESET): """ @@ -122,20 +164,20 @@ @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise - valve IDs: - 0 = Valve Reservoir Fill - 1 = Valve Reservoir Inlet - 2 = Valve Reservoir Drain - 3 = Valve Reservoir Outlet - 4 = Valve Pressure Outlet - 5 = Valve Bypass Filter - 6 = Valve Recirculate - 7 = Valve Drain - 8 = Valve Pressure Inlet - 9 = Valve Sampling Port - 10 = Valve Reservoir 1 (spare for now including DG FPGA, as valve is of passive air relief type) - 11 = Valve Reservoir 2 (spare for now including DG FPGA, as valve is of passive air relief type) - 12 = Valve Production Drain + valve IDs: \n + 0 = Valve Reservoir Fill \n + 1 = Valve Reservoir Inlet \n + 2 = Valve Reservoir Drain \n + 3 = Valve Reservoir Outlet \n + 4 = Valve Pressure Outlet \n + 5 = Valve Bypass Filter \n + 6 = Valve Recirculate \n + 7 = Valve Drain \n + 8 = Valve Pressure Inlet \n + 9 = Valve Sampling Port \n + 10 = Valve Reservoir 1 (spare for now including DG FPGA, as valve is of passive air relief type) \n + 11 = Valve Reservoir 2 (spare for now including DG FPGA, as valve is of passive air relief type) \n + 12 = Valve Production Drain \n """ rst = integer_to_bytearray(reset)