Build hidapi code into SDL as a new public API

This prevents conflicts with hidapi linked with applications, as well as allowing applications to make use of HIDAPI on Android and other platforms that might not normally have an implementation available.
This commit is contained in:
Sam Lantinga 2021-11-07 22:58:44 -08:00
parent 94c1276a5f
commit 5b646cd19e
35 changed files with 798 additions and 633 deletions

View File

@ -31,6 +31,8 @@ LOCAL_SRC_FILES := \
$(wildcard $(LOCAL_PATH)/src/file/*.c) \ $(wildcard $(LOCAL_PATH)/src/file/*.c) \
$(wildcard $(LOCAL_PATH)/src/haptic/*.c) \ $(wildcard $(LOCAL_PATH)/src/haptic/*.c) \
$(wildcard $(LOCAL_PATH)/src/haptic/android/*.c) \ $(wildcard $(LOCAL_PATH)/src/haptic/android/*.c) \
$(wildcard $(LOCAL_PATH)/src/hidapi/*.c) \
$(wildcard $(LOCAL_PATH)/src/hidapi/android/*.cpp) \
$(wildcard $(LOCAL_PATH)/src/joystick/*.c) \ $(wildcard $(LOCAL_PATH)/src/joystick/*.c) \
$(wildcard $(LOCAL_PATH)/src/joystick/android/*.c) \ $(wildcard $(LOCAL_PATH)/src/joystick/android/*.c) \
$(wildcard $(LOCAL_PATH)/src/joystick/hidapi/*.c) \ $(wildcard $(LOCAL_PATH)/src/joystick/hidapi/*.c) \
@ -57,8 +59,6 @@ LOCAL_SRC_FILES := \
$(wildcard $(LOCAL_PATH)/src/video/yuv2rgb/*.c) \ $(wildcard $(LOCAL_PATH)/src/video/yuv2rgb/*.c) \
$(wildcard $(LOCAL_PATH)/src/test/*.c)) $(wildcard $(LOCAL_PATH)/src/test/*.c))
LOCAL_SHARED_LIBRARIES := hidapi
LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES
LOCAL_CFLAGS += \ LOCAL_CFLAGS += \
-Wall -Wextra \ -Wall -Wextra \
@ -121,22 +121,4 @@ LOCAL_MODULE_FILENAME := libSDL2main
include $(BUILD_STATIC_LIBRARY) include $(BUILD_STATIC_LIBRARY)
###########################
#
# hidapi library
#
###########################
include $(CLEAR_VARS)
LOCAL_CPPFLAGS += -std=c++11
LOCAL_SRC_FILES := src/hidapi/android/hid.cpp
LOCAL_MODULE := libhidapi
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/cpufeatures) $(call import-module,android/cpufeatures)

View File

@ -47,7 +47,7 @@ SRCS+= SDL_audio.c SDL_audiocvt.c SDL_audiodev.c SDL_audiotypecvt.c SDL_mixer.c
SRCS+= SDL_events.c SDL_quit.c SDL_keyboard.c SDL_mouse.c SDL_windowevents.c & SRCS+= SDL_events.c SDL_quit.c SDL_keyboard.c SDL_mouse.c SDL_windowevents.c &
SDL_clipboardevents.c SDL_dropevents.c SDL_displayevents.c SDL_gesture.c & SDL_clipboardevents.c SDL_dropevents.c SDL_displayevents.c SDL_gesture.c &
SDL_sensor.c SDL_touch.c SDL_sensor.c SDL_touch.c
SRCS+= SDL_haptic.c SDL_gamecontroller.c SDL_joystick.c SRCS+= SDL_haptic.c SDL_hidapi.c SDL_gamecontroller.c SDL_joystick.c
SRCS+= SDL_render.c yuv_rgb.c SDL_yuv.c SDL_yuv_sw.c SDL_blendfillrect.c & SRCS+= SDL_render.c yuv_rgb.c SDL_yuv.c SDL_yuv_sw.c SDL_blendfillrect.c &
SDL_blendline.c SDL_blendpoint.c SDL_drawline.c SDL_drawpoint.c & SDL_blendline.c SDL_blendpoint.c SDL_drawline.c SDL_drawpoint.c &
SDL_render_sw.c SDL_rotate.c SDL_triangle.c SDL_render_sw.c SDL_rotate.c SDL_triangle.c
@ -83,7 +83,7 @@ MOBJS= $(MSRCS:.c=.obj)
.extensions: .extensions:
.extensions: .lib .dll .obj .c .asm .extensions: .lib .dll .obj .c .asm
.c: ./src;./src/dynapi;./src/audio;./src/cpuinfo;./src/events;./src/file;./src/haptic;./src/joystick;./src/power;./src/render;./src/render/software;./src/sensor;./src/stdlib;./src/thread;./src/timer;./src/video;./src/video/yuv2rgb;./src/atomic;./src/audio/disk; .c: ./src;./src/dynapi;./src/audio;./src/cpuinfo;./src/events;./src/file;./src/haptic;./src/hidapi;./src/joystick;./src/power;./src/render;./src/render/software;./src/sensor;./src/stdlib;./src/thread;./src/timer;./src/video;./src/video/yuv2rgb;./src/atomic;./src/audio/disk;
.c: ./src/haptic/dummy;./src/joystick/dummy;./src/joystick/virtual;./src/audio/dummy;./src/video/dummy;./src/sensor/dummy; .c: ./src/haptic/dummy;./src/joystick/dummy;./src/joystick/virtual;./src/audio/dummy;./src/video/dummy;./src/sensor/dummy;
.c: ./src/core/os2;./src/core/os2/geniconv;./src/audio/os2;./src/loadso/os2;./src/filesystem/os2;./src/joystick/os2;./src/thread/os2;./src/timer/os2;./src/video/os2; .c: ./src/core/os2;./src/core/os2/geniconv;./src/audio/os2;./src/loadso/os2;./src/filesystem/os2;./src/joystick/os2;./src/thread/os2;./src/timer/os2;./src/video/os2;
.c: ./src/locale/;./src/locale/unix;./src/misc;./src/misc/dummy;./src/joystick/hidapi;./src/hidapi .c: ./src/locale/;./src/locale/unix;./src/misc;./src/misc/dummy;./src/joystick/hidapi;./src/hidapi

View File

@ -47,6 +47,7 @@
<ClInclude Include="..\include\SDL_filesystem.h" /> <ClInclude Include="..\include\SDL_filesystem.h" />
<ClInclude Include="..\include\SDL_haptic.h" /> <ClInclude Include="..\include\SDL_haptic.h" />
<ClInclude Include="..\include\SDL_hints.h" /> <ClInclude Include="..\include\SDL_hints.h" />
<ClInclude Include="..\include\SDL_hidapi.h" />
<ClInclude Include="..\include\SDL_input.h" /> <ClInclude Include="..\include\SDL_input.h" />
<ClInclude Include="..\include\SDL_joystick.h" /> <ClInclude Include="..\include\SDL_joystick.h" />
<ClInclude Include="..\include\SDL_keyboard.h" /> <ClInclude Include="..\include\SDL_keyboard.h" />
@ -113,6 +114,7 @@
<ClInclude Include="..\src\haptic\windows\SDL_dinputhaptic_c.h" /> <ClInclude Include="..\src\haptic\windows\SDL_dinputhaptic_c.h" />
<ClInclude Include="..\src\haptic\windows\SDL_windowshaptic_c.h" /> <ClInclude Include="..\src\haptic\windows\SDL_windowshaptic_c.h" />
<ClInclude Include="..\src\haptic\windows\SDL_xinputhaptic_c.h" /> <ClInclude Include="..\src\haptic\windows\SDL_xinputhaptic_c.h" />
<ClInclude Include="..\src\hidapi\SDL_hidapi.c" />
<ClInclude Include="..\src\joystick\SDL_gamecontrollerdb.h" /> <ClInclude Include="..\src\joystick\SDL_gamecontrollerdb.h" />
<ClInclude Include="..\src\joystick\SDL_joystick_c.h" /> <ClInclude Include="..\src\joystick\SDL_joystick_c.h" />
<ClInclude Include="..\src\joystick\SDL_sysjoystick.h" /> <ClInclude Include="..\src\joystick\SDL_sysjoystick.h" />

View File

@ -69,6 +69,9 @@
<ClInclude Include="..\include\SDL_hints.h"> <ClInclude Include="..\include\SDL_hints.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\include\SDL_hidapi.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\include\SDL_input.h"> <ClInclude Include="..\include\SDL_input.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
@ -539,6 +542,9 @@
<ClCompile Include="..\src\haptic\SDL_haptic.c"> <ClCompile Include="..\src\haptic\SDL_haptic.c">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\src\hidapi\SDL_hidapi.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\joystick\dummy\SDL_sysjoystick.c"> <ClCompile Include="..\src\joystick\dummy\SDL_sysjoystick.c">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>

View File

@ -236,6 +236,7 @@
<ClInclude Include="..\..\include\SDL_gesture.h" /> <ClInclude Include="..\..\include\SDL_gesture.h" />
<ClInclude Include="..\..\include\SDL_haptic.h" /> <ClInclude Include="..\..\include\SDL_haptic.h" />
<ClInclude Include="..\..\include\SDL_hints.h" /> <ClInclude Include="..\..\include\SDL_hints.h" />
<ClInclude Include="..\..\include\SDL_hidapi.h" />
<ClInclude Include="..\..\include\SDL_joystick.h" /> <ClInclude Include="..\..\include\SDL_joystick.h" />
<ClInclude Include="..\..\include\SDL_keyboard.h" /> <ClInclude Include="..\..\include\SDL_keyboard.h" />
<ClInclude Include="..\..\include\SDL_keycode.h" /> <ClInclude Include="..\..\include\SDL_keycode.h" />
@ -327,7 +328,7 @@
<ClInclude Include="..\..\src\haptic\windows\SDL_windowshaptic_c.h" /> <ClInclude Include="..\..\src\haptic\windows\SDL_windowshaptic_c.h" />
<ClInclude Include="..\..\src\haptic\windows\SDL_xinputhaptic_c.h" /> <ClInclude Include="..\..\src\haptic\windows\SDL_xinputhaptic_c.h" />
<ClInclude Include="..\..\src\hidapi\hidapi\hidapi.h" /> <ClInclude Include="..\..\src\hidapi\hidapi\hidapi.h" />
<ClInclude Include="..\..\src\hidapi\SDL_hidapi.h" /> <ClInclude Include="..\..\src\hidapi\SDL_hidapi_c.h" />
<ClInclude Include="..\..\src\joystick\controller_type.h" /> <ClInclude Include="..\..\src\joystick\controller_type.h" />
<ClInclude Include="..\..\src\joystick\hidapi\SDL_hidapijoystick_c.h" /> <ClInclude Include="..\..\src\joystick\hidapi\SDL_hidapijoystick_c.h" />
<ClInclude Include="..\..\src\joystick\hidapi\SDL_hidapi_rumble.h" /> <ClInclude Include="..\..\src\joystick\hidapi\SDL_hidapi_rumble.h" />

View File

@ -237,6 +237,9 @@
<ClInclude Include="..\..\include\SDL_hints.h"> <ClInclude Include="..\..\include\SDL_hints.h">
<Filter>API Headers</Filter> <Filter>API Headers</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\include\SDL_hidapi.h">
<Filter>API Headers</Filter>
</ClInclude>
<ClInclude Include="..\..\include\SDL_joystick.h"> <ClInclude Include="..\..\include\SDL_joystick.h">
<Filter>API Headers</Filter> <Filter>API Headers</Filter>
</ClInclude> </ClInclude>

View File

@ -881,8 +881,6 @@
A75FDAF923E35ED500529352 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */; }; A75FDAF923E35ED500529352 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */; };
A75FDAFA23E35ED600529352 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */; }; A75FDAFA23E35ED600529352 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */; };
A75FDAFB23E35ED700529352 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */; }; A75FDAFB23E35ED700529352 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */; };
A75FDB5323E39D1C00529352 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
A75FDB5523E39DAC00529352 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAC323E28BA700529352 /* CoreBluetooth.framework */; };
A75FDB5823E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; }; A75FDB5823E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
A75FDB5923E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; }; A75FDB5923E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
A75FDB5A23E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; }; A75FDB5A23E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
@ -892,33 +890,6 @@
A75FDB5E23E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; }; A75FDB5E23E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
A75FDB5F23E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; }; A75FDB5F23E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
A75FDB6023E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; }; A75FDB6023E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
A75FDB6123E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; settings = {ATTRIBUTES = (Public, ); }; };
A75FDB6423E3A2C900529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; settings = {ATTRIBUTES = (Public, ); }; };
A75FDB6623E3A2C900529352 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
A75FDB6823E3A2C900529352 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAC323E28BA700529352 /* CoreBluetooth.framework */; };
A75FDB8223E4C74400529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; settings = {ATTRIBUTES = (Public, ); }; };
A75FDB9323E4C8DB00529352 /* hid.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDB9223E4C8DB00529352 /* hid.c */; };
A75FDB9423E4C91300529352 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; };
A75FDB9523E4C93600529352 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00D0D08310675DD9004B05EF /* CoreFoundation.framework */; };
A75FDB9A23E4CAEF00529352 /* hidapi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDB8C23E4C74400529352 /* hidapi.framework */; };
A75FDB9B23E4CAEF00529352 /* hidapi.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDB8C23E4C74400529352 /* hidapi.framework */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
A75FDB9D23E4CAFA00529352 /* hidapi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDB4923E399AC00529352 /* hidapi.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
A75FDBA023E4CAFF00529352 /* hidapi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDB6E23E3A2C900529352 /* hidapi.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
A75FDBA823E4CB7000529352 /* LICENSE-bsd.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */; };
A75FDBA923E4CB7000529352 /* LICENSE-bsd.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */; };
A75FDBAA23E4CB7000529352 /* LICENSE-bsd.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */; };
A75FDBAB23E4CB7000529352 /* AUTHORS.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA423E4CB6F00529352 /* AUTHORS.txt */; };
A75FDBAC23E4CB7000529352 /* AUTHORS.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA423E4CB6F00529352 /* AUTHORS.txt */; };
A75FDBAD23E4CB7000529352 /* AUTHORS.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA423E4CB6F00529352 /* AUTHORS.txt */; };
A75FDBAE23E4CB7000529352 /* LICENSE-orig.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA523E4CB6F00529352 /* LICENSE-orig.txt */; };
A75FDBAF23E4CB7000529352 /* LICENSE-orig.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA523E4CB6F00529352 /* LICENSE-orig.txt */; };
A75FDBB023E4CB7000529352 /* LICENSE-orig.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA523E4CB6F00529352 /* LICENSE-orig.txt */; };
A75FDBB123E4CB7000529352 /* LICENSE-gpl3.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA623E4CB6F00529352 /* LICENSE-gpl3.txt */; };
A75FDBB223E4CB7000529352 /* LICENSE-gpl3.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA623E4CB6F00529352 /* LICENSE-gpl3.txt */; };
A75FDBB323E4CB7000529352 /* LICENSE-gpl3.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA623E4CB6F00529352 /* LICENSE-gpl3.txt */; };
A75FDBB423E4CB7000529352 /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA723E4CB6F00529352 /* LICENSE.txt */; };
A75FDBB523E4CB7000529352 /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA723E4CB6F00529352 /* LICENSE.txt */; };
A75FDBB623E4CB7000529352 /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA723E4CB6F00529352 /* LICENSE.txt */; };
A75FDBB723E4CBC700529352 /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 00794D3F09D0C461003FC8A1 /* License.txt */; }; A75FDBB723E4CBC700529352 /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 00794D3F09D0C461003FC8A1 /* License.txt */; };
A75FDBB823E4CBC700529352 /* ReadMe.txt in Resources */ = {isa = PBXBuildFile; fileRef = F59C710300D5CB5801000001 /* ReadMe.txt */; }; A75FDBB823E4CBC700529352 /* ReadMe.txt in Resources */ = {isa = PBXBuildFile; fileRef = F59C710300D5CB5801000001 /* ReadMe.txt */; };
A75FDBB923E4CBC700529352 /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 00794D3F09D0C461003FC8A1 /* License.txt */; }; A75FDBB923E4CBC700529352 /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 00794D3F09D0C461003FC8A1 /* License.txt */; };
@ -3397,7 +3368,6 @@
F3631C652488534E004F28EA /* SDL_locale.h in Headers */ = {isa = PBXBuildFile; fileRef = 566E26792462701100718109 /* SDL_locale.h */; settings = {ATTRIBUTES = (Public, ); }; }; F3631C652488534E004F28EA /* SDL_locale.h in Headers */ = {isa = PBXBuildFile; fileRef = 566E26792462701100718109 /* SDL_locale.h */; settings = {ATTRIBUTES = (Public, ); }; };
F376F6192559B29300CFC0BC /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6182559B29300CFC0BC /* OpenGLES.framework */; platformFilter = ios; }; F376F6192559B29300CFC0BC /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6182559B29300CFC0BC /* OpenGLES.framework */; platformFilter = ios; };
F376F61B2559B2AF00CFC0BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F61A2559B2AF00CFC0BC /* UIKit.framework */; }; F376F61B2559B2AF00CFC0BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F61A2559B2AF00CFC0BC /* UIKit.framework */; };
F376F6262559B30000CFC0BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F61A2559B2AF00CFC0BC /* UIKit.framework */; };
F376F6322559B31D00CFC0BC /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6312559B31D00CFC0BC /* GameController.framework */; }; F376F6322559B31D00CFC0BC /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6312559B31D00CFC0BC /* GameController.framework */; };
F376F6332559B33D00CFC0BC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E931D8B69C300B177DD /* AudioToolbox.framework */; }; F376F6332559B33D00CFC0BC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E931D8B69C300B177DD /* AudioToolbox.framework */; };
F376F63E2559B35200CFC0BC /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDABF23E28B8000529352 /* CoreMotion.framework */; }; F376F63E2559B35200CFC0BC /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDABF23E28B8000529352 /* CoreMotion.framework */; };
@ -3406,17 +3376,14 @@
F376F6552559B4E300CFC0BC /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; }; F376F6552559B4E300CFC0BC /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; };
F376F6762559B4E500CFC0BC /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; }; F376F6762559B4E500CFC0BC /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; };
F376F68D2559B4E900CFC0BC /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; }; F376F68D2559B4E900CFC0BC /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; };
F376F6CD2559B54500CFC0BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6CC2559B54500CFC0BC /* UIKit.framework */; };
F376F6D92559B59600CFC0BC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6D82559B59600CFC0BC /* AudioToolbox.framework */; }; F376F6D92559B59600CFC0BC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6D82559B59600CFC0BC /* AudioToolbox.framework */; };
F376F6DB2559B5A000CFC0BC /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DA2559B5A000CFC0BC /* AVFoundation.framework */; }; F376F6DB2559B5A000CFC0BC /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DA2559B5A000CFC0BC /* AVFoundation.framework */; };
F376F6DD2559B5A900CFC0BC /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DC2559B5A900CFC0BC /* OpenGLES.framework */; }; F376F6DD2559B5A900CFC0BC /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DC2559B5A900CFC0BC /* OpenGLES.framework */; };
F376F6DF2559B5BA00CFC0BC /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DE2559B5BA00CFC0BC /* GameController.framework */; }; F376F6DF2559B5BA00CFC0BC /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DE2559B5BA00CFC0BC /* GameController.framework */; };
F376F6EC2559B5DA00CFC0BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6CC2559B54500CFC0BC /* UIKit.framework */; }; F376F6EC2559B5DA00CFC0BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6CC2559B54500CFC0BC /* UIKit.framework */; };
F376F6F82559B5EC00CFC0BC /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6F72559B5EC00CFC0BC /* CoreGraphics.framework */; }; F376F6F82559B5EC00CFC0BC /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6F72559B5EC00CFC0BC /* CoreGraphics.framework */; };
F376F70D2559B6A000CFC0BC /* hidapi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDB4923E399AC00529352 /* hidapi.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
F376F70E2559B6B800CFC0BC /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6182559B29300CFC0BC /* OpenGLES.framework */; }; F376F70E2559B6B800CFC0BC /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6182559B29300CFC0BC /* OpenGLES.framework */; };
F376F70F2559B6BF00CFC0BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F61A2559B2AF00CFC0BC /* UIKit.framework */; }; F376F70F2559B6BF00CFC0BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F61A2559B2AF00CFC0BC /* UIKit.framework */; };
F376F71A2559B70B00CFC0BC /* hidapi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDB6E23E3A2C900529352 /* hidapi.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
F376F71B2559B71C00CFC0BC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6D82559B59600CFC0BC /* AudioToolbox.framework */; }; F376F71B2559B71C00CFC0BC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6D82559B59600CFC0BC /* AudioToolbox.framework */; };
F376F71C2559B72900CFC0BC /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DA2559B5A000CFC0BC /* AVFoundation.framework */; }; F376F71C2559B72900CFC0BC /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DA2559B5A000CFC0BC /* AVFoundation.framework */; };
F376F71D2559B73200CFC0BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6CC2559B54500CFC0BC /* UIKit.framework */; }; F376F71D2559B73200CFC0BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6CC2559B54500CFC0BC /* UIKit.framework */; };
@ -3430,6 +3397,27 @@
F376F7332559B79B00CFC0BC /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DE2559B5BA00CFC0BC /* GameController.framework */; }; F376F7332559B79B00CFC0BC /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DE2559B5BA00CFC0BC /* GameController.framework */; };
F37DC5F325350EBC0002E6F7 /* CoreHaptics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F37DC5F225350EBC0002E6F7 /* CoreHaptics.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; F37DC5F325350EBC0002E6F7 /* CoreHaptics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F37DC5F225350EBC0002E6F7 /* CoreHaptics.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
F37DC5F525350ECC0002E6F7 /* CoreHaptics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F37DC5F425350ECC0002E6F7 /* CoreHaptics.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; F37DC5F525350ECC0002E6F7 /* CoreHaptics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F37DC5F425350ECC0002E6F7 /* CoreHaptics.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
F38233852738EB8600F7F527 /* SDL_hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = F38233842738EB8600F7F527 /* SDL_hidapi.h */; };
F38233862738EB8600F7F527 /* SDL_hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = F38233842738EB8600F7F527 /* SDL_hidapi.h */; };
F38233872738EB8600F7F527 /* SDL_hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = F38233842738EB8600F7F527 /* SDL_hidapi.h */; };
F382338B2738EB8600F7F527 /* SDL_hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = F38233842738EB8600F7F527 /* SDL_hidapi.h */; };
F382338C2738EB8600F7F527 /* SDL_hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = F38233842738EB8600F7F527 /* SDL_hidapi.h */; };
F382338D2738EB8600F7F527 /* SDL_hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = F38233842738EB8600F7F527 /* SDL_hidapi.h */; };
F382338E2738EBEC00F7F527 /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; };
F382338F2738EBEF00F7F527 /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; };
F38233902738EBF000F7F527 /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; };
F38233912738EBF100F7F527 /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; };
F38233922738EBF300F7F527 /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; };
F38233932738EBF300F7F527 /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; };
F38233942738EC1400F7F527 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
F38233952738EC1500F7F527 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
F38233962738EC1600F7F527 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
F38233972738EC1600F7F527 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
F38233982738EC1800F7F527 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
F38233992738EC1800F7F527 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
F382339A2738ED5600F7F527 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAC323E28BA700529352 /* CoreBluetooth.framework */; };
F382339C2738ED6600F7F527 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F382339B2738ED6600F7F527 /* CoreBluetooth.framework */; };
F382339D2738EE3F00F7F527 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F382339B2738ED6600F7F527 /* CoreBluetooth.framework */; };
F3928194258603F1003191A7 /* SDL_misc.h in Headers */ = {isa = PBXBuildFile; fileRef = 5616CA4F252BB2BE005D5928 /* SDL_misc.h */; settings = {ATTRIBUTES = (Public, ); }; }; F3928194258603F1003191A7 /* SDL_misc.h in Headers */ = {isa = PBXBuildFile; fileRef = 5616CA4F252BB2BE005D5928 /* SDL_misc.h */; settings = {ATTRIBUTES = (Public, ); }; };
F392819F25860422003191A7 /* SDL_misc.h in Headers */ = {isa = PBXBuildFile; fileRef = 5616CA4F252BB2BE005D5928 /* SDL_misc.h */; settings = {ATTRIBUTES = (Public, ); }; }; F392819F25860422003191A7 /* SDL_misc.h in Headers */ = {isa = PBXBuildFile; fileRef = 5616CA4F252BB2BE005D5928 /* SDL_misc.h */; settings = {ATTRIBUTES = (Public, ); }; };
F3942659253579B400B03694 /* CoreHaptics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F37DC5F225350EBC0002E6F7 /* CoreHaptics.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; F3942659253579B400B03694 /* CoreHaptics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F37DC5F225350EBC0002E6F7 /* CoreHaptics.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
@ -3529,13 +3517,6 @@
remoteGlobalIDString = BECDF5FE0761BA81005FE872; remoteGlobalIDString = BECDF5FE0761BA81005FE872;
remoteInfo = "Framework (Upgraded)"; remoteInfo = "Framework (Upgraded)";
}; };
F3190016240CA3BA00ED104F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = A75FDB8023E4C74400529352;
remoteInfo = hidapi;
};
/* End PBXContainerItemProxy section */ /* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */ /* Begin PBXCopyFilesBuildPhase section */
@ -3545,7 +3526,6 @@
dstPath = ""; dstPath = "";
dstSubfolderSpec = 10; dstSubfolderSpec = 10;
files = ( files = (
A75FDB9B23E4CAEF00529352 /* hidapi.framework in Embed Frameworks */,
); );
name = "Embed Frameworks"; name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -3608,11 +3588,8 @@
A75FDAC123E28B9600529352 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; A75FDAC123E28B9600529352 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
A75FDAC323E28BA700529352 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; }; A75FDAC323E28BA700529352 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; };
A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config_iphoneos.h; sourceTree = "<group>"; }; A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config_iphoneos.h; sourceTree = "<group>"; };
A75FDB4923E399AC00529352 /* hidapi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = hidapi.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A75FDB4C23E399AC00529352 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; A75FDB4C23E399AC00529352 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A75FDB5723E39E6100529352 /* hidapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hidapi.h; path = hidapi/hidapi.h; sourceTree = "<group>"; }; A75FDB5723E39E6100529352 /* hidapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hidapi.h; path = hidapi/hidapi.h; sourceTree = "<group>"; };
A75FDB6E23E3A2C900529352 /* hidapi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = hidapi.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A75FDB8C23E4C74400529352 /* hidapi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = hidapi.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A75FDB9223E4C8DB00529352 /* hid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hid.c; sourceTree = "<group>"; }; A75FDB9223E4C8DB00529352 /* hid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hid.c; sourceTree = "<group>"; };
A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LICENSE-bsd.txt"; sourceTree = "<group>"; }; A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LICENSE-bsd.txt"; sourceTree = "<group>"; };
A75FDBA423E4CB6F00529352 /* AUTHORS.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS.txt; sourceTree = "<group>"; }; A75FDBA423E4CB6F00529352 /* AUTHORS.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS.txt; sourceTree = "<group>"; };
@ -4019,6 +3996,8 @@
F376F7272559B77100CFC0BC /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/CoreAudio.framework; sourceTree = DEVELOPER_DIR; }; F376F7272559B77100CFC0BC /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/CoreAudio.framework; sourceTree = DEVELOPER_DIR; };
F37DC5F225350EBC0002E6F7 /* CoreHaptics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreHaptics.framework; path = System/Library/Frameworks/CoreHaptics.framework; sourceTree = SDKROOT; }; F37DC5F225350EBC0002E6F7 /* CoreHaptics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreHaptics.framework; path = System/Library/Frameworks/CoreHaptics.framework; sourceTree = SDKROOT; };
F37DC5F425350ECC0002E6F7 /* CoreHaptics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreHaptics.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/CoreHaptics.framework; sourceTree = DEVELOPER_DIR; }; F37DC5F425350ECC0002E6F7 /* CoreHaptics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreHaptics.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS14.0.sdk/System/Library/Frameworks/CoreHaptics.framework; sourceTree = DEVELOPER_DIR; };
F38233842738EB8600F7F527 /* SDL_hidapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hidapi.h; sourceTree = "<group>"; };
F382339B2738ED6600F7F527 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS15.0.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; };
F3950CD7212BC88D00F51292 /* SDL_sensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sensor.h; sourceTree = "<group>"; }; F3950CD7212BC88D00F51292 /* SDL_sensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sensor.h; sourceTree = "<group>"; };
F395BF6425633B2400942BFF /* SDL_crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_crc32.c; sourceTree = "<group>"; }; F395BF6425633B2400942BFF /* SDL_crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_crc32.c; sourceTree = "<group>"; };
F395C1912569C68E00942BFF /* SDL_iokitjoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_iokitjoystick_c.h; sourceTree = "<group>"; }; F395C1912569C68E00942BFF /* SDL_iokitjoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_iokitjoystick_c.h; sourceTree = "<group>"; };
@ -4043,7 +4022,6 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
F376F70D2559B6A000CFC0BC /* hidapi.framework in Frameworks */,
A75FCEAE23E25AB700529352 /* AudioToolbox.framework in Frameworks */, A75FCEAE23E25AB700529352 /* AudioToolbox.framework in Frameworks */,
A75FDABA23E28A7A00529352 /* AVFoundation.framework in Frameworks */, A75FDABA23E28A7A00529352 /* AVFoundation.framework in Frameworks */,
A75FCEA723E25AB700529352 /* CoreAudio.framework in Frameworks */, A75FCEA723E25AB700529352 /* CoreAudio.framework in Frameworks */,
@ -4066,10 +4044,10 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
F376F71A2559B70B00CFC0BC /* hidapi.framework in Frameworks */,
F376F71B2559B71C00CFC0BC /* AudioToolbox.framework in Frameworks */, F376F71B2559B71C00CFC0BC /* AudioToolbox.framework in Frameworks */,
F376F71C2559B72900CFC0BC /* AVFoundation.framework in Frameworks */, F376F71C2559B72900CFC0BC /* AVFoundation.framework in Frameworks */,
F376F7282559B77100CFC0BC /* CoreAudio.framework in Frameworks */, F376F7282559B77100CFC0BC /* CoreAudio.framework in Frameworks */,
F382339D2738EE3F00F7F527 /* CoreBluetooth.framework in Frameworks */,
F376F7262559B76800CFC0BC /* CoreFoundation.framework in Frameworks */, F376F7262559B76800CFC0BC /* CoreFoundation.framework in Frameworks */,
F376F7242559B76100CFC0BC /* CoreGraphics.framework in Frameworks */, F376F7242559B76100CFC0BC /* CoreGraphics.framework in Frameworks */,
F394265A253579D200B03694 /* CoreHaptics.framework in Frameworks */, F394265A253579D200B03694 /* CoreHaptics.framework in Frameworks */,
@ -4082,33 +4060,6 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
A75FDB4623E399AC00529352 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
A75FDB5523E39DAC00529352 /* CoreBluetooth.framework in Frameworks */,
F376F6262559B30000CFC0BC /* UIKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A75FDB6723E3A2C900529352 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
A75FDB6823E3A2C900529352 /* CoreBluetooth.framework in Frameworks */,
F376F6CD2559B54500CFC0BC /* UIKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A75FDB8523E4C74400529352 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
A75FDB9523E4C93600529352 /* CoreFoundation.framework in Frameworks */,
A75FDB9423E4C91300529352 /* IOKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A769B22E23E259AE00872273 /* Frameworks */ = { A769B22E23E259AE00872273 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@ -4120,10 +4071,10 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
A75FDB9D23E4CAFA00529352 /* hidapi.framework in Frameworks */,
F376F6332559B33D00CFC0BC /* AudioToolbox.framework in Frameworks */, F376F6332559B33D00CFC0BC /* AudioToolbox.framework in Frameworks */,
F376F6402559B38A00CFC0BC /* AVFoundation.framework in Frameworks */, F376F6402559B38A00CFC0BC /* AVFoundation.framework in Frameworks */,
A7D88B4C23E2437C00DCD162 /* CoreAudio.framework in Frameworks */, A7D88B4C23E2437C00DCD162 /* CoreAudio.framework in Frameworks */,
F382339A2738ED5600F7F527 /* CoreBluetooth.framework in Frameworks */,
A7D88B4D23E2437C00DCD162 /* CoreFoundation.framework in Frameworks */, A7D88B4D23E2437C00DCD162 /* CoreFoundation.framework in Frameworks */,
F376F63F2559B37300CFC0BC /* CoreGraphics.framework in Frameworks */, F376F63F2559B37300CFC0BC /* CoreGraphics.framework in Frameworks */,
F37DC5F325350EBC0002E6F7 /* CoreHaptics.framework in Frameworks */, F37DC5F325350EBC0002E6F7 /* CoreHaptics.framework in Frameworks */,
@ -4142,10 +4093,10 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
A75FDBA023E4CAFF00529352 /* hidapi.framework in Frameworks */,
F376F6DB2559B5A000CFC0BC /* AVFoundation.framework in Frameworks */, F376F6DB2559B5A000CFC0BC /* AVFoundation.framework in Frameworks */,
F376F6D92559B59600CFC0BC /* AudioToolbox.framework in Frameworks */, F376F6D92559B59600CFC0BC /* AudioToolbox.framework in Frameworks */,
A7D88D0723E24BED00DCD162 /* CoreAudio.framework in Frameworks */, A7D88D0723E24BED00DCD162 /* CoreAudio.framework in Frameworks */,
F382339C2738ED6600F7F527 /* CoreBluetooth.framework in Frameworks */,
A7D88D0823E24BED00DCD162 /* CoreFoundation.framework in Frameworks */, A7D88D0823E24BED00DCD162 /* CoreFoundation.framework in Frameworks */,
F376F6F82559B5EC00CFC0BC /* CoreGraphics.framework in Frameworks */, F376F6F82559B5EC00CFC0BC /* CoreGraphics.framework in Frameworks */,
F37DC5F525350ECC0002E6F7 /* CoreHaptics.framework in Frameworks */, F37DC5F525350ECC0002E6F7 /* CoreHaptics.framework in Frameworks */,
@ -4174,7 +4125,6 @@
564624381FF821DA0074AC87 /* Metal.framework in Frameworks */, 564624381FF821DA0074AC87 /* Metal.framework in Frameworks */,
564624361FF821C20074AC87 /* QuartzCore.framework in Frameworks */, 564624361FF821C20074AC87 /* QuartzCore.framework in Frameworks */,
A7381E971D8B6A0300B177DD /* AudioToolbox.framework in Frameworks */, A7381E971D8B6A0300B177DD /* AudioToolbox.framework in Frameworks */,
A75FDB9A23E4CAEF00529352 /* hidapi.framework in Frameworks */,
00D0D0D810675E46004B05EF /* Carbon.framework in Frameworks */, 00D0D0D810675E46004B05EF /* Carbon.framework in Frameworks */,
007317A40858DECD00B2BC32 /* Cocoa.framework in Frameworks */, 007317A40858DECD00B2BC32 /* Cocoa.framework in Frameworks */,
A7381E961D8B69D600B177DD /* CoreAudio.framework in Frameworks */, A7381E961D8B69D600B177DD /* CoreAudio.framework in Frameworks */,
@ -4252,6 +4202,7 @@
A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */, A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */,
AA7557D51595D4D800BBD41B /* SDL_gesture.h */, AA7557D51595D4D800BBD41B /* SDL_gesture.h */,
AA7557D61595D4D800BBD41B /* SDL_haptic.h */, AA7557D61595D4D800BBD41B /* SDL_haptic.h */,
F38233842738EB8600F7F527 /* SDL_hidapi.h */,
AA7557D71595D4D800BBD41B /* SDL_hints.h */, AA7557D71595D4D800BBD41B /* SDL_hints.h */,
AA7557D91595D4D800BBD41B /* SDL_joystick.h */, AA7557D91595D4D800BBD41B /* SDL_joystick.h */,
AA7557DA1595D4D800BBD41B /* SDL_keyboard.h */, AA7557DA1595D4D800BBD41B /* SDL_keyboard.h */,
@ -4315,9 +4266,6 @@
A769B23D23E259AE00872273 /* libSDL2.a */, A769B23D23E259AE00872273 /* libSDL2.a */,
A75FCEB323E25AB700529352 /* libSDL2.dylib */, A75FCEB323E25AB700529352 /* libSDL2.dylib */,
A75FD06C23E25AC700529352 /* libSDL2.dylib */, A75FD06C23E25AC700529352 /* libSDL2.dylib */,
A75FDB4923E399AC00529352 /* hidapi.framework */,
A75FDB6E23E3A2C900529352 /* hidapi.framework */,
A75FDB8C23E4C74400529352 /* hidapi.framework */,
F3CB94BA26B5E0A400B9C980 /* libSDLmain.a */, F3CB94BA26B5E0A400B9C980 /* libSDLmain.a */,
F3CB963826B5E0A600B9C980 /* libSDLmain.a */, F3CB963826B5E0A600B9C980 /* libSDLmain.a */,
); );
@ -4406,6 +4354,7 @@
564624341FF821B70074AC87 /* Frameworks */ = { 564624341FF821B70074AC87 /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
F382339B2738ED6600F7F527 /* CoreBluetooth.framework */,
F376F7272559B77100CFC0BC /* CoreAudio.framework */, F376F7272559B77100CFC0BC /* CoreAudio.framework */,
F376F7252559B76800CFC0BC /* CoreFoundation.framework */, F376F7252559B76800CFC0BC /* CoreFoundation.framework */,
F376F7212559B74900CFC0BC /* Metal.framework */, F376F7212559B74900CFC0BC /* Metal.framework */,
@ -5328,6 +5277,7 @@
A75FCD2023E25AB700529352 /* SDL_copying.h in Headers */, A75FCD2023E25AB700529352 /* SDL_copying.h in Headers */,
A75FCD2123E25AB700529352 /* yuv_rgb.h in Headers */, A75FCD2123E25AB700529352 /* yuv_rgb.h in Headers */,
A75FCD2223E25AB700529352 /* SDL_dummyaudio.h in Headers */, A75FCD2223E25AB700529352 /* SDL_dummyaudio.h in Headers */,
F382338C2738EB8600F7F527 /* SDL_hidapi.h in Headers */,
A75FCD2323E25AB700529352 /* SDL_uikitmessagebox.h in Headers */, A75FCD2323E25AB700529352 /* SDL_uikitmessagebox.h in Headers */,
A75FCD2523E25AB700529352 /* SDL_thread_c.h in Headers */, A75FCD2523E25AB700529352 /* SDL_thread_c.h in Headers */,
A75FCD2623E25AB700529352 /* SDL_cocoamessagebox.h in Headers */, A75FCD2623E25AB700529352 /* SDL_cocoamessagebox.h in Headers */,
@ -5552,6 +5502,7 @@
A75FCED923E25AC700529352 /* SDL_copying.h in Headers */, A75FCED923E25AC700529352 /* SDL_copying.h in Headers */,
A75FCEDA23E25AC700529352 /* yuv_rgb.h in Headers */, A75FCEDA23E25AC700529352 /* yuv_rgb.h in Headers */,
A75FCEDB23E25AC700529352 /* SDL_dummyaudio.h in Headers */, A75FCEDB23E25AC700529352 /* SDL_dummyaudio.h in Headers */,
F382338D2738EB8600F7F527 /* SDL_hidapi.h in Headers */,
A75FCEDC23E25AC700529352 /* SDL_uikitmessagebox.h in Headers */, A75FCEDC23E25AC700529352 /* SDL_uikitmessagebox.h in Headers */,
A75FCEDE23E25AC700529352 /* SDL_thread_c.h in Headers */, A75FCEDE23E25AC700529352 /* SDL_thread_c.h in Headers */,
A75FCEDF23E25AC700529352 /* SDL_cocoamessagebox.h in Headers */, A75FCEDF23E25AC700529352 /* SDL_cocoamessagebox.h in Headers */,
@ -5739,30 +5690,6 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
A75FDB4423E399AC00529352 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
A75FDB6123E39E6100529352 /* hidapi.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A75FDB6323E3A2C900529352 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
A75FDB6423E3A2C900529352 /* hidapi.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A75FDB8123E4C74400529352 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
A75FDB8223E4C74400529352 /* hidapi.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A769B08323E259AE00872273 /* Headers */ = { A769B08323E259AE00872273 /* Headers */ = {
isa = PBXHeadersBuildPhase; isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@ -6021,6 +5948,7 @@
F3928194258603F1003191A7 /* SDL_misc.h in Headers */, F3928194258603F1003191A7 /* SDL_misc.h in Headers */,
A7D88A3A23E2437C00DCD162 /* SDL_mouse.h in Headers */, A7D88A3A23E2437C00DCD162 /* SDL_mouse.h in Headers */,
A7D8BB1C23E2514500DCD162 /* SDL_mouse_c.h in Headers */, A7D8BB1C23E2514500DCD162 /* SDL_mouse_c.h in Headers */,
F38233862738EB8600F7F527 /* SDL_hidapi.h in Headers */,
A7D88A3B23E2437C00DCD162 /* SDL_mutex.h in Headers */, A7D88A3B23E2437C00DCD162 /* SDL_mutex.h in Headers */,
A7D88A3C23E2437C00DCD162 /* SDL_name.h in Headers */, A7D88A3C23E2437C00DCD162 /* SDL_name.h in Headers */,
A7D8ABFE23E2514100DCD162 /* SDL_nullevents_c.h in Headers */, A7D8ABFE23E2514100DCD162 /* SDL_nullevents_c.h in Headers */,
@ -6250,6 +6178,7 @@
F392819F25860422003191A7 /* SDL_misc.h in Headers */, F392819F25860422003191A7 /* SDL_misc.h in Headers */,
A7D88BF323E24BED00DCD162 /* SDL_mouse.h in Headers */, A7D88BF323E24BED00DCD162 /* SDL_mouse.h in Headers */,
A7D8BB1D23E2514500DCD162 /* SDL_mouse_c.h in Headers */, A7D8BB1D23E2514500DCD162 /* SDL_mouse_c.h in Headers */,
F38233872738EB8600F7F527 /* SDL_hidapi.h in Headers */,
A7D88BF423E24BED00DCD162 /* SDL_mutex.h in Headers */, A7D88BF423E24BED00DCD162 /* SDL_mutex.h in Headers */,
A7D88BF523E24BED00DCD162 /* SDL_name.h in Headers */, A7D88BF523E24BED00DCD162 /* SDL_name.h in Headers */,
A7D8ABFF23E2514100DCD162 /* SDL_nullevents_c.h in Headers */, A7D8ABFF23E2514100DCD162 /* SDL_nullevents_c.h in Headers */,
@ -6644,6 +6573,7 @@
5616CA50252BB2BE005D5928 /* SDL_misc.h in Headers */, 5616CA50252BB2BE005D5928 /* SDL_misc.h in Headers */,
AA75582A1595D4D800BBD41B /* SDL_mouse.h in Headers */, AA75582A1595D4D800BBD41B /* SDL_mouse.h in Headers */,
A7D8BB1B23E2514500DCD162 /* SDL_mouse_c.h in Headers */, A7D8BB1B23E2514500DCD162 /* SDL_mouse_c.h in Headers */,
F38233852738EB8600F7F527 /* SDL_hidapi.h in Headers */,
AA75582C1595D4D800BBD41B /* SDL_mutex.h in Headers */, AA75582C1595D4D800BBD41B /* SDL_mutex.h in Headers */,
AA75582E1595D4D800BBD41B /* SDL_name.h in Headers */, AA75582E1595D4D800BBD41B /* SDL_name.h in Headers */,
A7D8ABFD23E2514100DCD162 /* SDL_nullevents_c.h in Headers */, A7D8ABFD23E2514100DCD162 /* SDL_nullevents_c.h in Headers */,
@ -6981,6 +6911,7 @@
DB313FCF17554B71006C0E22 /* SDL_config_macosx.h in Headers */, DB313FCF17554B71006C0E22 /* SDL_config_macosx.h in Headers */,
A7D8ABDE23E2514100DCD162 /* SDL_egl_c.h in Headers */, A7D8ABDE23E2514100DCD162 /* SDL_egl_c.h in Headers */,
DB313FD117554B71006C0E22 /* SDL_copying.h in Headers */, DB313FD117554B71006C0E22 /* SDL_copying.h in Headers */,
F382338B2738EB8600F7F527 /* SDL_hidapi.h in Headers */,
A7D8B3D923E2514300DCD162 /* yuv_rgb.h in Headers */, A7D8B3D923E2514300DCD162 /* yuv_rgb.h in Headers */,
A7D8B79923E2514400DCD162 /* SDL_dummyaudio.h in Headers */, A7D8B79923E2514400DCD162 /* SDL_dummyaudio.h in Headers */,
A7D8AC9823E2514100DCD162 /* SDL_uikitmessagebox.h in Headers */, A7D8AC9823E2514100DCD162 /* SDL_uikitmessagebox.h in Headers */,
@ -7225,60 +7156,6 @@
productReference = A75FD06C23E25AC700529352 /* libSDL2.dylib */; productReference = A75FD06C23E25AC700529352 /* libSDL2.dylib */;
productType = "com.apple.product-type.library.dynamic"; productType = "com.apple.product-type.library.dynamic";
}; };
A75FDB4823E399AC00529352 /* hidapi-iOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = A75FDB5023E399AC00529352 /* Build configuration list for PBXNativeTarget "hidapi-iOS" */;
buildPhases = (
A75FDB4423E399AC00529352 /* Headers */,
A75FDB4523E399AC00529352 /* Sources */,
A75FDB4623E399AC00529352 /* Frameworks */,
A75FDB4723E399AC00529352 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "hidapi-iOS";
productName = hidapi;
productReference = A75FDB4923E399AC00529352 /* hidapi.framework */;
productType = "com.apple.product-type.framework";
};
A75FDB6223E3A2C900529352 /* hidapi-tvOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = A75FDB6B23E3A2C900529352 /* Build configuration list for PBXNativeTarget "hidapi-tvOS" */;
buildPhases = (
A75FDB6323E3A2C900529352 /* Headers */,
A75FDB6523E3A2C900529352 /* Sources */,
A75FDB6723E3A2C900529352 /* Frameworks */,
A75FDB6A23E3A2C900529352 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "hidapi-tvOS";
productName = hidapi;
productReference = A75FDB6E23E3A2C900529352 /* hidapi.framework */;
productType = "com.apple.product-type.framework";
};
A75FDB8023E4C74400529352 /* hidapi */ = {
isa = PBXNativeTarget;
buildConfigurationList = A75FDB8923E4C74400529352 /* Build configuration list for PBXNativeTarget "hidapi" */;
buildPhases = (
A75FDB8123E4C74400529352 /* Headers */,
A75FDB8323E4C74400529352 /* Sources */,
A75FDB8523E4C74400529352 /* Frameworks */,
A75FDB8823E4C74400529352 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = hidapi;
productName = hidapi;
productReference = A75FDB8C23E4C74400529352 /* hidapi.framework */;
productType = "com.apple.product-type.framework";
};
A769B08223E259AE00872273 /* Static Library-tvOS */ = { A769B08223E259AE00872273 /* Static Library-tvOS */ = {
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = A769B23A23E259AE00872273 /* Build configuration list for PBXNativeTarget "Static Library-tvOS" */; buildConfigurationList = A769B23A23E259AE00872273 /* Build configuration list for PBXNativeTarget "Static Library-tvOS" */;
@ -7411,7 +7288,6 @@
buildRules = ( buildRules = (
); );
dependencies = ( dependencies = (
F3190017240CA3BA00ED104F /* PBXTargetDependency */,
BECDF6C60761BA81005FE872 /* PBXTargetDependency */, BECDF6C60761BA81005FE872 /* PBXTargetDependency */,
); );
name = "Standard DMG"; name = "Standard DMG";
@ -7487,11 +7363,6 @@
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
LastUpgradeCheck = 1130; LastUpgradeCheck = 1130;
TargetAttributes = {
A75FDB4823E399AC00529352 = {
CreatedOnToolsVersion = 11.3.1;
};
};
}; };
buildConfigurationList = 0073178E0858DB0500B2BC32 /* Build configuration list for PBXProject "SDL" */; buildConfigurationList = 0073178E0858DB0500B2BC32 /* Build configuration list for PBXProject "SDL" */;
compatibilityVersion = "Xcode 3.2"; compatibilityVersion = "Xcode 3.2";
@ -7519,50 +7390,11 @@
A75FCCFB23E25AB700529352 /* Shared Library-iOS */, A75FCCFB23E25AB700529352 /* Shared Library-iOS */,
A75FCEB423E25AC700529352 /* Shared Library-tvOS */, A75FCEB423E25AC700529352 /* Shared Library-tvOS */,
BECDF6BB0761BA81005FE872 /* Standard DMG */, BECDF6BB0761BA81005FE872 /* Standard DMG */,
A75FDB8023E4C74400529352 /* hidapi */,
A75FDB4823E399AC00529352 /* hidapi-iOS */,
A75FDB6223E3A2C900529352 /* hidapi-tvOS */,
); );
}; };
/* End PBXProject section */ /* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */ /* Begin PBXResourcesBuildPhase section */
A75FDB4723E399AC00529352 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A75FDBB223E4CB7000529352 /* LICENSE-gpl3.txt in Resources */,
A75FDBA923E4CB7000529352 /* LICENSE-bsd.txt in Resources */,
A75FDBAC23E4CB7000529352 /* AUTHORS.txt in Resources */,
A75FDBB523E4CB7000529352 /* LICENSE.txt in Resources */,
A75FDBAF23E4CB7000529352 /* LICENSE-orig.txt in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A75FDB6A23E3A2C900529352 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A75FDBB323E4CB7000529352 /* LICENSE-gpl3.txt in Resources */,
A75FDBAA23E4CB7000529352 /* LICENSE-bsd.txt in Resources */,
A75FDBAD23E4CB7000529352 /* AUTHORS.txt in Resources */,
A75FDBB623E4CB7000529352 /* LICENSE.txt in Resources */,
A75FDBB023E4CB7000529352 /* LICENSE-orig.txt in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A75FDB8823E4C74400529352 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A75FDBB123E4CB7000529352 /* LICENSE-gpl3.txt in Resources */,
A75FDBA823E4CB7000529352 /* LICENSE-bsd.txt in Resources */,
A75FDBAB23E4CB7000529352 /* AUTHORS.txt in Resources */,
A75FDBB423E4CB7000529352 /* LICENSE.txt in Resources */,
A75FDBAE23E4CB7000529352 /* LICENSE-orig.txt in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A7D88ABE23E2437C00DCD162 /* Resources */ = { A7D88ABE23E2437C00DCD162 /* Resources */ = {
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@ -7713,6 +7545,7 @@
A75FCE1223E25AB700529352 /* SDL_hidapi_xbox360.c in Sources */, A75FCE1223E25AB700529352 /* SDL_hidapi_xbox360.c in Sources */,
A75FCE1323E25AB700529352 /* SDL_coreaudio.m in Sources */, A75FCE1323E25AB700529352 /* SDL_coreaudio.m in Sources */,
A75FCE1423E25AB700529352 /* SDL_blendline.c in Sources */, A75FCE1423E25AB700529352 /* SDL_blendline.c in Sources */,
F38233982738EC1800F7F527 /* hid.m in Sources */,
A75FCE1523E25AB700529352 /* SDL_blit_A.c in Sources */, A75FCE1523E25AB700529352 /* SDL_blit_A.c in Sources */,
A75FCE1623E25AB700529352 /* SDL_d3dmath.c in Sources */, A75FCE1623E25AB700529352 /* SDL_d3dmath.c in Sources */,
A75FCE1823E25AB700529352 /* SDL_nullvideo.c in Sources */, A75FCE1823E25AB700529352 /* SDL_nullvideo.c in Sources */,
@ -7749,6 +7582,7 @@
A75FCE3523E25AB700529352 /* SDL_error.c in Sources */, A75FCE3523E25AB700529352 /* SDL_error.c in Sources */,
A75FCE3623E25AB700529352 /* SDL_blit.c in Sources */, A75FCE3623E25AB700529352 /* SDL_blit.c in Sources */,
A75FCE3723E25AB700529352 /* SDL_rwops.c in Sources */, A75FCE3723E25AB700529352 /* SDL_rwops.c in Sources */,
F38233922738EBF300F7F527 /* SDL_hidapi.c in Sources */,
A75FCE3823E25AB700529352 /* SDL_uikitviewcontroller.m in Sources */, A75FCE3823E25AB700529352 /* SDL_uikitviewcontroller.m in Sources */,
A75FCE3923E25AB700529352 /* s_cos.c in Sources */, A75FCE3923E25AB700529352 /* s_cos.c in Sources */,
A75FCE3A23E25AB700529352 /* SDL_yuv_sw.c in Sources */, A75FCE3A23E25AB700529352 /* SDL_yuv_sw.c in Sources */,
@ -7898,6 +7732,7 @@
A75FCFCB23E25AC700529352 /* SDL_hidapi_xbox360.c in Sources */, A75FCFCB23E25AC700529352 /* SDL_hidapi_xbox360.c in Sources */,
A75FCFCC23E25AC700529352 /* SDL_coreaudio.m in Sources */, A75FCFCC23E25AC700529352 /* SDL_coreaudio.m in Sources */,
A75FCFCD23E25AC700529352 /* SDL_blendline.c in Sources */, A75FCFCD23E25AC700529352 /* SDL_blendline.c in Sources */,
F38233992738EC1800F7F527 /* hid.m in Sources */,
A75FCFCE23E25AC700529352 /* SDL_blit_A.c in Sources */, A75FCFCE23E25AC700529352 /* SDL_blit_A.c in Sources */,
A75FCFCF23E25AC700529352 /* SDL_d3dmath.c in Sources */, A75FCFCF23E25AC700529352 /* SDL_d3dmath.c in Sources */,
A75FCFD123E25AC700529352 /* SDL_nullvideo.c in Sources */, A75FCFD123E25AC700529352 /* SDL_nullvideo.c in Sources */,
@ -7934,6 +7769,7 @@
A75FCFEE23E25AC700529352 /* SDL_error.c in Sources */, A75FCFEE23E25AC700529352 /* SDL_error.c in Sources */,
A75FCFEF23E25AC700529352 /* SDL_blit.c in Sources */, A75FCFEF23E25AC700529352 /* SDL_blit.c in Sources */,
A75FCFF023E25AC700529352 /* SDL_rwops.c in Sources */, A75FCFF023E25AC700529352 /* SDL_rwops.c in Sources */,
F38233932738EBF300F7F527 /* SDL_hidapi.c in Sources */,
A75FCFF123E25AC700529352 /* SDL_uikitviewcontroller.m in Sources */, A75FCFF123E25AC700529352 /* SDL_uikitviewcontroller.m in Sources */,
A75FCFF223E25AC700529352 /* s_cos.c in Sources */, A75FCFF223E25AC700529352 /* s_cos.c in Sources */,
A75FCFF323E25AC700529352 /* SDL_yuv_sw.c in Sources */, A75FCFF323E25AC700529352 /* SDL_yuv_sw.c in Sources */,
@ -8034,30 +7870,6 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
A75FDB4523E399AC00529352 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A75FDB5323E39D1C00529352 /* hid.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A75FDB6523E3A2C900529352 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A75FDB6623E3A2C900529352 /* hid.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A75FDB8323E4C74400529352 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A75FDB9323E4C8DB00529352 /* hid.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A769B17023E259AE00872273 /* Sources */ = { A769B17023E259AE00872273 /* Sources */ = {
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@ -8128,6 +7940,7 @@
A769B1B523E259AE00872273 /* SDL_cocoakeyboard.m in Sources */, A769B1B523E259AE00872273 /* SDL_cocoakeyboard.m in Sources */,
A769B1B623E259AE00872273 /* SDL_dynapi.c in Sources */, A769B1B623E259AE00872273 /* SDL_dynapi.c in Sources */,
A769B1B723E259AE00872273 /* SDL_shaders_gl.c in Sources */, A769B1B723E259AE00872273 /* SDL_shaders_gl.c in Sources */,
F38233912738EBF100F7F527 /* SDL_hidapi.c in Sources */,
A769B1B823E259AE00872273 /* e_log.c in Sources */, A769B1B823E259AE00872273 /* e_log.c in Sources */,
A769B1B923E259AE00872273 /* SDL_cocoamessagebox.m in Sources */, A769B1B923E259AE00872273 /* SDL_cocoamessagebox.m in Sources */,
A769B1BA23E259AE00872273 /* SDL_blendfillrect.c in Sources */, A769B1BA23E259AE00872273 /* SDL_blendfillrect.c in Sources */,
@ -8221,6 +8034,7 @@
A769B21523E259AE00872273 /* SDL_rwopsbundlesupport.m in Sources */, A769B21523E259AE00872273 /* SDL_rwopsbundlesupport.m in Sources */,
A769B21623E259AE00872273 /* SDL_video.c in Sources */, A769B21623E259AE00872273 /* SDL_video.c in Sources */,
A769B21723E259AE00872273 /* SDL_offscreenopengl.c in Sources */, A769B21723E259AE00872273 /* SDL_offscreenopengl.c in Sources */,
F38233972738EC1600F7F527 /* hid.m in Sources */,
A769B21823E259AE00872273 /* SDL_uikitmetalview.m in Sources */, A769B21823E259AE00872273 /* SDL_uikitmetalview.m in Sources */,
A769B21923E259AE00872273 /* SDL_shaders_gles2.c in Sources */, A769B21923E259AE00872273 /* SDL_shaders_gles2.c in Sources */,
A769B21A23E259AE00872273 /* SDL_blit_1.c in Sources */, A769B21A23E259AE00872273 /* SDL_blit_1.c in Sources */,
@ -8293,6 +8107,7 @@
A7D8BA2023E2514400DCD162 /* SDL_blendline.c in Sources */, A7D8BA2023E2514400DCD162 /* SDL_blendline.c in Sources */,
A7D8ADF323E2514100DCD162 /* SDL_blit_A.c in Sources */, A7D8ADF323E2514100DCD162 /* SDL_blit_A.c in Sources */,
A7D8BA3823E2514400DCD162 /* SDL_d3dmath.c in Sources */, A7D8BA3823E2514400DCD162 /* SDL_d3dmath.c in Sources */,
F38233942738EC1400F7F527 /* hid.m in Sources */,
A7D8ABEC23E2514100DCD162 /* SDL_nullvideo.c in Sources */, A7D8ABEC23E2514100DCD162 /* SDL_nullvideo.c in Sources */,
A7D8AB6823E2514100DCD162 /* SDL_offscreenevents.c in Sources */, A7D8AB6823E2514100DCD162 /* SDL_offscreenevents.c in Sources */,
A7D8ACA623E2514100DCD162 /* SDL_uikitview.m in Sources */, A7D8ACA623E2514100DCD162 /* SDL_uikitview.m in Sources */,
@ -8329,6 +8144,7 @@
A7D8BA9223E2514400DCD162 /* s_cos.c in Sources */, A7D8BA9223E2514400DCD162 /* s_cos.c in Sources */,
A7D8B4D123E2514300DCD162 /* SDL_steamcontroller.c in Sources */, A7D8B4D123E2514300DCD162 /* SDL_steamcontroller.c in Sources */,
A7D8B9D223E2514400DCD162 /* SDL_yuv_sw.c in Sources */, A7D8B9D223E2514400DCD162 /* SDL_yuv_sw.c in Sources */,
F382338E2738EBEC00F7F527 /* SDL_hidapi.c in Sources */,
A7D8B76B23E2514300DCD162 /* SDL_wave.c in Sources */, A7D8B76B23E2514300DCD162 /* SDL_wave.c in Sources */,
A7D8BAD423E2514500DCD162 /* s_tan.c in Sources */, A7D8BAD423E2514500DCD162 /* s_tan.c in Sources */,
A7D8AA6623E2514000DCD162 /* SDL_hints.c in Sources */, A7D8AA6623E2514000DCD162 /* SDL_hints.c in Sources */,
@ -8478,6 +8294,7 @@
A7D8BA2123E2514400DCD162 /* SDL_blendline.c in Sources */, A7D8BA2123E2514400DCD162 /* SDL_blendline.c in Sources */,
A7D8ADF423E2514100DCD162 /* SDL_blit_A.c in Sources */, A7D8ADF423E2514100DCD162 /* SDL_blit_A.c in Sources */,
A7D8BA3923E2514400DCD162 /* SDL_d3dmath.c in Sources */, A7D8BA3923E2514400DCD162 /* SDL_d3dmath.c in Sources */,
F38233952738EC1500F7F527 /* hid.m in Sources */,
A7D8ABED23E2514100DCD162 /* SDL_nullvideo.c in Sources */, A7D8ABED23E2514100DCD162 /* SDL_nullvideo.c in Sources */,
A7D8AB6923E2514100DCD162 /* SDL_offscreenevents.c in Sources */, A7D8AB6923E2514100DCD162 /* SDL_offscreenevents.c in Sources */,
A7D8ACA723E2514100DCD162 /* SDL_uikitview.m in Sources */, A7D8ACA723E2514100DCD162 /* SDL_uikitview.m in Sources */,
@ -8514,6 +8331,7 @@
A7D8BA9323E2514400DCD162 /* s_cos.c in Sources */, A7D8BA9323E2514400DCD162 /* s_cos.c in Sources */,
A7D8B4D223E2514300DCD162 /* SDL_steamcontroller.c in Sources */, A7D8B4D223E2514300DCD162 /* SDL_steamcontroller.c in Sources */,
A7D8B9D323E2514400DCD162 /* SDL_yuv_sw.c in Sources */, A7D8B9D323E2514400DCD162 /* SDL_yuv_sw.c in Sources */,
F382338F2738EBEF00F7F527 /* SDL_hidapi.c in Sources */,
A7D8B76C23E2514300DCD162 /* SDL_wave.c in Sources */, A7D8B76C23E2514300DCD162 /* SDL_wave.c in Sources */,
A7D8BAD523E2514500DCD162 /* s_tan.c in Sources */, A7D8BAD523E2514500DCD162 /* s_tan.c in Sources */,
A7D8AA6723E2514000DCD162 /* SDL_hints.c in Sources */, A7D8AA6723E2514000DCD162 /* SDL_hints.c in Sources */,
@ -8684,6 +8502,7 @@
A7D8AEDA23E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */, A7D8AEDA23E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */,
A7D8AB1A23E2514100DCD162 /* SDL_dynapi.c in Sources */, A7D8AB1A23E2514100DCD162 /* SDL_dynapi.c in Sources */,
A7D8BA8923E2514400DCD162 /* SDL_shaders_gl.c in Sources */, A7D8BA8923E2514400DCD162 /* SDL_shaders_gl.c in Sources */,
F38233902738EBF000F7F527 /* SDL_hidapi.c in Sources */,
A7D8BAF523E2514500DCD162 /* e_log.c in Sources */, A7D8BAF523E2514500DCD162 /* e_log.c in Sources */,
A7D8AED423E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */, A7D8AED423E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */,
A7D8BA2F23E2514400DCD162 /* SDL_blendfillrect.c in Sources */, A7D8BA2F23E2514400DCD162 /* SDL_blendfillrect.c in Sources */,
@ -8777,6 +8596,7 @@
A7D8B5CD23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */, A7D8B5CD23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */,
A7D8AC1323E2514100DCD162 /* SDL_video.c in Sources */, A7D8AC1323E2514100DCD162 /* SDL_video.c in Sources */,
A7D8AB5923E2514100DCD162 /* SDL_offscreenopengl.c in Sources */, A7D8AB5923E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
F38233962738EC1600F7F527 /* hid.m in Sources */,
A7D8ACC723E2514100DCD162 /* SDL_uikitmetalview.m in Sources */, A7D8ACC723E2514100DCD162 /* SDL_uikitmetalview.m in Sources */,
A7D8BA5F23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */, A7D8BA5F23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
A7D8B14423E2514200DCD162 /* SDL_blit_1.c in Sources */, A7D8B14423E2514200DCD162 /* SDL_blit_1.c in Sources */,
@ -9379,11 +9199,6 @@
target = BECDF5FE0761BA81005FE872 /* Framework */; target = BECDF5FE0761BA81005FE872 /* Framework */;
targetProxy = BECDF6C50761BA81005FE872 /* PBXContainerItemProxy */; targetProxy = BECDF6C50761BA81005FE872 /* PBXContainerItemProxy */;
}; };
F3190017240CA3BA00ED104F /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = A75FDB8023E4C74400529352 /* hidapi */;
targetProxy = F3190016240CA3BA00ED104F /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */ /* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */ /* Begin XCBuildConfiguration section */
@ -9611,108 +9426,6 @@
}; };
name = Release; name = Release;
}; };
A75FDB4E23E399AC00529352 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CURRENT_PROJECT_VERSION = 1.0;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(SDKROOT)/System/iOSSupport/System/Library/Frameworks",
);
GCC_PREPROCESSOR_DEFINITIONS = "HID_API_EXPORT=\"__attribute__ ((visibility(\\\"default\\\")))\"";
INFOPLIST_FILE = hidapi/Info.plist;
PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.hidapi;
PRODUCT_NAME = hidapi;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2,6";
};
name = Debug;
};
A75FDB4F23E399AC00529352 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CURRENT_PROJECT_VERSION = 1.0;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(SDKROOT)/System/iOSSupport/System/Library/Frameworks",
);
GCC_PREPROCESSOR_DEFINITIONS = "HID_API_EXPORT=\"__attribute__ ((visibility(\\\"default\\\")))\"";
INFOPLIST_FILE = hidapi/Info.plist;
PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.hidapi;
PRODUCT_NAME = hidapi;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2,6";
};
name = Release;
};
A75FDB6C23E3A2C900529352 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CURRENT_PROJECT_VERSION = 1.0;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
GCC_PREPROCESSOR_DEFINITIONS = "HID_API_EXPORT=\"__attribute__ ((visibility(\\\"default\\\")))\"";
INFOPLIST_FILE = hidapi/Info.plist;
PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.hidapi;
PRODUCT_NAME = hidapi;
SDKROOT = appletvos;
};
name = Debug;
};
A75FDB6D23E3A2C900529352 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CURRENT_PROJECT_VERSION = 1.0;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
GCC_PREPROCESSOR_DEFINITIONS = "HID_API_EXPORT=\"__attribute__ ((visibility(\\\"default\\\")))\"";
INFOPLIST_FILE = hidapi/Info.plist;
PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.hidapi;
PRODUCT_NAME = hidapi;
SDKROOT = appletvos;
};
name = Release;
};
A75FDB8A23E4C74400529352 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES;
CURRENT_PROJECT_VERSION = 1.0;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
GCC_PREPROCESSOR_DEFINITIONS = "HID_API_EXPORT=\"__attribute__ ((visibility(\\\"default\\\")))\"";
INFOPLIST_FILE = hidapi/Info.plist;
PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.hidapi;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
A75FDB8B23E4C74400529352 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES;
CURRENT_PROJECT_VERSION = 1.0;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
GCC_PREPROCESSOR_DEFINITIONS = "HID_API_EXPORT=\"__attribute__ ((visibility(\\\"default\\\")))\"";
INFOPLIST_FILE = hidapi/Info.plist;
PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.hidapi;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
A769B23B23E259AE00872273 /* Debug */ = { A769B23B23E259AE00872273 /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
@ -9930,33 +9643,6 @@
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug; defaultConfigurationName = Debug;
}; };
A75FDB5023E399AC00529352 /* Build configuration list for PBXNativeTarget "hidapi-iOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A75FDB4E23E399AC00529352 /* Debug */,
A75FDB4F23E399AC00529352 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
A75FDB6B23E3A2C900529352 /* Build configuration list for PBXNativeTarget "hidapi-tvOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A75FDB6C23E3A2C900529352 /* Debug */,
A75FDB6D23E3A2C900529352 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
A75FDB8923E4C74400529352 /* Build configuration list for PBXNativeTarget "hidapi" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A75FDB8A23E4C74400529352 /* Debug */,
A75FDB8B23E4C74400529352 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
A769B23A23E259AE00872273 /* Build configuration list for PBXNativeTarget "Static Library-tvOS" */ = { A769B23A23E259AE00872273 /* Build configuration list for PBXNativeTarget "Static Library-tvOS" */ = {
isa = XCConfigurationList; isa = XCConfigurationList;
buildConfigurations = ( buildConfigurations = (

View File

@ -42,6 +42,7 @@
#include "SDL_filesystem.h" #include "SDL_filesystem.h"
#include "SDL_gamecontroller.h" #include "SDL_gamecontroller.h"
#include "SDL_haptic.h" #include "SDL_haptic.h"
#include "SDL_hidapi.h"
#include "SDL_hints.h" #include "SDL_hints.h"
#include "SDL_joystick.h" #include "SDL_joystick.h"
#include "SDL_loadso.h" #include "SDL_loadso.h"

415
include/SDL_hidapi.h Normal file
View File

@ -0,0 +1,415 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2021 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
/**
* \file SDL_hidapi.h
*
* Header file for SDL HIDAPI functions.
*
* This is an adaptation of the original HIDAPI interface by Alan Ott,
* and includes source code licensed under the following BSD license:
*
Copyright (c) 2010, Alan Ott, Signal 11 Software
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Signal 11 Software nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*
* If you would like a version of SDL without this code, you can build SDL
* with SDL_DISABLE_HIDAPI defined. You might want to do this for example on
* iOS or tvOS to avoid a dependency on the CoreBluetooth framework.
*/
#ifndef SDL_hidapi_h_
#define SDL_hidapi_h_
/**
* \brief A handle representing an open HID device
*/
struct SDL_hid_device_;
typedef struct SDL_hid_device_ SDL_hid_device; /**< opaque hidapi structure */
/** hidapi info structure */
/**
* \brief Information about a connected HID device
*/
typedef struct SDL_hid_device_info
{
/** Platform-specific device path */
char *path;
/** Device Vendor ID */
unsigned short vendor_id;
/** Device Product ID */
unsigned short product_id;
/** Serial Number */
wchar_t *serial_number;
/** Device Release Number in binary-coded decimal,
also known as Device Version Number */
unsigned short release_number;
/** Manufacturer String */
wchar_t *manufacturer_string;
/** Product string */
wchar_t *product_string;
/** Usage Page for this Device/Interface
(Windows/Mac only). */
unsigned short usage_page;
/** Usage for this Device/Interface
(Windows/Mac only).*/
unsigned short usage;
/** The USB interface which this logical device
represents.
* Valid on both Linux implementations in all cases.
* Valid on the Windows implementation only if the device
contains more than one interface. */
int interface_number;
/** Additional information about the USB interface.
Valid on libusb and Android implementations. */
int interface_class;
int interface_subclass;
int interface_protocol;
/** Pointer to the next device */
struct SDL_hid_device_info *next;
} SDL_hid_device_info;
/**
* Initialize the HIDAPI library.
*
* This function initializes the HIDAPI library. Calling it is not
* strictly necessary, as it will be called automatically by
* SDL_hid_enumerate() and any of the SDL_hid_open_*() functions
* if it is needed. This function should be called at the beginning
* of execution however, if there is a chance of HIDAPI handles
* being opened by different threads simultaneously.
*
* \returns 0 on success and -1 on error.
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC int SDLCALL SDL_hid_init(void);
/**
* Finalize the HIDAPI library.
*
* This function frees all of the static data associated with
* HIDAPI. It should be called at the end of execution to avoid
* memory leaks.
*
* \returns 0 on success and -1 on error.
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC int SDLCALL SDL_hid_exit(void);
/**
* Enumerate the HID Devices.
*
* This function returns a linked list of all the HID devices
* attached to the system which match vendor_id and product_id.
* If `vendor_id` is set to 0 then any vendor matches.
* If `product_id` is set to 0 then any product matches.
* If `vendor_id` and `product_id` are both set to 0, then
* all HID devices will be returned.
*
* \param vendor_id The Vendor ID (VID) of the types of device to open.
* \param product_id The Product ID (PID) of the types of device to open.
*
* \returns a pointer to a linked list of type SDL_hid_device_info,
* containing information about the HID devices attached to the
* system, or NULL in the case of failure. Free this linked list
* by calling SDL_hid_free_enumeration().
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC SDL_hid_device_info * SDLCALL SDL_hid_enumerate(unsigned short vendor_id, unsigned short product_id);
/**
* Free an enumeration Linked List
*
* This function frees a linked list created by SDL_hid_enumerate().
*
* \param devs Pointer to a list of struct_device returned from
* SDL_hid_enumerate().
*/
extern DECLSPEC void SDLCALL SDL_hid_free_enumeration(SDL_hid_device_info *devs);
/**
* Open a HID device using a Vendor ID (VID), Product ID
* (PID) and optionally a serial number.
*
* If `serial_number` is NULL, the first device with the
* specified VID and PID is opened.
*
* \param vendor_id The Vendor ID (VID) of the device to open.
* \param product_id The Product ID (PID) of the device to open.
* \param serial_number The Serial Number of the device to open
* (Optionally NULL).
*
* \returns a pointer to a SDL_hid_device object on success or NULL on failure.
*
* \since This function is available since SDL 2.0.18.
*/
SDL_hid_device * SDL_hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number);
/**
* Open a HID device by its path name.
*
* The path name be determined by calling SDL_hid_enumerate(), or a
* platform-specific path name can be used (eg: /dev/hidraw0 on
* Linux).
*
* \param path The path name of the device to open
*
* \returns a pointer to a SDL_hid_device object on success or NULL on failure.
*
* \since This function is available since SDL 2.0.18.
*/
SDL_hid_device * SDL_hid_open_path(const char *path, int bExclusive /* = false */);
/**
* Write an Output report to a HID device.
*
* The first byte of `data` must contain the Report ID. For
* devices which only support a single report, this must be set
* to 0x0. The remaining bytes contain the report data. Since
* the Report ID is mandatory, calls to SDL_hid_write() will always
* contain one more byte than the report contains. For example,
* if a hid report is 16 bytes long, 17 bytes must be passed to
* SDL_hid_write(), the Report ID (or 0x0, for devices with a
* single report), followed by the report data (16 bytes). In
* this example, the length passed in would be 17.
*
* SDL_hid_write() will send the data on the first OUT endpoint, if
* one exists. If it does not, it will send the data through
* the Control Endpoint (Endpoint 0).
*
* \param dev A device handle returned from SDL_hid_open().
* \param data The data to send, including the report number as
* the first byte.
* \param length The length in bytes of the data to send.
*
* \returns the actual number of bytes written and -1 on error.
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC int SDLCALL SDL_hid_write(SDL_hid_device *dev, const unsigned char *data, size_t length);
/**
* Read an Input report from a HID device with timeout.
*
* Input reports are returned
* to the host through the INTERRUPT IN endpoint. The first byte will
* contain the Report number if the device uses numbered reports.
*
* \param dev A device handle returned from SDL_hid_open().
* \param data A buffer to put the read data into.
* \param length The number of bytes to read. For devices with
* multiple reports, make sure to read an extra byte for
* the report number.
* \param milliseconds timeout in milliseconds or -1 for blocking wait.
*
* \returns the actual number of bytes read and -1 on error.
If no packet was available to be read within the timeout period, this function returns 0.
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC int SDLCALL SDL_hid_read_timeout(SDL_hid_device *dev, unsigned char *data, size_t length, int milliseconds);
/**
* Read an Input report from a HID device.
*
* Input reports are returned
* to the host through the INTERRUPT IN endpoint. The first byte will
* contain the Report number if the device uses numbered reports.
*
* \param dev A device handle returned from SDL_hid_open().
* \param data A buffer to put the read data into.
* \param length The number of bytes to read. For devices with
* multiple reports, make sure to read an extra byte for
* the report number.
*
* \returns the actual number of bytes read and -1 on error.
* If no packet was available to be read and the handle is in non-blocking mode, this function returns 0.
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC int SDLCALL SDL_hid_read(SDL_hid_device *dev, unsigned char *data, size_t length);
/**
* Set the device handle to be non-blocking.
*
* In non-blocking mode calls to SDL_hid_read() will return
* immediately with a value of 0 if there is no data to be
* read. In blocking mode, SDL_hid_read() will wait (block) until
* there is data to read before returning.
*
* Nonblocking can be turned on and off at any time.
*
* \param dev A device handle returned from SDL_hid_open().
* \param nonblock enable or not the nonblocking reads
* - 1 to enable nonblocking
* - 0 to disable nonblocking.
*
* \returns 0 on success and -1 on error.
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC int SDLCALL SDL_hid_set_nonblocking(SDL_hid_device *dev, int nonblock);
/**
* Send a Feature report to the device.
*
* Feature reports are sent over the Control endpoint as a
* Set_Report transfer. The first byte of `data` must
* contain the Report ID. For devices which only support a
* single report, this must be set to 0x0. The remaining bytes
* contain the report data. Since the Report ID is mandatory,
* calls to SDL_hid_send_feature_report() will always contain one
* more byte than the report contains. For example, if a hid
* report is 16 bytes long, 17 bytes must be passed to
* SDL_hid_send_feature_report(): the Report ID (or 0x0, for
* devices which do not use numbered reports), followed by the
* report data (16 bytes). In this example, the length passed
* in would be 17.
*
* \param dev A device handle returned from SDL_hid_open().
* \param data The data to send, including the report number as
* the first byte.
* \param length The length in bytes of the data to send, including
* the report number.
*
* \returns the actual number of bytes written and -1 on error.
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC int SDLCALL SDL_hid_send_feature_report(SDL_hid_device *dev, const unsigned char *data, size_t length);
/**
* Get a feature report from a HID device.
*
* Set the first byte of `data` to the Report ID of the
* report to be read. Make sure to allow space for this
* extra byte in `data`. Upon return, the first byte will
* still contain the Report ID, and the report data will
* start in data[1].
*
* \param dev A device handle returned from SDL_hid_open().
* \param data A buffer to put the read data into, including
* the Report ID. Set the first byte of `data` to the
* Report ID of the report to be read, or set it to zero
* if your device does not use numbered reports.
* \param length The number of bytes to read, including an
* extra byte for the report ID. The buffer can be longer
* than the actual report.
*
* \returns the number of bytes read plus one for the report ID
* (which is still in the first byte), or -1 on error.
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC int SDLCALL SDL_hid_get_feature_report(SDL_hid_device *dev, unsigned char *data, size_t length);
/**
* Close a HID device.
*
* \param dev A device handle returned from SDL_hid_open().
*/
extern DECLSPEC void SDLCALL SDL_hid_close(SDL_hid_device *dev);
/**
* Get The Manufacturer String from a HID device.
*
* \param dev A device handle returned from SDL_hid_open().
* \param string A wide string buffer to put the data into.
* \param maxlen The length of the buffer in multiples of wchar_t.
*
* \returns 0 on success and -1 on error.
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC int SDLCALL SDL_hid_get_manufacturer_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen);
/**
* Get The Product String from a HID device.
*
* \param dev A device handle returned from SDL_hid_open().
* \param string A wide string buffer to put the data into.
* \param maxlen The length of the buffer in multiples of wchar_t.
*
* \returns 0 on success and -1 on error.
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC int SDLCALL SDL_hid_get_product_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen);
/**
* Get The Serial Number String from a HID device.
*
* \param dev A device handle returned from SDL_hid_open().
* \param string A wide string buffer to put the data into.
* \param maxlen The length of the buffer in multiples of wchar_t.
*
* \returns 0 on success and -1 on error.
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC int SDLCALL SDL_hid_get_serial_number_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen);
/**
* Get a string from a HID device, based on its string index.
*
* \param dev A device handle returned from SDL_hid_open().
* \param string_index The index of the string to get.
* \param string A wide string buffer to put the data into.
* \param maxlen The length of the buffer in multiples of wchar_t.
*
* \returns 0 on success and -1 on error.
*
* \since This function is available since SDL 2.0.18.
*/
extern DECLSPEC int SDLCALL SDL_hid_get_indexed_string(SDL_hid_device *dev, int string_index, wchar_t *string, size_t maxlen);
#endif /* SDL_hidapi_h_ */
/* vi: set sts=4 ts=4 sw=4 expandtab: */

View File

@ -666,6 +666,7 @@ extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode,
#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1)
#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1)
#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1)
#define SDL_iconv_wchar_utf8(S) SDL_iconv_string("UTF-8", "WCHAR_T", (char *)S, (SDL_wcslen(S)+1)*sizeof(wchar_t))
/* force builds using Clang's static analysis tools to use literal C runtime /* force builds using Clang's static analysis tools to use literal C runtime
here, since there are possibly tests that are ineffective otherwise. */ here, since there are possibly tests that are ineffective otherwise. */

View File

@ -827,3 +827,18 @@
#define SDL_LinuxSetThreadPriorityAndPolicy SDL_LinuxSetThreadPriorityAndPolicy_REAL #define SDL_LinuxSetThreadPriorityAndPolicy SDL_LinuxSetThreadPriorityAndPolicy_REAL
#define SDL_GameControllerGetAppleSFSymbolsNameForButton SDL_GameControllerGetAppleSFSymbolsNameForButton_REAL #define SDL_GameControllerGetAppleSFSymbolsNameForButton SDL_GameControllerGetAppleSFSymbolsNameForButton_REAL
#define SDL_GameControllerGetAppleSFSymbolsNameForAxis SDL_GameControllerGetAppleSFSymbolsNameForAxis_REAL #define SDL_GameControllerGetAppleSFSymbolsNameForAxis SDL_GameControllerGetAppleSFSymbolsNameForAxis_REAL
#define SDL_hid_init SDL_hid_init_REAL
#define SDL_hid_exit SDL_hid_exit_REAL
#define SDL_hid_enumerate SDL_hid_enumerate_REAL
#define SDL_hid_free_enumeration SDL_hid_free_enumeration_REAL
#define SDL_hid_write SDL_hid_write_REAL
#define SDL_hid_read_timeout SDL_hid_read_timeout_REAL
#define SDL_hid_read SDL_hid_read_REAL
#define SDL_hid_set_nonblocking SDL_hid_set_nonblocking_REAL
#define SDL_hid_send_feature_report SDL_hid_send_feature_report_REAL
#define SDL_hid_get_feature_report SDL_hid_get_feature_report_REAL
#define SDL_hid_close SDL_hid_close_REAL
#define SDL_hid_get_manufacturer_string SDL_hid_get_manufacturer_string_REAL
#define SDL_hid_get_product_string SDL_hid_get_product_string_REAL
#define SDL_hid_get_serial_number_string SDL_hid_get_serial_number_string_REAL
#define SDL_hid_get_indexed_string SDL_hid_get_indexed_string_REAL

View File

@ -896,3 +896,18 @@ SDL_DYNAPI_PROC(int,SDL_LinuxSetThreadPriorityAndPolicy,(Sint64 a, int b, int c)
#endif #endif
SDL_DYNAPI_PROC(const char*,SDL_GameControllerGetAppleSFSymbolsNameForButton,(SDL_GameController *a, SDL_GameControllerButton b),(a,b),return) SDL_DYNAPI_PROC(const char*,SDL_GameControllerGetAppleSFSymbolsNameForButton,(SDL_GameController *a, SDL_GameControllerButton b),(a,b),return)
SDL_DYNAPI_PROC(const char*,SDL_GameControllerGetAppleSFSymbolsNameForAxis,(SDL_GameController *a, SDL_GameControllerAxis b),(a,b),return) SDL_DYNAPI_PROC(const char*,SDL_GameControllerGetAppleSFSymbolsNameForAxis,(SDL_GameController *a, SDL_GameControllerAxis b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_hid_init,(void),(),return)
SDL_DYNAPI_PROC(int,SDL_hid_exit,(void),(),return)
SDL_DYNAPI_PROC(SDL_hid_device_info*,SDL_hid_enumerate,(unsigned short a, unsigned short b),(a,b),return)
SDL_DYNAPI_PROC(void,SDL_hid_free_enumeration,(SDL_hid_device_info *a),(a),)
SDL_DYNAPI_PROC(int,SDL_hid_write,(SDL_hid_device *a, const unsigned char *b, size_t c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_hid_read_timeout,(SDL_hid_device *a, unsigned char *b, size_t c, int d),(a,b,c,d),return)
SDL_DYNAPI_PROC(int,SDL_hid_read,(SDL_hid_device *a, unsigned char *b, size_t c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_hid_set_nonblocking,(SDL_hid_device *a, int b),(a,b),return)
SDL_DYNAPI_PROC(int,SDL_hid_send_feature_report,(SDL_hid_device *a, const unsigned char *b, size_t c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_hid_get_feature_report,(SDL_hid_device *a, unsigned char *b, size_t c),(a,b,c),return)
SDL_DYNAPI_PROC(void,SDL_hid_close,(SDL_hid_device *a),(a),)
SDL_DYNAPI_PROC(int,SDL_hid_get_manufacturer_string,(SDL_hid_device *a, wchar_t *b, size_t c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_hid_get_product_string,(SDL_hid_device *a, wchar_t *b, size_t c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_hid_get_serial_number_string,(SDL_hid_device *a, wchar_t *b, size_t c),(a,b,c),return)
SDL_DYNAPI_PROC(int,SDL_hid_get_indexed_string,(SDL_hid_device *a, int b, wchar_t *c, size_t d),(a,b,c,d),return)

View File

@ -31,14 +31,12 @@
#include "SDL_loadso.h" #include "SDL_loadso.h"
#include "SDL_hidapi.h" #include "SDL_hidapi.h"
#include "SDL_hidapi_c.h"
#ifdef SDL_JOYSTICK_HIDAPI #ifndef SDL_DISABLE_HIDAPI
/* Platform HIDAPI Implementation */ /* Platform HIDAPI Implementation */
#define hid_device_ PLATFORM_hid_device_
#define hid_device PLATFORM_hid_device
#define hid_device_info PLATFORM_hid_device_info
#define hid_init PLATFORM_hid_init #define hid_init PLATFORM_hid_init
#define hid_exit PLATFORM_hid_exit #define hid_exit PLATFORM_hid_exit
#define hid_enumerate PLATFORM_hid_enumerate #define hid_enumerate PLATFORM_hid_enumerate
@ -99,11 +97,18 @@ static const SDL_UDEV_Symbols *udev_ctx = NULL;
#include "windows/hid.c" #include "windows/hid.c"
#define HAVE_PLATFORM_BACKEND 1 #define HAVE_PLATFORM_BACKEND 1
#define udev_ctx 1 #define udev_ctx 1
#elif __ANDROID__
/* The implementation for Android is in a separate .cpp file */
#include "hidapi/hidapi.h"
#define HAVE_PLATFORM_BACKEND 1
#define udev_ctx 1
#elif __IPHONEOS__ || __TVOS__
/* The implementation for iOS and tvOS is in a separate .m file */
#include "hidapi/hidapi.h"
#define HAVE_PLATFORM_BACKEND 1
#define udev_ctx 1
#endif #endif
#undef hid_device_
#undef hid_device
#undef hid_device_info
#undef hid_init #undef hid_init
#undef hid_exit #undef hid_exit
#undef hid_enumerate #undef hid_enumerate
@ -137,9 +142,6 @@ static const SDL_UDEV_Symbols *udev_ctx = NULL;
/* DRIVER HIDAPI Implementation */ /* DRIVER HIDAPI Implementation */
#define hid_device_ DRIVER_hid_device_
#define hid_device DRIVER_hid_device
#define hid_device_info DRIVER_hid_device_info
#define hid_init DRIVER_hid_init #define hid_init DRIVER_hid_init
#define hid_exit DRIVER_hid_exit #define hid_exit DRIVER_hid_exit
#define hid_enumerate DRIVER_hid_enumerate #define hid_enumerate DRIVER_hid_enumerate
@ -166,9 +168,6 @@ static const SDL_UDEV_Symbols *udev_ctx = NULL;
#error Need a driver hid.c for this platform! #error Need a driver hid.c for this platform!
#endif #endif
#undef hid_device_
#undef hid_device
#undef hid_device_info
#undef hid_init #undef hid_init
#undef hid_exit #undef hid_exit
#undef hid_enumerate #undef hid_enumerate
@ -276,9 +275,6 @@ static struct
#define libusb_handle_events libusb_ctx.handle_events #define libusb_handle_events libusb_ctx.handle_events
#define libusb_handle_events_completed libusb_ctx.handle_events_completed #define libusb_handle_events_completed libusb_ctx.handle_events_completed
#define hid_device_ LIBUSB_hid_device_
#define hid_device LIBUSB_hid_device
#define hid_device_info LIBUSB_hid_device_info
#define hid_init LIBUSB_hid_init #define hid_init LIBUSB_hid_init
#define hid_exit LIBUSB_hid_exit #define hid_exit LIBUSB_hid_exit
#define hid_enumerate LIBUSB_hid_enumerate #define hid_enumerate LIBUSB_hid_enumerate
@ -327,9 +323,6 @@ SDL_libusb_get_string_descriptor(libusb_device_handle *dev,
#undef HIDAPI_H__ #undef HIDAPI_H__
#include "libusb/hid.c" #include "libusb/hid.c"
#undef hid_device_
#undef hid_device
#undef hid_device_info
#undef hid_init #undef hid_init
#undef hid_exit #undef hid_exit
#undef hid_enumerate #undef hid_enumerate
@ -357,24 +350,23 @@ SDL_libusb_get_string_descriptor(libusb_device_handle *dev,
#endif /* SDL_LIBUSB_DYNAMIC */ #endif /* SDL_LIBUSB_DYNAMIC */
#endif /* !SDL_DISABLE_HIDAPI */
/* Shared HIDAPI Implementation */ /* Shared HIDAPI Implementation */
#undef HIDAPI_H__
#include "hidapi/hidapi.h"
struct hidapi_backend { struct hidapi_backend {
int (*hid_write)(hid_device* device, const unsigned char* data, size_t length); int (*hid_write)(SDL_hid_device* device, const unsigned char* data, size_t length);
int (*hid_read_timeout)(hid_device* device, unsigned char* data, size_t length, int milliseconds); int (*hid_read_timeout)(SDL_hid_device* device, unsigned char* data, size_t length, int milliseconds);
int (*hid_read)(hid_device* device, unsigned char* data, size_t length); int (*hid_read)(SDL_hid_device* device, unsigned char* data, size_t length);
int (*hid_set_nonblocking)(hid_device* device, int nonblock); int (*hid_set_nonblocking)(SDL_hid_device* device, int nonblock);
int (*hid_send_feature_report)(hid_device* device, const unsigned char* data, size_t length); int (*hid_send_feature_report)(SDL_hid_device* device, const unsigned char* data, size_t length);
int (*hid_get_feature_report)(hid_device* device, unsigned char* data, size_t length); int (*hid_get_feature_report)(SDL_hid_device* device, unsigned char* data, size_t length);
void (*hid_close)(hid_device* device); void (*hid_close)(SDL_hid_device* device);
int (*hid_get_manufacturer_string)(hid_device* device, wchar_t* string, size_t maxlen); int (*hid_get_manufacturer_string)(SDL_hid_device* device, wchar_t* string, size_t maxlen);
int (*hid_get_product_string)(hid_device* device, wchar_t* string, size_t maxlen); int (*hid_get_product_string)(SDL_hid_device* device, wchar_t* string, size_t maxlen);
int (*hid_get_serial_number_string)(hid_device* device, wchar_t* string, size_t maxlen); int (*hid_get_serial_number_string)(SDL_hid_device* device, wchar_t* string, size_t maxlen);
int (*hid_get_indexed_string)(hid_device* device, int string_index, wchar_t* string, size_t maxlen); int (*hid_get_indexed_string)(SDL_hid_device* device, int string_index, wchar_t* string, size_t maxlen);
const wchar_t* (*hid_error)(hid_device* device); const wchar_t* (*hid_error)(SDL_hid_device* device);
}; };
#if HAVE_PLATFORM_BACKEND #if HAVE_PLATFORM_BACKEND
@ -431,14 +423,14 @@ static const struct hidapi_backend LIBUSB_Backend = {
typedef struct _HIDDeviceWrapper HIDDeviceWrapper; typedef struct _HIDDeviceWrapper HIDDeviceWrapper;
struct _HIDDeviceWrapper struct _HIDDeviceWrapper
{ {
hid_device *device; /* must be first field */ SDL_hid_device *device; /* must be first field */
const struct hidapi_backend *backend; const struct hidapi_backend *backend;
}; };
#if HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || defined(SDL_LIBUSB_DYNAMIC) #if HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || defined(SDL_LIBUSB_DYNAMIC)
static HIDDeviceWrapper * static HIDDeviceWrapper *
CreateHIDDeviceWrapper(hid_device *device, const struct hidapi_backend *backend) CreateHIDDeviceWrapper(SDL_hid_device *device, const struct hidapi_backend *backend)
{ {
HIDDeviceWrapper *ret = (HIDDeviceWrapper *)SDL_malloc(sizeof(*ret)); HIDDeviceWrapper *ret = (HIDDeviceWrapper *)SDL_malloc(sizeof(*ret));
ret->device = device; ret->device = device;
@ -446,16 +438,16 @@ CreateHIDDeviceWrapper(hid_device *device, const struct hidapi_backend *backend)
return ret; return ret;
} }
static hid_device * static SDL_hid_device *
WrapHIDDevice(HIDDeviceWrapper *wrapper) WrapHIDDevice(HIDDeviceWrapper *wrapper)
{ {
return (hid_device *)wrapper; return (SDL_hid_device *)wrapper;
} }
#endif /* HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || SDL_LIBUSB_DYNAMIC */ #endif /* HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || SDL_LIBUSB_DYNAMIC */
static HIDDeviceWrapper * static HIDDeviceWrapper *
UnwrapHIDDevice(hid_device *device) UnwrapHIDDevice(SDL_hid_device *device)
{ {
return (HIDDeviceWrapper *)device; return (HIDDeviceWrapper *)device;
} }
@ -466,6 +458,8 @@ DeleteHIDDeviceWrapper(HIDDeviceWrapper *device)
SDL_free(device); SDL_free(device);
} }
#ifndef SDL_DISABLE_HIDAPI
#define COPY_IF_EXISTS(var) \ #define COPY_IF_EXISTS(var) \
if (pSrc->var != NULL) { \ if (pSrc->var != NULL) { \
pDst->var = SDL_strdup(pSrc->var); \ pDst->var = SDL_strdup(pSrc->var); \
@ -479,10 +473,8 @@ DeleteHIDDeviceWrapper(HIDDeviceWrapper *device)
pDst->var = NULL; \ pDst->var = NULL; \
} }
#ifdef SDL_LIBUSB_DYNAMIC
static void static void
LIBUSB_CopyHIDDeviceInfo(struct LIBUSB_hid_device_info *pSrc, CopyHIDDeviceInfo(struct SDL_hid_device_info *pSrc, struct SDL_hid_device_info *pDst)
struct hid_device_info *pDst)
{ {
COPY_IF_EXISTS(path) COPY_IF_EXISTS(path)
pDst->vendor_id = pSrc->vendor_id; pDst->vendor_id = pSrc->vendor_id;
@ -499,58 +491,26 @@ LIBUSB_CopyHIDDeviceInfo(struct LIBUSB_hid_device_info *pSrc,
pDst->interface_protocol = pSrc->interface_protocol; pDst->interface_protocol = pSrc->interface_protocol;
pDst->next = NULL; pDst->next = NULL;
} }
#endif /* SDL_LIBUSB_DYNAMIC */
#if HAVE_DRIVER_BACKEND
static void
DRIVER_CopyHIDDeviceInfo(struct DRIVER_hid_device_info *pSrc,
struct hid_device_info *pDst)
{
COPY_IF_EXISTS(path)
pDst->vendor_id = pSrc->vendor_id;
pDst->product_id = pSrc->product_id;
WCOPY_IF_EXISTS(serial_number)
pDst->release_number = pSrc->release_number;
WCOPY_IF_EXISTS(manufacturer_string)
WCOPY_IF_EXISTS(product_string)
pDst->usage_page = pSrc->usage_page;
pDst->usage = pSrc->usage;
pDst->interface_number = pSrc->interface_number;
pDst->interface_class = pSrc->interface_class;
pDst->interface_subclass = pSrc->interface_subclass;
pDst->interface_protocol = pSrc->interface_protocol;
pDst->next = NULL;
}
#endif /* HAVE_DRIVER_BACKEND */
#if HAVE_PLATFORM_BACKEND
static void
PLATFORM_CopyHIDDeviceInfo(struct PLATFORM_hid_device_info *pSrc,
struct hid_device_info *pDst)
{
COPY_IF_EXISTS(path)
pDst->vendor_id = pSrc->vendor_id;
pDst->product_id = pSrc->product_id;
WCOPY_IF_EXISTS(serial_number)
pDst->release_number = pSrc->release_number;
WCOPY_IF_EXISTS(manufacturer_string)
WCOPY_IF_EXISTS(product_string)
pDst->usage_page = pSrc->usage_page;
pDst->usage = pSrc->usage;
pDst->interface_number = pSrc->interface_number;
pDst->interface_class = pSrc->interface_class;
pDst->interface_subclass = pSrc->interface_subclass;
pDst->interface_protocol = pSrc->interface_protocol;
pDst->next = NULL;
}
#endif /* HAVE_PLATFORM_BACKEND */
#undef COPY_IF_EXISTS #undef COPY_IF_EXISTS
#undef WCOPY_IF_EXISTS #undef WCOPY_IF_EXISTS
#endif /* SDL_DISABLE_HIDAPI */
static SDL_bool SDL_hidapi_wasinit = SDL_FALSE; static SDL_bool SDL_hidapi_wasinit = SDL_FALSE;
int HID_API_EXPORT HID_API_CALL hid_init(void) static void SDL_SetHIDAPIError( const wchar_t *error )
{
if (error) {
char *error_utf8 = SDL_iconv_wchar_utf8(error);
if (error_utf8) {
SDL_SetError("%s", error_utf8);
SDL_free(error_utf8);
}
}
}
int SDL_hid_init(void)
{ {
int attempts = 0, success = 0; int attempts = 0, success = 0;
@ -624,7 +584,7 @@ int HID_API_EXPORT HID_API_CALL hid_init(void)
return 0; return 0;
} }
int HID_API_EXPORT HID_API_CALL hid_exit(void) int SDL_hid_exit(void)
{ {
int result = 0; int result = 0;
@ -650,24 +610,24 @@ int HID_API_EXPORT HID_API_CALL hid_exit(void)
return result; return result;
} }
struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned short vendor_id, unsigned short product_id) struct SDL_hid_device_info *SDL_hid_enumerate(unsigned short vendor_id, unsigned short product_id)
{ {
#if HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || defined(SDL_LIBUSB_DYNAMIC) #if HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || defined(SDL_LIBUSB_DYNAMIC)
#ifdef SDL_LIBUSB_DYNAMIC #ifdef SDL_LIBUSB_DYNAMIC
struct LIBUSB_hid_device_info *usb_devs = NULL; struct SDL_hid_device_info *usb_devs = NULL;
struct LIBUSB_hid_device_info *usb_dev; struct SDL_hid_device_info *usb_dev;
#endif #endif
#if HAVE_DRIVER_BACKEND #if HAVE_DRIVER_BACKEND
struct DRIVER_hid_device_info* driver_devs = NULL; struct SDL_hid_device_info* driver_devs = NULL;
struct DRIVER_hid_device_info* driver_dev; struct SDL_hid_device_info* driver_dev;
#endif #endif
#if HAVE_PLATFORM_BACKEND #if HAVE_PLATFORM_BACKEND
struct PLATFORM_hid_device_info *raw_devs = NULL; struct SDL_hid_device_info *raw_devs = NULL;
struct PLATFORM_hid_device_info *raw_dev; struct SDL_hid_device_info *raw_dev;
#endif #endif
struct hid_device_info *devs = NULL, *last = NULL, *new_dev; struct SDL_hid_device_info *devs = NULL, *last = NULL, *new_dev;
if (hid_init() != 0) { if (SDL_hid_init() != 0) {
return NULL; return NULL;
} }
@ -678,14 +638,14 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
SDL_Log("libusb devices found:"); SDL_Log("libusb devices found:");
#endif #endif
for (usb_dev = usb_devs; usb_dev; usb_dev = usb_dev->next) { for (usb_dev = usb_devs; usb_dev; usb_dev = usb_dev->next) {
new_dev = (struct hid_device_info*) SDL_malloc(sizeof(struct hid_device_info)); new_dev = (struct SDL_hid_device_info*) SDL_malloc(sizeof(struct SDL_hid_device_info));
if (!new_dev) { if (!new_dev) {
LIBUSB_hid_free_enumeration(usb_devs); LIBUSB_hid_free_enumeration(usb_devs);
hid_free_enumeration(devs); SDL_hid_free_enumeration(devs);
SDL_OutOfMemory(); SDL_OutOfMemory();
return NULL; return NULL;
} }
LIBUSB_CopyHIDDeviceInfo(usb_dev, new_dev); CopyHIDDeviceInfo(usb_dev, new_dev);
#ifdef DEBUG_HIDAPI #ifdef DEBUG_HIDAPI
SDL_Log(" - %ls %ls 0x%.4hx 0x%.4hx", SDL_Log(" - %ls %ls 0x%.4hx 0x%.4hx",
usb_dev->manufacturer_string, usb_dev->product_string, usb_dev->manufacturer_string, usb_dev->product_string,
@ -705,8 +665,8 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
#ifdef HAVE_DRIVER_BACKEND #ifdef HAVE_DRIVER_BACKEND
driver_devs = DRIVER_hid_enumerate(vendor_id, product_id); driver_devs = DRIVER_hid_enumerate(vendor_id, product_id);
for (driver_dev = driver_devs; driver_dev; driver_dev = driver_dev->next) { for (driver_dev = driver_devs; driver_dev; driver_dev = driver_dev->next) {
new_dev = (struct hid_device_info*) SDL_malloc(sizeof(struct hid_device_info)); new_dev = (struct SDL_hid_device_info*) SDL_malloc(sizeof(struct SDL_hid_device_info));
DRIVER_CopyHIDDeviceInfo(driver_dev, new_dev); CopyHIDDeviceInfo(driver_dev, new_dev);
if (last != NULL) { if (last != NULL) {
last->next = new_dev; last->next = new_dev;
@ -751,7 +711,7 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
} }
#endif #endif
if (!bFound) { if (!bFound) {
new_dev = (struct hid_device_info*) SDL_malloc(sizeof(struct hid_device_info)); new_dev = (struct SDL_hid_device_info*) SDL_malloc(sizeof(struct SDL_hid_device_info));
if (!new_dev) { if (!new_dev) {
#ifdef SDL_LIBUSB_DYNAMIC #ifdef SDL_LIBUSB_DYNAMIC
if (libusb_ctx.libhandle) { if (libusb_ctx.libhandle) {
@ -759,11 +719,11 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
} }
#endif #endif
PLATFORM_hid_free_enumeration(raw_devs); PLATFORM_hid_free_enumeration(raw_devs);
hid_free_enumeration(devs); SDL_hid_free_enumeration(devs);
SDL_OutOfMemory(); SDL_OutOfMemory();
return NULL; return NULL;
} }
PLATFORM_CopyHIDDeviceInfo(raw_dev, new_dev); CopyHIDDeviceInfo(raw_dev, new_dev);
new_dev->next = NULL; new_dev->next = NULL;
if (last != NULL) { if (last != NULL) {
@ -790,10 +750,10 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
#endif /* HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || SDL_LIBUSB_DYNAMIC */ #endif /* HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || SDL_LIBUSB_DYNAMIC */
} }
void HID_API_EXPORT HID_API_CALL hid_free_enumeration(struct hid_device_info *devs) void SDL_hid_free_enumeration(struct SDL_hid_device_info *devs)
{ {
while (devs) { while (devs) {
struct hid_device_info *next = devs->next; struct SDL_hid_device_info *next = devs->next;
SDL_free(devs->path); SDL_free(devs->path);
SDL_free(devs->serial_number); SDL_free(devs->serial_number);
SDL_free(devs->manufacturer_string); SDL_free(devs->manufacturer_string);
@ -803,18 +763,18 @@ void HID_API_EXPORT HID_API_CALL hid_free_enumeration(struct hid_device_info *d
} }
} }
HID_API_EXPORT hid_device * HID_API_CALL hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number) SDL_hid_device *SDL_hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number)
{ {
#if HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || defined(SDL_LIBUSB_DYNAMIC) #if HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || defined(SDL_LIBUSB_DYNAMIC)
hid_device *pDevice = NULL; SDL_hid_device *pDevice = NULL;
if (hid_init() != 0) { if (SDL_hid_init() != 0) {
return NULL; return NULL;
} }
#if HAVE_PLATFORM_BACKEND #if HAVE_PLATFORM_BACKEND
if (udev_ctx && if (udev_ctx &&
(pDevice = (hid_device*) PLATFORM_hid_open(vendor_id, product_id, serial_number)) != NULL) { (pDevice = (SDL_hid_device*) PLATFORM_hid_open(vendor_id, product_id, serial_number)) != NULL) {
HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &PLATFORM_Backend); HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &PLATFORM_Backend);
return WrapHIDDevice(wrapper); return WrapHIDDevice(wrapper);
@ -822,7 +782,7 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open(unsigned short vendor_id, unsi
#endif /* HAVE_PLATFORM_BACKEND */ #endif /* HAVE_PLATFORM_BACKEND */
#if HAVE_DRIVER_BACKEND #if HAVE_DRIVER_BACKEND
if ((pDevice = (hid_device*) DRIVER_hid_open(vendor_id, product_id, serial_number)) != NULL) { if ((pDevice = (SDL_hid_device*) DRIVER_hid_open(vendor_id, product_id, serial_number)) != NULL) {
HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &DRIVER_Backend); HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &DRIVER_Backend);
return WrapHIDDevice(wrapper); return WrapHIDDevice(wrapper);
@ -831,7 +791,7 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open(unsigned short vendor_id, unsi
#ifdef SDL_LIBUSB_DYNAMIC #ifdef SDL_LIBUSB_DYNAMIC
if (libusb_ctx.libhandle && if (libusb_ctx.libhandle &&
(pDevice = (hid_device*) LIBUSB_hid_open(vendor_id, product_id, serial_number)) != NULL) { (pDevice = (SDL_hid_device*) LIBUSB_hid_open(vendor_id, product_id, serial_number)) != NULL) {
HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &LIBUSB_Backend); HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &LIBUSB_Backend);
return WrapHIDDevice(wrapper); return WrapHIDDevice(wrapper);
@ -843,18 +803,18 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open(unsigned short vendor_id, unsi
return NULL; return NULL;
} }
HID_API_EXPORT hid_device * HID_API_CALL hid_open_path(const char *path, int bExclusive /* = false */) SDL_hid_device *SDL_hid_open_path(const char *path, int bExclusive /* = false */)
{ {
#if HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || defined(SDL_LIBUSB_DYNAMIC) #if HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || defined(SDL_LIBUSB_DYNAMIC)
hid_device *pDevice = NULL; SDL_hid_device *pDevice = NULL;
if (hid_init() != 0) { if (SDL_hid_init() != 0) {
return NULL; return NULL;
} }
#if HAVE_PLATFORM_BACKEND #if HAVE_PLATFORM_BACKEND
if (udev_ctx && if (udev_ctx &&
(pDevice = (hid_device*) PLATFORM_hid_open_path(path, bExclusive)) != NULL) { (pDevice = (SDL_hid_device*) PLATFORM_hid_open_path(path, bExclusive)) != NULL) {
HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &PLATFORM_Backend); HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &PLATFORM_Backend);
return WrapHIDDevice(wrapper); return WrapHIDDevice(wrapper);
@ -862,7 +822,7 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open_path(const char *path, int bEx
#endif /* HAVE_PLATFORM_BACKEND */ #endif /* HAVE_PLATFORM_BACKEND */
#if HAVE_DRIVER_BACKEND #if HAVE_DRIVER_BACKEND
if ((pDevice = (hid_device*) DRIVER_hid_open_path(path, bExclusive)) != NULL) { if ((pDevice = (SDL_hid_device*) DRIVER_hid_open_path(path, bExclusive)) != NULL) {
HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &DRIVER_Backend); HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &DRIVER_Backend);
return WrapHIDDevice(wrapper); return WrapHIDDevice(wrapper);
@ -871,7 +831,7 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open_path(const char *path, int bEx
#ifdef SDL_LIBUSB_DYNAMIC #ifdef SDL_LIBUSB_DYNAMIC
if (libusb_ctx.libhandle && if (libusb_ctx.libhandle &&
(pDevice = (hid_device*) LIBUSB_hid_open_path(path, bExclusive)) != NULL) { (pDevice = (SDL_hid_device*) LIBUSB_hid_open_path(path, bExclusive)) != NULL) {
HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &LIBUSB_Backend); HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &LIBUSB_Backend);
return WrapHIDDevice(wrapper); return WrapHIDDevice(wrapper);
@ -883,77 +843,111 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open_path(const char *path, int bEx
return NULL; return NULL;
} }
int HID_API_EXPORT HID_API_CALL hid_write(hid_device *device, const unsigned char *data, size_t length) int SDL_hid_write(SDL_hid_device *device, const unsigned char *data, size_t length)
{ {
HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device); HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
return wrapper->backend->hid_write(wrapper->device, data, length); int result = wrapper->backend->hid_write(wrapper->device, data, length);
if (result < 0) {
SDL_SetHIDAPIError(wrapper->backend->hid_error(wrapper->device));
}
return result;
} }
int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *device, unsigned char *data, size_t length, int milliseconds) int SDL_hid_read_timeout(SDL_hid_device *device, unsigned char *data, size_t length, int milliseconds)
{ {
HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device); HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
return wrapper->backend->hid_read_timeout(wrapper->device, data, length, milliseconds); int result = wrapper->backend->hid_read_timeout(wrapper->device, data, length, milliseconds);
if (result < 0) {
SDL_SetHIDAPIError(wrapper->backend->hid_error(wrapper->device));
}
return result;
} }
int HID_API_EXPORT HID_API_CALL hid_read(hid_device *device, unsigned char *data, size_t length) int SDL_hid_read(SDL_hid_device *device, unsigned char *data, size_t length)
{ {
HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device); HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
return wrapper->backend->hid_read(wrapper->device, data, length); int result = wrapper->backend->hid_read(wrapper->device, data, length);
if (result < 0) {
SDL_SetHIDAPIError(wrapper->backend->hid_error(wrapper->device));
}
return result;
} }
int HID_API_EXPORT HID_API_CALL hid_set_nonblocking(hid_device *device, int nonblock) int SDL_hid_set_nonblocking(SDL_hid_device *device, int nonblock)
{ {
HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device); HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
return wrapper->backend->hid_set_nonblocking(wrapper->device, nonblock); int result = wrapper->backend->hid_set_nonblocking(wrapper->device, nonblock);
if (result < 0) {
SDL_SetHIDAPIError(wrapper->backend->hid_error(wrapper->device));
}
return result;
} }
int HID_API_EXPORT HID_API_CALL hid_send_feature_report(hid_device *device, const unsigned char *data, size_t length) int SDL_hid_send_feature_report(SDL_hid_device *device, const unsigned char *data, size_t length)
{ {
HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device); HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
return wrapper->backend->hid_send_feature_report(wrapper->device, data, length); int result = wrapper->backend->hid_send_feature_report(wrapper->device, data, length);
if (result < 0) {
SDL_SetHIDAPIError(wrapper->backend->hid_error(wrapper->device));
}
return result;
} }
int HID_API_EXPORT HID_API_CALL hid_get_feature_report(hid_device *device, unsigned char *data, size_t length) int SDL_hid_get_feature_report(SDL_hid_device *device, unsigned char *data, size_t length)
{ {
HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device); HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
return wrapper->backend->hid_get_feature_report(wrapper->device, data, length); int result = wrapper->backend->hid_get_feature_report(wrapper->device, data, length);
if (result < 0) {
SDL_SetHIDAPIError(wrapper->backend->hid_error(wrapper->device));
}
return result;
} }
void HID_API_EXPORT HID_API_CALL hid_close(hid_device *device) void SDL_hid_close(SDL_hid_device *device)
{ {
HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device); HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
wrapper->backend->hid_close(wrapper->device); wrapper->backend->hid_close(wrapper->device);
DeleteHIDDeviceWrapper(wrapper); DeleteHIDDeviceWrapper(wrapper);
} }
int HID_API_EXPORT_CALL hid_get_manufacturer_string(hid_device *device, wchar_t *string, size_t maxlen) int SDL_hid_get_manufacturer_string(SDL_hid_device *device, wchar_t *string, size_t maxlen)
{ {
HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device); HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
return wrapper->backend->hid_get_manufacturer_string(wrapper->device, string, maxlen); int result = wrapper->backend->hid_get_manufacturer_string(wrapper->device, string, maxlen);
if (result < 0) {
SDL_SetHIDAPIError(wrapper->backend->hid_error(wrapper->device));
}
return result;
} }
int HID_API_EXPORT_CALL hid_get_product_string(hid_device *device, wchar_t *string, size_t maxlen) int SDL_hid_get_product_string(SDL_hid_device *device, wchar_t *string, size_t maxlen)
{ {
HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device); HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
return wrapper->backend->hid_get_product_string(wrapper->device, string, maxlen); int result = wrapper->backend->hid_get_product_string(wrapper->device, string, maxlen);
if (result < 0) {
SDL_SetHIDAPIError(wrapper->backend->hid_error(wrapper->device));
}
return result;
} }
int HID_API_EXPORT_CALL hid_get_serial_number_string(hid_device *device, wchar_t *string, size_t maxlen) int SDL_hid_get_serial_number_string(SDL_hid_device *device, wchar_t *string, size_t maxlen)
{ {
HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device); HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
return wrapper->backend->hid_get_serial_number_string(wrapper->device, string, maxlen); int result = wrapper->backend->hid_get_serial_number_string(wrapper->device, string, maxlen);
if (result < 0) {
SDL_SetHIDAPIError(wrapper->backend->hid_error(wrapper->device));
}
return result;
} }
int HID_API_EXPORT_CALL hid_get_indexed_string(hid_device *device, int string_index, wchar_t *string, size_t maxlen) int SDL_hid_get_indexed_string(SDL_hid_device *device, int string_index, wchar_t *string, size_t maxlen)
{ {
HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device); HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
return wrapper->backend->hid_get_indexed_string(wrapper->device, string_index, string, maxlen); int result = wrapper->backend->hid_get_indexed_string(wrapper->device, string_index, string, maxlen);
} if (result < 0) {
SDL_SetHIDAPIError(wrapper->backend->hid_error(wrapper->device));
HID_API_EXPORT const wchar_t* HID_API_CALL hid_error(hid_device *device) }
{ return result;
HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
return wrapper->backend->hid_error(wrapper->device);
} }
#ifdef HAVE_ENABLE_GAMECUBE_ADAPTORS #ifdef HAVE_ENABLE_GAMECUBE_ADAPTORS
@ -1013,6 +1007,4 @@ void SDL_EnableGameCubeAdaptors(void)
} }
#endif /* HAVE_ENABLE_GAMECUBE_ADAPTORS */ #endif /* HAVE_ENABLE_GAMECUBE_ADAPTORS */
#endif /* SDL_JOYSTICK_HIDAPI */
/* vi: set sts=4 ts=4 sw=4 expandtab: */ /* vi: set sts=4 ts=4 sw=4 expandtab: */

View File

@ -22,6 +22,27 @@
// //
// This layer glues the hidapi API to Android's USB and BLE stack. // This layer glues the hidapi API to Android's USB and BLE stack.
#ifndef SDL_DISABLE_HIDAPI
#define hid_init PLATFORM_hid_init
#define hid_exit PLATFORM_hid_exit
#define hid_enumerate PLATFORM_hid_enumerate
#define hid_free_enumeration PLATFORM_hid_free_enumeration
#define hid_open PLATFORM_hid_open
#define hid_open_path PLATFORM_hid_open_path
#define hid_write PLATFORM_hid_write
#define hid_read_timeout PLATFORM_hid_read_timeout
#define hid_read PLATFORM_hid_read
#define hid_set_nonblocking PLATFORM_hid_set_nonblocking
#define hid_send_feature_report PLATFORM_hid_send_feature_report
#define hid_get_feature_report PLATFORM_hid_get_feature_report
#define hid_close PLATFORM_hid_close
#define hid_get_manufacturer_string PLATFORM_hid_get_manufacturer_string
#define hid_get_product_string PLATFORM_hid_get_product_string
#define hid_get_serial_number_string PLATFORM_hid_get_serial_number_string
#define hid_get_indexed_string PLATFORM_hid_get_indexed_string
#define hid_error PLATFORM_hid_error
#include <jni.h> #include <jni.h>
#include <android/log.h> #include <android/log.h>
#include <pthread.h> #include <pthread.h>
@ -1264,3 +1285,5 @@ int hid_exit(void)
} }
} }
#endif /* SDL_DISABLE_HIDAPI */

View File

@ -29,7 +29,14 @@
#include <wchar.h> #include <wchar.h>
#if defined(_WIN32) && !defined(NAMESPACE) && (0) /* SDL: don't export hidapi syms */ #ifdef SDL_hidapi_h_
#define SDL_HIDAPI_IMPLEMENTATION
#define hid_device_ SDL_hid_device_
#define hid_device SDL_hid_device
#define hid_device_info SDL_hid_device_info
#endif
#if defined(_WIN32) && !defined(NAMESPACE) && !defined(SDL_HIDAPI_IMPLEMENTATION) /* SDL: don't export hidapi syms */
#define HID_API_EXPORT __declspec(dllexport) #define HID_API_EXPORT __declspec(dllexport)
#define HID_API_CALL #define HID_API_CALL
#else #else
@ -50,6 +57,7 @@ extern "C" {
namespace NAMESPACE { namespace NAMESPACE {
#endif #endif
#ifndef SDL_HIDAPI_IMPLEMENTATION
struct hid_device_; struct hid_device_;
typedef struct hid_device_ hid_device; /**< opaque hidapi structure */ typedef struct hid_device_ hid_device; /**< opaque hidapi structure */
@ -93,6 +101,7 @@ namespace NAMESPACE {
/** Pointer to the next device */ /** Pointer to the next device */
struct hid_device_info *next; struct hid_device_info *next;
}; };
#endif /* !SDL_HIDAPI_IMPLEMENTATION */
/** @brief Initialize the HIDAPI library. /** @brief Initialize the HIDAPI library.

View File

@ -20,7 +20,26 @@
*/ */
#include "../../SDL_internal.h" #include "../../SDL_internal.h"
#ifdef SDL_JOYSTICK_HIDAPI #ifndef SDL_DISABLE_HIDAPI
#define hid_init PLATFORM_hid_init
#define hid_exit PLATFORM_hid_exit
#define hid_enumerate PLATFORM_hid_enumerate
#define hid_free_enumeration PLATFORM_hid_free_enumeration
#define hid_open PLATFORM_hid_open
#define hid_open_path PLATFORM_hid_open_path
#define hid_write PLATFORM_hid_write
#define hid_read_timeout PLATFORM_hid_read_timeout
#define hid_read PLATFORM_hid_read
#define hid_set_nonblocking PLATFORM_hid_set_nonblocking
#define hid_send_feature_report PLATFORM_hid_send_feature_report
#define hid_get_feature_report PLATFORM_hid_get_feature_report
#define hid_close PLATFORM_hid_close
#define hid_get_manufacturer_string PLATFORM_hid_get_manufacturer_string
#define hid_get_product_string PLATFORM_hid_get_product_string
#define hid_get_serial_number_string PLATFORM_hid_get_serial_number_string
#define hid_get_indexed_string PLATFORM_hid_get_indexed_string
#define hid_error PLATFORM_hid_error
#include <CoreBluetooth/CoreBluetooth.h> #include <CoreBluetooth/CoreBluetooth.h>
#include <QuartzCore/QuartzCore.h> #include <QuartzCore/QuartzCore.h>
@ -737,7 +756,12 @@ void HID_API_EXPORT HID_API_CALL hid_ble_scan( bool bStart )
} }
} }
hid_device * HID_API_EXPORT hid_open_path( const char *path, int bExclusive /* = false */ ) HID_API_EXPORT hid_device * HID_API_CALL hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number)
{
return NULL;
}
HID_API_EXPORT hid_device * HID_API_CALL hid_open_path( const char *path, int bExclusive /* = false */ )
{ {
hid_device *result = NULL; hid_device *result = NULL;
NSString *nssPath = [NSString stringWithUTF8String:path]; NSString *nssPath = [NSString stringWithUTF8String:path];
@ -851,6 +875,11 @@ int HID_API_EXPORT_CALL hid_get_serial_number_string(hid_device *dev, wchar_t *s
return 0; return 0;
} }
int HID_API_EXPORT_CALL hid_get_indexed_string(hid_device *dev, int string_index, wchar_t *string, size_t maxlen)
{
return -1;
}
int HID_API_EXPORT hid_write(hid_device *dev, const unsigned char *data, size_t length) int HID_API_EXPORT hid_write(hid_device *dev, const unsigned char *data, size_t length)
{ {
HIDBLEDevice *device_handle = (__bridge HIDBLEDevice *)dev->device_handle; HIDBLEDevice *device_handle = (__bridge HIDBLEDevice *)dev->device_handle;
@ -927,4 +956,9 @@ int HID_API_EXPORT hid_read_timeout(hid_device *dev, unsigned char *data, size_t
return result; return result;
} }
#endif /* SDL_JOYSTICK_HIDAPI */ HID_API_EXPORT const wchar_t* HID_API_CALL hid_error(hid_device *dev)
{
return NULL;
}
#endif /* !SDL_DISABLE_HIDAPI */

View File

@ -31,8 +31,6 @@
#include "SDL_thread.h" #include "SDL_thread.h"
#include "SDL_mutex.h" #include "SDL_mutex.h"
#ifdef SDL_JOYSTICK_HIDAPI
#if defined(HAVE__WCSDUP) && !defined(HAVE_WCSDUP) #if defined(HAVE__WCSDUP) && !defined(HAVE_WCSDUP)
#define wcsdup _wcsdup #define wcsdup _wcsdup
#endif #endif
@ -1742,5 +1740,3 @@ uint16_t get_usb_code_for_current_locale(void)
#ifdef NAMESPACE #ifdef NAMESPACE
} }
#endif #endif
#endif /* SDL_JOYSTICK_HIDAPI */

View File

@ -22,8 +22,6 @@
********************************************************/ ********************************************************/
#include "../../SDL_internal.h" #include "../../SDL_internal.h"
#ifdef SDL_JOYSTICK_HIDAPI
#ifndef _GNU_SOURCE #ifndef _GNU_SOURCE
#define _GNU_SOURCE /* needed for wcsdup() before glibc 2.10 */ #define _GNU_SOURCE /* needed for wcsdup() before glibc 2.10 */
#endif #endif
@ -902,5 +900,3 @@ HID_API_EXPORT const wchar_t * HID_API_CALL hid_error(hid_device *dev)
#ifdef NAMESPACE #ifdef NAMESPACE
} }
#endif #endif
#endif /* SDL_JOYSTICK_HIDAPI */

View File

@ -21,8 +21,6 @@
********************************************************/ ********************************************************/
#include "../../SDL_internal.h" #include "../../SDL_internal.h"
#ifdef SDL_JOYSTICK_HIDAPI
/* See Apple Technical Note TN2187 for details on IOHidManager. */ /* See Apple Technical Note TN2187 for details on IOHidManager. */
#include <IOKit/hid/IOHIDManager.h> #include <IOKit/hid/IOHIDManager.h>
@ -1191,5 +1189,3 @@ int main(void)
return 0; return 0;
} }
#endif #endif
#endif /* SDL_JOYSTICK_HIDAPI */

View File

@ -21,8 +21,6 @@
********************************************************/ ********************************************************/
#include "../../SDL_internal.h" #include "../../SDL_internal.h"
#ifdef SDL_JOYSTICK_HIDAPI
#include <windows.h> #include <windows.h>
#ifndef _WIN32_WINNT_WIN8 #ifndef _WIN32_WINNT_WIN8
@ -1099,5 +1097,3 @@ int __cdecl main(int argc, char* argv[])
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */
#endif #endif
#endif /* SDL_JOYSTICK_HIDAPI */

View File

@ -32,7 +32,7 @@
#include "../SDL_sysjoystick.h" #include "../SDL_sysjoystick.h"
#include "SDL_hidapijoystick_c.h" #include "SDL_hidapijoystick_c.h"
#include "SDL_hidapi_rumble.h" #include "SDL_hidapi_rumble.h"
#include "../../hidapi/SDL_hidapi.h" #include "../../hidapi/SDL_hidapi_c.h"
#ifdef SDL_JOYSTICK_HIDAPI_GAMECUBE #ifdef SDL_JOYSTICK_HIDAPI_GAMECUBE
@ -129,7 +129,7 @@ HIDAPI_DriverGameCube_InitDevice(SDL_HIDAPI_Device *device)
return SDL_FALSE; return SDL_FALSE;
} }
device->dev = hid_open_path(device->path, 0); device->dev = SDL_hid_open_path(device->path, 0);
if (!device->dev) { if (!device->dev) {
SDL_free(ctx); SDL_free(ctx);
SDL_SetError("Couldn't open %s", device->path); SDL_SetError("Couldn't open %s", device->path);
@ -154,7 +154,7 @@ HIDAPI_DriverGameCube_InitDevice(SDL_HIDAPI_Device *device)
} }
} else { } else {
/* This is all that's needed to initialize the device. Really! */ /* This is all that's needed to initialize the device. Really! */
if (hid_write(device->dev, &initMagic, sizeof(initMagic)) != sizeof(initMagic)) { if (SDL_hid_write(device->dev, &initMagic, sizeof(initMagic)) != sizeof(initMagic)) {
SDL_SetError("Couldn't initialize WUP-028"); SDL_SetError("Couldn't initialize WUP-028");
goto error; goto error;
} }
@ -163,7 +163,7 @@ HIDAPI_DriverGameCube_InitDevice(SDL_HIDAPI_Device *device)
SDL_Delay(10); SDL_Delay(10);
/* Add all the applicable joysticks */ /* Add all the applicable joysticks */
while ((size = hid_read_timeout(device->dev, packet, sizeof(packet), 0)) > 0) { while ((size = SDL_hid_read_timeout(device->dev, packet, sizeof(packet), 0)) > 0) {
#ifdef DEBUG_GAMECUBE_PROTOCOL #ifdef DEBUG_GAMECUBE_PROTOCOL
HIDAPI_DumpPacket("Nintendo GameCube packet: size = %d", packet, size); HIDAPI_DumpPacket("Nintendo GameCube packet: size = %d", packet, size);
#endif #endif
@ -204,7 +204,7 @@ error:
SDL_LockMutex(device->dev_lock); SDL_LockMutex(device->dev_lock);
{ {
if (device->dev) { if (device->dev) {
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
} }
if (device->context) { if (device->context) {
@ -389,7 +389,7 @@ HIDAPI_DriverGameCube_UpdateDevice(SDL_HIDAPI_Device *device)
int size; int size;
/* Read input packet */ /* Read input packet */
while ((size = hid_read_timeout(device->dev, packet, sizeof(packet), 0)) > 0) { while ((size = SDL_hid_read_timeout(device->dev, packet, sizeof(packet), 0)) > 0) {
#ifdef DEBUG_GAMECUBE_PROTOCOL #ifdef DEBUG_GAMECUBE_PROTOCOL
//HIDAPI_DumpPacket("Nintendo GameCube packet: size = %d", packet, size); //HIDAPI_DumpPacket("Nintendo GameCube packet: size = %d", packet, size);
#endif #endif
@ -510,7 +510,7 @@ HIDAPI_DriverGameCube_FreeDevice(SDL_HIDAPI_Device *device)
SDL_LockMutex(device->dev_lock); SDL_LockMutex(device->dev_lock);
{ {
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
SDL_free(device->context); SDL_free(device->context);

View File

@ -87,7 +87,7 @@ HIDAPI_DriverLuna_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick
return SDL_FALSE; return SDL_FALSE;
} }
device->dev = hid_open_path(device->path, 0); device->dev = SDL_hid_open_path(device->path, 0);
if (!device->dev) { if (!device->dev) {
SDL_SetError("Couldn't open %s", device->path); SDL_SetError("Couldn't open %s", device->path);
SDL_free(ctx); SDL_free(ctx);
@ -386,7 +386,7 @@ HIDAPI_DriverLuna_UpdateDevice(SDL_HIDAPI_Device *device)
return SDL_FALSE; return SDL_FALSE;
} }
while ((size = hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) { while ((size = SDL_hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) {
#ifdef DEBUG_LUNA_PROTOCOL #ifdef DEBUG_LUNA_PROTOCOL
HIDAPI_DumpPacket("Amazon Luna packet: size = %d", data, size); HIDAPI_DumpPacket("Amazon Luna packet: size = %d", data, size);
#endif #endif
@ -413,7 +413,7 @@ HIDAPI_DriverLuna_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystic
SDL_LockMutex(device->dev_lock); SDL_LockMutex(device->dev_lock);
{ {
if (device->dev) { if (device->dev) {
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
} }

View File

@ -163,11 +163,11 @@ HIDAPI_DriverPS4_GetDeviceName(Uint16 vendor_id, Uint16 product_id)
return NULL; return NULL;
} }
static int ReadFeatureReport(hid_device *dev, Uint8 report_id, Uint8 *report, size_t length) static int ReadFeatureReport(SDL_hid_device *dev, Uint8 report_id, Uint8 *report, size_t length)
{ {
SDL_memset(report, 0, length); SDL_memset(report, 0, length);
report[0] = report_id; report[0] = report_id;
return hid_get_feature_report(dev, report, length); return SDL_hid_get_feature_report(dev, report, length);
} }
static SDL_bool HIDAPI_DriverPS4_CanRumble(Uint16 vendor_id, Uint16 product_id) static SDL_bool HIDAPI_DriverPS4_CanRumble(Uint16 vendor_id, Uint16 product_id)
@ -479,7 +479,7 @@ HIDAPI_DriverPS4_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
ctx->joystick = joystick; ctx->joystick = joystick;
ctx->last_packet = SDL_GetTicks(); ctx->last_packet = SDL_GetTicks();
device->dev = hid_open_path(device->path, 0); device->dev = SDL_hid_open_path(device->path, 0);
if (!device->dev) { if (!device->dev) {
SDL_free(ctx); SDL_free(ctx);
SDL_SetError("Couldn't open %s", device->path); SDL_SetError("Couldn't open %s", device->path);
@ -511,7 +511,7 @@ HIDAPI_DriverPS4_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
ctx->is_bluetooth = SDL_TRUE; ctx->is_bluetooth = SDL_TRUE;
/* Read a report to see if we're in enhanced mode */ /* Read a report to see if we're in enhanced mode */
size = hid_read_timeout(device->dev, data, sizeof(data), 16); size = SDL_hid_read_timeout(device->dev, data, sizeof(data), 16);
#ifdef DEBUG_PS4_PROTOCOL #ifdef DEBUG_PS4_PROTOCOL
if (size > 0) { if (size > 0) {
HIDAPI_DumpPacket("PS4 first packet: size = %d", data, size); HIDAPI_DumpPacket("PS4 first packet: size = %d", data, size);
@ -684,7 +684,7 @@ HIDAPI_DriverPS4_SetJoystickSensorsEnabled(SDL_HIDAPI_Device *device, SDL_Joysti
} }
static void static void
HIDAPI_DriverPS4_HandleStatePacket(SDL_Joystick *joystick, hid_device *dev, SDL_DriverPS4_Context *ctx, PS4StatePacket_t *packet) HIDAPI_DriverPS4_HandleStatePacket(SDL_Joystick *joystick, SDL_hid_device *dev, SDL_DriverPS4_Context *ctx, PS4StatePacket_t *packet)
{ {
static const float TOUCHPAD_SCALEX = 1.0f / 1920; static const float TOUCHPAD_SCALEX = 1.0f / 1920;
static const float TOUCHPAD_SCALEY = 1.0f / 920; /* This is noted as being 944 resolution, but 920 feels better */ static const float TOUCHPAD_SCALEY = 1.0f / 920; /* This is noted as being 944 resolution, but 920 feels better */
@ -846,7 +846,7 @@ HIDAPI_DriverPS4_UpdateDevice(SDL_HIDAPI_Device *device)
return SDL_FALSE; return SDL_FALSE;
} }
while ((size = hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) { while ((size = SDL_hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) {
#ifdef DEBUG_PS4_PROTOCOL #ifdef DEBUG_PS4_PROTOCOL
HIDAPI_DumpPacket("PS4 packet: size = %d", data, size); HIDAPI_DumpPacket("PS4 packet: size = %d", data, size);
#endif #endif
@ -908,7 +908,7 @@ HIDAPI_DriverPS4_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick
SDL_LockMutex(device->dev_lock); SDL_LockMutex(device->dev_lock);
{ {
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
SDL_free(device->context); SDL_free(device->context);

View File

@ -192,11 +192,11 @@ HIDAPI_DriverPS5_GetDeviceName(Uint16 vendor_id, Uint16 product_id)
return NULL; return NULL;
} }
static int ReadFeatureReport(hid_device *dev, Uint8 report_id, Uint8 *report, size_t length) static int ReadFeatureReport(SDL_hid_device *dev, Uint8 report_id, Uint8 *report, size_t length)
{ {
SDL_memset(report, 0, length); SDL_memset(report, 0, length);
report[0] = report_id; report[0] = report_id;
return hid_get_feature_report(dev, report, length); return SDL_hid_get_feature_report(dev, report, length);
} }
static void static void
@ -553,7 +553,7 @@ HIDAPI_DriverPS5_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
ctx->joystick = joystick; ctx->joystick = joystick;
ctx->last_packet = SDL_GetTicks(); ctx->last_packet = SDL_GetTicks();
device->dev = hid_open_path(device->path, 0); device->dev = SDL_hid_open_path(device->path, 0);
if (!device->dev) { if (!device->dev) {
SDL_free(ctx); SDL_free(ctx);
SDL_SetError("Couldn't open %s", device->path); SDL_SetError("Couldn't open %s", device->path);
@ -562,7 +562,7 @@ HIDAPI_DriverPS5_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
device->context = ctx; device->context = ctx;
/* Read a report to see what mode we're in */ /* Read a report to see what mode we're in */
size = hid_read_timeout(device->dev, data, sizeof(data), 16); size = SDL_hid_read_timeout(device->dev, data, sizeof(data), 16);
#ifdef DEBUG_PS5_PROTOCOL #ifdef DEBUG_PS5_PROTOCOL
if (size > 0) { if (size > 0) {
HIDAPI_DumpPacket("PS5 first packet: size = %d", data, size); HIDAPI_DumpPacket("PS5 first packet: size = %d", data, size);
@ -761,7 +761,7 @@ HIDAPI_DriverPS5_SetJoystickSensorsEnabled(SDL_HIDAPI_Device *device, SDL_Joysti
} }
static void static void
HIDAPI_DriverPS5_HandleSimpleStatePacket(SDL_Joystick *joystick, hid_device *dev, SDL_DriverPS5_Context *ctx, PS5SimpleStatePacket_t *packet) HIDAPI_DriverPS5_HandleSimpleStatePacket(SDL_Joystick *joystick, SDL_hid_device *dev, SDL_DriverPS5_Context *ctx, PS5SimpleStatePacket_t *packet)
{ {
Sint16 axis; Sint16 axis;
@ -855,7 +855,7 @@ HIDAPI_DriverPS5_HandleSimpleStatePacket(SDL_Joystick *joystick, hid_device *dev
} }
static void static void
HIDAPI_DriverPS5_HandleStatePacket(SDL_Joystick *joystick, hid_device *dev, SDL_DriverPS5_Context *ctx, PS5StatePacket_t *packet) HIDAPI_DriverPS5_HandleStatePacket(SDL_Joystick *joystick, SDL_hid_device *dev, SDL_DriverPS5_Context *ctx, PS5StatePacket_t *packet)
{ {
static const float TOUCHPAD_SCALEX = 1.0f / 1920; static const float TOUCHPAD_SCALEX = 1.0f / 1920;
static const float TOUCHPAD_SCALEY = 1.0f / 1070; static const float TOUCHPAD_SCALEY = 1.0f / 1070;
@ -1010,7 +1010,7 @@ HIDAPI_DriverPS5_UpdateDevice(SDL_HIDAPI_Device *device)
return SDL_FALSE; return SDL_FALSE;
} }
while ((size = hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) { while ((size = SDL_hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) {
#ifdef DEBUG_PS5_PROTOCOL #ifdef DEBUG_PS5_PROTOCOL
HIDAPI_DumpPacket("PS5 packet: size = %d", data, size); HIDAPI_DumpPacket("PS5 packet: size = %d", data, size);
#endif #endif
@ -1071,7 +1071,7 @@ HIDAPI_DriverPS5_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick
SDL_LockMutex(device->dev_lock); SDL_LockMutex(device->dev_lock);
{ {
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
SDL_free(device->context); SDL_free(device->context);

View File

@ -80,7 +80,7 @@ static int SDL_HIDAPI_RumbleThread(void *data)
#ifdef DEBUG_RUMBLE #ifdef DEBUG_RUMBLE
HIDAPI_DumpPacket("Rumble packet: size = %d", request->data, request->size); HIDAPI_DumpPacket("Rumble packet: size = %d", request->data, request->size);
#endif #endif
hid_write(request->device->dev, request->data, request->size); SDL_hid_write(request->device->dev, request->data, request->size);
} }
SDL_UnlockMutex(request->device->dev_lock); SDL_UnlockMutex(request->device->dev_lock);
(void)SDL_AtomicDecRef(&request->device->rumble_pending); (void)SDL_AtomicDecRef(&request->device->rumble_pending);

View File

@ -88,7 +88,7 @@ HIDAPI_DriverStadia_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joysti
return SDL_FALSE; return SDL_FALSE;
} }
device->dev = hid_open_path(device->path, 0); device->dev = SDL_hid_open_path(device->path, 0);
if (!device->dev) { if (!device->dev) {
SDL_SetError("Couldn't open %s", device->path); SDL_SetError("Couldn't open %s", device->path);
SDL_free(ctx); SDL_free(ctx);
@ -267,7 +267,7 @@ HIDAPI_DriverStadia_UpdateDevice(SDL_HIDAPI_Device *device)
return SDL_FALSE; return SDL_FALSE;
} }
while ((size = hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) { while ((size = SDL_hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) {
#ifdef DEBUG_STADIA_PROTOCOL #ifdef DEBUG_STADIA_PROTOCOL
HIDAPI_DumpPacket("Google Stadia packet: size = %d", data, size); HIDAPI_DumpPacket("Google Stadia packet: size = %d", data, size);
#endif #endif
@ -287,7 +287,7 @@ HIDAPI_DriverStadia_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joyst
SDL_LockMutex(device->dev_lock); SDL_LockMutex(device->dev_lock);
{ {
if (device->dev) { if (device->dev) {
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
} }

View File

@ -305,7 +305,7 @@ static int WriteSegmentToSteamControllerPacketAssembler( SteamControllerPacketAs
#define BLE_MAX_READ_RETRIES 8 #define BLE_MAX_READ_RETRIES 8
static int SetFeatureReport( hid_device *dev, unsigned char uBuffer[65], int nActualDataLen ) static int SetFeatureReport( SDL_hid_device *dev, unsigned char uBuffer[65], int nActualDataLen )
{ {
int nRet = -1; int nRet = -1;
bool bBle = true; // only wireless/BLE for now, though macOS could do wired in the future bool bBle = true; // only wireless/BLE for now, though macOS could do wired in the future
@ -339,7 +339,7 @@ static int SetFeatureReport( hid_device *dev, unsigned char uBuffer[65], int nAc
pBufferPtr += nBytesInPacket; pBufferPtr += nBytesInPacket;
nSegmentNumber++; nSegmentNumber++;
nRet = hid_send_feature_report( dev, uPacketBuffer, sizeof( uPacketBuffer ) ); nRet = SDL_hid_send_feature_report( dev, uPacketBuffer, sizeof( uPacketBuffer ) );
DPRINTF("SetFeatureReport() ret = %d\n", nRet); DPRINTF("SetFeatureReport() ret = %d\n", nRet);
} }
} }
@ -347,7 +347,7 @@ static int SetFeatureReport( hid_device *dev, unsigned char uBuffer[65], int nAc
return nRet; return nRet;
} }
static int GetFeatureReport( hid_device *dev, unsigned char uBuffer[65] ) static int GetFeatureReport( SDL_hid_device *dev, unsigned char uBuffer[65] )
{ {
int nRet = -1; int nRet = -1;
bool bBle = true; bool bBle = true;
@ -366,7 +366,7 @@ static int GetFeatureReport( hid_device *dev, unsigned char uBuffer[65] )
{ {
memset( uSegmentBuffer, 0, sizeof( uSegmentBuffer ) ); memset( uSegmentBuffer, 0, sizeof( uSegmentBuffer ) );
uSegmentBuffer[ 0 ] = BLE_REPORT_NUMBER; uSegmentBuffer[ 0 ] = BLE_REPORT_NUMBER;
nRet = hid_get_feature_report( dev, uSegmentBuffer, sizeof( uSegmentBuffer ) ); nRet = SDL_hid_get_feature_report( dev, uSegmentBuffer, sizeof( uSegmentBuffer ) );
DPRINTF( "GetFeatureReport ble ret=%d\n", nRet ); DPRINTF( "GetFeatureReport ble ret=%d\n", nRet );
HEXDUMP( uSegmentBuffer, nRet ); HEXDUMP( uSegmentBuffer, nRet );
@ -400,7 +400,7 @@ static int GetFeatureReport( hid_device *dev, unsigned char uBuffer[65] )
return nRet; return nRet;
} }
static int ReadResponse( hid_device *dev, uint8_t uBuffer[65], int nExpectedResponse ) static int ReadResponse( SDL_hid_device *dev, uint8_t uBuffer[65], int nExpectedResponse )
{ {
int nRet = GetFeatureReport( dev, uBuffer ); int nRet = GetFeatureReport( dev, uBuffer );
@ -421,7 +421,7 @@ static int ReadResponse( hid_device *dev, uint8_t uBuffer[65], int nExpectedResp
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Reset steam controller (unmap buttons and pads) and re-fetch capability bits // Reset steam controller (unmap buttons and pads) and re-fetch capability bits
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
static bool ResetSteamController( hid_device *dev, bool bSuppressErrorSpew, uint32_t *punUpdateRateUS ) static bool ResetSteamController( SDL_hid_device *dev, bool bSuppressErrorSpew, uint32_t *punUpdateRateUS )
{ {
// Firmware quirk: Set Feature and Get Feature requests always require a 65-byte buffer. // Firmware quirk: Set Feature and Get Feature requests always require a 65-byte buffer.
unsigned char buf[65]; unsigned char buf[65];
@ -606,18 +606,18 @@ buf[3+nSettings*3+2] = ((uint16_t)VALUE)>>8; \
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Read from a Steam Controller // Read from a Steam Controller
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
static int ReadSteamController( hid_device *dev, uint8_t *pData, int nDataSize ) static int ReadSteamController( SDL_hid_device *dev, uint8_t *pData, int nDataSize )
{ {
memset( pData, 0, nDataSize ); memset( pData, 0, nDataSize );
pData[ 0 ] = BLE_REPORT_NUMBER; // hid_read will also overwrite this with the same value, 0x03 pData[ 0 ] = BLE_REPORT_NUMBER; // hid_read will also overwrite this with the same value, 0x03
return hid_read( dev, pData, nDataSize ); return SDL_hid_read( dev, pData, nDataSize );
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Close a Steam Controller // Close a Steam Controller
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
static void CloseSteamController( hid_device *dev ) static void CloseSteamController( SDL_hid_device *dev )
{ {
// Switch the Steam Controller back to lizard mode so it works with the OS // Switch the Steam Controller back to lizard mode so it works with the OS
unsigned char buf[65]; unsigned char buf[65];
@ -1040,12 +1040,12 @@ HIDAPI_DriverSteam_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystic
} }
device->context = ctx; device->context = ctx;
device->dev = hid_open_path(device->path, 0); device->dev = SDL_hid_open_path(device->path, 0);
if (!device->dev) { if (!device->dev) {
SDL_SetError("Couldn't open %s", device->path); SDL_SetError("Couldn't open %s", device->path);
goto error; goto error;
} }
hid_set_nonblocking(device->dev, 1); SDL_hid_set_nonblocking(device->dev, 1);
if (!ResetSteamController(device->dev, false, &update_rate_in_us)) { if (!ResetSteamController(device->dev, false, &update_rate_in_us)) {
SDL_SetError("Couldn't reset controller"); SDL_SetError("Couldn't reset controller");
@ -1070,7 +1070,7 @@ error:
SDL_LockMutex(device->dev_lock); SDL_LockMutex(device->dev_lock);
{ {
if (device->dev) { if (device->dev) {
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
} }
if (device->context) { if (device->context) {
@ -1266,7 +1266,7 @@ HIDAPI_DriverSteam_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joysti
{ {
CloseSteamController(device->dev); CloseSteamController(device->dev);
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
SDL_free(device->context); SDL_free(device->context);

View File

@ -346,13 +346,13 @@ static int ReadInput(SDL_DriverSwitch_Context *ctx)
return 0; return 0;
} }
return hid_read_timeout(ctx->device->dev, ctx->m_rgucReadBuffer, sizeof(ctx->m_rgucReadBuffer), 0); return SDL_hid_read_timeout(ctx->device->dev, ctx->m_rgucReadBuffer, sizeof(ctx->m_rgucReadBuffer), 0);
} }
static int WriteOutput(SDL_DriverSwitch_Context *ctx, const Uint8 *data, int size) static int WriteOutput(SDL_DriverSwitch_Context *ctx, const Uint8 *data, int size)
{ {
#ifdef SWITCH_SYNCHRONOUS_WRITES #ifdef SWITCH_SYNCHRONOUS_WRITES
return hid_write(ctx->device->dev, data, size); return SDL_hid_write(ctx->device->dev, data, size);
#else #else
/* Use the rumble thread for general asynchronous writes */ /* Use the rumble thread for general asynchronous writes */
if (SDL_HIDAPI_LockRumble() < 0) { if (SDL_HIDAPI_LockRumble() < 0) {
@ -856,7 +856,7 @@ HIDAPI_DriverSwitch_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joysti
ctx->device = device; ctx->device = device;
device->context = ctx; device->context = ctx;
device->dev = hid_open_path(device->path, 0); device->dev = SDL_hid_open_path(device->path, 0);
if (!device->dev) { if (!device->dev) {
SDL_SetError("Couldn't open %s", device->path); SDL_SetError("Couldn't open %s", device->path);
goto error; goto error;
@ -986,7 +986,7 @@ error:
SDL_LockMutex(device->dev_lock); SDL_LockMutex(device->dev_lock);
{ {
if (device->dev) { if (device->dev) {
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
} }
if (device->context) { if (device->context) {
@ -1530,7 +1530,7 @@ HIDAPI_DriverSwitch_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joyst
SDL_LockMutex(device->dev_lock); SDL_LockMutex(device->dev_lock);
{ {
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
SDL_free(device->context); SDL_free(device->context);

View File

@ -88,14 +88,14 @@ HIDAPI_DriverXbox360_GetDeviceName(Uint16 vendor_id, Uint16 product_id)
return NULL; return NULL;
} }
static SDL_bool SetSlotLED(hid_device *dev, Uint8 slot) static SDL_bool SetSlotLED(SDL_hid_device *dev, Uint8 slot)
{ {
const SDL_bool blink = SDL_FALSE; const SDL_bool blink = SDL_FALSE;
Uint8 mode = (blink ? 0x02 : 0x06) + slot; Uint8 mode = (blink ? 0x02 : 0x06) + slot;
Uint8 led_packet[] = { 0x01, 0x03, 0x00 }; Uint8 led_packet[] = { 0x01, 0x03, 0x00 };
led_packet[2] = mode; led_packet[2] = mode;
if (hid_write(dev, led_packet, sizeof(led_packet)) != sizeof(led_packet)) { if (SDL_hid_write(dev, led_packet, sizeof(led_packet)) != sizeof(led_packet)) {
return SDL_FALSE; return SDL_FALSE;
} }
return SDL_TRUE; return SDL_TRUE;
@ -136,7 +136,7 @@ HIDAPI_DriverXbox360_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joyst
return SDL_FALSE; return SDL_FALSE;
} }
device->dev = hid_open_path(device->path, 0); device->dev = SDL_hid_open_path(device->path, 0);
if (!device->dev) { if (!device->dev) {
SDL_SetError("Couldn't open %s", device->path); SDL_SetError("Couldn't open %s", device->path);
SDL_free(ctx); SDL_free(ctx);
@ -296,7 +296,7 @@ HIDAPI_DriverXbox360_UpdateDevice(SDL_HIDAPI_Device *device)
return SDL_FALSE; return SDL_FALSE;
} }
while ((size = hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) { while ((size = SDL_hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) {
#ifdef DEBUG_XBOX_PROTOCOL #ifdef DEBUG_XBOX_PROTOCOL
HIDAPI_DumpPacket("Xbox 360 packet: size = %d", data, size); HIDAPI_DumpPacket("Xbox 360 packet: size = %d", data, size);
#endif #endif
@ -318,7 +318,7 @@ HIDAPI_DriverXbox360_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joys
SDL_LockMutex(device->dev_lock); SDL_LockMutex(device->dev_lock);
{ {
if (device->dev) { if (device->dev) {
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
} }

View File

@ -62,14 +62,14 @@ HIDAPI_DriverXbox360W_GetDeviceName(Uint16 vendor_id, Uint16 product_id)
return "Xbox 360 Wireless Controller"; return "Xbox 360 Wireless Controller";
} }
static SDL_bool SetSlotLED(hid_device *dev, Uint8 slot) static SDL_bool SetSlotLED(SDL_hid_device *dev, Uint8 slot)
{ {
const SDL_bool blink = SDL_FALSE; const SDL_bool blink = SDL_FALSE;
Uint8 mode = (blink ? 0x02 : 0x06) + slot; Uint8 mode = (blink ? 0x02 : 0x06) + slot;
Uint8 led_packet[] = { 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; Uint8 led_packet[] = { 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
led_packet[3] = 0x40 + (mode % 0x0e); led_packet[3] = 0x40 + (mode % 0x0e);
if (hid_write(dev, led_packet, sizeof(led_packet)) != sizeof(led_packet)) { if (SDL_hid_write(dev, led_packet, sizeof(led_packet)) != sizeof(led_packet)) {
return SDL_FALSE; return SDL_FALSE;
} }
return SDL_TRUE; return SDL_TRUE;
@ -105,7 +105,7 @@ HIDAPI_DriverXbox360W_InitDevice(SDL_HIDAPI_Device *device)
return SDL_FALSE; return SDL_FALSE;
} }
device->dev = hid_open_path(device->path, 0); device->dev = SDL_hid_open_path(device->path, 0);
if (!device->dev) { if (!device->dev) {
SDL_free(ctx); SDL_free(ctx);
SDL_SetError("Couldn't open %s", device->path); SDL_SetError("Couldn't open %s", device->path);
@ -113,7 +113,7 @@ HIDAPI_DriverXbox360W_InitDevice(SDL_HIDAPI_Device *device)
} }
device->context = ctx; device->context = ctx;
if (hid_write(device->dev, init_packet, sizeof(init_packet)) != sizeof(init_packet)) { if (SDL_hid_write(device->dev, init_packet, sizeof(init_packet)) != sizeof(init_packet)) {
SDL_SetError("Couldn't write init packet"); SDL_SetError("Couldn't write init packet");
return SDL_FALSE; return SDL_FALSE;
} }
@ -199,7 +199,7 @@ HIDAPI_DriverXbox360W_SetJoystickSensorsEnabled(SDL_HIDAPI_Device *device, SDL_J
} }
static void static void
HIDAPI_DriverXbox360W_HandleStatePacket(SDL_Joystick *joystick, hid_device *dev, SDL_DriverXbox360W_Context *ctx, Uint8 *data, int size) HIDAPI_DriverXbox360W_HandleStatePacket(SDL_Joystick *joystick, SDL_hid_device *dev, SDL_DriverXbox360W_Context *ctx, Uint8 *data, int size)
{ {
Sint16 axis; Sint16 axis;
const SDL_bool invert_y_axes = SDL_TRUE; const SDL_bool invert_y_axes = SDL_TRUE;
@ -259,7 +259,7 @@ HIDAPI_DriverXbox360W_UpdateDevice(SDL_HIDAPI_Device *device)
joystick = SDL_JoystickFromInstanceID(device->joysticks[0]); joystick = SDL_JoystickFromInstanceID(device->joysticks[0]);
} }
while ((size = hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) { while ((size = SDL_hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) {
#ifdef DEBUG_XBOX_PROTOCOL #ifdef DEBUG_XBOX_PROTOCOL
HIDAPI_DumpPacket("Xbox 360 wireless packet: size = %d", data, size); HIDAPI_DumpPacket("Xbox 360 wireless packet: size = %d", data, size);
#endif #endif
@ -321,7 +321,7 @@ HIDAPI_DriverXbox360W_FreeDevice(SDL_HIDAPI_Device *device)
{ {
SDL_LockMutex(device->dev_lock); SDL_LockMutex(device->dev_lock);
{ {
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
SDL_free(device->context); SDL_free(device->context);

View File

@ -317,7 +317,7 @@ HIDAPI_DriverXboxOne_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joyst
return SDL_FALSE; return SDL_FALSE;
} }
device->dev = hid_open_path(device->path, 0); device->dev = SDL_hid_open_path(device->path, 0);
if (!device->dev) { if (!device->dev) {
SDL_free(ctx); SDL_free(ctx);
SDL_SetError("Couldn't open %s", device->path); SDL_SetError("Couldn't open %s", device->path);
@ -945,7 +945,7 @@ HIDAPI_DriverXboxOne_UpdateJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joy
Uint8 data[USB_PACKET_LENGTH]; Uint8 data[USB_PACKET_LENGTH];
int size; int size;
while ((size = hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) { while ((size = SDL_hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) {
#ifdef DEBUG_XBOX_PROTOCOL #ifdef DEBUG_XBOX_PROTOCOL
HIDAPI_DumpPacket("Xbox One packet: size = %d", data, size); HIDAPI_DumpPacket("Xbox One packet: size = %d", data, size);
#endif #endif
@ -1099,7 +1099,7 @@ HIDAPI_DriverXboxOne_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joys
{ {
SDL_LockMutex(device->dev_lock); SDL_LockMutex(device->dev_lock);
{ {
hid_close(device->dev); SDL_hid_close(device->dev);
device->dev = NULL; device->dev = NULL;
SDL_free(device->context); SDL_free(device->context);

View File

@ -767,17 +767,7 @@ HIDAPI_JoystickInit(void)
} }
#endif #endif
#if defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__TVOS__) if (SDL_hid_init() < 0) {
/* The hidapi framwork is weak-linked on Apple platforms */
int HID_API_EXPORT HID_API_CALL hid_init(void) __attribute__((weak_import));
if (hid_init == NULL) {
SDL_SetError("Couldn't initialize hidapi, framework not available");
return -1;
}
#endif /* __MACOSX__ || __IPHONEOS__ || __TVOS__ */
if (hid_init() < 0) {
SDL_SetError("Couldn't initialize hidapi"); SDL_SetError("Couldn't initialize hidapi");
return -1; return -1;
} }
@ -874,7 +864,7 @@ HIDAPI_ConvertString(const wchar_t *wide_string)
} }
static void static void
HIDAPI_AddDevice(struct hid_device_info *info) HIDAPI_AddDevice(struct SDL_hid_device_info *info)
{ {
SDL_HIDAPI_Device *device; SDL_HIDAPI_Device *device;
SDL_HIDAPI_Device *curr, *last = NULL; SDL_HIDAPI_Device *curr, *last = NULL;
@ -994,6 +984,7 @@ HIDAPI_AddDevice(struct hid_device_info *info)
HIDAPI_SetupDeviceDriver(device); HIDAPI_SetupDeviceDriver(device);
#define DEBUG_HIDAPI
#ifdef DEBUG_HIDAPI #ifdef DEBUG_HIDAPI
SDL_Log("Added HIDAPI device '%s' VID 0x%.4x, PID 0x%.4x, version %d, serial %s, interface %d, interface_class %d, interface_subclass %d, interface_protocol %d, usage page 0x%.4x, usage 0x%.4x, path = %s, driver = %s (%s)\n", device->name, device->vendor_id, device->product_id, device->version, device->serial ? device->serial : "NONE", device->interface_number, device->interface_class, device->interface_subclass, device->interface_protocol, device->usage_page, device->usage, device->path, device->driver ? device->driver->hint : "NONE", device->driver && device->driver->enabled ? "ENABLED" : "DISABLED"); SDL_Log("Added HIDAPI device '%s' VID 0x%.4x, PID 0x%.4x, version %d, serial %s, interface %d, interface_class %d, interface_subclass %d, interface_protocol %d, usage page 0x%.4x, usage 0x%.4x, path = %s, driver = %s (%s)\n", device->name, device->vendor_id, device->product_id, device->version, device->serial ? device->serial : "NONE", device->interface_number, device->interface_class, device->interface_subclass, device->interface_protocol, device->usage_page, device->usage, device->path, device->driver ? device->driver->hint : "NONE", device->driver && device->driver->enabled ? "ENABLED" : "DISABLED");
#endif #endif
@ -1038,7 +1029,7 @@ static void
HIDAPI_UpdateDeviceList(void) HIDAPI_UpdateDeviceList(void)
{ {
SDL_HIDAPI_Device *device; SDL_HIDAPI_Device *device;
struct hid_device_info *devs, *info; struct SDL_hid_device_info *devs, *info;
SDL_LockJoysticks(); SDL_LockJoysticks();
@ -1051,7 +1042,7 @@ HIDAPI_UpdateDeviceList(void)
/* Enumerate the devices */ /* Enumerate the devices */
if (SDL_HIDAPI_numdrivers > 0) { if (SDL_HIDAPI_numdrivers > 0) {
devs = hid_enumerate(0, 0); devs = SDL_hid_enumerate(0, 0);
if (devs) { if (devs) {
for (info = devs; info; info = info->next) { for (info = devs; info; info = info->next) {
device = HIDAPI_GetJoystickByInfo(info->path, info->vendor_id, info->product_id); device = HIDAPI_GetJoystickByInfo(info->path, info->vendor_id, info->product_id);
@ -1061,7 +1052,7 @@ HIDAPI_UpdateDeviceList(void)
HIDAPI_AddDevice(info); HIDAPI_AddDevice(info);
} }
} }
hid_free_enumeration(devs); SDL_hid_free_enumeration(devs);
} }
} }
@ -1495,7 +1486,7 @@ HIDAPI_JoystickQuit(void)
SDL_DelHintCallback(SDL_HINT_JOYSTICK_HIDAPI, SDL_DelHintCallback(SDL_HINT_JOYSTICK_HIDAPI,
SDL_HIDAPIDriverHintChanged, NULL); SDL_HIDAPIDriverHintChanged, NULL);
hid_exit(); SDL_hid_exit();
shutting_down = SDL_FALSE; shutting_down = SDL_FALSE;
initialized = SDL_FALSE; initialized = SDL_FALSE;

View File

@ -27,7 +27,7 @@
#include "SDL_mutex.h" #include "SDL_mutex.h"
#include "SDL_joystick.h" #include "SDL_joystick.h"
#include "SDL_gamecontroller.h" #include "SDL_gamecontroller.h"
#include "../../hidapi/hidapi/hidapi.h" #include "SDL_hidapi.h"
#include "../usb_ids.h" #include "../usb_ids.h"
/* This is the full set of HIDAPI drivers available */ /* This is the full set of HIDAPI drivers available */
@ -70,7 +70,7 @@ typedef struct _SDL_HIDAPI_Device
struct _SDL_HIDAPI_DeviceDriver *driver; struct _SDL_HIDAPI_DeviceDriver *driver;
void *context; void *context;
SDL_mutex *dev_lock; SDL_mutex *dev_lock;
hid_device *dev; SDL_hid_device *dev;
SDL_atomic_t rumble_pending; SDL_atomic_t rumble_pending;
int num_joysticks; int num_joysticks;
SDL_JoystickID *joysticks; SDL_JoystickID *joysticks;

View File

@ -146,6 +146,11 @@ static struct
{ "US-ASCII", ENCODING_ASCII }, { "US-ASCII", ENCODING_ASCII },
{ "8859-1", ENCODING_LATIN1 }, { "8859-1", ENCODING_LATIN1 },
{ "ISO-8859-1", ENCODING_LATIN1 }, { "ISO-8859-1", ENCODING_LATIN1 },
#ifdef __WIN32__
{ "WCHAR_T", ENCODING_UTF16LE },
#else
{ "WCHAR_T", ENCODING_UCS4NATIVE },
#endif
{ "UTF8", ENCODING_UTF8 }, { "UTF8", ENCODING_UTF8 },
{ "UTF-8", ENCODING_UTF8 }, { "UTF-8", ENCODING_UTF8 },
{ "UTF16", ENCODING_UTF16 }, { "UTF16", ENCODING_UTF16 },