mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-07 04:48:16 +00:00
unifying: Switch to a floating point HID++ version
This commit is contained in:
parent
2c1bd0236c
commit
42b6439892
@ -111,7 +111,7 @@ static gboolean
|
|||||||
lu_device_peripheral_fetch_battery_level (LuDevice *device, GError **error)
|
lu_device_peripheral_fetch_battery_level (LuDevice *device, GError **error)
|
||||||
{
|
{
|
||||||
/* try using HID++2.0 */
|
/* try using HID++2.0 */
|
||||||
if (lu_device_get_hidpp_version (device) >= 2) {
|
if (lu_device_get_hidpp_version (device) >= 2.f) {
|
||||||
guint8 idx;
|
guint8 idx;
|
||||||
idx = lu_device_hidpp_feature_get_idx (device, HIDPP_FEATURE_BATTERY_LEVEL_STATUS);
|
idx = lu_device_hidpp_feature_get_idx (device, HIDPP_FEATURE_BATTERY_LEVEL_STATUS);
|
||||||
if (idx != 0x00) {
|
if (idx != 0x00) {
|
||||||
@ -131,7 +131,7 @@ lu_device_peripheral_fetch_battery_level (LuDevice *device, GError **error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* try HID++1.0 battery mileage */
|
/* try HID++1.0 battery mileage */
|
||||||
if (lu_device_get_hidpp_version (device) == 1) {
|
if (lu_device_get_hidpp_version (device) == 1.f) {
|
||||||
g_autoptr(LuDeviceHidppMsg) msg = lu_device_hidpp_new ();
|
g_autoptr(LuDeviceHidppMsg) msg = lu_device_hidpp_new ();
|
||||||
msg->report_id = HIDPP_REPORT_ID_SHORT;
|
msg->report_id = HIDPP_REPORT_ID_SHORT;
|
||||||
msg->device_id = lu_device_get_hidpp_id (device);
|
msg->device_id = lu_device_get_hidpp_id (device);
|
||||||
@ -175,6 +175,7 @@ lu_device_peripheral_fetch_battery_level (LuDevice *device, GError **error)
|
|||||||
static gboolean
|
static gboolean
|
||||||
lu_device_peripheral_ping (LuDevice *device, GError **error)
|
lu_device_peripheral_ping (LuDevice *device, GError **error)
|
||||||
{
|
{
|
||||||
|
gdouble version;
|
||||||
g_autoptr(GError) error_local = NULL;
|
g_autoptr(GError) error_local = NULL;
|
||||||
g_autoptr(LuDeviceHidppMsg) msg = lu_device_hidpp_new ();
|
g_autoptr(LuDeviceHidppMsg) msg = lu_device_hidpp_new ();
|
||||||
|
|
||||||
@ -190,7 +191,7 @@ lu_device_peripheral_ping (LuDevice *device, GError **error)
|
|||||||
if (g_error_matches (error_local,
|
if (g_error_matches (error_local,
|
||||||
G_IO_ERROR,
|
G_IO_ERROR,
|
||||||
G_IO_ERROR_NOT_SUPPORTED)) {
|
G_IO_ERROR_NOT_SUPPORTED)) {
|
||||||
lu_device_set_hidpp_version (device, 0x01);
|
lu_device_set_hidpp_version (device, 1.f);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
if (g_error_matches (error_local,
|
if (g_error_matches (error_local,
|
||||||
@ -214,8 +215,9 @@ lu_device_peripheral_ping (LuDevice *device, GError **error)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: minor is in msg->data[1] */
|
/* format version in BCD format */
|
||||||
lu_device_set_hidpp_version (device, msg->data[0]);
|
version = (gdouble) msg->data[0] + ((gdouble) msg->data[1]) / 100.f;
|
||||||
|
lu_device_set_hidpp_version (device, version);
|
||||||
|
|
||||||
/* success */
|
/* success */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -159,7 +159,7 @@ lu_device_runtime_open (LuDevice *device, GError **error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* this only exists with the original HID++1.0 version */
|
/* this only exists with the original HID++1.0 version */
|
||||||
lu_device_set_hidpp_version (device, 1);
|
lu_device_set_hidpp_version (device, 1.f);
|
||||||
|
|
||||||
/* we can flash this */
|
/* we can flash this */
|
||||||
lu_device_add_flag (device, LU_DEVICE_FLAG_CAN_FLASH);
|
lu_device_add_flag (device, LU_DEVICE_FLAG_CAN_FLASH);
|
||||||
|
@ -47,7 +47,7 @@ typedef struct
|
|||||||
LuDeviceFlags flags;
|
LuDeviceFlags flags;
|
||||||
guint8 hidpp_id;
|
guint8 hidpp_id;
|
||||||
guint8 battery_level;
|
guint8 battery_level;
|
||||||
guint8 hidpp_version;
|
gdouble hidpp_version;
|
||||||
GPtrArray *feature_index;
|
GPtrArray *feature_index;
|
||||||
} LuDevicePrivate;
|
} LuDevicePrivate;
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ lu_device_to_string (LuDevice *device)
|
|||||||
g_string_append_printf (str, "type:\t\t\t%s\n", lu_device_kind_to_string (priv->kind));
|
g_string_append_printf (str, "type:\t\t\t%s\n", lu_device_kind_to_string (priv->kind));
|
||||||
flags_str = lu_device_flags_to_string (priv->flags);
|
flags_str = lu_device_flags_to_string (priv->flags);
|
||||||
g_string_append_printf (str, "flags:\t\t\t%s\n", flags_str);
|
g_string_append_printf (str, "flags:\t\t\t%s\n", flags_str);
|
||||||
g_string_append_printf (str, "hidpp-version:\t\t%u\n", priv->hidpp_version);
|
g_string_append_printf (str, "hidpp-version:\t\t%.2f\n", priv->hidpp_version);
|
||||||
if (priv->hidpp_id != HIDPP_DEVICE_ID_UNSET)
|
if (priv->hidpp_id != HIDPP_DEVICE_ID_UNSET)
|
||||||
g_string_append_printf (str, "hidpp-id:\t\t0x%02x\n", (guint) priv->hidpp_id);
|
g_string_append_printf (str, "hidpp-id:\t\t0x%02x\n", (guint) priv->hidpp_id);
|
||||||
if (priv->udev_device_fd > 0)
|
if (priv->udev_device_fd > 0)
|
||||||
@ -279,7 +279,7 @@ lu_device_hidpp_send (LuDevice *device,
|
|||||||
gsize len = lu_device_hidpp_msg_length (msg);
|
gsize len = lu_device_hidpp_msg_length (msg);
|
||||||
|
|
||||||
/* only for HID++2.0 */
|
/* only for HID++2.0 */
|
||||||
if (lu_device_get_hidpp_version (device) >= 2)
|
if (lu_device_get_hidpp_version (device) >= 2.f)
|
||||||
msg->function_id |= FU_DEVICE_UNIFYING_SW_ID;
|
msg->function_id |= FU_DEVICE_UNIFYING_SW_ID;
|
||||||
|
|
||||||
lu_device_hidpp_dump (device, "host->device", (guint8 *) msg, len);
|
lu_device_hidpp_dump (device, "host->device", (guint8 *) msg, len);
|
||||||
@ -616,7 +616,7 @@ lu_device_hidpp_transfer (LuDevice *device, LuDeviceHidppMsg *msg, GError **erro
|
|||||||
* connected to an HID++ 1.0 receiver, any feature index
|
* connected to an HID++ 1.0 receiver, any feature index
|
||||||
* corresponding to an HID++ 1.0 sub-identifier which could be
|
* corresponding to an HID++ 1.0 sub-identifier which could be
|
||||||
* sent by the receiver, must be assigned to a dummy feature */
|
* sent by the receiver, must be assigned to a dummy feature */
|
||||||
if (lu_device_get_hidpp_version (device) >= 2 &&
|
if (lu_device_get_hidpp_version (device) >= 2.f &&
|
||||||
lu_device_hidpp_msg_is_hidpp_10 (msg_tmp)) {
|
lu_device_hidpp_msg_is_hidpp_10 (msg_tmp)) {
|
||||||
g_debug ("ignoring HID++1.0 reply");
|
g_debug ("ignoring HID++1.0 reply");
|
||||||
continue;
|
continue;
|
||||||
@ -627,7 +627,7 @@ lu_device_hidpp_transfer (LuDevice *device, LuDeviceHidppMsg *msg, GError **erro
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* not us */
|
/* not us */
|
||||||
if (lu_device_get_hidpp_version (device) >= 2 &&
|
if (lu_device_get_hidpp_version (device) >= 2.f &&
|
||||||
(msg->flags & LU_DEVICE_HIDPP_MSG_FLAG_IGNORE_SWID) == 0) {
|
(msg->flags & LU_DEVICE_HIDPP_MSG_FLAG_IGNORE_SWID) == 0) {
|
||||||
if (!lu_device_hidpp_msg_check_swid (msg, msg_tmp)) {
|
if (!lu_device_hidpp_msg_check_swid (msg, msg_tmp)) {
|
||||||
g_debug ("ignoring reply with SwId 0x%02i, expected 0x%02i",
|
g_debug ("ignoring reply with SwId 0x%02i, expected 0x%02i",
|
||||||
@ -730,7 +730,7 @@ lu_device_set_battery_level (LuDevice *device, guint8 percentage)
|
|||||||
priv->battery_level = percentage;
|
priv->battery_level = percentage;
|
||||||
}
|
}
|
||||||
|
|
||||||
guint8
|
gdouble
|
||||||
lu_device_get_hidpp_version (LuDevice *device)
|
lu_device_get_hidpp_version (LuDevice *device)
|
||||||
{
|
{
|
||||||
LuDevicePrivate *priv = GET_PRIVATE (device);
|
LuDevicePrivate *priv = GET_PRIVATE (device);
|
||||||
@ -738,7 +738,7 @@ lu_device_get_hidpp_version (LuDevice *device)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
lu_device_set_hidpp_version (LuDevice *device, guint8 hidpp_version)
|
lu_device_set_hidpp_version (LuDevice *device, gdouble hidpp_version)
|
||||||
{
|
{
|
||||||
LuDevicePrivate *priv = GET_PRIVATE (device);
|
LuDevicePrivate *priv = GET_PRIVATE (device);
|
||||||
priv->hidpp_version = hidpp_version;
|
priv->hidpp_version = hidpp_version;
|
||||||
|
@ -127,9 +127,9 @@ void lu_device_set_hidpp_id (LuDevice *device,
|
|||||||
guint8 lu_device_get_battery_level (LuDevice *device);
|
guint8 lu_device_get_battery_level (LuDevice *device);
|
||||||
void lu_device_set_battery_level (LuDevice *device,
|
void lu_device_set_battery_level (LuDevice *device,
|
||||||
guint8 percentage);
|
guint8 percentage);
|
||||||
guint8 lu_device_get_hidpp_version (LuDevice *device);
|
gdouble lu_device_get_hidpp_version (LuDevice *device);
|
||||||
void lu_device_set_hidpp_version (LuDevice *device,
|
void lu_device_set_hidpp_version (LuDevice *device,
|
||||||
guint8 hidpp_version);
|
gdouble hidpp_version);
|
||||||
const gchar *lu_device_get_platform_id (LuDevice *device);
|
const gchar *lu_device_get_platform_id (LuDevice *device);
|
||||||
void lu_device_set_platform_id (LuDevice *device,
|
void lu_device_set_platform_id (LuDevice *device,
|
||||||
const gchar *platform_id);
|
const gchar *platform_id);
|
||||||
|
Loading…
Reference in New Issue
Block a user