Commit Graph

120 Commits

Author SHA1 Message Date
Dimitriy Ryazantcev
bd6be4d83b
windows: try to get USB device serial number if not provided by HidD_GetSerialNumberString (#464)
This is efficient for Xbox Common Controller class (XUSB) devices like Xbox 360 or Xbox One controllers that are missing serial number via usual HID API.
2023-03-14 00:50:57 +02:00
Ihor Dutchak
fc3eed3845
windows: Have a separate definition flag for export (#515)
On some compilers an empty definition (e.g. -DHID_API_EXPORT)
means the same as `=1` (i.e. -DHID_API_EXPORT=1), but the HID_API_EXPORT macro should be
empty in static library build case.

Having a separate compiler definition flag solves that issue.
2023-03-13 12:11:37 +02:00
Dimitriy Ryazantcev
e6caff3db3
windows: Get Bluetooth device Model Number String instead of Device Name into product string (#500)
Use `Device Name` only if `Model Number String` is not available. This should better match what we have in  `USB_DEVICE_DESCRIPTOR.iProduct`

See [Bluetooth Device Information Service](https://www.bluetooth.com/specifications/specs/device-information-service-1-1/) spec for more info.
2023-03-12 22:29:34 +02:00
Ihor Dutchak
26b5bb0ccf
RFC: add hid_get_report_descriptor API function (#451)
- native implementations for hidraw/libusb/macOS;
- HID Report Descriptor reconstruction from HIDP_PREPARSED_DATA on Windows;
- unit-tests for some known devices for `hid_winapi_descriptor_reconstruct_pp_data`;
- support for ASAN builds (mainly to check the `hid_winapi_descriptor_reconstruct_pp_data`/its unit-tests;
2023-03-12 14:45:30 +02:00
Ihor Dutchak
438d06568d
windows: don't mark with dllexport in static build (#507)
Don't mark API functions with __declspec(dllexport) when building a static library on Windows.
Enforced by CMake builds.
For other builds a compile definition is available.

Related: #480
2023-02-22 02:05:47 +02:00
Dimitriy Ryazantcev
0f2cf886e5
RFC: Add HID bus type in hid_device_info (#308) 2022-09-10 19:18:09 +03:00
Julian Waller
5c9f147a07
Add hid_get_device_info (#432)
- new API function: `struct hid_device_info * hid_get_device_info(hid_device *dev);` to get `hid_device_info` after the device already opened;
- reused existing implementation on Windows and macOS from enumeration routines to have the implementation;
- refactored libusb implementation to have a shared routine for `hid_enumerate` and `hid_get_device_info`;
- refactored hidraw implementation to have a shared routine for `hid_enumerate` and `hid_get_device_info`;

Resolves: #431
Closes: #164
Closes: #163
2022-08-13 19:01:57 +03:00
Ihor Dutchak
eaa5c7c6f1
hid_error improvements (#428)
- make the behaviour of methods which set hid_error more consistent;
- make the documentation and the implementation of hid_error consistent and safe;
- windows: add global error implementation;

Co-authored-by: Julian Waller <git@julusian.co.uk>
2022-06-22 01:34:39 +03:00
MeeSong
844e4682a9
Fix: memory write out of bounds. (#418) 2022-05-25 15:49:47 +03:00
Ihor Dutchak
93285f5246
windows: Add .rc (#415)
- Add resource file for DLL;
2022-05-11 17:47:38 +03:00
Ihor Dutchak
52fa87300b
Windows build artifacts with Github Actions (#414)
- a straight-forward build matrix for Appveyor;
- MSBuild builds with Github Actions;
- Visual Studio 2022 support for `.sln` (toolset v143);
- gather Windows build artifacts with Github actions;
2022-05-08 19:59:39 +03:00
Ihor Dutchak
c95795ab5c Fix hidtest build
- fix including platform-specific includes when HIDAPI is a CMake subdirectory;
- check libusb and winapi platform-specific headers with hidtest;
2022-05-05 14:53:17 +03:00
Ihor Dutchak
52c728acf4 Use propper type for mach_port_t default param
- enable compilation warnings as errors for CI to catch such issues in the future;
- fix Mingw strict compilation warnings;
2022-05-05 14:53:17 +03:00
Jacob Shaffer
08563a0249
add better windows error handling (#388) 2022-05-02 14:08:44 +03:00
Ihor Dutchak
bca404520f
Fire v0.12.0 (#398)
- add convenient macros to check HIDAPI version in runtime;
- mark in which version all recent HIAPI API functions where added;
2022-04-23 15:50:41 +03:00
Ihor Dutchak
75aafc3ac9 CI: check for new headers installation 2022-02-25 11:45:27 +02:00
Frederik Seiffert
2cfd63ac41
windows: Add Windows-specific API to get device container ID (#379) 2022-02-25 10:53:00 +02:00
Dimitriy Ryazantcev
c84e42ad91
Extract CM_Get_DevNode_PropertyW() and CM_Get_Device_Interface_PropertyW() calls to separate functions (#372) 2022-02-05 17:03:42 +02:00
Ihor Dutchak
2551a5d84b Reorganize Windows source structure
- separate HID declarations for non-DDK build into re-usable headers;
- refactor initialisation/deinitialisation of HIDAPI;
- make all the comments consistent (C-style only);
2022-01-29 18:33:15 +02:00
Ihor Dutchak
6f37897bef Remove stale Windows/macOS example/test 2022-01-29 18:33:15 +02:00
Ihor Dutchak
69dcdc1ff0 Update copyright strings 2022-01-29 18:33:15 +02:00
Megamouse
5f66a371ca
Win32: Don't pass invalid pointers to HidD_FreePreparsedData in hid_open_path (#373)
Fixes a segfault that happens when hid_open_path is called on a previously disconnected device.
This is a regression caused by:
b600727 - Win32: Fix memory leak in `free_hid_device` (#361)

Co-authored-by: Megamouse <studienricky89@googlemail.de>
2022-01-29 18:32:25 +02:00
Dimitriy Ryazantcev
fe9a2a2e28
Ported code from SetupApi to CfgMgr32 (#362)
- https://docs.microsoft.com/windows-hardware/drivers/install/porting-from-setupapi-to-cfgmgr32
-  Use Unicode Windows API internally where possible.
2022-01-21 18:43:08 +02:00
Dimitriy Ryazantcev
af6c6012b6
Parse USB interface number from device Hardware IDs (#360)
Strickly speaking we cannot parse interface string at all and only allowed to parse Hardware ID string.
2021-12-23 00:01:41 +02:00
Dimitriy Ryazantcev
b600727200
Win32: Fix memory leak in free_hid_device (#361)
- Fix memory leak in `free_hid_device`;
- Simpllify `hid_open_path` code;
2021-12-22 23:59:56 +02:00
selsta
eb26015189
windows: add missing include for mingw32 (#348) 2021-11-11 01:00:25 +02:00
Ihor Dutchak
b923aeda68 Windows: hid_get_feature/input_report return size fix (#334)
- It appears when the numbered reports aren't used,
WinAPI returns size of the report excluding the data[0] which contains 0,
as an indication that numbered reports aren't used;
Explicity count that byte in the result.

Fixes: #328
2021-09-27 13:07:02 +03:00
Ihor Dutchak
d4888c5f65
Remove DDK support files. (#333)
Deleted DDK build scripts, support files and documentation for it,
as it wasn't working of-the-box with recent tool-sets from MS anyway.

Still keeping `HIDAPI_USE_DDK` macro in the code,
as it still _can_ be used if the build configuration is setup properly.

Resolves: #49
2021-09-22 13:30:23 +03:00
Ihor Dutchak
e050afb197
Fix sygwin compilation warnings (#331)
Fixes: #330
2021-09-18 18:31:26 +03:00
Dimitriy Ryazantcev
11cc0e8a86
Fetch Bluetooth LE HID device info from Windows devnode properties (#309)
As per MS, HidD_GetProductString/HidD_GetManufacturerString/HidD_GetSerialNumberString [doesn't work](https://docs.microsoft.com/en-us/answers/questions/401236/hidd-getproductstring-with-ble-hid-device.html) with Bluetooth LE (BLE) devices.

Add special handling for BLE devices and fill `manufacturer_string`/`product_string`/`serial_number` using BLE-specific API.

Fixes: #282
2021-09-06 19:16:15 +03:00
mcuee
8741697359
Update hid.c to fix MSYS2 MinGW-w64 compiler warning (#311)
This fixed a compiler warning when using MSYS2 MinGW-w64 compiler as mentioned in issue #289.

Since we changed strncpy to memcpy, it is not necessary to disable warning 4996 for MSVC.
2021-07-27 13:02:57 +03:00
Dimitriy Ryazantcev
2a24bf9fcb
windows: cleanup code a bit (#305) 2021-07-16 19:11:58 +03:00
Dimitriy Ryazantcev
9404a954af
Whitespace cleanup in windows implementation (#302) 2021-07-09 17:32:43 +03:00
Dimitriy Ryazantcev
5a88dcd7ab Fix possible garbage in device strings returned from hid_enumerate()
In some cases HidD_GetSerialNumberString/HidD_GetManufacturerString/HidD_GetProductString can fail.
For example if we have Bluetooth LE gamepad on Windows.
In this case we are currently returning not initialized strings in `hid_device_info`.
2021-07-08 14:39:54 +03:00
Ihor Dutchak
f2bb972e7f add CMake build system 2021-07-03 20:38:58 +03:00
Ihor Dutchak
6fcb0bb228
win: hid_get_feature_report: Correct number of bytes_returned (#286)
This originally tested/confirmed by @mcuee.
Confirmed the expected behavior by Tim Roberts https://sourceforge.net/p/libusb/mailman/message/37303650/.
Relates to: #232.
2021-06-19 07:23:35 +03:00
JoergAtGithub
e74189d867
win: hid_get_input_report: Correct number of bytes_returned (#232)
Fixes: #229

This originally tested/confirmed by @JoergAtGithub and @mcuee.
And confirmed the expected behavior by Tim Roberts https://sourceforge.net/p/libusb/mailman/message/37303650/.
2021-06-19 06:09:47 +03:00
Erik OShaughnessy
7620bc7faa
Guard against zero length buffers in hid_write (#279) 2021-06-14 04:09:13 +03:00
jeremyouellet
b8837014ef
Use Conditional PlatformToolset projects for VS (#261) 2021-05-05 11:48:34 +03:00
Ihor Dutchak
0ea5e9502f windows: cache write buffer allocated for small user buffers 2021-03-07 13:58:57 +02:00
Mariusz Jaskółka
3cd1742737
Windows: Fix devices enumeration (#235)
Based on
d40232638f/hid/hclient/pnp.c (L32)

Fixes wrong detection of the class of devices.

Fixes: #234
2021-01-30 15:20:01 +02:00
Mornix
fb4135c7a8
Windows: ensure buffer passed to HidD_SetFeature is large enough (#224) 2020-12-24 08:13:54 +02:00
Pavol Rusnak
fe724003c6 windows: make hid.c non-executable 2020-12-11 21:01:19 +02:00
Russell Taylor
9828cad691
Windows: fix strict typecast (#206) 2020-11-23 21:12:26 +02:00
Ihor Dutchak
2eb8af161f
MSVC: fix /W4 /WX compilation (#191) 2020-10-14 18:42:27 +03:00
Ihor Dutchak
8f72236099
add hid_version/hid_version_str API (#192)
- API functions to get runtime version of the library;
- macros to get static/compile-time version of the library;
- VERSION file;
2020-10-14 18:41:08 +03:00
Kevin Teynor
b1a2628eea
Windows: crash bugfix when trying to open device without a serial number (#194) 2020-10-14 18:36:12 +03:00
UweBonnes
8a88108a49
windows/hid.c: Silence some warnings. (#181) 2020-09-27 18:22:45 +03:00
Cristian GLAVANA
f7c7f97d09
Windows Handle GetOverlappedResult blocking on read/write (#129)
- Implemented solution from issue signal11/hidapi#88
- Allows read/write frames up to 1000 per second
2020-09-22 15:21:16 +03:00
Stanley Pinchak
ad27b46170 FIX Compiler Warnings on Windows
- cast hidapi supplied size_t parameters to DWORD when calling Windows
  API functions
- cast size_t return variables in `hid_read_timeout` and
  `hid_send_feature_report` to int in order to match hidapi signature.
2020-08-13 19:12:07 +03:00