diff options
author | Joshua Stein <jcs@cvs.openbsd.org> | 2018-08-25 18:32:06 +0000 |
---|---|---|
committer | Joshua Stein <jcs@cvs.openbsd.org> | 2018-08-25 18:32:06 +0000 |
commit | 47c60726dd053b9975b716fb81fc8bad188d773d (patch) | |
tree | f6615395ac19ac26b4c2f15b22ed47df36e84176 /sys/dev/usb/uhidev.c | |
parent | 8e8d3ddd6eed01d510fa63a8757d837a02a56836 (diff) |
Move HID->bus constant conversion for HID report types out of ihidev
into hidmt.
The HID code uses hid_feature, hid_input, and hid_output constants
to refer to report types internally that then need to be converted
to their bus-level counterparts before actually getting sent out (so
hid_feature becomes UHID_FEATURE_REPORT for USB,
I2C_HID_REPORT_TYPE_FEATURE for i2c).
This conversion was hard-coded in ihidev but ihidev_[gs]et_report
should assume the type passed is already an i2c-level define, not a
hid one. This is how uhidev does it.
Add a conversion routine callback that any hidmt callers need to set
so that hidmt can convert hid constants to the bus-level versions.
Also add a similar conversion function to uhidev.
ok deraadt
Diffstat (limited to 'sys/dev/usb/uhidev.c')
-rw-r--r-- | sys/dev/usb/uhidev.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/sys/dev/usb/uhidev.c b/sys/dev/usb/uhidev.c index a61625e64c1..7c02c82f7d5 100644 --- a/sys/dev/usb/uhidev.c +++ b/sys/dev/usb/uhidev.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uhidev.c,v 1.75 2017/04/08 02:57:25 deraadt Exp $ */ +/* $OpenBSD: uhidev.c,v 1.76 2018/08/25 18:32:05 jcs Exp $ */ /* $NetBSD: uhidev.c,v 1.14 2003/03/11 16:44:00 augustss Exp $ */ /* @@ -640,6 +640,21 @@ uhidev_close(struct uhidev *scd) } int +uhidev_report_type_conv(int hid_type_id) +{ + switch (hid_type_id) { + case hid_input: + return UHID_INPUT_REPORT; + case hid_output: + return UHID_OUTPUT_REPORT; + case hid_feature: + return UHID_FEATURE_REPORT; + default: + return -1; + } +} + +int uhidev_set_report(struct uhidev_softc *sc, int type, int id, void *data, int len) { |