Index: dialin/hd/air_trap.py =================================================================== diff -u -r32e628abcbbd3fd70866505d9f2836a6f732ef06 -r12583d916e38ade3dabcfd424abe1b393c6ad60c --- dialin/hd/air_trap.py (.../air_trap.py) (revision 32e628abcbbd3fd70866505d9f2836a6f732ef06) +++ dialin/hd/air_trap.py (.../air_trap.py) (revision 12583d916e38ade3dabcfd424abe1b393c6ad60c) @@ -56,15 +56,17 @@ self.lower_level = self.AIR_DETECTED_AT_LEVEL self.upper_level = self.AIR_DETECTED_AT_LEVEL + self.lower_level_raw = self.AIR_DETECTED_AT_LEVEL + self.upper_level_raw = self.AIR_DETECTED_AT_LEVEL self.hd_air_trap_timestamp = 0.0 def get_air_trap_levels(self): """ Gets the current air trap levels - @return: List containing air trap levels: [Lower, Upper] + @return: List containing air trap levels: [Lower, Upper, RawLower, RawUpper] """ - return [self.lower_level, self.upper_level] + return [self.lower_level, self.upper_level, self.lower_level_raw,self.upper_level_raw] def get_air_trap_lower_level(self): """ @@ -82,7 +84,23 @@ """ return self.upper_level - @publish(["hd_air_trap_timestamp", "lower_level", "upper_level"]) + def get_raw_air_trap_lower_level(self): + """ + Gets the current air trap raw lower level reading + + @return: 0 for air, 1 for fluid at lower level + """ + return self.lower_level_raw + + def get_raw_air_trap_upper_level(self): + """ + Gets the current air trap raw upper level reading + + @return: 0 for air, 1 for fluid at upper level + """ + return self.upper_level_raw + + @publish(["hd_air_trap_timestamp", "lower_level", "upper_level", "raw_lower_level", "raw_upper_level"]) def _handler_air_trap_sync(self, message, timestamp=0.0): """ Handles published air trap data messages. Air trap data are captured @@ -96,9 +114,15 @@ message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) upper = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) + raw_lower = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) + raw_upper = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) self.lower_level = lower[0] self.upper_level = upper[0] + self.lower_level_raw = raw_lower[0] + self.upper_level_raw = raw_upper[0] self.hd_air_trap_timestamp = timestamp def cmd_air_trap_level_sensor_override(self, sensor: int, detected: int, reset: int = NO_RESET) -> int: @@ -140,6 +164,45 @@ self.logger.debug("Timeout!!!!") return False + def cmd_raw_air_trap_level_sensor_override(self, sensor: int, detected: int, reset: int = NO_RESET) -> int: + """ + Constructs and sends the raw air trap level sensor override command + Constraints: + Must be logged into HD. + Given sensor must be one of the sensors listed below. + + @param sensor: unsigned int - sensor ID + @param detected: unsigned int - detected (0=air, 1=fluid) to override sensor with + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + + Air trap sensor IDs: \n + 0 = Lower level \n + 1 = Upper level \n + """ + + rst = integer_to_bytearray(reset) + det = integer_to_bytearray(detected) + idx = integer_to_bytearray(sensor) + payload = rst + det + idx + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, + message_id=MsgIds.MSD_ID_HD_RAW_AIR_TRAP_LEVEL_SENSOR_OVERRIDE.value, + payload=payload) + + self.logger.debug("override raw air trap level sensor detection value for sensor " + str(sensor)) + + # 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_air_trap_data_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the air trap data broadcast interval override command