mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-22 23:04:43 +00:00
HID: uhid: implement SET_REPORT
We so far lacked support for hid_hw_raw_request(..., HID_REQ_SET_REPORT); Add support for it and simply forward the request to user-space. Note that SET_REPORT is synchronous, just like GET_REPORT, even though it does not provide any data back besides an error code. If a transport layer does SET_REPORT asynchronously, they can just ACK it immediately by writing an uhid_set_report_reply to uhid. This patch re-uses the synchronous uhid-report infrastructure to query user-space. Note that this means you cannot run SET_REPORT and GET_REPORT in parallel. However, that has always been a restriction of HID and due to its blocking nature, this is just fine. Maybe some future transport layer supports parallel requests (very unlikely), however, until then lets not over-complicate things and avoid request-lookup-tables. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
7c4003bc36
commit
11c2215530
2 changed files with 162 additions and 75 deletions
|
@ -37,6 +37,8 @@ enum uhid_event_type {
|
|||
UHID_GET_REPORT_REPLY,
|
||||
UHID_CREATE2,
|
||||
UHID_INPUT2,
|
||||
UHID_SET_REPORT,
|
||||
UHID_SET_REPORT_REPLY,
|
||||
};
|
||||
|
||||
struct uhid_create2_req {
|
||||
|
@ -84,6 +86,19 @@ struct uhid_get_report_reply_req {
|
|||
__u8 data[UHID_DATA_MAX];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct uhid_set_report_req {
|
||||
__u32 id;
|
||||
__u8 rnum;
|
||||
__u8 rtype;
|
||||
__u16 size;
|
||||
__u8 data[UHID_DATA_MAX];
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct uhid_set_report_reply_req {
|
||||
__u32 id;
|
||||
__u16 err;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Compat Layer
|
||||
* All these commands and requests are obsolete. You should avoid using them in
|
||||
|
@ -165,6 +180,8 @@ struct uhid_event {
|
|||
struct uhid_get_report_reply_req get_report_reply;
|
||||
struct uhid_create2_req create2;
|
||||
struct uhid_input2_req input2;
|
||||
struct uhid_set_report_req set_report;
|
||||
struct uhid_set_report_reply_req set_report_reply;
|
||||
} u;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue