Index: leahi_dialin/td/modules/battery.py =================================================================== diff -u -r3dc5b82f0b6f0ad88f51e709ec969b3f62af5240 -r6caa49d072aceb2655d605de5d2eea52ab1a8911 --- leahi_dialin/td/modules/battery.py (.../battery.py) (revision 3dc5b82f0b6f0ad88f51e709ec969b3f62af5240) +++ leahi_dialin/td/modules/battery.py (.../battery.py) (revision 6caa49d072aceb2655d605de5d2eea52ab1a8911) @@ -20,7 +20,7 @@ # Project imports from leahi_dialin.common.constants import NO_RESET from leahi_dialin.common.generic_defs import DataTypes -from leahi_dialin.common.msg_defs import MsgIds +from leahi_dialin.common.msg_ids import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.common import td_enum_repository from leahi_dialin.protocols.CAN import CanMessenger, CanChannels @@ -48,13 +48,37 @@ function = self._handler_battery_sync) self.battery_broadcast_timestamp = 0.0 #: The timestamp of the last message - - #: The Battery data in dictionary format self.battery_data = { td_enum_repository.TDBatteryRegisterNames.REMAINING_CAPACITY.name: 0, + td_enum_repository.TDBatteryRegisterNames.BATTERY_STATUS.name: 0, + td_enum_repository.TDBatteryRegisterNames.BATTERY_CHARGE_STATUS.name: 0, + td_enum_repository.TDBatteryRegisterNames.BATTERY_I2C_STATUS.name: 0, + td_enum_repository.TDBatteryRegisterNames.FAULT_STATUS.name: 0, + td_enum_repository.TDBatteryRegisterNames.THERMISTOR_PCT.name: 0, + td_enum_repository.TDBatteryRegisterNames.BATTERY_VOLTAGE.name: 0, + td_enum_repository.TDBatteryRegisterNames.SYSTEM_VOLTAGE.name: 0, + td_enum_repository.TDBatteryRegisterNames.BATTERY_CURRENT.name: 0, + td_enum_repository.TDBatteryRegisterNames.RELATIVE_STATE_OF_CHARGE.name: 0, + td_enum_repository.TDBatteryRegisterNames.FULL_CHARGE_CAPACITY.name: 0, } + +# ============================================================ Properties ============================================================ + @property + def battery_data(self) -> dict: + """ + The Battery data + """ + return self._battery_data + + @battery_data.setter + def battery_data(self, value): + self._battery_data = value + + + +# ============================================================ Handlers ============================================================ @publish(["msg_id_td_battery_data", "battery_data", "battery_broadcast_timestamp"]) @@ -67,35 +91,34 @@ @return: None """ sensor_list =[] - sensor_list.append((td_enum_repository.TDBatteryRegisterNames.REMAINING_CAPACITY.name, DataTypes.U32)) - sensor_list.append((td_enum_repository.TDBatteryRegisterNames.BATTERY_STATUS.name, DataTypes.U32)) - sensor_list.append((td_enum_repository.TDBatteryRegisterNames.BATTERY_CHARGE_STATUS.name, DataTypes.U32)) - sensor_list.append((td_enum_repository.TDBatteryRegisterNames.BATTERY_I2C_STATUS.name, DataTypes.U32)) - sensor_list.append((td_enum_repository.TDBatteryRegisterNames.FAULT_STATUS.name, DataTypes.U32)) - sensor_list.append((td_enum_repository.TDBatteryRegisterNames.THERMISTOR_PCT.name, DataTypes.U32)) - sensor_list.append((td_enum_repository.TDBatteryRegisterNames.BATTERY_VOLTAGE.name, DataTypes.U32)) - sensor_list.append((td_enum_repository.TDBatteryRegisterNames.SYSTEM_VOLTAGE.name, DataTypes.U32)) - sensor_list.append((td_enum_repository.TDBatteryRegisterNames.BATTERY_CURRENT.name, DataTypes.U32)) - sensor_list.append((td_enum_repository.TDBatteryRegisterNames.RELATIVE_STATE_OF_CHARGE.name, DataTypes.U32)) - sensor_list.append((td_enum_repository.TDBatteryRegisterNames.FULL_CHARGE_CAPACITY.name, DataTypes.U32)) + sensor_list.append((self.battery_data, td_enum_repository.TDBatteryRegisterNames.REMAINING_CAPACITY.name, DataTypes.U32)) + sensor_list.append((self.battery_data, td_enum_repository.TDBatteryRegisterNames.BATTERY_STATUS.name, DataTypes.U32)) + sensor_list.append((self.battery_data, td_enum_repository.TDBatteryRegisterNames.BATTERY_CHARGE_STATUS.name, DataTypes.U32)) + sensor_list.append((self.battery_data, td_enum_repository.TDBatteryRegisterNames.BATTERY_I2C_STATUS.name, DataTypes.U32)) + sensor_list.append((self.battery_data, td_enum_repository.TDBatteryRegisterNames.FAULT_STATUS.name, DataTypes.U32)) + sensor_list.append((self.battery_data, td_enum_repository.TDBatteryRegisterNames.THERMISTOR_PCT.name, DataTypes.U32)) + sensor_list.append((self.battery_data, td_enum_repository.TDBatteryRegisterNames.BATTERY_VOLTAGE.name, DataTypes.U32)) + sensor_list.append((self.battery_data, td_enum_repository.TDBatteryRegisterNames.SYSTEM_VOLTAGE.name, DataTypes.U32)) + sensor_list.append((self.battery_data, td_enum_repository.TDBatteryRegisterNames.BATTERY_CURRENT.name, DataTypes.U32)) + sensor_list.append((self.battery_data, td_enum_repository.TDBatteryRegisterNames.RELATIVE_STATE_OF_CHARGE.name, DataTypes.U32)) + sensor_list.append((self.battery_data, td_enum_repository.TDBatteryRegisterNames.FULL_CHARGE_CAPACITY.name, DataTypes.U32)) - self.process_into_dict(dict_to_update = self.battery_data, - decoder_list = sensor_list, - message = message) - + self.process_into_dict(decoder_list = sensor_list, message = message) self.battery_broadcast_timestamp = timestamp + +# ============================================================ Overrides and Requests ============================================================ def cmd_battery_data_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the battery data broadcast interval override command Constraints: Must be logged into TD. Given interval must be non-zero and a multiple of the TD general task interval (50 ms). - @param ms: integer - interval (in ms) to override with - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise + :param ms: (Integer) Interval (in ms) to override with + :param reset: (Integer) 1 to reset a previous override, 0 to override + :return: (Integer) 1 if successful, zero otherwise """ return cmd_generic_broadcast_interval_override( ms = ms, @@ -107,19 +130,19 @@ can_interface = self.can_interface) - def cmd_battery_override(self, battery_id: int, power: int, reset: int = NO_RESET) -> int: + def cmd_battery_override(self, register_id: int, power: int, reset: int = NO_RESET) -> int: """ Constructs and sends the battery override command Constraints: Must be logged into TD. - Given interval must be non-zero and a multiple of the TD general task interval (50 ms). - @param power: integer - power to override the level lower to it - @param reset: integer - 1 to reset a previous override, 0 to override - @return: 1 if successful, zero otherwise + :param power: (Integer) Power to override the register with + :param register_id: (Integer) The battery register to override + :param reset: (Integer) 1 to reset a previous override, 0 to override + :return: (Integer) 1 if successful, zero otherwise """ payload = integer_to_bytearray(reset) - payload += integer_to_bytearray(battery_id) + payload += integer_to_bytearray(register_id) payload += integer_to_bytearray(power) return cmd_generic_override( @@ -131,3 +154,26 @@ override_text = f'{str(power)}', logger = self.logger, can_interface = self.can_interface) + + def cmd_i2c_status_override(self, state: int, reset: int = NO_RESET) -> int: + """ + Constructs and sends the battery I2C override command + Constraints: + Must be logged into TD. + + :param state: (Integer) The new I2C value + :param reset: (Integer) 1 to reset a previous override, 0 to override + :return: (Integer) 1 if successful, zero otherwise + """ + payload = integer_to_bytearray(reset) + payload += integer_to_bytearray(state) + + return cmd_generic_override( + payload = payload, + reset = reset, + channel_id = CanChannels.dialin_to_td_ch_id, + msg_id = MsgIds.MSG_ID_TD_BATTERY_I2C_STATUS_OVERRIDE_REQUEST, + entity_name = f'TD Battery I2C', + override_text = f'{str(state)}', + logger = self.logger, + can_interface = self.can_interface)