hidraw: Implement ratbag_hidraw_read_input_report and ratbag_hidraw_output_report

Logitech devices are using raw input/output reports, so we need this.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
This commit is contained in:
Benjamin Tissoires
2015-08-20 10:45:40 -04:00
parent 01738398a5
commit 51f939d29f
2 changed files with 31 additions and 1 deletions

View File

@@ -129,8 +129,27 @@ ratbag_hidraw_raw_request(struct ratbag_device *ratbag, unsigned char reportnum,
int
ratbag_hidraw_output_report(struct ratbag_device *ratbag, uint8_t *buf, size_t len)
{
int rc;
if (len < 1 || len > HID_MAX_BUFFER_SIZE || !buf || ratbag->hidraw_fd < 0)
return -EINVAL;
return -ENOTSUP;
rc = write(ratbag->hidraw_fd, buf, len);
if (rc < 0)
return rc;
if (rc != (int)len)
return -EIO;
return 0;
}
int
ratbag_hidraw_read_input_report(struct ratbag_device *ratbag, uint8_t *buf, size_t len)
{
if (len < 1 || !buf || ratbag->hidraw_fd < 0)
return -EINVAL;
return read(ratbag->hidraw_fd, buf, len);
}

View File

@@ -65,4 +65,15 @@ int ratbag_hidraw_raw_request(struct ratbag_device *ratbag, unsigned char report
*/
int ratbag_hidraw_output_report(struct ratbag_device *ratbag, uint8_t *buf, size_t len);
/**
* ratbag_hidraw_read_input_report - read an input report from the device
*
* @hdev: hid device
* @buf: resulting raw data
* @len: length of buf
*
* @return: count of data transfered, negative if error
*/
int ratbag_hidraw_read_input_report(struct ratbag_device *ratbag, uint8_t *buf, size_t len);
#endif /* LIBRATBAG_HIDRAW_H */