| Implementation Notes |
| -------------------- |
| 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. |