diff --git a/Android.mk b/Android.mk index 99c0d13de..f3e65262b 100644 --- a/Android.mk +++ b/Android.mk @@ -31,6 +31,8 @@ LOCAL_SRC_FILES := \ $(wildcard $(LOCAL_PATH)/src/file/*.c) \ $(wildcard $(LOCAL_PATH)/src/haptic/*.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/android/*.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/test/*.c)) -LOCAL_SHARED_LIBRARIES := hidapi - LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES LOCAL_CFLAGS += \ -Wall -Wextra \ @@ -121,22 +121,4 @@ LOCAL_MODULE_FILENAME := libSDL2main 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) - diff --git a/Makefile.os2 b/Makefile.os2 index 560eccfa3..2cbe65910 100644 --- a/Makefile.os2 +++ b/Makefile.os2 @@ -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 & SDL_clipboardevents.c SDL_dropevents.c SDL_displayevents.c SDL_gesture.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 & SDL_blendline.c SDL_blendpoint.c SDL_drawline.c SDL_drawpoint.c & SDL_render_sw.c SDL_rotate.c SDL_triangle.c @@ -83,7 +83,7 @@ MOBJS= $(MSRCS:.c=.obj) .extensions: .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/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 diff --git a/VisualC-WinRT/SDL-UWP.vcxproj b/VisualC-WinRT/SDL-UWP.vcxproj index fcb2cd383..bc130f437 100644 --- a/VisualC-WinRT/SDL-UWP.vcxproj +++ b/VisualC-WinRT/SDL-UWP.vcxproj @@ -47,6 +47,7 @@ + @@ -113,6 +114,7 @@ + @@ -592,4 +594,4 @@ - \ No newline at end of file + diff --git a/VisualC-WinRT/SDL-UWP.vcxproj.filters b/VisualC-WinRT/SDL-UWP.vcxproj.filters index f61199c81..1260e9ef5 100644 --- a/VisualC-WinRT/SDL-UWP.vcxproj.filters +++ b/VisualC-WinRT/SDL-UWP.vcxproj.filters @@ -69,6 +69,9 @@ Header Files + + Header Files + Header Files @@ -539,6 +542,9 @@ Source Files + + Source Files + Source Files diff --git a/VisualC/SDL/SDL.vcxproj b/VisualC/SDL/SDL.vcxproj index 5cb8b0388..becaead56 100644 --- a/VisualC/SDL/SDL.vcxproj +++ b/VisualC/SDL/SDL.vcxproj @@ -236,6 +236,7 @@ + @@ -327,7 +328,7 @@ - + diff --git a/VisualC/SDL/SDL.vcxproj.filters b/VisualC/SDL/SDL.vcxproj.filters index bf82d502c..d317135ac 100644 --- a/VisualC/SDL/SDL.vcxproj.filters +++ b/VisualC/SDL/SDL.vcxproj.filters @@ -237,6 +237,9 @@ API Headers + + API Headers + API Headers diff --git a/Xcode/SDL/SDL.xcodeproj/project.pbxproj b/Xcode/SDL/SDL.xcodeproj/project.pbxproj index c77d1fd85..7b16f0d41 100644 --- a/Xcode/SDL/SDL.xcodeproj/project.pbxproj +++ b/Xcode/SDL/SDL.xcodeproj/project.pbxproj @@ -881,8 +881,6 @@ 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 */; }; 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 */; }; A75FDB5923E39E6100529352 /* 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 */; }; A75FDB5F23E39E6100529352 /* 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 */; }; A75FDBB823E4CBC700529352 /* ReadMe.txt in Resources */ = {isa = PBXBuildFile; fileRef = F59C710300D5CB5801000001 /* ReadMe.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, ); }; }; F376F6192559B29300CFC0BC /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6182559B29300CFC0BC /* OpenGLES.framework */; platformFilter = ios; }; 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 */; }; F376F6332559B33D00CFC0BC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E931D8B69C300B177DD /* AudioToolbox.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 */; }; 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 */; }; - F376F6CD2559B54500CFC0BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6CC2559B54500CFC0BC /* UIKit.framework */; }; F376F6D92559B59600CFC0BC /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6D82559B59600CFC0BC /* AudioToolbox.framework */; }; F376F6DB2559B5A000CFC0BC /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DA2559B5A000CFC0BC /* AVFoundation.framework */; }; F376F6DD2559B5A900CFC0BC /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DC2559B5A900CFC0BC /* OpenGLES.framework */; }; F376F6DF2559B5BA00CFC0BC /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DE2559B5BA00CFC0BC /* GameController.framework */; }; F376F6EC2559B5DA00CFC0BC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6CC2559B54500CFC0BC /* UIKit.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 */; }; 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 */; }; F376F71C2559B72900CFC0BC /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F376F6DA2559B5A000CFC0BC /* AVFoundation.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 */; }; 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, ); }; }; + 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, ); }; }; 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, ); }; }; @@ -3529,13 +3517,6 @@ remoteGlobalIDString = BECDF5FE0761BA81005FE872; remoteInfo = "Framework (Upgraded)"; }; - F3190016240CA3BA00ED104F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = A75FDB8023E4C74400529352; - remoteInfo = hidapi; - }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -3545,7 +3526,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - A75FDB9B23E4CAEF00529352 /* hidapi.framework in Embed Frameworks */, ); name = "Embed Frameworks"; 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; }; 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 = ""; }; - 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 = ""; }; A75FDB5723E39E6100529352 /* hidapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hidapi.h; path = hidapi/hidapi.h; sourceTree = ""; }; - 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 = ""; }; A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LICENSE-bsd.txt"; sourceTree = ""; }; A75FDBA423E4CB6F00529352 /* AUTHORS.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS.txt; sourceTree = ""; }; @@ -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; }; 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; }; + F38233842738EB8600F7F527 /* SDL_hidapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hidapi.h; sourceTree = ""; }; + 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 = ""; }; F395BF6425633B2400942BFF /* SDL_crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_crc32.c; sourceTree = ""; }; F395C1912569C68E00942BFF /* SDL_iokitjoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_iokitjoystick_c.h; sourceTree = ""; }; @@ -4043,7 +4022,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F376F70D2559B6A000CFC0BC /* hidapi.framework in Frameworks */, A75FCEAE23E25AB700529352 /* AudioToolbox.framework in Frameworks */, A75FDABA23E28A7A00529352 /* AVFoundation.framework in Frameworks */, A75FCEA723E25AB700529352 /* CoreAudio.framework in Frameworks */, @@ -4066,10 +4044,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F376F71A2559B70B00CFC0BC /* hidapi.framework in Frameworks */, F376F71B2559B71C00CFC0BC /* AudioToolbox.framework in Frameworks */, F376F71C2559B72900CFC0BC /* AVFoundation.framework in Frameworks */, F376F7282559B77100CFC0BC /* CoreAudio.framework in Frameworks */, + F382339D2738EE3F00F7F527 /* CoreBluetooth.framework in Frameworks */, F376F7262559B76800CFC0BC /* CoreFoundation.framework in Frameworks */, F376F7242559B76100CFC0BC /* CoreGraphics.framework in Frameworks */, F394265A253579D200B03694 /* CoreHaptics.framework in Frameworks */, @@ -4082,33 +4060,6 @@ ); 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 */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -4120,10 +4071,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A75FDB9D23E4CAFA00529352 /* hidapi.framework in Frameworks */, F376F6332559B33D00CFC0BC /* AudioToolbox.framework in Frameworks */, F376F6402559B38A00CFC0BC /* AVFoundation.framework in Frameworks */, A7D88B4C23E2437C00DCD162 /* CoreAudio.framework in Frameworks */, + F382339A2738ED5600F7F527 /* CoreBluetooth.framework in Frameworks */, A7D88B4D23E2437C00DCD162 /* CoreFoundation.framework in Frameworks */, F376F63F2559B37300CFC0BC /* CoreGraphics.framework in Frameworks */, F37DC5F325350EBC0002E6F7 /* CoreHaptics.framework in Frameworks */, @@ -4142,10 +4093,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A75FDBA023E4CAFF00529352 /* hidapi.framework in Frameworks */, F376F6DB2559B5A000CFC0BC /* AVFoundation.framework in Frameworks */, F376F6D92559B59600CFC0BC /* AudioToolbox.framework in Frameworks */, A7D88D0723E24BED00DCD162 /* CoreAudio.framework in Frameworks */, + F382339C2738ED6600F7F527 /* CoreBluetooth.framework in Frameworks */, A7D88D0823E24BED00DCD162 /* CoreFoundation.framework in Frameworks */, F376F6F82559B5EC00CFC0BC /* CoreGraphics.framework in Frameworks */, F37DC5F525350ECC0002E6F7 /* CoreHaptics.framework in Frameworks */, @@ -4174,7 +4125,6 @@ 564624381FF821DA0074AC87 /* Metal.framework in Frameworks */, 564624361FF821C20074AC87 /* QuartzCore.framework in Frameworks */, A7381E971D8B6A0300B177DD /* AudioToolbox.framework in Frameworks */, - A75FDB9A23E4CAEF00529352 /* hidapi.framework in Frameworks */, 00D0D0D810675E46004B05EF /* Carbon.framework in Frameworks */, 007317A40858DECD00B2BC32 /* Cocoa.framework in Frameworks */, A7381E961D8B69D600B177DD /* CoreAudio.framework in Frameworks */, @@ -4252,6 +4202,7 @@ A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */, AA7557D51595D4D800BBD41B /* SDL_gesture.h */, AA7557D61595D4D800BBD41B /* SDL_haptic.h */, + F38233842738EB8600F7F527 /* SDL_hidapi.h */, AA7557D71595D4D800BBD41B /* SDL_hints.h */, AA7557D91595D4D800BBD41B /* SDL_joystick.h */, AA7557DA1595D4D800BBD41B /* SDL_keyboard.h */, @@ -4315,9 +4266,6 @@ A769B23D23E259AE00872273 /* libSDL2.a */, A75FCEB323E25AB700529352 /* libSDL2.dylib */, A75FD06C23E25AC700529352 /* libSDL2.dylib */, - A75FDB4923E399AC00529352 /* hidapi.framework */, - A75FDB6E23E3A2C900529352 /* hidapi.framework */, - A75FDB8C23E4C74400529352 /* hidapi.framework */, F3CB94BA26B5E0A400B9C980 /* libSDLmain.a */, F3CB963826B5E0A600B9C980 /* libSDLmain.a */, ); @@ -4406,6 +4354,7 @@ 564624341FF821B70074AC87 /* Frameworks */ = { isa = PBXGroup; children = ( + F382339B2738ED6600F7F527 /* CoreBluetooth.framework */, F376F7272559B77100CFC0BC /* CoreAudio.framework */, F376F7252559B76800CFC0BC /* CoreFoundation.framework */, F376F7212559B74900CFC0BC /* Metal.framework */, @@ -5328,6 +5277,7 @@ A75FCD2023E25AB700529352 /* SDL_copying.h in Headers */, A75FCD2123E25AB700529352 /* yuv_rgb.h in Headers */, A75FCD2223E25AB700529352 /* SDL_dummyaudio.h in Headers */, + F382338C2738EB8600F7F527 /* SDL_hidapi.h in Headers */, A75FCD2323E25AB700529352 /* SDL_uikitmessagebox.h in Headers */, A75FCD2523E25AB700529352 /* SDL_thread_c.h in Headers */, A75FCD2623E25AB700529352 /* SDL_cocoamessagebox.h in Headers */, @@ -5552,6 +5502,7 @@ A75FCED923E25AC700529352 /* SDL_copying.h in Headers */, A75FCEDA23E25AC700529352 /* yuv_rgb.h in Headers */, A75FCEDB23E25AC700529352 /* SDL_dummyaudio.h in Headers */, + F382338D2738EB8600F7F527 /* SDL_hidapi.h in Headers */, A75FCEDC23E25AC700529352 /* SDL_uikitmessagebox.h in Headers */, A75FCEDE23E25AC700529352 /* SDL_thread_c.h in Headers */, A75FCEDF23E25AC700529352 /* SDL_cocoamessagebox.h in Headers */, @@ -5739,30 +5690,6 @@ ); 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 */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -6021,6 +5948,7 @@ F3928194258603F1003191A7 /* SDL_misc.h in Headers */, A7D88A3A23E2437C00DCD162 /* SDL_mouse.h in Headers */, A7D8BB1C23E2514500DCD162 /* SDL_mouse_c.h in Headers */, + F38233862738EB8600F7F527 /* SDL_hidapi.h in Headers */, A7D88A3B23E2437C00DCD162 /* SDL_mutex.h in Headers */, A7D88A3C23E2437C00DCD162 /* SDL_name.h in Headers */, A7D8ABFE23E2514100DCD162 /* SDL_nullevents_c.h in Headers */, @@ -6250,6 +6178,7 @@ F392819F25860422003191A7 /* SDL_misc.h in Headers */, A7D88BF323E24BED00DCD162 /* SDL_mouse.h in Headers */, A7D8BB1D23E2514500DCD162 /* SDL_mouse_c.h in Headers */, + F38233872738EB8600F7F527 /* SDL_hidapi.h in Headers */, A7D88BF423E24BED00DCD162 /* SDL_mutex.h in Headers */, A7D88BF523E24BED00DCD162 /* SDL_name.h in Headers */, A7D8ABFF23E2514100DCD162 /* SDL_nullevents_c.h in Headers */, @@ -6644,6 +6573,7 @@ 5616CA50252BB2BE005D5928 /* SDL_misc.h in Headers */, AA75582A1595D4D800BBD41B /* SDL_mouse.h in Headers */, A7D8BB1B23E2514500DCD162 /* SDL_mouse_c.h in Headers */, + F38233852738EB8600F7F527 /* SDL_hidapi.h in Headers */, AA75582C1595D4D800BBD41B /* SDL_mutex.h in Headers */, AA75582E1595D4D800BBD41B /* SDL_name.h in Headers */, A7D8ABFD23E2514100DCD162 /* SDL_nullevents_c.h in Headers */, @@ -6981,6 +6911,7 @@ DB313FCF17554B71006C0E22 /* SDL_config_macosx.h in Headers */, A7D8ABDE23E2514100DCD162 /* SDL_egl_c.h in Headers */, DB313FD117554B71006C0E22 /* SDL_copying.h in Headers */, + F382338B2738EB8600F7F527 /* SDL_hidapi.h in Headers */, A7D8B3D923E2514300DCD162 /* yuv_rgb.h in Headers */, A7D8B79923E2514400DCD162 /* SDL_dummyaudio.h in Headers */, A7D8AC9823E2514100DCD162 /* SDL_uikitmessagebox.h in Headers */, @@ -7225,60 +7156,6 @@ productReference = A75FD06C23E25AC700529352 /* libSDL2.dylib */; 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 */ = { isa = PBXNativeTarget; buildConfigurationList = A769B23A23E259AE00872273 /* Build configuration list for PBXNativeTarget "Static Library-tvOS" */; @@ -7411,7 +7288,6 @@ buildRules = ( ); dependencies = ( - F3190017240CA3BA00ED104F /* PBXTargetDependency */, BECDF6C60761BA81005FE872 /* PBXTargetDependency */, ); name = "Standard DMG"; @@ -7487,11 +7363,6 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 1130; - TargetAttributes = { - A75FDB4823E399AC00529352 = { - CreatedOnToolsVersion = 11.3.1; - }; - }; }; buildConfigurationList = 0073178E0858DB0500B2BC32 /* Build configuration list for PBXProject "SDL" */; compatibilityVersion = "Xcode 3.2"; @@ -7519,50 +7390,11 @@ A75FCCFB23E25AB700529352 /* Shared Library-iOS */, A75FCEB423E25AC700529352 /* Shared Library-tvOS */, BECDF6BB0761BA81005FE872 /* Standard DMG */, - A75FDB8023E4C74400529352 /* hidapi */, - A75FDB4823E399AC00529352 /* hidapi-iOS */, - A75FDB6223E3A2C900529352 /* hidapi-tvOS */, ); }; /* End PBXProject 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 */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -7713,6 +7545,7 @@ A75FCE1223E25AB700529352 /* SDL_hidapi_xbox360.c in Sources */, A75FCE1323E25AB700529352 /* SDL_coreaudio.m in Sources */, A75FCE1423E25AB700529352 /* SDL_blendline.c in Sources */, + F38233982738EC1800F7F527 /* hid.m in Sources */, A75FCE1523E25AB700529352 /* SDL_blit_A.c in Sources */, A75FCE1623E25AB700529352 /* SDL_d3dmath.c in Sources */, A75FCE1823E25AB700529352 /* SDL_nullvideo.c in Sources */, @@ -7749,6 +7582,7 @@ A75FCE3523E25AB700529352 /* SDL_error.c in Sources */, A75FCE3623E25AB700529352 /* SDL_blit.c in Sources */, A75FCE3723E25AB700529352 /* SDL_rwops.c in Sources */, + F38233922738EBF300F7F527 /* SDL_hidapi.c in Sources */, A75FCE3823E25AB700529352 /* SDL_uikitviewcontroller.m in Sources */, A75FCE3923E25AB700529352 /* s_cos.c in Sources */, A75FCE3A23E25AB700529352 /* SDL_yuv_sw.c in Sources */, @@ -7898,6 +7732,7 @@ A75FCFCB23E25AC700529352 /* SDL_hidapi_xbox360.c in Sources */, A75FCFCC23E25AC700529352 /* SDL_coreaudio.m in Sources */, A75FCFCD23E25AC700529352 /* SDL_blendline.c in Sources */, + F38233992738EC1800F7F527 /* hid.m in Sources */, A75FCFCE23E25AC700529352 /* SDL_blit_A.c in Sources */, A75FCFCF23E25AC700529352 /* SDL_d3dmath.c in Sources */, A75FCFD123E25AC700529352 /* SDL_nullvideo.c in Sources */, @@ -7934,6 +7769,7 @@ A75FCFEE23E25AC700529352 /* SDL_error.c in Sources */, A75FCFEF23E25AC700529352 /* SDL_blit.c in Sources */, A75FCFF023E25AC700529352 /* SDL_rwops.c in Sources */, + F38233932738EBF300F7F527 /* SDL_hidapi.c in Sources */, A75FCFF123E25AC700529352 /* SDL_uikitviewcontroller.m in Sources */, A75FCFF223E25AC700529352 /* s_cos.c in Sources */, A75FCFF323E25AC700529352 /* SDL_yuv_sw.c in Sources */, @@ -8034,30 +7870,6 @@ ); 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 */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -8128,6 +7940,7 @@ A769B1B523E259AE00872273 /* SDL_cocoakeyboard.m in Sources */, A769B1B623E259AE00872273 /* SDL_dynapi.c in Sources */, A769B1B723E259AE00872273 /* SDL_shaders_gl.c in Sources */, + F38233912738EBF100F7F527 /* SDL_hidapi.c in Sources */, A769B1B823E259AE00872273 /* e_log.c in Sources */, A769B1B923E259AE00872273 /* SDL_cocoamessagebox.m in Sources */, A769B1BA23E259AE00872273 /* SDL_blendfillrect.c in Sources */, @@ -8221,6 +8034,7 @@ A769B21523E259AE00872273 /* SDL_rwopsbundlesupport.m in Sources */, A769B21623E259AE00872273 /* SDL_video.c in Sources */, A769B21723E259AE00872273 /* SDL_offscreenopengl.c in Sources */, + F38233972738EC1600F7F527 /* hid.m in Sources */, A769B21823E259AE00872273 /* SDL_uikitmetalview.m in Sources */, A769B21923E259AE00872273 /* SDL_shaders_gles2.c in Sources */, A769B21A23E259AE00872273 /* SDL_blit_1.c in Sources */, @@ -8293,6 +8107,7 @@ A7D8BA2023E2514400DCD162 /* SDL_blendline.c in Sources */, A7D8ADF323E2514100DCD162 /* SDL_blit_A.c in Sources */, A7D8BA3823E2514400DCD162 /* SDL_d3dmath.c in Sources */, + F38233942738EC1400F7F527 /* hid.m in Sources */, A7D8ABEC23E2514100DCD162 /* SDL_nullvideo.c in Sources */, A7D8AB6823E2514100DCD162 /* SDL_offscreenevents.c in Sources */, A7D8ACA623E2514100DCD162 /* SDL_uikitview.m in Sources */, @@ -8329,6 +8144,7 @@ A7D8BA9223E2514400DCD162 /* s_cos.c in Sources */, A7D8B4D123E2514300DCD162 /* SDL_steamcontroller.c in Sources */, A7D8B9D223E2514400DCD162 /* SDL_yuv_sw.c in Sources */, + F382338E2738EBEC00F7F527 /* SDL_hidapi.c in Sources */, A7D8B76B23E2514300DCD162 /* SDL_wave.c in Sources */, A7D8BAD423E2514500DCD162 /* s_tan.c in Sources */, A7D8AA6623E2514000DCD162 /* SDL_hints.c in Sources */, @@ -8478,6 +8294,7 @@ A7D8BA2123E2514400DCD162 /* SDL_blendline.c in Sources */, A7D8ADF423E2514100DCD162 /* SDL_blit_A.c in Sources */, A7D8BA3923E2514400DCD162 /* SDL_d3dmath.c in Sources */, + F38233952738EC1500F7F527 /* hid.m in Sources */, A7D8ABED23E2514100DCD162 /* SDL_nullvideo.c in Sources */, A7D8AB6923E2514100DCD162 /* SDL_offscreenevents.c in Sources */, A7D8ACA723E2514100DCD162 /* SDL_uikitview.m in Sources */, @@ -8514,6 +8331,7 @@ A7D8BA9323E2514400DCD162 /* s_cos.c in Sources */, A7D8B4D223E2514300DCD162 /* SDL_steamcontroller.c in Sources */, A7D8B9D323E2514400DCD162 /* SDL_yuv_sw.c in Sources */, + F382338F2738EBEF00F7F527 /* SDL_hidapi.c in Sources */, A7D8B76C23E2514300DCD162 /* SDL_wave.c in Sources */, A7D8BAD523E2514500DCD162 /* s_tan.c in Sources */, A7D8AA6723E2514000DCD162 /* SDL_hints.c in Sources */, @@ -8684,6 +8502,7 @@ A7D8AEDA23E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */, A7D8AB1A23E2514100DCD162 /* SDL_dynapi.c in Sources */, A7D8BA8923E2514400DCD162 /* SDL_shaders_gl.c in Sources */, + F38233902738EBF000F7F527 /* SDL_hidapi.c in Sources */, A7D8BAF523E2514500DCD162 /* e_log.c in Sources */, A7D8AED423E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */, A7D8BA2F23E2514400DCD162 /* SDL_blendfillrect.c in Sources */, @@ -8777,6 +8596,7 @@ A7D8B5CD23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */, A7D8AC1323E2514100DCD162 /* SDL_video.c in Sources */, A7D8AB5923E2514100DCD162 /* SDL_offscreenopengl.c in Sources */, + F38233962738EC1600F7F527 /* hid.m in Sources */, A7D8ACC723E2514100DCD162 /* SDL_uikitmetalview.m in Sources */, A7D8BA5F23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */, A7D8B14423E2514200DCD162 /* SDL_blit_1.c in Sources */, @@ -9379,11 +9199,6 @@ target = BECDF5FE0761BA81005FE872 /* Framework */; targetProxy = BECDF6C50761BA81005FE872 /* PBXContainerItemProxy */; }; - F3190017240CA3BA00ED104F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = A75FDB8023E4C74400529352 /* hidapi */; - targetProxy = F3190016240CA3BA00ED104F /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -9611,108 +9426,6 @@ }; 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 */ = { isa = XCBuildConfiguration; buildSettings = { @@ -9930,33 +9643,6 @@ defaultConfigurationIsVisible = 0; 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" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/include/SDL.h b/include/SDL.h index 07d3356bf..dcb6d20fb 100644 --- a/include/SDL.h +++ b/include/SDL.h @@ -42,6 +42,7 @@ #include "SDL_filesystem.h" #include "SDL_gamecontroller.h" #include "SDL_haptic.h" +#include "SDL_hidapi.h" #include "SDL_hints.h" #include "SDL_joystick.h" #include "SDL_loadso.h" diff --git a/include/SDL_hidapi.h b/include/SDL_hidapi.h new file mode 100644 index 000000000..374eb5819 --- /dev/null +++ b/include/SDL_hidapi.h @@ -0,0 +1,415 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2021 Sam Lantinga + + 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: */ diff --git a/include/SDL_stdinc.h b/include/SDL_stdinc.h index 8a32eb229..c00374d12 100644 --- a/include/SDL_stdinc.h +++ b/include/SDL_stdinc.h @@ -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_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_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 here, since there are possibly tests that are ineffective otherwise. */ diff --git a/src/dynapi/SDL_dynapi_overrides.h b/src/dynapi/SDL_dynapi_overrides.h index 657bfee26..ee071e8da 100644 --- a/src/dynapi/SDL_dynapi_overrides.h +++ b/src/dynapi/SDL_dynapi_overrides.h @@ -827,3 +827,18 @@ #define SDL_LinuxSetThreadPriorityAndPolicy SDL_LinuxSetThreadPriorityAndPolicy_REAL #define SDL_GameControllerGetAppleSFSymbolsNameForButton SDL_GameControllerGetAppleSFSymbolsNameForButton_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 diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h index 0ac166994..8a732bb20 100644 --- a/src/dynapi/SDL_dynapi_procs.h +++ b/src/dynapi/SDL_dynapi_procs.h @@ -896,3 +896,18 @@ SDL_DYNAPI_PROC(int,SDL_LinuxSetThreadPriorityAndPolicy,(Sint64 a, int b, int c) #endif 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(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) diff --git a/src/hidapi/SDL_hidapi.c b/src/hidapi/SDL_hidapi.c index d8a330728..aeeb317aa 100644 --- a/src/hidapi/SDL_hidapi.c +++ b/src/hidapi/SDL_hidapi.c @@ -31,14 +31,12 @@ #include "SDL_loadso.h" #include "SDL_hidapi.h" +#include "SDL_hidapi_c.h" -#ifdef SDL_JOYSTICK_HIDAPI +#ifndef SDL_DISABLE_HIDAPI /* 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_exit PLATFORM_hid_exit #define hid_enumerate PLATFORM_hid_enumerate @@ -99,11 +97,18 @@ static const SDL_UDEV_Symbols *udev_ctx = NULL; #include "windows/hid.c" #define HAVE_PLATFORM_BACKEND 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 -#undef hid_device_ -#undef hid_device -#undef hid_device_info #undef hid_init #undef hid_exit #undef hid_enumerate @@ -137,9 +142,6 @@ static const SDL_UDEV_Symbols *udev_ctx = NULL; /* 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_exit DRIVER_hid_exit #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! #endif -#undef hid_device_ -#undef hid_device -#undef hid_device_info #undef hid_init #undef hid_exit #undef hid_enumerate @@ -276,9 +275,6 @@ static struct #define libusb_handle_events libusb_ctx.handle_events #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_exit LIBUSB_hid_exit #define hid_enumerate LIBUSB_hid_enumerate @@ -327,9 +323,6 @@ SDL_libusb_get_string_descriptor(libusb_device_handle *dev, #undef HIDAPI_H__ #include "libusb/hid.c" -#undef hid_device_ -#undef hid_device -#undef hid_device_info #undef hid_init #undef hid_exit #undef hid_enumerate @@ -357,24 +350,23 @@ SDL_libusb_get_string_descriptor(libusb_device_handle *dev, #endif /* SDL_LIBUSB_DYNAMIC */ +#endif /* !SDL_DISABLE_HIDAPI */ + /* Shared HIDAPI Implementation */ -#undef HIDAPI_H__ -#include "hidapi/hidapi.h" - struct hidapi_backend { - int (*hid_write)(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)(hid_device* device, unsigned char* data, size_t length); - int (*hid_set_nonblocking)(hid_device* device, int nonblock); - int (*hid_send_feature_report)(hid_device* device, const unsigned char* data, size_t length); - int (*hid_get_feature_report)(hid_device* device, unsigned char* data, size_t length); - void (*hid_close)(hid_device* device); - int (*hid_get_manufacturer_string)(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_serial_number_string)(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); - const wchar_t* (*hid_error)(hid_device* device); + int (*hid_write)(SDL_hid_device* device, const unsigned char* data, size_t length); + int (*hid_read_timeout)(SDL_hid_device* device, unsigned char* data, size_t length, int milliseconds); + int (*hid_read)(SDL_hid_device* device, unsigned char* data, size_t length); + int (*hid_set_nonblocking)(SDL_hid_device* device, int nonblock); + int (*hid_send_feature_report)(SDL_hid_device* device, const unsigned char* data, size_t length); + int (*hid_get_feature_report)(SDL_hid_device* device, unsigned char* data, size_t length); + void (*hid_close)(SDL_hid_device* device); + int (*hid_get_manufacturer_string)(SDL_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)(SDL_hid_device* device, 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)(SDL_hid_device* device); }; #if HAVE_PLATFORM_BACKEND @@ -431,14 +423,14 @@ static const struct hidapi_backend LIBUSB_Backend = { typedef struct _HIDDeviceWrapper HIDDeviceWrapper; struct _HIDDeviceWrapper { - hid_device *device; /* must be first field */ + SDL_hid_device *device; /* must be first field */ const struct hidapi_backend *backend; }; #if HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || defined(SDL_LIBUSB_DYNAMIC) 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)); ret->device = device; @@ -446,16 +438,16 @@ CreateHIDDeviceWrapper(hid_device *device, const struct hidapi_backend *backend) return ret; } -static hid_device * +static SDL_hid_device * WrapHIDDevice(HIDDeviceWrapper *wrapper) { - return (hid_device *)wrapper; + return (SDL_hid_device *)wrapper; } #endif /* HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND || SDL_LIBUSB_DYNAMIC */ static HIDDeviceWrapper * -UnwrapHIDDevice(hid_device *device) +UnwrapHIDDevice(SDL_hid_device *device) { return (HIDDeviceWrapper *)device; } @@ -466,6 +458,8 @@ DeleteHIDDeviceWrapper(HIDDeviceWrapper *device) SDL_free(device); } +#ifndef SDL_DISABLE_HIDAPI + #define COPY_IF_EXISTS(var) \ if (pSrc->var != NULL) { \ pDst->var = SDL_strdup(pSrc->var); \ @@ -479,10 +473,8 @@ DeleteHIDDeviceWrapper(HIDDeviceWrapper *device) pDst->var = NULL; \ } -#ifdef SDL_LIBUSB_DYNAMIC static void -LIBUSB_CopyHIDDeviceInfo(struct LIBUSB_hid_device_info *pSrc, - struct hid_device_info *pDst) +CopyHIDDeviceInfo(struct SDL_hid_device_info *pSrc, struct SDL_hid_device_info *pDst) { COPY_IF_EXISTS(path) 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->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 WCOPY_IF_EXISTS +#endif /* SDL_DISABLE_HIDAPI */ + 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; @@ -624,7 +584,7 @@ int HID_API_EXPORT HID_API_CALL hid_init(void) return 0; } -int HID_API_EXPORT HID_API_CALL hid_exit(void) +int SDL_hid_exit(void) { int result = 0; @@ -650,24 +610,24 @@ int HID_API_EXPORT HID_API_CALL hid_exit(void) 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) #ifdef SDL_LIBUSB_DYNAMIC - struct LIBUSB_hid_device_info *usb_devs = NULL; - struct LIBUSB_hid_device_info *usb_dev; + struct SDL_hid_device_info *usb_devs = NULL; + struct SDL_hid_device_info *usb_dev; #endif #if HAVE_DRIVER_BACKEND - struct DRIVER_hid_device_info* driver_devs = NULL; - struct DRIVER_hid_device_info* driver_dev; + struct SDL_hid_device_info* driver_devs = NULL; + struct SDL_hid_device_info* driver_dev; #endif #if HAVE_PLATFORM_BACKEND - struct PLATFORM_hid_device_info *raw_devs = NULL; - struct PLATFORM_hid_device_info *raw_dev; + struct SDL_hid_device_info *raw_devs = NULL; + struct SDL_hid_device_info *raw_dev; #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; } @@ -678,14 +638,14 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor SDL_Log("libusb devices found:"); #endif 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) { LIBUSB_hid_free_enumeration(usb_devs); - hid_free_enumeration(devs); + SDL_hid_free_enumeration(devs); SDL_OutOfMemory(); return NULL; } - LIBUSB_CopyHIDDeviceInfo(usb_dev, new_dev); + CopyHIDDeviceInfo(usb_dev, new_dev); #ifdef DEBUG_HIDAPI SDL_Log(" - %ls %ls 0x%.4hx 0x%.4hx", 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 driver_devs = DRIVER_hid_enumerate(vendor_id, product_id); 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)); - DRIVER_CopyHIDDeviceInfo(driver_dev, new_dev); + new_dev = (struct SDL_hid_device_info*) SDL_malloc(sizeof(struct SDL_hid_device_info)); + CopyHIDDeviceInfo(driver_dev, new_dev); if (last != NULL) { last->next = new_dev; @@ -751,7 +711,7 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor } #endif 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) { #ifdef SDL_LIBUSB_DYNAMIC if (libusb_ctx.libhandle) { @@ -759,11 +719,11 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor } #endif PLATFORM_hid_free_enumeration(raw_devs); - hid_free_enumeration(devs); + SDL_hid_free_enumeration(devs); SDL_OutOfMemory(); return NULL; } - PLATFORM_CopyHIDDeviceInfo(raw_dev, new_dev); + CopyHIDDeviceInfo(raw_dev, new_dev); new_dev->next = 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 */ } -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) { - struct hid_device_info *next = devs->next; + struct SDL_hid_device_info *next = devs->next; SDL_free(devs->path); SDL_free(devs->serial_number); 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) - hid_device *pDevice = NULL; + SDL_hid_device *pDevice = NULL; - if (hid_init() != 0) { + if (SDL_hid_init() != 0) { return NULL; } #if HAVE_PLATFORM_BACKEND 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); 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 */ #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); 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 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); return WrapHIDDevice(wrapper); @@ -843,18 +803,18 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open(unsigned short vendor_id, unsi 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) - hid_device *pDevice = NULL; + SDL_hid_device *pDevice = NULL; - if (hid_init() != 0) { + if (SDL_hid_init() != 0) { return NULL; } #if HAVE_PLATFORM_BACKEND 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); 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 */ #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); 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 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); 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; } -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); - 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); - 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); - 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); - 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); - 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); - 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); wrapper->backend->hid_close(wrapper->device); 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); - 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); - 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); - 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); - return wrapper->backend->hid_get_indexed_string(wrapper->device, string_index, string, maxlen); -} - -HID_API_EXPORT const wchar_t* HID_API_CALL hid_error(hid_device *device) -{ - HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device); - return wrapper->backend->hid_error(wrapper->device); + 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)); + } + return result; } #ifdef HAVE_ENABLE_GAMECUBE_ADAPTORS @@ -1013,6 +1007,4 @@ void SDL_EnableGameCubeAdaptors(void) } #endif /* HAVE_ENABLE_GAMECUBE_ADAPTORS */ -#endif /* SDL_JOYSTICK_HIDAPI */ - /* vi: set sts=4 ts=4 sw=4 expandtab: */ diff --git a/src/hidapi/SDL_hidapi.h b/src/hidapi/SDL_hidapi_c.h similarity index 100% rename from src/hidapi/SDL_hidapi.h rename to src/hidapi/SDL_hidapi_c.h diff --git a/src/hidapi/android/hid.cpp b/src/hidapi/android/hid.cpp index 4bba20794..bed88674d 100644 --- a/src/hidapi/android/hid.cpp +++ b/src/hidapi/android/hid.cpp @@ -22,6 +22,27 @@ // // 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 #include #include @@ -1264,3 +1285,5 @@ int hid_exit(void) } } + +#endif /* SDL_DISABLE_HIDAPI */ diff --git a/src/hidapi/hidapi/hidapi.h b/src/hidapi/hidapi/hidapi.h index 1896a38a8..01d87e3f3 100644 --- a/src/hidapi/hidapi/hidapi.h +++ b/src/hidapi/hidapi/hidapi.h @@ -29,7 +29,14 @@ #include -#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_CALL #else @@ -50,6 +57,7 @@ extern "C" { namespace NAMESPACE { #endif +#ifndef SDL_HIDAPI_IMPLEMENTATION struct hid_device_; typedef struct hid_device_ hid_device; /**< opaque hidapi structure */ @@ -93,6 +101,7 @@ namespace NAMESPACE { /** Pointer to the next device */ struct hid_device_info *next; }; +#endif /* !SDL_HIDAPI_IMPLEMENTATION */ /** @brief Initialize the HIDAPI library. diff --git a/src/hidapi/ios/hid.m b/src/hidapi/ios/hid.m index 4c747673f..ba1aaa9e0 100644 --- a/src/hidapi/ios/hid.m +++ b/src/hidapi/ios/hid.m @@ -20,7 +20,26 @@ */ #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 #include @@ -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; 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; } +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) { 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; } -#endif /* SDL_JOYSTICK_HIDAPI */ +HID_API_EXPORT const wchar_t* HID_API_CALL hid_error(hid_device *dev) +{ + return NULL; +} + +#endif /* !SDL_DISABLE_HIDAPI */ diff --git a/src/hidapi/libusb/hid.c b/src/hidapi/libusb/hid.c index fa1d588f8..d4fd9da69 100644 --- a/src/hidapi/libusb/hid.c +++ b/src/hidapi/libusb/hid.c @@ -31,8 +31,6 @@ #include "SDL_thread.h" #include "SDL_mutex.h" -#ifdef SDL_JOYSTICK_HIDAPI - #if defined(HAVE__WCSDUP) && !defined(HAVE_WCSDUP) #define wcsdup _wcsdup #endif @@ -1742,5 +1740,3 @@ uint16_t get_usb_code_for_current_locale(void) #ifdef NAMESPACE } #endif - -#endif /* SDL_JOYSTICK_HIDAPI */ diff --git a/src/hidapi/linux/hid.c b/src/hidapi/linux/hid.c index 28e9847d4..2c7128f45 100644 --- a/src/hidapi/linux/hid.c +++ b/src/hidapi/linux/hid.c @@ -22,8 +22,6 @@ ********************************************************/ #include "../../SDL_internal.h" -#ifdef SDL_JOYSTICK_HIDAPI - #ifndef _GNU_SOURCE #define _GNU_SOURCE /* needed for wcsdup() before glibc 2.10 */ #endif @@ -902,5 +900,3 @@ HID_API_EXPORT const wchar_t * HID_API_CALL hid_error(hid_device *dev) #ifdef NAMESPACE } #endif - -#endif /* SDL_JOYSTICK_HIDAPI */ diff --git a/src/hidapi/mac/hid.c b/src/hidapi/mac/hid.c index e678c1a09..1ad042d49 100644 --- a/src/hidapi/mac/hid.c +++ b/src/hidapi/mac/hid.c @@ -21,8 +21,6 @@ ********************************************************/ #include "../../SDL_internal.h" -#ifdef SDL_JOYSTICK_HIDAPI - /* See Apple Technical Note TN2187 for details on IOHidManager. */ #include @@ -1191,5 +1189,3 @@ int main(void) return 0; } #endif - -#endif /* SDL_JOYSTICK_HIDAPI */ diff --git a/src/hidapi/windows/hid.c b/src/hidapi/windows/hid.c index e6fbf85da..2f617692e 100644 --- a/src/hidapi/windows/hid.c +++ b/src/hidapi/windows/hid.c @@ -21,8 +21,6 @@ ********************************************************/ #include "../../SDL_internal.h" -#ifdef SDL_JOYSTICK_HIDAPI - #include #ifndef _WIN32_WINNT_WIN8 @@ -1099,5 +1097,3 @@ int __cdecl main(int argc, char* argv[]) #ifdef __cplusplus } /* extern "C" */ #endif - -#endif /* SDL_JOYSTICK_HIDAPI */ diff --git a/src/joystick/hidapi/SDL_hidapi_gamecube.c b/src/joystick/hidapi/SDL_hidapi_gamecube.c index e4407f063..21b217fc7 100644 --- a/src/joystick/hidapi/SDL_hidapi_gamecube.c +++ b/src/joystick/hidapi/SDL_hidapi_gamecube.c @@ -32,7 +32,7 @@ #include "../SDL_sysjoystick.h" #include "SDL_hidapijoystick_c.h" #include "SDL_hidapi_rumble.h" -#include "../../hidapi/SDL_hidapi.h" +#include "../../hidapi/SDL_hidapi_c.h" #ifdef SDL_JOYSTICK_HIDAPI_GAMECUBE @@ -129,7 +129,7 @@ HIDAPI_DriverGameCube_InitDevice(SDL_HIDAPI_Device *device) return SDL_FALSE; } - device->dev = hid_open_path(device->path, 0); + device->dev = SDL_hid_open_path(device->path, 0); if (!device->dev) { SDL_free(ctx); SDL_SetError("Couldn't open %s", device->path); @@ -154,7 +154,7 @@ HIDAPI_DriverGameCube_InitDevice(SDL_HIDAPI_Device *device) } } else { /* 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"); goto error; } @@ -163,7 +163,7 @@ HIDAPI_DriverGameCube_InitDevice(SDL_HIDAPI_Device *device) SDL_Delay(10); /* 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 HIDAPI_DumpPacket("Nintendo GameCube packet: size = %d", packet, size); #endif @@ -204,7 +204,7 @@ error: SDL_LockMutex(device->dev_lock); { if (device->dev) { - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; } if (device->context) { @@ -389,7 +389,7 @@ HIDAPI_DriverGameCube_UpdateDevice(SDL_HIDAPI_Device *device) int size; /* 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 //HIDAPI_DumpPacket("Nintendo GameCube packet: size = %d", packet, size); #endif @@ -510,7 +510,7 @@ HIDAPI_DriverGameCube_FreeDevice(SDL_HIDAPI_Device *device) SDL_LockMutex(device->dev_lock); { - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; SDL_free(device->context); diff --git a/src/joystick/hidapi/SDL_hidapi_luna.c b/src/joystick/hidapi/SDL_hidapi_luna.c index 78d5c5ed6..3734a9849 100644 --- a/src/joystick/hidapi/SDL_hidapi_luna.c +++ b/src/joystick/hidapi/SDL_hidapi_luna.c @@ -87,7 +87,7 @@ HIDAPI_DriverLuna_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick return SDL_FALSE; } - device->dev = hid_open_path(device->path, 0); + device->dev = SDL_hid_open_path(device->path, 0); if (!device->dev) { SDL_SetError("Couldn't open %s", device->path); SDL_free(ctx); @@ -386,7 +386,7 @@ HIDAPI_DriverLuna_UpdateDevice(SDL_HIDAPI_Device *device) 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 HIDAPI_DumpPacket("Amazon Luna packet: size = %d", data, size); #endif @@ -413,7 +413,7 @@ HIDAPI_DriverLuna_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystic SDL_LockMutex(device->dev_lock); { if (device->dev) { - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; } diff --git a/src/joystick/hidapi/SDL_hidapi_ps4.c b/src/joystick/hidapi/SDL_hidapi_ps4.c index 319dec4b4..95ee894e9 100644 --- a/src/joystick/hidapi/SDL_hidapi_ps4.c +++ b/src/joystick/hidapi/SDL_hidapi_ps4.c @@ -163,11 +163,11 @@ HIDAPI_DriverPS4_GetDeviceName(Uint16 vendor_id, Uint16 product_id) 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); 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) @@ -479,7 +479,7 @@ HIDAPI_DriverPS4_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick) ctx->joystick = joystick; 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) { SDL_free(ctx); 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; /* 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 if (size > 0) { HIDAPI_DumpPacket("PS4 first packet: size = %d", data, size); @@ -684,7 +684,7 @@ HIDAPI_DriverPS4_SetJoystickSensorsEnabled(SDL_HIDAPI_Device *device, SDL_Joysti } 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_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; } - 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 HIDAPI_DumpPacket("PS4 packet: size = %d", data, size); #endif @@ -908,7 +908,7 @@ HIDAPI_DriverPS4_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick SDL_LockMutex(device->dev_lock); { - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; SDL_free(device->context); diff --git a/src/joystick/hidapi/SDL_hidapi_ps5.c b/src/joystick/hidapi/SDL_hidapi_ps5.c index b0aa3c9c1..e64c56246 100644 --- a/src/joystick/hidapi/SDL_hidapi_ps5.c +++ b/src/joystick/hidapi/SDL_hidapi_ps5.c @@ -192,11 +192,11 @@ HIDAPI_DriverPS5_GetDeviceName(Uint16 vendor_id, Uint16 product_id) 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); report[0] = report_id; - return hid_get_feature_report(dev, report, length); + return SDL_hid_get_feature_report(dev, report, length); } static void @@ -553,7 +553,7 @@ HIDAPI_DriverPS5_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick) ctx->joystick = joystick; 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) { SDL_free(ctx); 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; /* 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 if (size > 0) { HIDAPI_DumpPacket("PS5 first packet: size = %d", data, size); @@ -761,7 +761,7 @@ HIDAPI_DriverPS5_SetJoystickSensorsEnabled(SDL_HIDAPI_Device *device, SDL_Joysti } 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; @@ -855,7 +855,7 @@ HIDAPI_DriverPS5_HandleSimpleStatePacket(SDL_Joystick *joystick, hid_device *dev } 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_SCALEY = 1.0f / 1070; @@ -1010,7 +1010,7 @@ HIDAPI_DriverPS5_UpdateDevice(SDL_HIDAPI_Device *device) 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 HIDAPI_DumpPacket("PS5 packet: size = %d", data, size); #endif @@ -1071,7 +1071,7 @@ HIDAPI_DriverPS5_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick SDL_LockMutex(device->dev_lock); { - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; SDL_free(device->context); diff --git a/src/joystick/hidapi/SDL_hidapi_rumble.c b/src/joystick/hidapi/SDL_hidapi_rumble.c index 869bef322..152215cfb 100644 --- a/src/joystick/hidapi/SDL_hidapi_rumble.c +++ b/src/joystick/hidapi/SDL_hidapi_rumble.c @@ -80,7 +80,7 @@ static int SDL_HIDAPI_RumbleThread(void *data) #ifdef DEBUG_RUMBLE HIDAPI_DumpPacket("Rumble packet: size = %d", request->data, request->size); #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); (void)SDL_AtomicDecRef(&request->device->rumble_pending); diff --git a/src/joystick/hidapi/SDL_hidapi_stadia.c b/src/joystick/hidapi/SDL_hidapi_stadia.c index c11aadd05..4180f51a0 100644 --- a/src/joystick/hidapi/SDL_hidapi_stadia.c +++ b/src/joystick/hidapi/SDL_hidapi_stadia.c @@ -88,7 +88,7 @@ HIDAPI_DriverStadia_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joysti return SDL_FALSE; } - device->dev = hid_open_path(device->path, 0); + device->dev = SDL_hid_open_path(device->path, 0); if (!device->dev) { SDL_SetError("Couldn't open %s", device->path); SDL_free(ctx); @@ -267,7 +267,7 @@ HIDAPI_DriverStadia_UpdateDevice(SDL_HIDAPI_Device *device) 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 HIDAPI_DumpPacket("Google Stadia packet: size = %d", data, size); #endif @@ -287,7 +287,7 @@ HIDAPI_DriverStadia_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joyst SDL_LockMutex(device->dev_lock); { if (device->dev) { - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; } diff --git a/src/joystick/hidapi/SDL_hidapi_steam.c b/src/joystick/hidapi/SDL_hidapi_steam.c index fdec0f072..3131011fb 100644 --- a/src/joystick/hidapi/SDL_hidapi_steam.c +++ b/src/joystick/hidapi/SDL_hidapi_steam.c @@ -305,7 +305,7 @@ static int WriteSegmentToSteamControllerPacketAssembler( SteamControllerPacketAs #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; 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; 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); } } @@ -347,7 +347,7 @@ static int SetFeatureReport( hid_device *dev, unsigned char uBuffer[65], int nAc 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; bool bBle = true; @@ -366,7 +366,7 @@ static int GetFeatureReport( hid_device *dev, unsigned char uBuffer[65] ) { memset( uSegmentBuffer, 0, sizeof( uSegmentBuffer ) ); 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 ); HEXDUMP( uSegmentBuffer, nRet ); @@ -400,7 +400,7 @@ static int GetFeatureReport( hid_device *dev, unsigned char uBuffer[65] ) 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 ); @@ -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 //--------------------------------------------------------------------------- -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. unsigned char buf[65]; @@ -606,18 +606,18 @@ buf[3+nSettings*3+2] = ((uint16_t)VALUE)>>8; \ //--------------------------------------------------------------------------- // 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 ); 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 //--------------------------------------------------------------------------- -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 unsigned char buf[65]; @@ -1040,12 +1040,12 @@ HIDAPI_DriverSteam_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystic } device->context = ctx; - device->dev = hid_open_path(device->path, 0); + device->dev = SDL_hid_open_path(device->path, 0); if (!device->dev) { SDL_SetError("Couldn't open %s", device->path); goto error; } - hid_set_nonblocking(device->dev, 1); + SDL_hid_set_nonblocking(device->dev, 1); if (!ResetSteamController(device->dev, false, &update_rate_in_us)) { SDL_SetError("Couldn't reset controller"); @@ -1070,7 +1070,7 @@ error: SDL_LockMutex(device->dev_lock); { if (device->dev) { - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; } if (device->context) { @@ -1266,7 +1266,7 @@ HIDAPI_DriverSteam_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joysti { CloseSteamController(device->dev); - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; SDL_free(device->context); diff --git a/src/joystick/hidapi/SDL_hidapi_switch.c b/src/joystick/hidapi/SDL_hidapi_switch.c index 70fa710c8..daf61b811 100644 --- a/src/joystick/hidapi/SDL_hidapi_switch.c +++ b/src/joystick/hidapi/SDL_hidapi_switch.c @@ -346,13 +346,13 @@ static int ReadInput(SDL_DriverSwitch_Context *ctx) 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) { #ifdef SWITCH_SYNCHRONOUS_WRITES - return hid_write(ctx->device->dev, data, size); + return SDL_hid_write(ctx->device->dev, data, size); #else /* Use the rumble thread for general asynchronous writes */ if (SDL_HIDAPI_LockRumble() < 0) { @@ -856,7 +856,7 @@ HIDAPI_DriverSwitch_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joysti ctx->device = device; device->context = ctx; - device->dev = hid_open_path(device->path, 0); + device->dev = SDL_hid_open_path(device->path, 0); if (!device->dev) { SDL_SetError("Couldn't open %s", device->path); goto error; @@ -986,7 +986,7 @@ error: SDL_LockMutex(device->dev_lock); { if (device->dev) { - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; } if (device->context) { @@ -1530,7 +1530,7 @@ HIDAPI_DriverSwitch_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joyst SDL_LockMutex(device->dev_lock); { - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; SDL_free(device->context); diff --git a/src/joystick/hidapi/SDL_hidapi_xbox360.c b/src/joystick/hidapi/SDL_hidapi_xbox360.c index 4914fdaf1..054cd442d 100644 --- a/src/joystick/hidapi/SDL_hidapi_xbox360.c +++ b/src/joystick/hidapi/SDL_hidapi_xbox360.c @@ -88,14 +88,14 @@ HIDAPI_DriverXbox360_GetDeviceName(Uint16 vendor_id, Uint16 product_id) 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; Uint8 mode = (blink ? 0x02 : 0x06) + slot; Uint8 led_packet[] = { 0x01, 0x03, 0x00 }; 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_TRUE; @@ -136,7 +136,7 @@ HIDAPI_DriverXbox360_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joyst return SDL_FALSE; } - device->dev = hid_open_path(device->path, 0); + device->dev = SDL_hid_open_path(device->path, 0); if (!device->dev) { SDL_SetError("Couldn't open %s", device->path); SDL_free(ctx); @@ -296,7 +296,7 @@ HIDAPI_DriverXbox360_UpdateDevice(SDL_HIDAPI_Device *device) 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 HIDAPI_DumpPacket("Xbox 360 packet: size = %d", data, size); #endif @@ -318,7 +318,7 @@ HIDAPI_DriverXbox360_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joys SDL_LockMutex(device->dev_lock); { if (device->dev) { - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; } diff --git a/src/joystick/hidapi/SDL_hidapi_xbox360w.c b/src/joystick/hidapi/SDL_hidapi_xbox360w.c index 247490930..78e45796f 100644 --- a/src/joystick/hidapi/SDL_hidapi_xbox360w.c +++ b/src/joystick/hidapi/SDL_hidapi_xbox360w.c @@ -62,14 +62,14 @@ HIDAPI_DriverXbox360W_GetDeviceName(Uint16 vendor_id, Uint16 product_id) 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; Uint8 mode = (blink ? 0x02 : 0x06) + slot; Uint8 led_packet[] = { 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 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_TRUE; @@ -105,7 +105,7 @@ HIDAPI_DriverXbox360W_InitDevice(SDL_HIDAPI_Device *device) return SDL_FALSE; } - device->dev = hid_open_path(device->path, 0); + device->dev = SDL_hid_open_path(device->path, 0); if (!device->dev) { SDL_free(ctx); SDL_SetError("Couldn't open %s", device->path); @@ -113,7 +113,7 @@ HIDAPI_DriverXbox360W_InitDevice(SDL_HIDAPI_Device *device) } 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"); return SDL_FALSE; } @@ -199,7 +199,7 @@ HIDAPI_DriverXbox360W_SetJoystickSensorsEnabled(SDL_HIDAPI_Device *device, SDL_J } 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; 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]); } - 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 HIDAPI_DumpPacket("Xbox 360 wireless packet: size = %d", data, size); #endif @@ -321,7 +321,7 @@ HIDAPI_DriverXbox360W_FreeDevice(SDL_HIDAPI_Device *device) { SDL_LockMutex(device->dev_lock); { - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; SDL_free(device->context); diff --git a/src/joystick/hidapi/SDL_hidapi_xboxone.c b/src/joystick/hidapi/SDL_hidapi_xboxone.c index 6da46b407..ad80b6cc6 100644 --- a/src/joystick/hidapi/SDL_hidapi_xboxone.c +++ b/src/joystick/hidapi/SDL_hidapi_xboxone.c @@ -317,7 +317,7 @@ HIDAPI_DriverXboxOne_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joyst return SDL_FALSE; } - device->dev = hid_open_path(device->path, 0); + device->dev = SDL_hid_open_path(device->path, 0); if (!device->dev) { SDL_free(ctx); 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]; 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 HIDAPI_DumpPacket("Xbox One packet: size = %d", data, size); #endif @@ -1099,7 +1099,7 @@ HIDAPI_DriverXboxOne_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joys { SDL_LockMutex(device->dev_lock); { - hid_close(device->dev); + SDL_hid_close(device->dev); device->dev = NULL; SDL_free(device->context); diff --git a/src/joystick/hidapi/SDL_hidapijoystick.c b/src/joystick/hidapi/SDL_hidapijoystick.c index 73b7ac95d..e4c9f647b 100644 --- a/src/joystick/hidapi/SDL_hidapijoystick.c +++ b/src/joystick/hidapi/SDL_hidapijoystick.c @@ -767,17 +767,7 @@ HIDAPI_JoystickInit(void) } #endif -#if defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__TVOS__) - /* 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) { + if (SDL_hid_init() < 0) { SDL_SetError("Couldn't initialize hidapi"); return -1; } @@ -874,7 +864,7 @@ HIDAPI_ConvertString(const wchar_t *wide_string) } static void -HIDAPI_AddDevice(struct hid_device_info *info) +HIDAPI_AddDevice(struct SDL_hid_device_info *info) { SDL_HIDAPI_Device *device; SDL_HIDAPI_Device *curr, *last = NULL; @@ -994,6 +984,7 @@ HIDAPI_AddDevice(struct hid_device_info *info) HIDAPI_SetupDeviceDriver(device); +#define 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"); #endif @@ -1038,7 +1029,7 @@ static void HIDAPI_UpdateDeviceList(void) { SDL_HIDAPI_Device *device; - struct hid_device_info *devs, *info; + struct SDL_hid_device_info *devs, *info; SDL_LockJoysticks(); @@ -1051,7 +1042,7 @@ HIDAPI_UpdateDeviceList(void) /* Enumerate the devices */ if (SDL_HIDAPI_numdrivers > 0) { - devs = hid_enumerate(0, 0); + devs = SDL_hid_enumerate(0, 0); if (devs) { for (info = devs; info; info = info->next) { device = HIDAPI_GetJoystickByInfo(info->path, info->vendor_id, info->product_id); @@ -1061,7 +1052,7 @@ HIDAPI_UpdateDeviceList(void) 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_HIDAPIDriverHintChanged, NULL); - hid_exit(); + SDL_hid_exit(); shutting_down = SDL_FALSE; initialized = SDL_FALSE; diff --git a/src/joystick/hidapi/SDL_hidapijoystick_c.h b/src/joystick/hidapi/SDL_hidapijoystick_c.h index 9722775ee..ff44aad51 100644 --- a/src/joystick/hidapi/SDL_hidapijoystick_c.h +++ b/src/joystick/hidapi/SDL_hidapijoystick_c.h @@ -27,7 +27,7 @@ #include "SDL_mutex.h" #include "SDL_joystick.h" #include "SDL_gamecontroller.h" -#include "../../hidapi/hidapi/hidapi.h" +#include "SDL_hidapi.h" #include "../usb_ids.h" /* This is the full set of HIDAPI drivers available */ @@ -70,7 +70,7 @@ typedef struct _SDL_HIDAPI_Device struct _SDL_HIDAPI_DeviceDriver *driver; void *context; SDL_mutex *dev_lock; - hid_device *dev; + SDL_hid_device *dev; SDL_atomic_t rumble_pending; int num_joysticks; SDL_JoystickID *joysticks; diff --git a/src/stdlib/SDL_iconv.c b/src/stdlib/SDL_iconv.c index 2defa6eb5..e235541f3 100644 --- a/src/stdlib/SDL_iconv.c +++ b/src/stdlib/SDL_iconv.c @@ -146,6 +146,11 @@ static struct { "US-ASCII", ENCODING_ASCII }, { "8859-1", ENCODING_LATIN1 }, { "ISO-8859-1", ENCODING_LATIN1 }, +#ifdef __WIN32__ + { "WCHAR_T", ENCODING_UTF16LE }, +#else + { "WCHAR_T", ENCODING_UCS4NATIVE }, +#endif { "UTF8", ENCODING_UTF8 }, { "UTF-8", ENCODING_UTF8 }, { "UTF16", ENCODING_UTF16 },