Merge branch 'master' of https://github.com/86Box/86Box
This commit is contained in:
@@ -131,7 +131,6 @@ option(RTMIDI "RtMidi"
|
||||
option(FLUIDSYNTH "FluidSynth" ON)
|
||||
option(MUNT "MUNT" ON)
|
||||
option(VNC "VNC renderer" OFF)
|
||||
option(DINPUT "DirectInput" OFF)
|
||||
option(CPPTHREADS "C++11 threads" ON)
|
||||
option(NEW_DYNAREC "Use the PCem v15 (\"new\") dynamic recompiler" OFF)
|
||||
option(MINITRACE "Enable Chrome tracing using the modified minitrace library" OFF)
|
||||
|
@@ -191,13 +191,6 @@ if(WIN32)
|
||||
enable_language(RC)
|
||||
target_sources(86Box PUBLIC ../win/86Box-qt.rc)
|
||||
target_sources(plat PRIVATE win_dynld.c)
|
||||
if(DINPUT)
|
||||
target_sources(plat PRIVATE win_joystick.cpp)
|
||||
target_link_libraries(86Box dinput8)
|
||||
else()
|
||||
target_sources(plat PRIVATE win_joystick_rawinput.c)
|
||||
endif()
|
||||
target_link_libraries(86Box hid)
|
||||
|
||||
# CMake 3.22 messed this up for clang/clang++
|
||||
# See https://gitlab.kitware.com/cmake/cmake/-/issues/22611
|
||||
@@ -212,8 +205,15 @@ if(WIN32)
|
||||
if (MINGW)
|
||||
add_compile_definitions(NTDDI_VERSION=0x06010000)
|
||||
endif()
|
||||
|
||||
option(SDL_JOYSTICK "Use SDL2 joystick backend instead of raw input" OFF)
|
||||
endif()
|
||||
|
||||
if(WIN32 AND NOT SDL_JOYSTICK)
|
||||
target_sources(plat PRIVATE win_joystick_rawinput.c)
|
||||
target_link_libraries(86Box hid)
|
||||
else()
|
||||
target_sources(plat PRIVATE sdl_joystick.cpp)
|
||||
target_sources(plat PRIVATE sdl_joystick.c)
|
||||
endif()
|
||||
|
||||
if(WIN32 AND NOT MINGW)
|
||||
|
@@ -1,28 +1,53 @@
|
||||
// Lifted from wx-sdl2-joystick.c in PCem
|
||||
|
||||
/*
|
||||
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
* running old operating systems and software designed for IBM
|
||||
* PC systems and compatibles from 1981 through fairly recent
|
||||
* system designs based on the PCI bus.
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* SDL2 joystick interface.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: Sarah Walker, <https://pcem-emulator.co.uk/>
|
||||
* Joakim L. Gilje <jgilje@jgilje.net>
|
||||
*
|
||||
* Copyright 2017-2021 Sarah Walker
|
||||
* Copyright 2021 Joakim L. Gilje
|
||||
*/
|
||||
#include <SDL2/SDL.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
extern "C" {
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#define _USE_MATH_DEFINES
|
||||
#include <math.h>
|
||||
/* This #undef is needed because a SDL include header redefines HAVE_STDARG_H. */
|
||||
#undef HAVE_STDARG_H
|
||||
#define HAVE_STDARG_H
|
||||
#include <86box/86box.h>
|
||||
#include <86box/device.h>
|
||||
#include <86box/gameport.h>
|
||||
#include <86box/plat_unused.h>
|
||||
|
||||
int joysticks_present;
|
||||
joystick_t joystick_state[MAX_JOYSTICKS];
|
||||
plat_joystick_t plat_joystick_state[MAX_PLAT_JOYSTICKS];
|
||||
static SDL_Joystick *sdl_joy[MAX_PLAT_JOYSTICKS];
|
||||
}
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#ifndef M_PI
|
||||
# define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
|
||||
void
|
||||
joystick_init()
|
||||
joystick_init(void)
|
||||
{
|
||||
/* This is needed for SDL's Windows raw input backend to work properly without SDL video. */
|
||||
SDL_SetHint(SDL_HINT_JOYSTICK_THREAD, "1");
|
||||
|
||||
if (SDL_InitSubSystem(SDL_INIT_JOYSTICK) != 0) {
|
||||
return;
|
||||
}
|
||||
@@ -36,9 +61,9 @@ joystick_init()
|
||||
int d;
|
||||
|
||||
strncpy(plat_joystick_state[c].name, SDL_JoystickNameForIndex(c), 64);
|
||||
plat_joystick_state[c].nr_axes = std::min(SDL_JoystickNumAxes(sdl_joy[c]), MAX_JOY_AXES);
|
||||
plat_joystick_state[c].nr_buttons = std::min(SDL_JoystickNumButtons(sdl_joy[c]), MAX_JOY_BUTTONS);
|
||||
plat_joystick_state[c].nr_povs = std::min(SDL_JoystickNumHats(sdl_joy[c]), MAX_JOY_POVS);
|
||||
plat_joystick_state[c].nr_axes = MIN(SDL_JoystickNumAxes(sdl_joy[c]), MAX_JOY_AXES);
|
||||
plat_joystick_state[c].nr_buttons = MIN(SDL_JoystickNumButtons(sdl_joy[c]), MAX_JOY_BUTTONS);
|
||||
plat_joystick_state[c].nr_povs = MIN(SDL_JoystickNumHats(sdl_joy[c]), MAX_JOY_POVS);
|
||||
|
||||
for (d = 0; d < plat_joystick_state[c].nr_axes; d++) {
|
||||
snprintf(plat_joystick_state[c].axis[d].name, sizeof(plat_joystick_state[c].axis[d].name), "Axis %i", d);
|
||||
@@ -57,7 +82,7 @@ joystick_init()
|
||||
}
|
||||
|
||||
void
|
||||
joystick_close()
|
||||
joystick_close(void)
|
||||
{
|
||||
int c;
|
||||
|
||||
@@ -103,8 +128,9 @@ joystick_get_axis(int joystick_nr, int mapping)
|
||||
} else
|
||||
return plat_joystick_state[joystick_nr].a[plat_joystick_state[joystick_nr].axis[mapping].id];
|
||||
}
|
||||
|
||||
void
|
||||
joystick_process()
|
||||
joystick_process(void)
|
||||
{
|
||||
int c;
|
||||
int d;
|
||||
@@ -160,3 +186,11 @@ joystick_process()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
void
|
||||
win_joystick_handle(UNUSED(void *raw))
|
||||
{
|
||||
/* Nothing to be done here, atleast currently */
|
||||
}
|
||||
#endif
|
@@ -51,6 +51,7 @@ if(NOT MINGW)
|
||||
target_sources(plat PRIVATE win_opendir.c)
|
||||
endif()
|
||||
|
||||
option(DINPUT "Use DirectInput joystick backend instead of raw input" OFF)
|
||||
if(DINPUT)
|
||||
target_sources(plat PRIVATE win_joystick.cpp)
|
||||
target_link_libraries(86Box dinput8)
|
||||
|
Reference in New Issue
Block a user