diff --git a/src/libratbag-hidraw.c b/src/libratbag-hidraw.c index 0c32bee2..8e38fb8f 100644 --- a/src/libratbag-hidraw.c +++ b/src/libratbag-hidraw.c @@ -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); } diff --git a/src/libratbag-hidraw.h b/src/libratbag-hidraw.h index a8ffa736..15bf5583 100644 --- a/src/libratbag-hidraw.h +++ b/src/libratbag-hidraw.h @@ -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 */