forked from drath/libratbag
hidpp10: convert fw information fetching into a proper function
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
@@ -533,28 +533,34 @@ hidpp10_get_pairing_information(struct ratbag_device *device, struct hidpp10_dev
|
||||
} \
|
||||
}
|
||||
|
||||
static int
|
||||
hidpp10_get_firmare_information(struct ratbag_device *device, struct hidpp10_device *dev)
|
||||
int
|
||||
hidpp10_get_firmare_information(struct ratbag_device *device, struct hidpp10_device *dev,
|
||||
uint8_t *major_out, uint8_t *minor_out, uint8_t *build_out)
|
||||
{
|
||||
unsigned idx = dev->index;
|
||||
union hidpp10_message firmware_information = CMD_DEVICE_FIRMWARE_INFORMATION(idx, FIRMWARE_INFO_ITEM_FW_NAME_AND_VERSION(1));
|
||||
union hidpp10_message build_information = CMD_DEVICE_FIRMWARE_INFORMATION(idx, FIRMWARE_INFO_ITEM_FW_BUILD_NUMBER(1));
|
||||
int res;
|
||||
uint8_t maj, min, build;
|
||||
|
||||
/*
|
||||
* This may fail on some devices
|
||||
* => we can not retrieve their FW version through HID++ 1.0.
|
||||
*/
|
||||
res = hidpp10_request_command(device, &firmware_information);
|
||||
if (res == 0) {
|
||||
dev->fw_major = firmware_information.msg.string[1];
|
||||
dev->fw_minor = firmware_information.msg.string[2];
|
||||
}
|
||||
if (res)
|
||||
return res;
|
||||
maj = firmware_information.msg.string[1];
|
||||
min = firmware_information.msg.string[2];
|
||||
|
||||
res = hidpp10_request_command(device, &build_information);
|
||||
if (res == 0) {
|
||||
dev->build = hidpp10_get_unaligned_u16(&build_information.msg.string[1]);
|
||||
}
|
||||
if (res)
|
||||
return res;
|
||||
build = hidpp10_get_unaligned_u16(&build_information.msg.string[1]);
|
||||
|
||||
*major_out = maj;
|
||||
*minor_out = min;
|
||||
*build_out = build;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -579,7 +585,7 @@ static int
|
||||
hidpp10_get_device_info(struct ratbag_device *device, struct hidpp10_device *dev)
|
||||
{
|
||||
hidpp10_get_pairing_information(device, dev);
|
||||
hidpp10_get_firmare_information(device, dev);
|
||||
hidpp10_get_firmare_information(device, dev, &dev->fw_major, &dev->fw_minor, &dev->build);
|
||||
|
||||
hidpp10_get_individual_features(device, dev);
|
||||
hidpp10_get_hidpp_notifications(device, dev);
|
||||
|
||||
@@ -71,4 +71,13 @@ int hidpp10_disconnect(struct ratbag_device *device, int idx);
|
||||
void hidpp10_list_devices(struct ratbag_device *device);
|
||||
int hidpp10_get_device_from_wpid(struct ratbag_device *device, uint16_t wpid, struct hidpp10_device *dev);
|
||||
int hidpp10_get_device_from_idx(struct ratbag_device *device, int idx, struct hidpp10_device *dev);
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* 0xF1: Device Firmware Information */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
int
|
||||
hidpp10_get_firmare_information(struct ratbag_device *device,
|
||||
struct hidpp10_device *dev,
|
||||
uint8_t *major, uint8_t *minor, uint8_t *build_number);
|
||||
|
||||
#endif /* HIDPP_10_H */
|
||||
|
||||
Reference in New Issue
Block a user