Index: leahi_dialin/dd/modules/temperature_sensors.py =================================================================== diff -u -r00412d78bda4176d5c45a3778cb90ad907928965 -r35e8d930cb1a45457de87d93728fe60c7cb10ab5 --- leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision 00412d78bda4176d5c45a3778cb90ad907928965) +++ leahi_dialin/dd/modules/temperature_sensors.py (.../temperature_sensors.py) (revision 35e8d930cb1a45457de87d93728fe60c7cb10ab5) @@ -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 +from leahi_dialin.common.dd_defs import COND_SENSOR_INDEX_OFFSET, PRES_SENSOR_INDEX_OFFSET, DDTemperaturesNames 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 @@ -119,18 +119,21 @@ self.dd_temperatures[DDTemperaturesNames.D30_AVG_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_15:MsgFieldPositions.END_POS_FIELD_15]))[0] - self.dd_temperatures[DDTemperaturesNames.D66_TEMP.name] = struct.unpack('f', bytearray( + self.dd_temperatures[DDTemperaturesNames.D9_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_16:MsgFieldPositions.END_POS_FIELD_16]))[0] - self.dd_temperatures[DDTemperaturesNames.D51_TEMP.name] = struct.unpack('f', bytearray( + self.dd_temperatures[DDTemperaturesNames.D66_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_17:MsgFieldPositions.END_POS_FIELD_17]))[0] - self.dd_temperatures[DDTemperaturesNames.D18_TEMP.name] = struct.unpack('f', bytearray( + self.dd_temperatures[DDTemperaturesNames.D51_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_18:MsgFieldPositions.END_POS_FIELD_18]))[0] - self.dd_temperatures[DDTemperaturesNames.D41_TEMP.name] = struct.unpack('f', bytearray( + self.dd_temperatures[DDTemperaturesNames.D18_TEMP.name] = struct.unpack('f', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_19:MsgFieldPositions.END_POS_FIELD_19]))[0] + self.dd_temperatures[DDTemperaturesNames.D41_TEMP.name] = struct.unpack('f', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_20:MsgFieldPositions.END_POS_FIELD_20]))[0] + self.dd_temperatures_timestamp = timestamp def cmd_temperatures_data_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: @@ -184,21 +187,31 @@ rst = integer_to_bytearray(reset) value = float_to_bytearray(sensor_value) + # DD Conductivity Sensors' Temperature Reading Override if DDTemperaturesNames.D16_TEMP.value <= sensor_index <= DDTemperaturesNames.D75_TEMP.value: index = integer_to_bytearray((sensor_index - COND_SENSOR_INDEX_OFFSET)) payload = rst + value + index message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, message_id=MsgIds.MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST.value, payload=payload) + # DD Pressure Sensors' Temperature Reading Override + elif DDTemperaturesNames.D9_TEMP.value <= sensor_index < DDTemperaturesNames.NUM_OF_TEMP_SENSORS.value: + index = integer_to_bytearray((sensor_index - PRES_SENSOR_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) + + # DD Temperature Sensors' Temperature Reading Override else: index = integer_to_bytearray(sensor_index) payload = rst + value + index message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, message_id=MsgIds.MSG_ID_DD_TEMPERATURE_SENSOR_MEASURED_TEMPERATURE_OVERRIDE_REQUEST.value, payload=payload) - self.logger.debug("Setting sensor {} to {} C".format(sensor_index, sensor_value)) + self.logger.debug("Setting sensor {} to {} C".format(DDTemperaturesNames[str(sensor_index)].name, sensor_value)) # Send message received_message = self.can_interface.send(message) @@ -310,4 +323,38 @@ return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: self.logger.error("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. + Constraints: + Must be logged into DD. + + @param sensor: unsigned int - sensor ID, use the index of DDTemperaturesNames + @param temperature: float - temperature to override the sensor with + @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 - PRES_SENSOR_INDEX_OFFSET) + payload = rst + tmp + idx + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, + message_id=MsgIds.MSG_ID_DD_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST.value, + payload=payload) + + self.logger.debug("override pressure sensor filtered 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 \ No newline at end of file