1 /+
2 +            Copyright 2022 – 2023 Aya Partridge
3 +          Copyright 2018 - 2022 Michael D. Parker
4 + Distributed under the Boost Software License, Version 1.0.
5 +     (See accompanying file LICENSE_1_0.txt or copy at
6 +           http://www.boost.org/LICENSE_1_0.txt)
7 +/
8 module sdl.hidapi;
9 
10 import bindbc.sdl.config;
11 import bindbc.sdl.codegen;
12 
13 import sdl.stdinc: SDL_bool;
14 
15 static if(sdlSupport >= SDLSupport.v2_0_18){
16 	struct SDL_hid_device;
17 	
18 	struct SDL_hid_device_info{
19 		char* path;
20 		ushort vendor_id;
21 		ushort product_id;
22 		wchar_t* serial_number;
23 		ushort release_number;
24 		wchar_t* manufacturer_string;
25 		wchar_t* product_string;
26 		ushort usage_page;
27 		ushort usage;
28 		int interface_number;
29 		int interface_class;
30 		int interface_subclass;
31 		int interface_protocol;
32 		SDL_hid_device_info* next;
33 	}
34 }
35 
36 mixin(joinFnBinds((){
37 	string[][] ret;
38 	static if(sdlSupport >= SDLSupport.v2_0_18){
39 		ret ~= makeFnBinds([
40 			[q{int}, q{SDL_hid_init}, q{}],
41 			[q{int}, q{SDL_hid_exit}, q{}],
42 			[q{uint}, q{SDL_hid_device_change_count}, q{}],
43 			[q{SDL_hid_device_info*}, q{SDL_hid_enumerate}, q{ushort vendor_id, ushort product_id}],
44 			[q{void}, q{SDL_hid_free_enumeration}, q{SDL_hid_device_info* devs}],
45 			[q{SDL_hid_device*}, q{SDL_hid_open}, q{ushort vendor_id, ushort product_id, const(wchar_t)* serial_number}],
46 			[q{SDL_hid_device*}, q{SDL_hid_open_path}, q{const(char)* path, int bExclusive=false}],
47 			[q{int}, q{SDL_hid_write}, q{SDL_hid_device* dev, const(ubyte*) data, size_t length}],
48 			[q{int}, q{SDL_hid_read_timeout}, q{SDL_hid_device* dev, ubyte* data, size_t length, int milliseconds}],
49 			[q{int}, q{SDL_hid_read}, q{SDL_hid_device* dev, ubyte* data, size_t length}],
50 			[q{int}, q{SDL_hid_set_nonblocking}, q{SDL_hid_device* dev, int nonblock}],
51 			[q{int}, q{SDL_hid_send_feature_report}, q{SDL_hid_device* dev, const(ubyte)* data, size_t length}],
52 			[q{int}, q{SDL_hid_get_feature_report}, q{SDL_hid_device* dev, ubyte* data, size_t length}],
53 			[q{int}, q{SDL_hid_get_manufacturer_string}, q{SDL_hid_device* dev, wchar_t* string_, size_t maxlen}],
54 			[q{int}, q{SDL_hid_get_product_string}, q{SDL_hid_device* dev, wchar_t* string_, size_t maxlen}],
55 			[q{int}, q{SDL_hid_get_serial_number_string}, q{SDL_hid_device* dev, wchar_t* string_, size_t maxlen}],
56 			[q{int}, q{SDL_hid_get_indexed_string}, q{SDL_hid_device* dev, int string_index, wchar_t* string_, size_t maxlen}],
57 			[q{void}, q{SDL_hid_ble_scan}, q{SDL_bool active}],
58 		]);
59 	}
60 	return ret;
61 }()));