Index: dialin/common/msg_ids.py =================================================================== diff -u -r5eb006b08eb1d7b641b22fff20072ab7b685cfec -rc3a1b7c1f4aa0e08000c891207891a6fbe016350 --- dialin/common/msg_ids.py (.../msg_ids.py) (revision 5eb006b08eb1d7b641b22fff20072ab7b685cfec) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision c3a1b7c1f4aa0e08000c891207891a6fbe016350) @@ -202,6 +202,8 @@ MSG_ID_DG_FLOW_SENSORS_DATA = 0xB3 MSG_ID_DG_RESPONSE_SERVICE_MODE_REQUEST = 0xB4 MSG_ID_HD_REQUEST_DG_ALARMS = 0xB5 + MSG_ID_HD_BATTERY_MANAGEMENT_DATA = 0xB9 + MSG_ID_HD_BATTERY_STATUS_DATA = 0xBA MSG_ID_CAN_ERROR_COUNT = 0x999 @@ -304,7 +306,7 @@ MSG_ID_HD_FAN_RPM_ALARM_START_TIME_OFFSET_OVERRIDE = 0x8061 MSG_ID_HD_SWITCHES_STATUS_OVERRIDE = 0x8062 MSG_ID_HD_SWITCHES_PUBLISH_INTERVAL_OVERRIDE = 0x8063 - MSG_ID_HD_BATTERY_REMAINING_PERCENT_OVERRIDE = 0x8064 + MSG_ID_HD_BATTERY_REMAINING_CAP_MWH_OVERRIDE = 0x8064 MSG_ID_HD_TEMPERATURES_VALUE_OVERRIDE = 0x8065 MSG_ID_HD_TEMPERATURES_PUBLISH_INTERVAL_OVERRIDE = 0x8066 MSG_ID_HD_FANS_PUBLISH_INTERVAL_OVERRIDE = 0x8067 Index: dialin/hd/battery.py =================================================================== diff -u -rae72ee4038fc1abcdc6f5928c12c3af9f496bd9e -rc3a1b7c1f4aa0e08000c891207891a6fbe016350 --- dialin/hd/battery.py (.../battery.py) (revision ae72ee4038fc1abcdc6f5928c12c3af9f496bd9e) +++ dialin/hd/battery.py (.../battery.py) (revision c3a1b7c1f4aa0e08000c891207891a6fbe016350) @@ -122,6 +122,23 @@ ]) """ + def get_battery_status_values(self): + """ + Gets the battery status values + + @return: battery status values + """ + return self.status_values + + def get_battery_manager_values(self): + """ + Gets the battery manager values + + @return: battery manager values + """ + return self.manager_values + + def _handler_battery_status_sync(self, message): """ Handles published battery data messages. Battery data are captured @@ -134,7 +151,7 @@ index = 6 field_size = 4 #32 bit unsigned integers for value in self.status_values: - value[0] = bytearray(message['message'][index, index+field_size]) + value[0] = bytearray(message['message'][index:index+field_size]) index += field_size #parse according to type of data @@ -176,9 +193,10 @@ """ #first unpack all of the values into byte arrays index = 6 + #print(message) field_size = 4 #32 bit unsigned integers for value in self.manager_values: - value[0] = bytearray(message['message'][index, index+field_size]) + value[0] = bytearray(message['message'][index:index+field_size]) index += field_size #parse according to type of data @@ -209,4 +227,44 @@ if not units: units = "" print (value[1], value[0], units) - + + def cmd_battery_remaining_capacity_override(self, mWh: float, reset: int = NO_RESET) -> int: + """ + Constructs and sends the battery remaining capacity (in mWh) override \n + command. + Constraints: + Must be logged into HD. + + @param mWh: float - remaining mWh of power in the HD battery to override with + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + rst = integer_to_bytearray(reset) + pwr = float_to_bytearray(mWh) + payload = rst + pwr + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, + message_id=MsgIds.MSG_ID_HD_BATTERY_REMAINING_CAP_MWH_OVERRIDE.value, + payload=payload) + + self.logger.debug("override HD battery remaining capacity") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + # self.logger.debug(received_message) + if reset == RESET: + str_res = "reset back to normal" + else: + str_res = str(mWh) + self.logger.debug("HD battery remaining capacity overridden to " + str_res + " mWh: " + + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False + Index: dialin/hd/hemodialysis_device.py =================================================================== diff -u -r7ea4b936cef531b2cde9053ae58b7119a3bf0e6c -rc3a1b7c1f4aa0e08000c891207891a6fbe016350 --- dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 7ea4b936cef531b2cde9053ae58b7119a3bf0e6c) +++ dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision c3a1b7c1f4aa0e08000c891207891a6fbe016350) @@ -19,6 +19,7 @@ from .air_bubbles import HDAirBubbles from .air_trap import HDAirTrap from .alarms import HDAlarms +from .battery import HDBattery from .blood_flow import HDBloodFlow from .blood_leak import HDBloodLeak from .buttons import HDButtons @@ -134,6 +135,7 @@ self.air_bubbles = HDAirBubbles(self.can_interface, self.logger) self.air_trap = HDAirTrap(self.can_interface, self.logger) self.alarms = HDAlarms(self.can_interface, self.logger) + self.battery = HDBattery(self.can_interface, self.logger) self.blood_leak = HDBloodLeak(self.can_interface, self.logger) self.bloodflow = HDBloodFlow(self.can_interface, self.logger) self.buttons = HDButtons(self.can_interface, self.logger)