From 99f310e11a05df40cb8f78332a1489e6082f028f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20PORTAY?= Date: Thu, 9 Jun 2022 15:34:50 +0200 Subject: [PATCH] steelseries: Add datasz to fu_steelseries_device_cmd() Additionaly, this: - removes the unused function fu_steelseries_device_get_transfer_size() - renames function fu_steelseries_device_command_error_to_error() to fu_steelseries_fizz_command_error_to_error() --- plugins/steelseries/fu-steelseries-device.c | 19 +++--- plugins/steelseries/fu-steelseries-device.h | 8 ++- plugins/steelseries/fu-steelseries-fizz.c | 62 ++++++++++++-------- plugins/steelseries/fu-steelseries-gamepad.c | 36 ++++++++++-- plugins/steelseries/fu-steelseries-sonic.c | 48 ++++++++++++--- 5 files changed, 121 insertions(+), 52 deletions(-) diff --git a/plugins/steelseries/fu-steelseries-device.c b/plugins/steelseries/fu-steelseries-device.c index 72d8016aa..97aa47a24 100644 --- a/plugins/steelseries/fu-steelseries-device.c +++ b/plugins/steelseries/fu-steelseries-device.c @@ -18,13 +18,6 @@ typedef struct { G_DEFINE_TYPE_WITH_PRIVATE(FuSteelseriesDevice, fu_steelseries_device, FU_TYPE_USB_DEVICE) #define GET_PRIVATE(o) (fu_steelseries_device_get_instance_private(o)) -gsize -fu_steelseries_device_get_transfer_size(FuSteelseriesDevice *self) -{ - FuSteelseriesDevicePrivate *priv = GET_PRIVATE(self); - return priv->ep_in_size; -} - /* @iface_idx_offset can be negative to specify from the end */ void fu_steelseries_device_set_iface_idx_offset(FuSteelseriesDevice *self, gint iface_idx_offset) @@ -34,7 +27,11 @@ fu_steelseries_device_set_iface_idx_offset(FuSteelseriesDevice *self, gint iface } gboolean -fu_steelseries_device_cmd(FuSteelseriesDevice *self, guint8 *data, gboolean answer, GError **error) +fu_steelseries_device_cmd(FuSteelseriesDevice *self, + guint8 *data, + gsize datasz, + gboolean answer, + GError **error) { FuSteelseriesDevicePrivate *priv = GET_PRIVATE(self); GUsbDevice *usb_device = fu_usb_device_get_dev(FU_USB_DEVICE(self)); @@ -49,7 +46,7 @@ fu_steelseries_device_cmd(FuSteelseriesDevice *self, guint8 *data, gboolean answ 0x0200, priv->iface_idx, data, - STEELSERIES_BUFFER_CONTROL_SIZE, + datasz, &actual_len, STEELSERIES_TRANSACTION_TIMEOUT, NULL, @@ -58,7 +55,7 @@ fu_steelseries_device_cmd(FuSteelseriesDevice *self, guint8 *data, gboolean answ g_prefix_error(error, "failed to do control transfer: "); return FALSE; } - if (actual_len != STEELSERIES_BUFFER_CONTROL_SIZE) { + if (actual_len != datasz) { g_set_error(error, G_IO_ERROR, G_IO_ERROR_INVALID_DATA, @@ -68,7 +65,7 @@ fu_steelseries_device_cmd(FuSteelseriesDevice *self, guint8 *data, gboolean answ } /* cleanup the buffer before receiving any data */ - memset(data, 0x00, STEELSERIES_BUFFER_CONTROL_SIZE); + memset(data, 0x00, datasz); /* do not expect the answer from device */ if (answer != TRUE) diff --git a/plugins/steelseries/fu-steelseries-device.h b/plugins/steelseries/fu-steelseries-device.h index def9420a9..d1775bf80 100644 --- a/plugins/steelseries/fu-steelseries-device.h +++ b/plugins/steelseries/fu-steelseries-device.h @@ -35,7 +35,9 @@ struct _FuSteelseriesDeviceClass { void fu_steelseries_device_set_iface_idx_offset(FuSteelseriesDevice *self, gint iface_idx_offset); -gsize -fu_steelseries_device_get_transfer_size(FuSteelseriesDevice *self); gboolean -fu_steelseries_device_cmd(FuSteelseriesDevice *self, guint8 *data, gboolean answer, GError **error); +fu_steelseries_device_cmd(FuSteelseriesDevice *self, + guint8 *data, + gsize datasz, + gboolean answer, + GError **error); diff --git a/plugins/steelseries/fu-steelseries-fizz.c b/plugins/steelseries/fu-steelseries-fizz.c index ad34e5cb6..748fbaf2c 100644 --- a/plugins/steelseries/fu-steelseries-fizz.c +++ b/plugins/steelseries/fu-steelseries-fizz.c @@ -79,7 +79,7 @@ struct _FuSteelseriesFizz { G_DEFINE_TYPE(FuSteelseriesFizz, fu_steelseries_fizz, FU_TYPE_STEELSERIES_DEVICE) static gboolean -fu_steelseries_device_command_error_to_error(guint8 cmd, guint8 err, GError **error) +fu_steelseries_fizz_command_error_to_error(guint8 cmd, guint8 err, GError **error) { /* success */ if (err == STEELSERIES_FIZZ_COMMAND_ERROR_SUCCESS) @@ -150,22 +150,20 @@ fu_steelseries_device_command_error_to_error(guint8 cmd, guint8 err, GError **er } static gboolean -fu_steelseries_device_command_and_check_error(FuDevice *device, guint8 *data, GError **error) +fu_steelseries_fizz_command_and_check_error(FuDevice *device, + guint8 *data, + gsize datasz, + GError **error) { gint gerr = G_FILE_ERROR_FAILED; const guint8 command = data[0]; guint8 err; guint8 cmd; - gsize transfer_sz = fu_steelseries_device_get_transfer_size(FU_STEELSERIES_DEVICE(device)); - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, TRUE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, datasz, TRUE, error)) return FALSE; - if (!fu_common_read_uint8_safe(data, - transfer_sz, - STEELSERIES_FIZZ_COMMAND_OFFSET, - &cmd, - error)) + if (!fu_common_read_uint8_safe(data, datasz, STEELSERIES_FIZZ_COMMAND_OFFSET, &cmd, error)) return FALSE; if (cmd != command) { @@ -178,14 +176,10 @@ fu_steelseries_device_command_and_check_error(FuDevice *device, guint8 *data, GE return FALSE; } - if (!fu_common_read_uint8_safe(data, - transfer_sz, - STEELSERIES_FIZZ_ERROR_OFFSET, - &err, - error)) + if (!fu_common_read_uint8_safe(data, datasz, STEELSERIES_FIZZ_ERROR_OFFSET, &err, error)) return FALSE; - return fu_steelseries_device_command_error_to_error(cmd, err, error); + return fu_steelseries_fizz_command_error_to_error(cmd, err, error); } gchar * @@ -214,7 +208,11 @@ fu_steelseries_fizz_get_version(FuDevice *device, gboolean tunnel, GError **erro if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "Version", data, sizeof(data)); - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, TRUE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + TRUE, + error)) return NULL; if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "Version", data, sizeof(data)); @@ -298,7 +296,7 @@ fu_steelseries_fizz_write_fs(FuDevice *device, if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "AccessFile", data, sizeof(data)); - if (!fu_steelseries_device_command_and_check_error(device, data, error)) + if (!fu_steelseries_fizz_command_and_check_error(device, data, sizeof(data), error)) return FALSE; if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "AccessFile", data, sizeof(data)); @@ -346,7 +344,7 @@ fu_steelseries_fizz_erase_fs(FuDevice *device, if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "EraseFile", data, sizeof(data)); - if (!fu_steelseries_device_command_and_check_error(device, data, error)) + if (!fu_steelseries_fizz_command_and_check_error(device, data, sizeof(data), error)) return FALSE; if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "EraseFile", data, sizeof(data)); @@ -380,7 +378,11 @@ fu_steelseries_fizz_reset(FuDevice *device, gboolean tunnel, guint8 mode, GError if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "Reset", data, sizeof(data)); - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, FALSE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + FALSE, + error)) return FALSE; /* success */ @@ -426,7 +428,7 @@ fu_steelseries_fizz_get_crc32_fs(FuDevice *device, if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "FileCRC32", data, sizeof(data)); - if (!fu_steelseries_device_command_and_check_error(device, data, error)) + if (!fu_steelseries_fizz_command_and_check_error(device, data, sizeof(data), error)) return FALSE; if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "FileCRC32", data, sizeof(data)); @@ -516,7 +518,7 @@ fu_steelseries_fizz_read_fs(FuDevice *device, if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "AccessFile", data, sizeof(data)); - if (!fu_steelseries_device_command_and_check_error(device, data, error)) + if (!fu_steelseries_fizz_command_and_check_error(device, data, sizeof(data), error)) return FALSE; if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "AccessFile", data, sizeof(data)); @@ -559,7 +561,11 @@ fu_steelseries_fizz_get_battery_level(FuDevice *device, 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)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + TRUE, + error)) return FALSE; if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "BatteryLevel", data, sizeof(data)); @@ -590,7 +596,11 @@ fu_steelseries_fizz_get_paired_status(FuDevice *device, guint8 *status, GError * if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "PairedStatus", data, sizeof(data)); - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, TRUE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + TRUE, + error)) return FALSE; if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "PairedStatus", data, sizeof(data)); @@ -621,7 +631,11 @@ fu_steelseries_fizz_get_connection_status(FuDevice *device, guint8 *status, GErr if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "ConnectionStatus", data, sizeof(data)); - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, TRUE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + TRUE, + error)) return FALSE; if (g_getenv("FWUPD_STEELSERIES_FIZZ_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "ConnectionStatus", data, sizeof(data)); diff --git a/plugins/steelseries/fu-steelseries-gamepad.c b/plugins/steelseries/fu-steelseries-gamepad.c index de41051ad..dbd4c89f5 100644 --- a/plugins/steelseries/fu-steelseries-gamepad.c +++ b/plugins/steelseries/fu-steelseries-gamepad.c @@ -33,7 +33,11 @@ fu_steelseries_gamepad_cmd_erase(FuDevice *device, GError **error) data[13] = 0x02; } - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, FALSE, error)) { + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + FALSE, + error)) { g_prefix_error(error, "unable erase flash block: "); return FALSE; } @@ -57,7 +61,11 @@ fu_steelseries_gamepad_setup(FuDevice *device, GError **error) /* get version of FW and bootloader */ data[0] = 0x12; - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, TRUE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + TRUE, + error)) return FALSE; if (!fu_common_read_uint16_safe(data, sizeof(data), 0x01, &fw_ver, G_LITTLE_ENDIAN, error)) @@ -86,7 +94,11 @@ fu_steelseries_gamepad_attach(FuDevice *device, FuProgress *progress, GError **e return TRUE; /* switch to runtime mode */ - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, FALSE, &error_local)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + FALSE, + &error_local)) g_debug("ignoring error on reset: %s", error_local->message); fu_device_add_flag(device, FWUPD_DEVICE_FLAG_WAIT_FOR_REPLUG); @@ -104,7 +116,11 @@ fu_steelseries_gamepad_detach(FuDevice *device, FuProgress *progress, GError **e return TRUE; /* switch to bootloader mode */ - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, FALSE, &error_local)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + FALSE, + &error_local)) g_debug("ignoring error on reset: %s", error_local->message); /* controller will be renumbered after switching to bootloader mode */ @@ -160,7 +176,11 @@ fu_steelseries_gamepad_write_firmware_chunks(FuDevice *device, *checksum += (guint32)chunk_checksum; - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, FALSE, error)) { + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + FALSE, + error)) { g_prefix_error(error, "unable to flash block %u: ", id); return FALSE; } @@ -186,7 +206,11 @@ fu_steelseries_gamepad_write_checksum(FuDevice *device, guint32 checksum, GError error)) return FALSE; - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, TRUE, error)) { + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + TRUE, + error)) { g_prefix_error(error, "unable to write checksum: "); return FALSE; } diff --git a/plugins/steelseries/fu-steelseries-sonic.c b/plugins/steelseries/fu-steelseries-sonic.c index b0f2da7dc..f6e70271e 100644 --- a/plugins/steelseries/fu-steelseries-sonic.c +++ b/plugins/steelseries/fu-steelseries-sonic.c @@ -102,7 +102,11 @@ fu_steelseries_sonic_wireless_status(FuDevice *device, if (g_getenv("FWUPD_STEELSERIES_SONIC_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "WirelessStatus", data, sizeof(data)); - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, TRUE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + TRUE, + error)) return FALSE; if (g_getenv("FWUPD_STEELSERIES_SONIC_VERBOSE") != NULL) @@ -142,7 +146,11 @@ fu_steelseries_sonic_battery_state(FuDevice *device, guint16 *value, GError **er if (g_getenv("FWUPD_STEELSERIES_SONIC_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "BatteryState", data, sizeof(data)); - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, TRUE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + TRUE, + error)) return FALSE; if (g_getenv("FWUPD_STEELSERIES_SONIC_VERBOSE") != NULL) @@ -205,7 +213,11 @@ fu_steelseries_sonic_read_from_ram(FuDevice *device, error)) return FALSE; - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, TRUE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + TRUE, + error)) return FALSE; if (g_getenv("FWUPD_STEELSERIES_SONIC_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "ReadFromRAM", data, sizeof(data)); @@ -285,7 +297,11 @@ fu_steelseries_sonic_read_from_flash(FuDevice *device, error)) return FALSE; - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, FALSE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + FALSE, + error)) return FALSE; if (g_getenv("FWUPD_STEELSERIES_SONIC_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "ReadFromFlash", data, sizeof(data)); @@ -367,7 +383,11 @@ fu_steelseries_sonic_write_to_ram(FuDevice *device, if (g_getenv("FWUPD_STEELSERIES_SONIC_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "WriteToRAM", data, sizeof(data)); - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, FALSE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + FALSE, + error)) return FALSE; /* timeout to give some time to write to ram */ @@ -446,7 +466,11 @@ fu_steelseries_sonic_write_to_flash(FuDevice *device, if (g_getenv("FWUPD_STEELSERIES_SONIC_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "WriteToFlash", data, sizeof(data)); - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, FALSE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + FALSE, + error)) return FALSE; /* timeout to give some time to write from ram to flash */ @@ -491,7 +515,11 @@ fu_steelseries_sonic_erase(FuDevice *device, if (g_getenv("FWUPD_STEELSERIES_SONIC_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "Erase", data, sizeof(data)); - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, FALSE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + FALSE, + error)) return FALSE; /* timeout to give some time to erase flash */ @@ -526,7 +554,11 @@ fu_steelseries_sonic_restart(FuDevice *device, if (g_getenv("FWUPD_STEELSERIES_SONIC_VERBOSE") != NULL) fu_common_dump_raw(G_LOG_DOMAIN, "Restart", data, sizeof(data)); - if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), data, FALSE, error)) + if (!fu_steelseries_device_cmd(FU_STEELSERIES_DEVICE(device), + data, + sizeof(data), + FALSE, + error)) return FALSE; /* timeout to give some time to restart chip */