Index: leahi_dialin/dd/modules/temperature_sensors.py =================================================================== diff -u -r82b297112cb6098c63938b45e1e2b6099f460697 -r2df1511a0eb2d3cf61ba95328e67d88f18311d54 --- leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision 82b297112cb6098c63938b45e1e2b6099f460697) +++ leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision 2df1511a0eb2d3cf61ba95328e67d88f18311d54) @@ -19,7 +19,7 @@ from .constants import NO_RESET, RESET from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions -from leahi_dialin.common.dd_defs import COND_SENSOR_INDEX_OFFSET, DDTemperaturesNames, DDPressureNames, DDPressureAttributesEnum +from leahi_dialin.common.dd_defs import COND_SENSOR_INDEX_OFFSET, DDTemperaturesNames, DDPressureNames, DDPressureAttributesEnum, ALPHA_PRES_SENSOR_TEMP_INDEX_OFFSET from leahi_dialin.protocols.CAN import DenaliMessage, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem, publish, DialinEnum from leahi_dialin.utils.checks import check_broadcast_interval_override_ms @@ -36,6 +36,19 @@ self.can_interface = can_interface self.logger = logger + + if self.can_interface is not None: + channel_id = DenaliChannels.dd_sync_broadcast_ch_id + self.msg_id_dd_temperature_data = MsgIds.MSG_ID_DD_TEMPERATURE_DATA.value + self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_dd_temperature_data, + self._handler_temperature_sensors_sync) + + if self.can_interface is not None: + channel_id = DenaliChannels.dd_sync_broadcast_ch_id + self.msg_id_dd_pressures_temperature_data = MsgIds.MSG_ID_DD_PRESSURES_DATA.value + self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_dd_pressures_temperature_data, + self._handler_pressure_sensors_temperatures_sync) + # Dictionary of the temperature sensors self.dd_temperatures_timestamp = 0.0 self.dd_temperatures = {DDTemperaturesNames.D1_TEMP.name: 0.0, @@ -54,29 +67,17 @@ DDTemperaturesNames.D28_AVG_TEMP.name: 0.0, DDTemperaturesNames.D30_AVG_TEMP.name: 0.0} - if self.can_interface is not None: - channel_id = DenaliChannels.dd_sync_broadcast_ch_id - self.msg_id_dd_temperature_data = MsgIds.MSG_ID_DD_TEMPERATURE_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_dd_temperature_data, - self._handler_temperature_sensors_sync) - - if self.can_interface is not None: - channel_id = DenaliChannels.dd_sync_broadcast_ch_id - self.msg_id_dd_pressures_temperature_data = MsgIds.MSG_ID_DD_PRESSURES_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_dd_pressures_temperature_data, - self._handler_pressure_sensors_temperatures_sync) - + self.dd_pressure_sensors_temperatures_timestamp = 0.0 self.dd_pressure_temperatures = { - DDPressureNames.M1_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 }, - DDPressureNames.M3_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 }, - DDPressureNames.D9_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 }, - DDPressureNames.D66_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 }, - DDPressureNames.D51_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 }, - DDPressureNames.D18_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 }, - DDPressureNames.D41_PRES.name: { DDPressureAttributesEnum.TEMP.name: 0.0 } + DDPressureNames.M1_PRES.name: {DDPressureAttributesEnum.TEMP.name: 0.0}, + DDPressureNames.M3_PRES.name: {DDPressureAttributesEnum.TEMP.name: 0.0}, + DDPressureNames.D9_PRES.name: {DDPressureAttributesEnum.TEMP.name: 0.0}, + DDPressureNames.D66_PRES.name: {DDPressureAttributesEnum.TEMP.name: 0.0}, + DDPressureNames.D51_PRES.name: {DDPressureAttributesEnum.TEMP.name: 0.0}, + DDPressureNames.D18_PRES.name: {DDPressureAttributesEnum.TEMP.name: 0.0}, + DDPressureNames.D41_PRES.name: {DDPressureAttributesEnum.TEMP.name: 0.0} } - self.dd_pressure_sensors_temperatures_timestamp = 0.0 @publish(["msg_id_dd_temperature_data", "dd_temperatures", "dd_temperatures_timestamp"]) def _handler_temperature_sensors_sync(self, message,timestamp=0.0): @@ -217,6 +218,15 @@ message_id=MsgIds.MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST.value, payload=payload) + # DD Pressure Sensors' Temperature Override + elif DDTemperaturesNames.M1_PRES_TEMP.value <= sensor_index < DDTemperaturesNames.NUM_OF_DD_TEMP_SENSORS.value: + index = integer_to_bytearray((sensor_index - ALPHA_PRES_SENSOR_TEMP_INDEX_OFFSET)) + payload = rst + value + index + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, + message_id=MsgIds.MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST.value, + payload=payload) + + # Remaining DD Temperature Sensors override else: index = integer_to_bytearray(sensor_index) payload = rst + value + index @@ -274,104 +284,6 @@ self.logger.error("Timeout!!!!") return False - def cmd_baro_sensor_read_counter_override(self, counter: int, reset: int = NO_RESET) -> int: - """ - Constructs and sends the barometer sensor read counter override command - - @param counter: int - barometer sensor read counter value to override sensor with - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise - - """ - - reset_byte_array = integer_to_bytearray(reset) - read_byte_array = integer_to_bytearray(counter) - payload = reset_byte_array + read_byte_array - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, - message_id=MsgIds.MSG_ID_DD_TEMPERATURE_SENSOR_BARO_READ_COUNTER_OVERRIDE_REQUEST.value, - payload=payload) - - if reset == RESET: - str_res = "reset back to normal" - else: - str_res = str(counter) - self.logger.debug("override baro sensor value for sensor " + ": " + str_res) - - # Send message - received_message = self.can_interface.send(message) - - # If there is content... - if received_message is not None: - # response payload is OK or not OK - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.error("Timeout!!!!") - return False - - def cmd_baro_sensor_crc_override(self, crc: int, reset: int = NO_RESET) -> int: - """ - Constructs and sends the barometer sensor CRC override command - - @param crc: int - the crc value to override sensor with - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise - - """ - - reset_byte_array = integer_to_bytearray(reset) - read_byte_array = integer_to_bytearray(crc) - payload = reset_byte_array + read_byte_array - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, - message_id=MsgIds.MSG_ID_DD_TEMPERATURE_SENSOR_BARO_CRC_OVERRIDE_REQUEST.value, - payload=payload) - - # Send message - received_message = self.can_interface.send(message) - - # If there is content... - if received_message is not None: - # response payload is OK or not OK - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.error("Timeout!!!!") - return False - - def cmd_pressure_temperature_override(self, sensor: int, temperature: float, reset: int = NO_RESET) -> int: - """ - Constructs and sends the pressure temperature override command. - Constraints: - Must be logged into DD. - - @param sensor: unsigned int - pressure sensor ID from DDPressureNames - @param temperature: float - pressure (in PSI) - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise - """ - - rst = integer_to_bytearray(reset) - tmp = float_to_bytearray(temperature) - idx = integer_to_bytearray(sensor) - payload = rst + tmp + idx - - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, - message_id=MsgIds.MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST.value, - payload=payload) - - self.logger.debug("override pressure temperature") - - # Send message - received_message = self.can_interface.send(message) - - # If there is content... - if received_message is not None: - # response payload is OK or not OK - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] - else: - self.logger.debug("Timeout!!!!") - return False - def cmd_pressure_filtered_temperature_override(self, sensor: int, temperature: float, reset: int = NO_RESET) -> int: """ Constructs and sends the filtered temperature override command.