Index: dialin/hd/alarms.py =================================================================== diff -u -rcb130637058af1a50ece54c74965099f3ac4a9b1 -r7de50c21c352cb37e3134b7d9618e6553b655a59 --- dialin/hd/alarms.py (.../alarms.py) (revision cb130637058af1a50ece54c74965099f3ac4a9b1) +++ dialin/hd/alarms.py (.../alarms.py) (revision 7de50c21c352cb37e3134b7d9618e6553b655a59) @@ -461,30 +461,20 @@ """ return self.alarm_data[alarm_id] - @publish(["hd_alarm_status_timestamp", "alarms_state", "alarm_top", "alarms_silence_expires_in", "alarms_escalates_in", "alarms_flags"]) + @publish(["hd_alarm_status_timestamp", "alarms_priority_state", "alarm_top", "alarms_silence_expires_in", "alarms_escalates_in", "alarms_flags"]) def _handler_alarms_status_sync(self, message, timestamp=0.0): """ Handles published alarms status messages. alarms status data are captured for reference. - @param message: published blood flow data message + @param message: published alarm status data message @return: none """ - self.alarms_priority_state = int.from_bytes(bytearray( - message['message'][self.START_POS_ALARM_STATE:self.END_POS_ALARM_STATE]), - byteorder=DenaliMessage.BYTE_ORDER) - self.alarm_top = int.from_bytes(bytearray( - message['message'][self.START_POS_ALARM_TOP:self.END_POS_ALARM_TOP]), - byteorder=DenaliMessage.BYTE_ORDER) - self.alarms_escalates_in = int.from_bytes(bytearray( - message['message'][self.START_POS_ALARM_ESCALATES_IN:self.END_POS_ALARM_ESCALATES_IN]), - byteorder=DenaliMessage.BYTE_ORDER) - self.alarms_silence_expires_in = int.from_bytes(bytearray( - message['message'][self.START_POS_ALARM_SILENCE_EXPIRES_IN:self.END_POS_ALARM_SILENCE_EXPIRES_IN]), - byteorder=DenaliMessage.BYTE_ORDER) - self.alarms_flags = int.from_bytes(bytearray( - message['message'][self.START_POS_ALARMS_FLAGS:self.END_POS_ALARMS_FLAGS]), - byteorder=DenaliMessage.BYTE_ORDER) + self.alarms_priority_state = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + self.alarm_top = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + self.alarms_escalates_in = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] + self.alarms_silence_expires_in = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] + self.alarms_flags = struct.unpack('H', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.START_POS_FIELD_5+2]))[0] self.hd_alarm_status_timestamp = timestamp Index: dialin/hd/battery.py =================================================================== diff -u -r428c5c0a653129867b1cb32b5e64f89f68191c4b -r7de50c21c352cb37e3134b7d9618e6553b655a59 --- dialin/hd/battery.py (.../battery.py) (revision 428c5c0a653129867b1cb32b5e64f89f68191c4b) +++ dialin/hd/battery.py (.../battery.py) (revision 7de50c21c352cb37e3134b7d9618e6553b655a59) @@ -24,7 +24,6 @@ from ..utils.conversions import integer_to_bytearray, float_to_bytearray - class HDBattery(AbstractSubSystem): """ Hemodialysis Delivery (HD) Dialin API sub-class for battery subsystem. @@ -44,9 +43,11 @@ if self.can_interface is not None: channel_id = DenaliChannels.hd_sync_broadcast_ch_id msg_id = MsgIds.MSG_ID_HD_BATTERY_MANAGEMENT_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_battery_manager_sync) + self.can_interface.register_receiving_publication_function(channel_id, msg_id, + self._handler_battery_manager_sync) msg_id = MsgIds.MSG_ID_HD_BATTERY_STATUS_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_battery_status_sync) + self.can_interface.register_receiving_publication_function(channel_id, msg_id, + self._handler_battery_status_sync) self.hd_battery_management_timestamp = 0.0 self.hd_battery_status_timestamp = 0.0 @@ -87,68 +88,16 @@ self.DeviceName = "" self.DeviceChemistry = "" - self.status_values = [ - [self.RemainingCapacity, "RemainingCapacity", "mah", "mWh"], - [self.BatteryStatus, "BatteryStatus", "bits", None], - [self.BatteryChargerStatus, "BatteryChargerStatus", "bits", None], - [self.BatteryCommStatus, "BatteryCommStatus", "bits", None]] - - self.manager_values = [ - [self.RemainingCapacityAlarm, "RemainingCapacityAlarm", "int", "mAh"], - [self.RemainingTimeAlarm, "RemainingTimeAlarm", "int", "minutes"], - [self.BatteryMode, "BatteryMode", "bits", None], - [self.AtRate, "AtRate", "int", "mA"], - [self.AtRateTimeToFull, "AtRateTimeToFull", "int", "minutes"], - [self.AtRateTimeToEmpty, "AtRateTimeToEmpty", "int", "minutes"], - [self.AtRateOK, "AtRateOK", "bool", None], - [self.Temperature, "Temperature", "temperature", "degK"], - [self.Voltage, "Voltage", "int", "mV"], - [self.Current, "Current", "int", "mA"], - [self.AverageCurrent, "AverageCurrent", "int", "mA"], - [self.MaxError, "MaxError", "int", "percent"], - [self.RelativeStateOfCharge, "RelativeStateOfCharge", "int", "percent"], - [self.AbsoluteStateOfCharge, "AbsoluteStateOfCharge", "int", "percent"], - [self.FullChargeCapacity, "FullChargeCapacity", "int", "mAh"], - [self.RunTimeToEmpty, "RunTimeToEmpty", "int", "minutes"], - [self.AverageTimeToEmpty, "AverageTimeToEmpty", "int", "minutes"], - [self.AverageTimeToFull, "AverageTimeToFull", "int", "minutes"], - [self.ChargingCurrent, "ChargingCurrent", "int", "mA"], - [self.ChargingVoltage, "ChargingVoltage", "int", "mV"], - [self.CycleCount, "CycleCount", "int", "percent"], - [self.DesignCapacity, "DesignCapacity", "int", "mAh"], - [self.DesignVoltage, "DesignVoltage", "int", "mV"], - [self.SpecificationInfo, "SpecificationInfo", "int", None], - [self.ManufactureDate, "ManufactureDate", "int", "encodedBitMap"], - [self.SerialNumber, "SerialNumber", "int", None], - [self.ManufacturerName, "ManufacturerName", "string", None], - [self.DeviceName, "DeviceName", "string", None], - [self.DeviceChemistry, "DeviceChemistry", "string", None]] - - def get_battery_status_values(self): - """ - Gets the battery status values - - @return: battery status values - """ - return self.status_values - def get_battery_remaining_capacity(self): """ Gets the remaining capacity @return: battery remaining capacity """ - return self.status_values[0][0] + return self.RemainingCapacity - def get_battery_manager_values(self): - """ - Gets the battery manager values - - @return: battery manager values - """ - return self.manager_values - - @publish(["hd_battery_status_timestamp", 'RemainingCapacity', 'BatteryStatus', 'BatteryChargerStatus', 'BatteryCommStatus']) + @publish(["hd_battery_status_timestamp", 'RemainingCapacity', 'BatteryStatus', 'BatteryChargerStatus', + 'BatteryCommStatus']) def _handler_battery_status_sync(self, message, timestamp=0.0): """ Handles published battery data messages. Battery data are captured @@ -157,34 +106,14 @@ @param message: published battery data message @return: none """ - # first unpack all of the values into byte arrays - index = 6 - field_size = 4 # 32 bit unsigned integers - for value in self.status_values: - value[0] = bytearray(message['message'][index:index+field_size]) - index += field_size - - # parse according to type of data - for value in self.status_values: - if value[2] == "int": - value[0] = struct.unpack('HH', value[0])[0] - if value[2] == "mah": - temp = struct.unpack('I', value[0])[0] - value[0] = temp - elif value[2] == "string": - value[0] = struct.unpack('s', value[0]) - elif value[2] == "temperature": - temp = struct.unpack('HH', value[0])[0] - value[0] = temp / 10.0 - elif value[2] == "bool": - temp = struct.unpack('HH', value[0])[0] - value[0] = "False" - if temp > 0: - value[0] = "True" - elif value[2] == "bits": - # convert integer to string representing bits - temp = struct.unpack('HH', value[0])[0] - value[0] = format(temp, 'b') + self.RemainingCapacity = struct.unpack('I', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + self.BatteryStatus = struct.unpack('HH', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + self.BatteryChargerStatus = struct.unpack('HH', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] + self.BatteryCommStatus = struct.unpack('HH', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] self.hd_battery_status_timestamp = timestamp @publish(['hd_battery_management_timestamp', @@ -202,34 +131,65 @@ @param message: published battery data message @return: none """ - # first unpack all of the values into byte arrays - index = 6 - field_size = 4 # 32 bit unsigned integers - for value in self.manager_values: - value[0] = bytearray(message['message'][index:index+field_size]) - index += field_size - # parse according to type of data - for value in self.manager_values: - if value[2] == "int": - value[0] = struct.unpack('HH', value[0])[0] - if value[2] == "mah": - temp = struct.unpack('HH', value[0])[0] - value[0] = temp * self._BATTERY_MAH_2_MWH_FACTOR - elif value[2] == "string": - value[0] = struct.unpack('s', value[0]) - elif value[2] == "temperature": - temp = struct.unpack('HH', value[0])[0] - value[0] = temp / 10.0 - elif value[2] == "bool": - temp = struct.unpack('HH', value[0])[0] - value[0] = "False" - if temp > 0: - value[0] = "True" - elif value[2] == "bits": - # convert integer to string representing bits - temp = struct.unpack('HH', value[0])[0] - value[0] = format(temp, 'b') + self.RemainingCapacityAlarm = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + self.RemainingTimeAlarm = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + self.BatteryMode = struct.unpack('HH', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] + self.AtRate = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] + self.AtRateTimeToFull = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] + self.AtRateTimeToEmpty = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] + self.AtRateOK = struct.unpack('HH', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7]))[0] + self.Temperature = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))[0] + self.Voltage = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_9:MsgFieldPositions.END_POS_FIELD_9]))[0] + self.Current = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_10:MsgFieldPositions.END_POS_FIELD_10]))[0] + self.AverageCurrent = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_11:MsgFieldPositions.END_POS_FIELD_11]))[0] + self.MaxError = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_12:MsgFieldPositions.END_POS_FIELD_12]))[0] + self.RelativeStateOfCharge = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_13:MsgFieldPositions.END_POS_FIELD_13]))[0] + self.AbsoluteStateOfCharge = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_14:MsgFieldPositions.END_POS_FIELD_14]))[0] + self.FullChargeCapacity = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_15:MsgFieldPositions.END_POS_FIELD_15]))[0] + self.RunTimeToEmpty = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_16:MsgFieldPositions.END_POS_FIELD_16]))[0] + self.AverageTimeToEmpty = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_17:MsgFieldPositions.END_POS_FIELD_17]))[0] + self.AverageTimeToFull = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_18:MsgFieldPositions.END_POS_FIELD_18]))[0] + self.ChargingCurrent = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_19:MsgFieldPositions.END_POS_FIELD_19]))[0] + self.ChargingVoltage = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_20:MsgFieldPositions.END_POS_FIELD_20]))[0] + self.CycleCount = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_21:MsgFieldPositions.END_POS_FIELD_21]))[0] + self.DesignCapacity = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_22:MsgFieldPositions.END_POS_FIELD_22]))[0] + self.DesignVoltage = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_23:MsgFieldPositions.END_POS_FIELD_23]))[0] + self.SpecificationInfo = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_24:MsgFieldPositions.END_POS_FIELD_24]))[0] + self.ManufactureDate = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_25:MsgFieldPositions.END_POS_FIELD_25]))[0] + self.SerialNumber = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_26:MsgFieldPositions.END_POS_FIELD_26]))[0] + self.ManufacturerName = struct.unpack('s', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_27:MsgFieldPositions.END_POS_FIELD_27]))[0] + self.DeviceName = struct.unpack('s', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_28:MsgFieldPositions.END_POS_FIELD_28]))[0] + self.DeviceChemistry = struct.unpack('s', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_29:MsgFieldPositions.END_POS_FIELD_29]))[0] self.hd_battery_management_timestamp = timestamp def cmd_battery_remaining_capacity_override(self, mWh: float, reset: int = NO_RESET) -> int: @@ -395,4 +355,4 @@ return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: self.logger.debug("Timeout!!!!") - return False \ No newline at end of file + return False Index: dialin/hd/pressure_occlusion.py =================================================================== diff -u -r0e9a7a7519659eb74afd92a1d7b0b9577bd748a0 -r7de50c21c352cb37e3134b7d9618e6553b655a59 --- dialin/hd/pressure_occlusion.py (.../pressure_occlusion.py) (revision 0e9a7a7519659eb74afd92a1d7b0b9577bd748a0) +++ dialin/hd/pressure_occlusion.py (.../pressure_occlusion.py) (revision 7de50c21c352cb37e3134b7d9618e6553b655a59) @@ -139,7 +139,7 @@ "arterial_pressure", "venous_pressure", "blood_pump_occlusion", - "self.pressure_limits_state", + "pressure_limits_state", "arterial_pressure_limit_min", "arterial_pressure_limit_max", "venous_pressure_limit_min",