NetBSD maps every uhidev
device to one or more uhid
devices. Each uhid
device only supports one report ID.
The parent device uhidev
creates one uhid
device per
report ID found in the hardware's report descriptor.
In the event there are no report ID(s) found within the
report descriptor, only one uhid
device with a report ID
of 0
is created.
In order to remain compatible with existing hidapi
APIs,
all the uhid
devices created by the parent uhidev
device
must be opened under the same hid_device
instance to ensure
that we can route reports to their appropriate uhid
device.
Internally the uhid
driver will insert the report ID as
needed so we must also omit the report ID in any situation
where the hidapi
API expects it to be included in the
report data stream.
Given the design of uhid
, it must be augmented with extra
platform specific APIs to ensure that the exact relationship
between uhidev
devices and uhid
devices can be determined.
The NetBSD implementation does this via the drvctl
kernel
driver. At present there is no known way to do this on OpenBSD
for a uhid
implementation to be at the same level as the
NetBSD one.