Index: leahi_dialin/td/modules/pressure_sensors.py =================================================================== diff -u -r6e95e1705ce73dd7f159564b2ac3fde75f29b215 -rd27c40205e18118f4689f62463a266da1f91dba6 --- leahi_dialin/td/modules/pressure_sensors.py (.../pressure_sensors.py) (revision 6e95e1705ce73dd7f159564b2ac3fde75f29b215) +++ leahi_dialin/td/modules/pressure_sensors.py (.../pressure_sensors.py) (revision d27c40205e18118f4689f62463a266da1f91dba6) @@ -18,6 +18,7 @@ from .constants import RESET, NO_RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions +from leahi_dialin.common.td_defs import td_enum_repository from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish from leahi_dialin.utils.checks import check_broadcast_interval_override_ms @@ -31,7 +32,7 @@ def __init__(self, can_interface, logger: Logger): """ - TDPressureOcclusion constructor + TDPressureSensors constructor """ super().__init__() @@ -40,38 +41,40 @@ if self.can_interface is not None: channel_id = DenaliChannels.td_sync_broadcast_ch_id - msg_id = MsgIds.MSG_ID_TD_PRESSURE_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, msg_id, + self.msg_id_td_pressure_data = MsgIds.MSG_ID_TD_PRESSURE_DATA.value + self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_pressure_data, self._handler_pressure_sync) - self.td_pressure_timestamp = 0.0 - self.h2_arterial_pressure = 0.0 - self.h14_venous_pressure = 0.0 - self.h2_arterial_long_filtered_pressure = 0.0 - self.h14_venous_long_filtered_pressure = 0.0 + self.td_pressure_sensors = { + td_enum_repository.TDPressureSensorNames.H2_PRES.name: { + td_enum_repository.TDPressureSensorAttributes.PRES.name: 0.0, + td_enum_repository.TDPressureSensorAttributes.LONG_FILTERED_PRESSURE.name: 0.0, + td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MIN.name: 0, + td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MAX.name: 0 + }, + td_enum_repository.TDPressureSensorNames.H14_PRES.name: { + td_enum_repository.TDPressureSensorAttributes.PRES.name: 0.0, + td_enum_repository.TDPressureSensorAttributes.LONG_FILTERED_PRESSURE.name: 0.0, + td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MIN.name: 0, + td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MAX.name: 0 + }, + td_enum_repository.TDPressureSensorNames.H23_PRES.name: { + td_enum_repository.TDPressureSensorAttributes.PRES.name : 0.0 + } + } self.pressure_limits_state = 0 - self.arterial_pressure_limit_min = 0 - self.arterial_pressure_limit_max = 0 - self.venous_pressure_limit_min = 0 - self.venous_pressure_limit_max = 0 self.tmp_pressure = 0.0 self.tmp_min_limit = 0.0 self.tmp_max_limit = 0.0 @publish([ - "td_pressure_timestamp", - "h2_arterial_pressure", - "h14_venous_pressure", + "msg_id_td_pressure_data", + "td_pressure_sensors", "pressure_limits_state", - "arterial_pressure_limit_min", - "arterial_pressure_limit_max", - "venous_pressure_limit_min", - "venous_pressure_limit_max", - "h2_arterial_long_filtered_pressure", - "h14_venous_long_filtered_pressure", "tmp_pressure", "tmp_min_limit", "tmp_max_limit", + "td_pressure_timestamp" ]) def _handler_pressure_sync(self, message, timestamp=0.0): """ @@ -101,35 +104,38 @@ lfv = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9])) tps = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9])) + message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10])) tmin = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9])) + message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11])) tmax = struct.unpack('f', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9])) + message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12])) + baro = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13])) - self.h2_arterial_pressure = art[0] - self.h14_venous_pressure = ven[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H2_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES.name] = art[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H14_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES.name] = ven[0] self.pressure_limits_state = pls[0] - self.arterial_pressure_limit_min = apl[0] - self.arterial_pressure_limit_max = apu[0] - self.venous_pressure_limit_min = vpl[0] - self.venous_pressure_limit_max = vpu[0] - self.h2_arterial_long_filtered_pressure = lfa[0] - self.h14_venous_long_filtered_pressure = lfv[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H2_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MIN.name] = apl[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H2_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MAX.name] = apu[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H14_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MIN.name] = vpl[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H14_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES_LIMIT_MAX.name] = vpu[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H2_PRES.name][td_enum_repository.TDPressureSensorAttributes.LONG_FILTERED_PRESSURE.name] = lfa[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H14_PRES.name][td_enum_repository.TDPressureSensorAttributes.LONG_FILTERED_PRESSURE.name] = lfv[0] self.tmp_pressure = tps[0] self.tmp_min_limit = tmin[0] self.tmp_max_limit = tmax[0] + self.td_pressure_sensors[td_enum_repository.TDPressureSensorNames.H23_PRES.name][td_enum_repository.TDPressureSensorAttributes.PRES.name] = baro[0] self.td_pressure_timestamp = timestamp def cmd_pressure_sensor_override(self, sensor: int, pressure: float, reset: int = NO_RESET) -> int: """ - Constructs and sends the measured arterial pressure override command + Constructs and sends the measured pressure sensor override command . Constraints: Must be logged into TD. - @param sensor: bool - switch between filtered override and raw override - @param pressure: float - measured arterial pressure (in mmHg) to override with + @param sensor: int - sensor ID + @param pressure: float - measured arterial or venous pressure (in mmHg) to override with @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise """ @@ -185,7 +191,7 @@ message_id=MsgIds.MSG_ID_TD_PRESSURE_PUBLISH_INTERVAL_OVERRIDE_REQUEST.value, payload=payload) - self.logger.debug("override blood flow broadcast interval") + self.logger.debug("override pressure sensors broadcast interval") # Send message received_message = self.can_interface.send(message) @@ -197,7 +203,7 @@ str_res = "reset back to normal: " else: str_res = str(ms) + " ms: " - self.logger.debug("Blood flow broadcast interval overridden to " + str_res + + self.logger.debug("Pressure sensors broadcast interval overridden to " + str_res + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX]