mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-05 00:38:35 +00:00
steelseries: fizz-tunnel: Get battery level
This commit is contained in:
parent
8992698381
commit
0b8ff7196a
@ -180,6 +180,7 @@ fu_steelseries_fizz_tunnel_prepare(FuDevice *device,
|
||||
{
|
||||
FuDevice *parent = fu_device_get_parent(device);
|
||||
guint8 status;
|
||||
guint8 level;
|
||||
|
||||
if (!fu_steelseries_fizz_connection_status(parent, &status, error)) {
|
||||
g_prefix_error(error, "failed to get connection status: ");
|
||||
@ -190,6 +191,21 @@ fu_steelseries_fizz_tunnel_prepare(FuDevice *device,
|
||||
g_set_error(error, FWUPD_ERROR, FWUPD_ERROR_NOT_FOUND, "device is unreachable");
|
||||
return FALSE;
|
||||
}
|
||||
if (!fu_steelseries_fizz_battery_level(parent, TRUE, &level, error)) {
|
||||
g_prefix_error(error, "failed to get battery level: ");
|
||||
return FALSE;
|
||||
}
|
||||
g_debug("BatteryLevel: 0x%02x", level);
|
||||
/*
|
||||
* CHARGING: Most significant bit. When bit is set to 1 it means battery is currently
|
||||
* charging/plugged in
|
||||
*
|
||||
* LEVEL: 7 least significant bit value of the battery. Values are between 2-21, to get %
|
||||
* you can do (LEVEL - 1) * 5
|
||||
*/
|
||||
fu_device_set_battery_level(device,
|
||||
((level & STEELSERIES_FIZZ_BATTERY_LEVEL_STATUS_BITS) - 1U) *
|
||||
5U);
|
||||
|
||||
/* success */
|
||||
return TRUE;
|
||||
@ -285,6 +301,8 @@ fu_steelseries_fizz_tunnel_init(FuSteelseriesFizzTunnel *self)
|
||||
fu_device_set_logical_id(FU_DEVICE(self), "tunnel");
|
||||
fu_device_set_install_duration(FU_DEVICE(self), 38); /* 38 s */
|
||||
fu_device_set_remove_delay(FU_DEVICE(self), FU_DEVICE_REMOVE_DELAY_RE_ENUMERATE); /* 10 s */
|
||||
fu_device_set_poll_interval(FU_DEVICE(self), 60000); /* 1 min */
|
||||
fu_device_set_battery_threshold(FU_DEVICE(self), 20);
|
||||
fu_device_set_firmware_gtype(FU_DEVICE(self), FU_TYPE_STEELSERIES_FIRMWARE);
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,9 @@
|
||||
#define STEELSERIES_FIZZ_VERSION_COMMAND_OFFSET 0x00U
|
||||
#define STEELSERIES_FIZZ_VERSION_MODE_OFFSET 0x01U
|
||||
|
||||
#define STEELSERIES_FIZZ_BATTERY_LEVEL_COMMAND_OFFSET 0x00U
|
||||
#define STEELSERIES_FIZZ_BATTERY_LEVEL_LEVEL_OFFSET 0x01U
|
||||
|
||||
#define STEELSERIES_FIZZ_PAIRED_STATUS_COMMAND_OFFSET 0x00U
|
||||
#define STEELSERIES_FIZZ_PAIRED_STATUS_STATUS_OFFSET 0x01U
|
||||
|
||||
@ -508,6 +511,40 @@ fu_steelseries_fizz_read_access_file(FuDevice *device,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
fu_steelseries_fizz_battery_level(FuDevice *device, gboolean tunnel, guint8 *level, GError **error)
|
||||
{
|
||||
guint8 data[STEELSERIES_BUFFER_CONTROL_SIZE] = {0};
|
||||
guint16 cmd = 0x92U;
|
||||
|
||||
if (tunnel)
|
||||
cmd |= STEELSERIES_FIZZ_COMMAND_TUNNEL_BIT;
|
||||
|
||||
if (!fu_common_write_uint8_safe(data,
|
||||
sizeof(data),
|
||||
STEELSERIES_FIZZ_BATTERY_LEVEL_COMMAND_OFFSET,
|
||||
cmd,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL)
|
||||
fu_common_dump_raw(G_LOG_DOMAIN, "BatteryLevel", data, sizeof(data));
|
||||
if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, TRUE, error))
|
||||
return FALSE;
|
||||
if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL)
|
||||
fu_common_dump_raw(G_LOG_DOMAIN, "BatteryLevel", data, sizeof(data));
|
||||
|
||||
if (!fu_common_read_uint8_safe(data,
|
||||
sizeof(data),
|
||||
STEELSERIES_FIZZ_BATTERY_LEVEL_LEVEL_OFFSET,
|
||||
level,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
/* success */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
fu_steelseries_fizz_paired_status(FuDevice *device, guint8 *status, GError **error)
|
||||
{
|
||||
|
@ -28,6 +28,9 @@ fu_steelseries_fizz_new(FuDevice *self);
|
||||
#define STEELSERIES_FIZZ_RESET_MODE_NORMAL 0x00U
|
||||
#define STEELSERIES_FIZZ_RESET_MODE_BOOTLOADER 0x01U
|
||||
|
||||
#define STEELSERIES_FIZZ_BATTERY_LEVEL_CHARGING_BIT 0x80U
|
||||
#define STEELSERIES_FIZZ_BATTERY_LEVEL_STATUS_BITS 0x7fU
|
||||
|
||||
#define STEELSERIES_FIZZ_RECEIVER_FILESYSTEM_MAIN_BOOT_ID 0x01U
|
||||
#define STEELSERIES_FIZZ_RECEIVER_FILESYSTEM_FSDATA_FILE_ID 0x02U
|
||||
#define STEELSERIES_FIZZ_RECEIVER_FILESYSTEM_FACTORY_SETTINGS_ID 0x03U
|
||||
@ -109,6 +112,8 @@ fu_steelseries_fizz_write_file(FuDevice *device,
|
||||
FwupdInstallFlags flags,
|
||||
GError **error);
|
||||
gboolean
|
||||
fu_steelseries_fizz_battery_level(FuDevice *device, gboolean tunnel, guint8 *level, GError **error);
|
||||
gboolean
|
||||
fu_steelseries_fizz_paired_status(FuDevice *device, guint8 *status, GError **error);
|
||||
gboolean
|
||||
fu_steelseries_fizz_connection_status(FuDevice *device, guint8 *status, GError **error);
|
||||
|
Loading…
Reference in New Issue
Block a user