mirror of
https://github.com/encounter/SDL.git
synced 2025-06-14 18:43:29 +00:00
switch: add cmake support
switch: update for latest sdl2 changes switch: update for latest libnx hid changes
This commit is contained in:
parent
cd14a6c0b6
commit
94b2c02e02
@ -1,86 +0,0 @@
|
|||||||
cmake_minimum_required(VERSION 3.0)
|
|
||||||
#set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
||||||
|
|
||||||
set(CMAKE_SYSTEM_NAME "Generic")
|
|
||||||
|
|
||||||
set(DEVKITPRO $ENV{DEVKITPRO})
|
|
||||||
set(CMAKE_SYSTEM_PROCESSOR "armv8-a")
|
|
||||||
set(CMAKE_C_COMPILER "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-gcc")
|
|
||||||
set(CMAKE_CXX_COMPILER "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-g++")
|
|
||||||
set(CMAKE_ASM_COMPILER "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-as")
|
|
||||||
set(CMAKE_AR "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-gcc-ar" CACHE STRING "")
|
|
||||||
set(CMAKE_RANLIB "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-gcc-ranlib" CACHE STRING "")
|
|
||||||
set(CMAKE_C_FLAGS "-g -O2 -march=armv8-a -mtune=cortex-a57 -mtp=soft -ftls-model=local-exec -fPIC -I${DEVKITPRO}/libnx/include -I${DEVKITPRO}/portlibs/switch/include" CACHE STRING "C flags")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -fno-rtti -fno-exceptions" CACHE STRING "C++ flags")
|
|
||||||
set(CMAKE_FIND_ROOT_PATH ${DEVKITPRO} ${DEVKITPRO}/devkitA64 ${DEVKITPRO}/libnx ${DEVKITPRO}/portlibs/switch)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
|
||||||
set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "Shared libs not available")
|
|
||||||
|
|
||||||
project(SDL2)
|
|
||||||
|
|
||||||
set(SRC_DIRS
|
|
||||||
src
|
|
||||||
src/atomic
|
|
||||||
src/audio
|
|
||||||
src/audio/switch
|
|
||||||
src/cpuinfo
|
|
||||||
src/events
|
|
||||||
src/file
|
|
||||||
src/filesystem/dummy
|
|
||||||
src/haptic
|
|
||||||
src/haptic/dummy
|
|
||||||
src/joystick
|
|
||||||
src/joystick/switch
|
|
||||||
src/joystick/dummy
|
|
||||||
src/loadso
|
|
||||||
src/loadso/dummy
|
|
||||||
src/libm
|
|
||||||
src/power
|
|
||||||
src/render
|
|
||||||
src/render/software
|
|
||||||
src/render/opengl
|
|
||||||
src/render/opengles
|
|
||||||
src/render/opengles2
|
|
||||||
src/stdlib
|
|
||||||
src/thread
|
|
||||||
src/thread/switch
|
|
||||||
src/timer
|
|
||||||
src/timer/switch
|
|
||||||
src/video
|
|
||||||
src/video/yuv2rgb
|
|
||||||
src/video/switch
|
|
||||||
src/sensor
|
|
||||||
src/sensor/dummy
|
|
||||||
)
|
|
||||||
|
|
||||||
set(SRC_FILES )
|
|
||||||
foreach (DIR ${SRC_DIRS})
|
|
||||||
file(GLOB FILES ${DIR}/*.c*)
|
|
||||||
list(APPEND SRC_FILES ${FILES})
|
|
||||||
endforeach (DIR)
|
|
||||||
|
|
||||||
# SDL2 library
|
|
||||||
add_library(${PROJECT_NAME} STATIC ${SRC_FILES})
|
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC ${SRC_DIRS} include)
|
|
||||||
target_compile_options(${PROJECT_NAME} PUBLIC -O3 -D__SWITCH__ -DSDL_VIDEO_STATIC_ANGLE)
|
|
||||||
|
|
||||||
# SDL2 test
|
|
||||||
add_executable(${PROJECT_NAME}.elf test/testswitch.c)
|
|
||||||
target_include_directories(${PROJECT_NAME}.elf PRIVATE include)
|
|
||||||
target_compile_options(${PROJECT_NAME}.elf PRIVATE -O3 -D__SWITCH__)
|
|
||||||
target_link_libraries(${PROJECT_NAME}.elf
|
|
||||||
${PROJECT_NAME}
|
|
||||||
${DEVKITPRO}/portlibs/switch/lib/libEGL.a
|
|
||||||
${DEVKITPRO}/portlibs/switch/lib/libglapi.a
|
|
||||||
${DEVKITPRO}/portlibs/switch/lib/libdrm_nouveau.a
|
|
||||||
${DEVKITPRO}/libnx/lib/libnx.a
|
|
||||||
stdc++
|
|
||||||
m
|
|
||||||
)
|
|
||||||
set_target_properties(${PROJECT_NAME}.elf PROPERTIES LINK_FLAGS "-specs=${DEVKITPRO}/libnx/switch.specs")
|
|
||||||
add_custom_target(${PROJECT_NAME}.nro
|
|
||||||
DEPENDS ${PROJECT_NAME}.elf
|
|
||||||
COMMAND elf2nro ${PROJECT_NAME}.elf ${PROJECT_NAME}.nro)
|
|
@ -164,7 +164,7 @@ if(APPLE OR ARCH_64)
|
|||||||
set(OPT_DEF_SSEMATH ON)
|
set(OPT_DEF_SSEMATH ON)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if(UNIX OR MINGW OR MSYS)
|
if(UNIX OR MINGW OR MSYS OR NINTENDO_SWITCH)
|
||||||
set(OPT_DEF_LIBC ON)
|
set(OPT_DEF_LIBC ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -1988,6 +1988,61 @@ elseif(RISCOS)
|
|||||||
if(SDL_AUDIO)
|
if(SDL_AUDIO)
|
||||||
CheckOSS()
|
CheckOSS()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
elseif(NINTENDO_SWITCH)
|
||||||
|
if(SDL_AUDIO)
|
||||||
|
set(SDL_AUDIO_DRIVER_SWITCH 1)
|
||||||
|
file(GLOB SWITCH_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/switch/*.c)
|
||||||
|
set(SOURCE_FILES ${SOURCE_FILES} ${SWITCH_AUDIO_SOURCES})
|
||||||
|
set(HAVE_SDL_AUDIO TRUE)
|
||||||
|
endif()
|
||||||
|
#[[
|
||||||
|
if(SDL_FILESYSTEM)
|
||||||
|
set(SDL_FILESYSTEM_SWITCH 1)
|
||||||
|
file(GLOB SWITCH_FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/switch/*.c)
|
||||||
|
set(SOURCE_FILES ${SOURCE_FILES} ${SWITCH_FILESYSTEM_SOURCES})
|
||||||
|
set(HAVE_SDL_FILESYSTEM TRUE)
|
||||||
|
endif()
|
||||||
|
]]
|
||||||
|
if(SDL_JOYSTICK)
|
||||||
|
set(SDL_JOYSTICK_SWITCH 1)
|
||||||
|
file(GLOB SWITCH_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/switch/*.c)
|
||||||
|
set(SOURCE_FILES ${SOURCE_FILES} ${SWITCH_JOYSTICK_SOURCES})
|
||||||
|
set(HAVE_SDL_JOYSTICK TRUE)
|
||||||
|
endif()
|
||||||
|
#[[
|
||||||
|
if(SDL_POWER)
|
||||||
|
set(SDL_POWER_SWITCH 1)
|
||||||
|
file(GLOB SWITCH_POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/switch/*.c)
|
||||||
|
set(SOURCE_FILES ${SOURCE_FILES} ${SWITCH_POWER_SOURCES})
|
||||||
|
set(HAVE_SDL_POWER TRUE)
|
||||||
|
endif()
|
||||||
|
]]
|
||||||
|
if(SDL_TIMERS)
|
||||||
|
set(SDL_TIMER_SWITCH 1)
|
||||||
|
file(GLOB SWITCH_TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/switch/*.c)
|
||||||
|
set(SOURCE_FILES ${SOURCE_FILES} ${SWITCH_TIMER_SOURCES})
|
||||||
|
set(HAVE_SDL_TIMERS TRUE)
|
||||||
|
endif()
|
||||||
|
if(SDL_VIDEO)
|
||||||
|
set(SDL_VIDEO_DRIVER_SWITCH 1)
|
||||||
|
file(GLOB SWITCH_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/switch/*.c)
|
||||||
|
set(SOURCE_FILES ${SOURCE_FILES} ${SWITCH_VIDEO_SOURCES})
|
||||||
|
set(HAVE_SDL_VIDEO TRUE)
|
||||||
|
set(SDL_VIDEO_OPENGL_EGL 1)
|
||||||
|
set(HAVE_VIDEO_OPENGLES TRUE)
|
||||||
|
set(SDL_VIDEO_OPENGL_ES2 1)
|
||||||
|
set(SDL_VIDEO_RENDER_OGL_ES2 1)
|
||||||
|
set(SDL_VIDEO_OPENGL 1)
|
||||||
|
set(HAVE_VIDEO_OPENGL TRUE)
|
||||||
|
endif()
|
||||||
|
set(SDL_STATIC_PIC ON)
|
||||||
|
list(APPEND EXTRA_LIBS EGL glapi drm_nouveau nx m)
|
||||||
|
add_definitions(-DSDL_VIDEO_STATIC_ANGLE)
|
||||||
|
set(HAVE_CLOCK_GETTIME 1)
|
||||||
|
set(PTHREADS ON)
|
||||||
|
set(PTHREADS_SEM ON)
|
||||||
|
CheckPTHREAD()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(VIDEO_VULKAN)
|
if(VIDEO_VULKAN)
|
||||||
|
@ -287,6 +287,7 @@
|
|||||||
#cmakedefine SDL_AUDIO_DRIVER_SUNAUDIO @SDL_AUDIO_DRIVER_SUNAUDIO@
|
#cmakedefine SDL_AUDIO_DRIVER_SUNAUDIO @SDL_AUDIO_DRIVER_SUNAUDIO@
|
||||||
#cmakedefine SDL_AUDIO_DRIVER_WASAPI @SDL_AUDIO_DRIVER_WASAPI@
|
#cmakedefine SDL_AUDIO_DRIVER_WASAPI @SDL_AUDIO_DRIVER_WASAPI@
|
||||||
#cmakedefine SDL_AUDIO_DRIVER_WINMM @SDL_AUDIO_DRIVER_WINMM@
|
#cmakedefine SDL_AUDIO_DRIVER_WINMM @SDL_AUDIO_DRIVER_WINMM@
|
||||||
|
#cmakedefine SDL_AUDIO_DRIVER_SWITCH @SDL_AUDIO_DRIVER_SWITCH@
|
||||||
|
|
||||||
/* Enable various input drivers */
|
/* Enable various input drivers */
|
||||||
#cmakedefine SDL_INPUT_LINUXEV @SDL_INPUT_LINUXEV@
|
#cmakedefine SDL_INPUT_LINUXEV @SDL_INPUT_LINUXEV@
|
||||||
@ -305,6 +306,7 @@
|
|||||||
#cmakedefine SDL_JOYSTICK_HIDAPI @SDL_JOYSTICK_HIDAPI@
|
#cmakedefine SDL_JOYSTICK_HIDAPI @SDL_JOYSTICK_HIDAPI@
|
||||||
#cmakedefine SDL_JOYSTICK_EMSCRIPTEN @SDL_JOYSTICK_EMSCRIPTEN@
|
#cmakedefine SDL_JOYSTICK_EMSCRIPTEN @SDL_JOYSTICK_EMSCRIPTEN@
|
||||||
#cmakedefine SDL_JOYSTICK_VIRTUAL @SDL_JOYSTICK_VIRTUAL@
|
#cmakedefine SDL_JOYSTICK_VIRTUAL @SDL_JOYSTICK_VIRTUAL@
|
||||||
|
#cmakedefine SDL_JOYSTICK_SWITCH @SDL_JOYSTICK_SWITCH@
|
||||||
#cmakedefine SDL_HAPTIC_DUMMY @SDL_HAPTIC_DUMMY@
|
#cmakedefine SDL_HAPTIC_DUMMY @SDL_HAPTIC_DUMMY@
|
||||||
#cmakedefine SDL_HAPTIC_LINUX @SDL_HAPTIC_LINUX@
|
#cmakedefine SDL_HAPTIC_LINUX @SDL_HAPTIC_LINUX@
|
||||||
#cmakedefine SDL_HAPTIC_IOKIT @SDL_HAPTIC_IOKIT@
|
#cmakedefine SDL_HAPTIC_IOKIT @SDL_HAPTIC_IOKIT@
|
||||||
@ -330,6 +332,7 @@
|
|||||||
#cmakedefine SDL_THREAD_PTHREAD_RECURSIVE_MUTEX @SDL_THREAD_PTHREAD_RECURSIVE_MUTEX@
|
#cmakedefine SDL_THREAD_PTHREAD_RECURSIVE_MUTEX @SDL_THREAD_PTHREAD_RECURSIVE_MUTEX@
|
||||||
#cmakedefine SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP @SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP@
|
#cmakedefine SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP @SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP@
|
||||||
#cmakedefine SDL_THREAD_WINDOWS @SDL_THREAD_WINDOWS@
|
#cmakedefine SDL_THREAD_WINDOWS @SDL_THREAD_WINDOWS@
|
||||||
|
#cmakedefine SDL_THREAD_SWITCH @SDL_THREAD_SWITCH@
|
||||||
|
|
||||||
/* Enable various timer systems */
|
/* Enable various timer systems */
|
||||||
#cmakedefine SDL_TIMER_HAIKU @SDL_TIMER_HAIKU@
|
#cmakedefine SDL_TIMER_HAIKU @SDL_TIMER_HAIKU@
|
||||||
@ -337,6 +340,7 @@
|
|||||||
#cmakedefine SDL_TIMER_UNIX @SDL_TIMER_UNIX@
|
#cmakedefine SDL_TIMER_UNIX @SDL_TIMER_UNIX@
|
||||||
#cmakedefine SDL_TIMER_WINDOWS @SDL_TIMER_WINDOWS@
|
#cmakedefine SDL_TIMER_WINDOWS @SDL_TIMER_WINDOWS@
|
||||||
#cmakedefine SDL_TIMER_WINCE @SDL_TIMER_WINCE@
|
#cmakedefine SDL_TIMER_WINCE @SDL_TIMER_WINCE@
|
||||||
|
#cmakedefine SDL_TIMER_SWITCH @SDL_TIMER_SWITCH@
|
||||||
|
|
||||||
/* Enable various video drivers */
|
/* Enable various video drivers */
|
||||||
#cmakedefine SDL_VIDEO_DRIVER_ANDROID @SDL_VIDEO_DRIVER_ANDROID@
|
#cmakedefine SDL_VIDEO_DRIVER_ANDROID @SDL_VIDEO_DRIVER_ANDROID@
|
||||||
@ -386,6 +390,7 @@
|
|||||||
#cmakedefine SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS @SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS@
|
#cmakedefine SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS @SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS@
|
||||||
#cmakedefine SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY @SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY@
|
#cmakedefine SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY @SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY@
|
||||||
#cmakedefine SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM @SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM@
|
#cmakedefine SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM @SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM@
|
||||||
|
#cmakedefine SDL_VIDEO_DRIVER_SWITCH @SDL_VIDEO_DRIVER_SWITCH@
|
||||||
|
|
||||||
#cmakedefine SDL_VIDEO_RENDER_D3D @SDL_VIDEO_RENDER_D3D@
|
#cmakedefine SDL_VIDEO_RENDER_D3D @SDL_VIDEO_RENDER_D3D@
|
||||||
#cmakedefine SDL_VIDEO_RENDER_D3D11 @SDL_VIDEO_RENDER_D3D11@
|
#cmakedefine SDL_VIDEO_RENDER_D3D11 @SDL_VIDEO_RENDER_D3D11@
|
||||||
@ -423,6 +428,7 @@
|
|||||||
#cmakedefine SDL_POWER_HAIKU @SDL_POWER_HAIKU@
|
#cmakedefine SDL_POWER_HAIKU @SDL_POWER_HAIKU@
|
||||||
#cmakedefine SDL_POWER_EMSCRIPTEN @SDL_POWER_EMSCRIPTEN@
|
#cmakedefine SDL_POWER_EMSCRIPTEN @SDL_POWER_EMSCRIPTEN@
|
||||||
#cmakedefine SDL_POWER_HARDWIRED @SDL_POWER_HARDWIRED@
|
#cmakedefine SDL_POWER_HARDWIRED @SDL_POWER_HARDWIRED@
|
||||||
|
#cmakedefine SDL_POWER_SWITCH @SDL_POWER_SWITCH@
|
||||||
|
|
||||||
/* Enable system filesystem support */
|
/* Enable system filesystem support */
|
||||||
#cmakedefine SDL_FILESYSTEM_ANDROID @SDL_FILESYSTEM_ANDROID@
|
#cmakedefine SDL_FILESYSTEM_ANDROID @SDL_FILESYSTEM_ANDROID@
|
||||||
@ -432,6 +438,7 @@
|
|||||||
#cmakedefine SDL_FILESYSTEM_UNIX @SDL_FILESYSTEM_UNIX@
|
#cmakedefine SDL_FILESYSTEM_UNIX @SDL_FILESYSTEM_UNIX@
|
||||||
#cmakedefine SDL_FILESYSTEM_WINDOWS @SDL_FILESYSTEM_WINDOWS@
|
#cmakedefine SDL_FILESYSTEM_WINDOWS @SDL_FILESYSTEM_WINDOWS@
|
||||||
#cmakedefine SDL_FILESYSTEM_EMSCRIPTEN @SDL_FILESYSTEM_EMSCRIPTEN@
|
#cmakedefine SDL_FILESYSTEM_EMSCRIPTEN @SDL_FILESYSTEM_EMSCRIPTEN@
|
||||||
|
#cmakedefine SDL_FILESYSTEM_SWITCH @SDL_FILESYSTEM_SWITCH@
|
||||||
|
|
||||||
/* Enable assembly routines */
|
/* Enable assembly routines */
|
||||||
#cmakedefine SDL_ASSEMBLY_ROUTINES @SDL_ASSEMBLY_ROUTINES@
|
#cmakedefine SDL_ASSEMBLY_ROUTINES @SDL_ASSEMBLY_ROUTINES@
|
||||||
|
@ -31,36 +31,28 @@
|
|||||||
|
|
||||||
#define JOYSTICK_COUNT 8
|
#define JOYSTICK_COUNT 8
|
||||||
|
|
||||||
typedef struct JoystickState
|
typedef struct SWITCHJoystickState
|
||||||
{
|
{
|
||||||
HidControllerID id;
|
PadState pad;
|
||||||
JoystickPosition l_pos;
|
|
||||||
JoystickPosition r_pos;
|
|
||||||
u64 buttons;
|
u64 buttons;
|
||||||
u32 vibrationDeviceHandles[2][2];
|
HidAnalogStickState stick_l;
|
||||||
HidVibrationValue vibrationValues[2];
|
HidAnalogStickState stick_r;
|
||||||
} JoystickState;
|
HidVibrationDeviceHandle vibrationDeviceHandles;
|
||||||
|
HidVibrationValue vibrationValues;
|
||||||
|
} SWITCHJoystickState;
|
||||||
|
|
||||||
/* Current pad state */
|
static SWITCHJoystickState joystickState[JOYSTICK_COUNT];
|
||||||
static JoystickState pad[JOYSTICK_COUNT];
|
|
||||||
|
|
||||||
static HidControllerID pad_id[JOYSTICK_COUNT] = {
|
static const HidNpadButton pad_mapping[] = {
|
||||||
CONTROLLER_P1_AUTO, CONTROLLER_PLAYER_2,
|
HidNpadButton_A, HidNpadButton_B, HidNpadButton_X, HidNpadButton_Y,
|
||||||
CONTROLLER_PLAYER_3, CONTROLLER_PLAYER_4,
|
HidNpadButton_StickL, HidNpadButton_StickR,
|
||||||
CONTROLLER_PLAYER_5, CONTROLLER_PLAYER_6,
|
HidNpadButton_L, HidNpadButton_R,
|
||||||
CONTROLLER_PLAYER_7, CONTROLLER_PLAYER_8
|
HidNpadButton_ZL, HidNpadButton_ZR,
|
||||||
};
|
HidNpadButton_Plus, HidNpadButton_Minus,
|
||||||
|
HidNpadButton_Left, HidNpadButton_Up, HidNpadButton_Right, HidNpadButton_Down,
|
||||||
static const HidControllerKeys pad_mapping[] = {
|
HidNpadButton_StickLLeft, HidNpadButton_StickLUp, HidNpadButton_StickLRight, HidNpadButton_StickLDown,
|
||||||
KEY_A, KEY_B, KEY_X, KEY_Y,
|
HidNpadButton_StickRLeft, HidNpadButton_StickRUp, HidNpadButton_StickRRight, HidNpadButton_StickRDown,
|
||||||
KEY_LSTICK, KEY_RSTICK,
|
HidNpadButton_LeftSL, HidNpadButton_LeftSR, HidNpadButton_RightSL, HidNpadButton_RightSR
|
||||||
KEY_L, KEY_R,
|
|
||||||
KEY_ZL, KEY_ZR,
|
|
||||||
KEY_PLUS, KEY_MINUS,
|
|
||||||
KEY_DLEFT, KEY_DUP, KEY_DRIGHT, KEY_DDOWN,
|
|
||||||
KEY_LSTICK_LEFT, KEY_LSTICK_UP, KEY_LSTICK_RIGHT, KEY_LSTICK_DOWN,
|
|
||||||
KEY_RSTICK_LEFT, KEY_RSTICK_UP, KEY_RSTICK_RIGHT, KEY_RSTICK_DOWN,
|
|
||||||
KEY_SL_LEFT, KEY_SR_LEFT, KEY_SL_RIGHT, KEY_SR_RIGHT
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Function to scan the system for joysticks.
|
/* Function to scan the system for joysticks.
|
||||||
@ -69,14 +61,18 @@ static const HidControllerKeys pad_mapping[] = {
|
|||||||
static int
|
static int
|
||||||
SWITCH_JoystickInit(void)
|
SWITCH_JoystickInit(void)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < JOYSTICK_COUNT; i++) {
|
padConfigureInput(JOYSTICK_COUNT, HidNpadStyleSet_NpadStandard);
|
||||||
pad[i].id = pad_id[i];
|
|
||||||
hidInitializeVibrationDevices(pad[i].vibrationDeviceHandles[0], 2, CONTROLLER_HANDHELD, TYPE_HANDHELD);
|
// initialize first pad to defaults
|
||||||
if(pad[i].id == CONTROLLER_P1_AUTO) {
|
padInitializeDefault(&joystickState[0].pad);
|
||||||
hidInitializeVibrationDevices(pad[i].vibrationDeviceHandles[1], 2, CONTROLLER_PLAYER_1, TYPE_HANDHELD);
|
padUpdate(&joystickState[0].pad);
|
||||||
} else {
|
|
||||||
hidInitializeVibrationDevices(pad[i].vibrationDeviceHandles[1], 2, pad[i].id, TYPE_JOYCON_PAIR);
|
// initialize pad and vibrations for pad 1 to 7
|
||||||
}
|
for (int i = 1; i < JOYSTICK_COUNT; i++) {
|
||||||
|
padInitialize(&joystickState[i].pad, HidNpadIdType_No1 + i);
|
||||||
|
padUpdate(&joystickState[i].pad);
|
||||||
|
hidInitializeVibrationDevices(&joystickState[i].vibrationDeviceHandles,1,
|
||||||
|
HidNpadIdType_No1 + i, padGetStyleSet(&joystickState[i].pad));
|
||||||
}
|
}
|
||||||
|
|
||||||
return JOYSTICK_COUNT;
|
return JOYSTICK_COUNT;
|
||||||
@ -148,23 +144,44 @@ SWITCH_JoystickOpen(SDL_Joystick *joystick, int device_index)
|
|||||||
static int
|
static int
|
||||||
SWITCH_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
|
SWITCH_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
|
||||||
{
|
{
|
||||||
int target_device = 0;
|
|
||||||
int id = joystick->instance_id;
|
int id = joystick->instance_id;
|
||||||
|
|
||||||
if (!hidGetHandheldMode()) {
|
joystickState[id].vibrationValues.amp_low =
|
||||||
target_device = 1;
|
joystickState[id].vibrationValues.amp_high = low_frequency_rumble == 0 ? 0.0f : 320.0f;
|
||||||
}
|
joystickState[id].vibrationValues.freq_low =
|
||||||
|
low_frequency_rumble == 0 ? 160.0f : (float) low_frequency_rumble / 204;
|
||||||
|
joystickState[id].vibrationValues.freq_high =
|
||||||
|
high_frequency_rumble == 0 ? 320.0f : (float) high_frequency_rumble / 204;
|
||||||
|
|
||||||
pad[id].vibrationValues[0].amp_low = pad[id].vibrationValues[0].amp_high = low_frequency_rumble == 0 ? 0.0f : 320.0f;
|
hidSendVibrationValues(&joystickState[id].vibrationDeviceHandles, &joystickState[id].vibrationValues, 1);
|
||||||
pad[id].vibrationValues[0].freq_low = low_frequency_rumble == 0 ? 160.0f : (float) low_frequency_rumble / 204;
|
|
||||||
pad[id].vibrationValues[0].freq_high = high_frequency_rumble == 0 ? 320.0f : (float) high_frequency_rumble / 204;
|
|
||||||
memcpy(&pad[id].vibrationValues[1], &pad[id].vibrationValues[0], sizeof(HidVibrationValue));
|
|
||||||
|
|
||||||
hidSendVibrationValues(pad[id].vibrationDeviceHandles[target_device], pad[id].vibrationValues, 2);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
SWITCH_JoystickRumbleTriggers(SDL_Joystick * joystick, Uint16 left, Uint16 right)
|
||||||
|
{
|
||||||
|
return SDL_Unsupported();
|
||||||
|
}
|
||||||
|
|
||||||
|
static SDL_bool
|
||||||
|
SWITCH_JoystickHasLED(SDL_Joystick * joystick)
|
||||||
|
{
|
||||||
|
return SDL_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
SWITCH_JoystickSetLED(SDL_Joystick * joystick, Uint8 red, Uint8 green, Uint8 blue)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
SWITCH_JoystickSetSensorsEnabled(SDL_Joystick *joystick, SDL_bool enabled)
|
||||||
|
{
|
||||||
|
return SDL_Unsupported();
|
||||||
|
}
|
||||||
|
|
||||||
/* Function to update the state of a joystick - called as a device poll.
|
/* Function to update the state of a joystick - called as a device poll.
|
||||||
* This function shouldn't update the joystick structure directly,
|
* This function shouldn't update the joystick structure directly,
|
||||||
* but instead should call SDL_PrivateJoystick*() to deliver events
|
* but instead should call SDL_PrivateJoystick*() to deliver events
|
||||||
@ -174,44 +191,45 @@ static void
|
|||||||
SWITCH_JoystickUpdate(SDL_Joystick *joystick)
|
SWITCH_JoystickUpdate(SDL_Joystick *joystick)
|
||||||
{
|
{
|
||||||
u64 changed;
|
u64 changed;
|
||||||
static JoystickState pad_old[JOYSTICK_COUNT];
|
static SWITCHJoystickState state_old[JOYSTICK_COUNT];
|
||||||
|
|
||||||
int index = (int) SDL_JoystickInstanceID(joystick);
|
int index = (int) SDL_JoystickInstanceID(joystick);
|
||||||
if (index > JOYSTICK_COUNT || SDL_IsTextInputActive()) {
|
if (index > JOYSTICK_COUNT || SDL_IsTextInputActive()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
hidJoystickRead(&pad[index].l_pos, pad[index].id, JOYSTICK_LEFT);
|
padUpdate(&joystickState[index].pad);
|
||||||
hidJoystickRead(&pad[index].r_pos, pad[index].id, JOYSTICK_RIGHT);
|
joystickState[index].stick_l = padGetStickPos(&joystickState[index].pad, 0);
|
||||||
pad[index].buttons = hidKeysHeld(pad[index].id);
|
joystickState[index].stick_r = padGetStickPos(&joystickState[index].pad, 1);
|
||||||
|
joystickState[index].buttons = padGetButtons(&joystickState[index].pad);
|
||||||
|
|
||||||
// Axes
|
// Axes
|
||||||
if (pad_old[index].l_pos.dx != pad[index].l_pos.dx) {
|
if (state_old[index].stick_l.x != joystickState[index].stick_l.x) {
|
||||||
SDL_PrivateJoystickAxis(joystick, 0, (Sint16) pad[index].l_pos.dx);
|
SDL_PrivateJoystickAxis(joystick, 0, (Sint16) joystickState[index].stick_l.x);
|
||||||
pad_old[index].l_pos.dx = pad[index].l_pos.dx;
|
state_old[index].stick_l.x = joystickState[index].stick_l.x;
|
||||||
}
|
}
|
||||||
if (pad_old[index].l_pos.dy != pad[index].l_pos.dy) {
|
if (state_old[index].stick_l.y != joystickState[index].stick_l.y) {
|
||||||
SDL_PrivateJoystickAxis(joystick, 1, (Sint16) -pad[index].l_pos.dy);
|
SDL_PrivateJoystickAxis(joystick, 1, (Sint16) -joystickState[index].stick_l.y);
|
||||||
pad_old[index].l_pos.dy = -pad[index].l_pos.dy;
|
state_old[index].stick_l.y = -joystickState[index].stick_l.y;
|
||||||
}
|
}
|
||||||
if (pad_old[index].r_pos.dx != pad[index].r_pos.dx) {
|
if (state_old[index].stick_r.x != joystickState[index].stick_r.x) {
|
||||||
SDL_PrivateJoystickAxis(joystick, 2, (Sint16) pad[index].r_pos.dx);
|
SDL_PrivateJoystickAxis(joystick, 2, (Sint16) joystickState[index].stick_r.x);
|
||||||
pad_old[index].r_pos.dx = pad[index].r_pos.dx;
|
state_old[index].stick_r.x = joystickState[index].stick_r.x;
|
||||||
}
|
}
|
||||||
if (pad_old[index].r_pos.dy != pad[index].r_pos.dy) {
|
if (state_old[index].stick_r.y != joystickState[index].stick_r.y) {
|
||||||
SDL_PrivateJoystickAxis(joystick, 3, (Sint16) -pad[index].r_pos.dy);
|
SDL_PrivateJoystickAxis(joystick, 3, (Sint16) -joystickState[index].stick_r.y);
|
||||||
pad_old[index].r_pos.dy = -pad[index].r_pos.dy;
|
state_old[index].stick_r.y = -joystickState[index].stick_r.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Buttons
|
// Buttons
|
||||||
changed = pad_old[index].buttons ^ pad[index].buttons;
|
changed = state_old[index].buttons ^ joystickState[index].buttons;
|
||||||
pad_old[index].buttons = pad[index].buttons;
|
state_old[index].buttons = joystickState[index].buttons;
|
||||||
if (changed) {
|
if (changed) {
|
||||||
for (int i = 0; i < joystick->nbuttons; i++) {
|
for (int i = 0; i < joystick->nbuttons; i++) {
|
||||||
if (changed & pad_mapping[i]) {
|
if (changed & pad_mapping[i]) {
|
||||||
SDL_PrivateJoystickButton(
|
SDL_PrivateJoystickButton(joystick, (Uint8) i,
|
||||||
joystick, (Uint8) i,
|
(Uint8) ((joystickState[index].buttons & pad_mapping[i]) ?
|
||||||
(Uint8) ((pad[index].buttons & pad_mapping[i]) ? SDL_PRESSED : SDL_RELEASED));
|
SDL_PRESSED : SDL_RELEASED));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -241,6 +259,10 @@ SDL_JoystickDriver SDL_SWITCH_JoystickDriver =
|
|||||||
SWITCH_JoystickGetDeviceInstanceID,
|
SWITCH_JoystickGetDeviceInstanceID,
|
||||||
SWITCH_JoystickOpen,
|
SWITCH_JoystickOpen,
|
||||||
SWITCH_JoystickRumble,
|
SWITCH_JoystickRumble,
|
||||||
|
SWITCH_JoystickRumbleTriggers,
|
||||||
|
SWITCH_JoystickHasLED,
|
||||||
|
SWITCH_JoystickSetLED,
|
||||||
|
SWITCH_JoystickSetSensorsEnabled,
|
||||||
SWITCH_JoystickUpdate,
|
SWITCH_JoystickUpdate,
|
||||||
SWITCH_JoystickClose,
|
SWITCH_JoystickClose,
|
||||||
SWITCH_JoystickQuit,
|
SWITCH_JoystickQuit,
|
||||||
|
@ -77,7 +77,7 @@ typedef HDC EGLNativeDisplayType;
|
|||||||
typedef HBITMAP EGLNativePixmapType;
|
typedef HBITMAP EGLNativePixmapType;
|
||||||
typedef HWND EGLNativeWindowType;
|
typedef HWND EGLNativeWindowType;
|
||||||
|
|
||||||
#elif defined(__APPLE__) || defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
|
#elif defined(__APPLE__) || defined(__WINSCW__) || defined(__SYMBIAN32__) || defined(__SWITCH__)
|
||||||
|
|
||||||
typedef int EGLNativeDisplayType;
|
typedef int EGLNativeDisplayType;
|
||||||
typedef void *EGLNativeWindowType;
|
typedef void *EGLNativeWindowType;
|
||||||
|
@ -42,73 +42,74 @@ SWITCH_SetRelativeMouseMode(SDL_bool enabled)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SWITCH_InitMouse(void)
|
SWITCH_InitMouse(void)
|
||||||
{
|
{
|
||||||
SDL_Mouse *mouse = SDL_GetMouse();
|
SDL_Mouse *mouse = SDL_GetMouse();
|
||||||
|
|
||||||
mouse->SetRelativeMouseMode = SWITCH_SetRelativeMouseMode;
|
mouse->SetRelativeMouseMode = SWITCH_SetRelativeMouseMode;
|
||||||
|
hidInitializeMouse();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SWITCH_PollMouse(void)
|
SWITCH_PollMouse(void)
|
||||||
{
|
{
|
||||||
SDL_Window *window = SDL_GetFocusWindow();
|
SDL_Window *window = SDL_GetFocusWindow();
|
||||||
uint64_t buttons;
|
HidMouseState mouse_state;
|
||||||
uint64_t changed_buttons;
|
size_t state_count;
|
||||||
MousePosition mouse_pos;
|
uint64_t changed_buttons;
|
||||||
uint64_t timestamp;
|
uint64_t timestamp;
|
||||||
int dx, dy;
|
int dx, dy;
|
||||||
|
|
||||||
// We skip polling mouse if no window is created
|
// We skip polling mouse if no window is created
|
||||||
if (window == NULL)
|
if (window == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
buttons = hidMouseButtonsHeld();
|
state_count = hidGetMouseStates(&mouse_state, 1);
|
||||||
changed_buttons = buttons ^ prev_buttons;
|
changed_buttons = mouse_state.buttons ^ prev_buttons;
|
||||||
|
|
||||||
if (changed_buttons & MOUSE_LEFT) {
|
if (changed_buttons & HidMouseButton_Left) {
|
||||||
if (prev_buttons & MOUSE_LEFT)
|
if (prev_buttons & HidMouseButton_Left)
|
||||||
SDL_SendMouseButton(window, 0, SDL_RELEASED, SDL_BUTTON_LEFT);
|
SDL_SendMouseButton(window, 0, SDL_RELEASED, SDL_BUTTON_LEFT);
|
||||||
else
|
else
|
||||||
SDL_SendMouseButton(window, 0, SDL_PRESSED, SDL_BUTTON_LEFT);
|
SDL_SendMouseButton(window, 0, SDL_PRESSED, SDL_BUTTON_LEFT);
|
||||||
}
|
}
|
||||||
if (changed_buttons & MOUSE_RIGHT) {
|
if (changed_buttons & HidMouseButton_Right) {
|
||||||
if (prev_buttons & MOUSE_RIGHT)
|
if (prev_buttons & HidMouseButton_Right)
|
||||||
SDL_SendMouseButton(window, 0, SDL_RELEASED, SDL_BUTTON_RIGHT);
|
SDL_SendMouseButton(window, 0, SDL_RELEASED, SDL_BUTTON_RIGHT);
|
||||||
else
|
else
|
||||||
SDL_SendMouseButton(window, 0, SDL_PRESSED, SDL_BUTTON_RIGHT);
|
SDL_SendMouseButton(window, 0, SDL_PRESSED, SDL_BUTTON_RIGHT);
|
||||||
}
|
}
|
||||||
if (changed_buttons & MOUSE_MIDDLE) {
|
if (changed_buttons & HidMouseButton_Middle) {
|
||||||
if (prev_buttons & MOUSE_MIDDLE)
|
if (prev_buttons & HidMouseButton_Middle)
|
||||||
SDL_SendMouseButton(window, 0, SDL_RELEASED, SDL_BUTTON_MIDDLE);
|
SDL_SendMouseButton(window, 0, SDL_RELEASED, SDL_BUTTON_MIDDLE);
|
||||||
else
|
else
|
||||||
SDL_SendMouseButton(window, 0, SDL_PRESSED, SDL_BUTTON_MIDDLE);
|
SDL_SendMouseButton(window, 0, SDL_PRESSED, SDL_BUTTON_MIDDLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
prev_buttons = buttons;
|
prev_buttons = mouse_state.buttons;
|
||||||
|
|
||||||
timestamp = SDL_GetTicks();
|
timestamp = SDL_GetTicks();
|
||||||
|
|
||||||
if (SDL_TICKS_PASSED(timestamp, last_timestamp + mouse_read_interval)) {
|
if (SDL_TICKS_PASSED(timestamp, last_timestamp + mouse_read_interval)) {
|
||||||
hidMouseRead(&mouse_pos);
|
// if hidMouseRead is called once per frame, a factor two on the velocities
|
||||||
// if hidMouseRead is called once per frame, a factor two on the velocities
|
// results in approximately the same mouse motion as reported by mouse_pos.x and mouse_pos.y
|
||||||
// results in approximately the same mouse motion as reported by mouse_pos.x and mouse_pos.y
|
// but without the clamping to 1280 x 720
|
||||||
// but without the clamping to 1280 x 720
|
if(state_count > 0) {
|
||||||
dx = mouse_pos.velocityX * 2;
|
dx = mouse_state.x * 2;
|
||||||
dy = mouse_pos.velocityY * 2;
|
dy = mouse_state.y * 2;
|
||||||
if (dx || dy) {
|
if (dx || dy) {
|
||||||
SDL_SendMouseMotion(window, 0, 1, dx, dy);
|
SDL_SendMouseMotion(window, 0, 1, dx, dy);
|
||||||
}
|
}
|
||||||
last_timestamp = timestamp;
|
}
|
||||||
}
|
last_timestamp = timestamp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SWITCH_QuitMouse(void)
|
SWITCH_QuitMouse(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* SDL_VIDEO_DRIVER_SWITCH */
|
#endif /* SDL_VIDEO_DRIVER_SWITCH */
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
@ -40,12 +40,6 @@
|
|||||||
static SDL_Window *switch_window = NULL;
|
static SDL_Window *switch_window = NULL;
|
||||||
static AppletOperationMode operationMode;
|
static AppletOperationMode operationMode;
|
||||||
|
|
||||||
static int
|
|
||||||
SWITCH_Available(void)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
SWITCH_Destroy(SDL_VideoDevice *device)
|
SWITCH_Destroy(SDL_VideoDevice *device)
|
||||||
{
|
{
|
||||||
@ -92,7 +86,8 @@ SWITCH_CreateDevice(int devindex)
|
|||||||
device->MaximizeWindow = SWITCH_MaximizeWindow;
|
device->MaximizeWindow = SWITCH_MaximizeWindow;
|
||||||
device->MinimizeWindow = SWITCH_MinimizeWindow;
|
device->MinimizeWindow = SWITCH_MinimizeWindow;
|
||||||
device->RestoreWindow = SWITCH_RestoreWindow;
|
device->RestoreWindow = SWITCH_RestoreWindow;
|
||||||
device->SetWindowGrab = SWITCH_SetWindowGrab;
|
//device->SetWindowMouseGrab = SWITCH_SetWindowGrab; // SDL 2.0.16
|
||||||
|
//device->SetWindowKeyboardGrab = SWITCH_SetWindowGrab; // SDL 2.0.16
|
||||||
device->DestroyWindow = SWITCH_DestroyWindow;
|
device->DestroyWindow = SWITCH_DestroyWindow;
|
||||||
|
|
||||||
device->GL_LoadLibrary = SWITCH_GLES_LoadLibrary;
|
device->GL_LoadLibrary = SWITCH_GLES_LoadLibrary;
|
||||||
@ -117,10 +112,9 @@ SWITCH_CreateDevice(int devindex)
|
|||||||
}
|
}
|
||||||
|
|
||||||
VideoBootStrap SWITCH_bootstrap = {
|
VideoBootStrap SWITCH_bootstrap = {
|
||||||
"Switch",
|
"Switch",
|
||||||
"SDL2 video driver for Nintendo Switch",
|
"Nintendo Switch Video Driver",
|
||||||
SWITCH_Available,
|
SWITCH_CreateDevice
|
||||||
SWITCH_CreateDevice
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@ -143,7 +137,7 @@ SWITCH_VideoInit(_THIS)
|
|||||||
display.desktop_mode = current_mode;
|
display.desktop_mode = current_mode;
|
||||||
display.current_mode = current_mode;
|
display.current_mode = current_mode;
|
||||||
display.driverdata = NULL;
|
display.driverdata = NULL;
|
||||||
SDL_AddVideoDisplay(&display);
|
SDL_AddVideoDisplay(&display, SDL_FALSE);
|
||||||
|
|
||||||
// init touch
|
// init touch
|
||||||
SWITCH_InitTouch();
|
SWITCH_InitTouch();
|
||||||
@ -355,7 +349,6 @@ SWITCH_PumpEvents(_THIS)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
hidScanInput();
|
|
||||||
// we don't want other inputs overlapping with software keyboard
|
// we don't want other inputs overlapping with software keyboard
|
||||||
if(!SDL_IsTextInputActive()) {
|
if(!SDL_IsTextInputActive()) {
|
||||||
SWITCH_PollTouch();
|
SWITCH_PollTouch();
|
||||||
@ -380,4 +373,4 @@ SWITCH_PumpEvents(_THIS)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* SDL_VIDEO_DRIVER_SWITCH */
|
#endif /* SDL_VIDEO_DRIVER_SWITCH */
|
Loading…
x
Reference in New Issue
Block a user