File tree 6 files changed +1263
-0
lines changed
6 files changed +1263
-0
lines changed Original file line number Diff line number Diff line change @@ -42,6 +42,9 @@ elseif(NOT WIN32)
42
42
option (HIDAPI_WITH_HIDRAW "Build HIDRAW-based implementation of HIDAPI" ON )
43
43
option (HIDAPI_WITH_LIBUSB "Build LIBUSB-based implementation of HIDAPI" ON )
44
44
endif ()
45
+ if (CMAKE_SYSTEM_NAME MATCHES "NetBSD" )
46
+ option (HIDAPI_WITH_NETBSD "Build NetBSD/UHID implementation of HIDAPI" ON )
47
+ endif ()
45
48
endif ()
46
49
47
50
option (BUILD_SHARED_LIBS "Build shared version of the libraries, otherwise build statically" ON )
Original file line number Diff line number Diff line change
1
+ cmake_minimum_required (VERSION 3.6.3 FATAL_ERROR)
2
+
3
+ add_library (hidapi_netbsd
4
+ ${HIDAPI_PUBLIC_HEADERS}
5
+ hid.c
6
+ )
7
+ target_link_libraries (hidapi_netbsd PUBLIC hidapi_include)
8
+
9
+ find_package (Threads REQUIRED)
10
+
11
+ target_link_libraries (hidapi_netbsd PRIVATE Threads::Threads)
12
+
13
+ set_target_properties (hidapi_netbsd
14
+ PROPERTIES
15
+ EXPORT_NAME "netbsd"
16
+ OUTPUT_NAME "hidapi-netbsd"
17
+ VERSION ${PROJECT_VERSION}
18
+ SOVERSION ${PROJECT_VERSION_MAJOR}
19
+ PUBLIC_HEADER "${HIDAPI_PUBLIC_HEADERS} "
20
+ )
21
+
22
+ # compatibility with find_package()
23
+ add_library (hidapi::netbsd ALIAS hidapi_netbsd)
24
+ # compatibility with raw library link
25
+ add_library (hidapi-netbsd ALIAS hidapi_netbsd)
26
+
27
+ if (HIDAPI_INSTALL_TARGETS)
28
+ install (TARGETS hidapi_netbsd EXPORT hidapi
29
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR} "
30
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR} "
31
+ PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR} /hidapi"
32
+ )
33
+ endif ()
34
+
35
+ hidapi_configure_pc("${PROJECT_ROOT} /pc/hidapi-netbsd.pc.in" )
Original file line number Diff line number Diff line change
1
+ Implementation Notes
2
+ --------------------
3
+ NetBSD maps every ` uhidev ` device to one or more ` uhid `
4
+ devices. Each ` uhid ` device only supports one report ID.
5
+ The parent device ` uhidev ` creates one ` uhid ` device per
6
+ report ID found in the hardware's report descriptor.
7
+
8
+ In the event there are no report ID(s) found within the
9
+ report descriptor, only one ` uhid ` device with a report ID
10
+ of ` 0 ` is created.
11
+
12
+ In order to remain compatible with existing ` hidapi ` APIs,
13
+ all the ` uhid ` devices created by the parent ` uhidev ` device
14
+ must be opened under the same ` hid_device ` instance to ensure
15
+ that we can route reports to their appropriate ` uhid ` device.
16
+
17
+ Internally the ` uhid ` driver will insert the report ID as
18
+ needed so we must also omit the report ID in any situation
19
+ where the ` hidapi ` API expects it to be included in the
20
+ report data stream.
21
+
22
+ Given the design of ` uhid ` , it must be augmented with extra
23
+ platform specific APIs to ensure that the exact relationship
24
+ between ` uhidev ` devices and ` uhid ` devices can be determined.
25
+
26
+ The NetBSD implementation does this via the ` drvctl ` kernel
27
+ driver. At present there is no known way to do this on OpenBSD
28
+ for a ` uhid ` implementation to be at the same level as the
29
+ NetBSD one.
You can’t perform that action at this time.
0 commit comments