commit
2d279df6e4
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include "../configuration.h"
|
#include "../configuration.h"
|
||||||
#include "../paths.h"
|
#include "../paths.h"
|
||||||
|
#include "../retroarch.h"
|
||||||
#include "../version.h"
|
#include "../version.h"
|
||||||
|
|
||||||
#include <string/stdstring.h>
|
#include <string/stdstring.h>
|
||||||
|
@ -34,8 +35,6 @@
|
||||||
|
|
||||||
#include "../deps/rcheevos/include/rc_api_runtime.h"
|
#include "../deps/rcheevos/include/rc_api_runtime.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Define this macro to log URLs. */
|
/* Define this macro to log URLs. */
|
||||||
#undef CHEEVOS_LOG_URLS
|
#undef CHEEVOS_LOG_URLS
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <net/net_socket.h>
|
#include <net/net_socket.h>
|
||||||
#endif
|
#endif
|
||||||
#include <lists/dir_list.h>
|
#include <lists/dir_list.h>
|
||||||
|
#include <file/file_path.h>
|
||||||
#include <streams/stdin_stream.h>
|
#include <streams/stdin_stream.h>
|
||||||
#include <streams/file_stream.h>
|
#include <streams/file_stream.h>
|
||||||
#include <string/stdstring.h>
|
#include <string/stdstring.h>
|
||||||
|
@ -49,6 +50,7 @@
|
||||||
#include "dynamic.h"
|
#include "dynamic.h"
|
||||||
#include "list_special.h"
|
#include "list_special.h"
|
||||||
#include "paths.h"
|
#include "paths.h"
|
||||||
|
#include "retroarch.h"
|
||||||
#include "verbosity.h"
|
#include "verbosity.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "version_git.h"
|
#include "version_git.h"
|
||||||
|
|
|
@ -29,9 +29,10 @@
|
||||||
|
|
||||||
#include <streams/interface_stream.h>
|
#include <streams/interface_stream.h>
|
||||||
|
|
||||||
#include "retroarch.h"
|
#include "retroarch_types.h"
|
||||||
#include "input/input_defines.h"
|
#include "input/input_defines.h"
|
||||||
|
|
||||||
|
#include "configuration.h"
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
|
|
122
core.h
122
core.h
|
@ -23,130 +23,10 @@
|
||||||
|
|
||||||
#include <retro_common_api.h>
|
#include <retro_common_api.h>
|
||||||
|
|
||||||
#include "core_type.h"
|
#include "retroarch_types.h"
|
||||||
#include "input/input_defines.h"
|
|
||||||
#include "disk_control_interface.h"
|
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
/* Polling is performed before
|
|
||||||
* call to retro_run. */
|
|
||||||
POLL_TYPE_EARLY = 0,
|
|
||||||
|
|
||||||
/* Polling is performed when requested. */
|
|
||||||
POLL_TYPE_NORMAL,
|
|
||||||
|
|
||||||
/* Polling is performed on first call to
|
|
||||||
* retro_input_state per frame. */
|
|
||||||
POLL_TYPE_LATE
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct rarch_memory_descriptor
|
|
||||||
{
|
|
||||||
struct retro_memory_descriptor core; /* uint64_t alignment */
|
|
||||||
size_t disconnect_mask;
|
|
||||||
} rarch_memory_descriptor_t;
|
|
||||||
|
|
||||||
typedef struct rarch_memory_map
|
|
||||||
{
|
|
||||||
rarch_memory_descriptor_t *descriptors;
|
|
||||||
unsigned num_descriptors;
|
|
||||||
} rarch_memory_map_t;
|
|
||||||
|
|
||||||
typedef struct rarch_system_info
|
|
||||||
{
|
|
||||||
struct retro_location_callback location_cb; /* ptr alignment */
|
|
||||||
disk_control_interface_t disk_control; /* ptr alignment */
|
|
||||||
struct retro_system_info info; /* ptr alignment */
|
|
||||||
rarch_memory_map_t mmaps; /* ptr alignment */
|
|
||||||
const char *input_desc_btn[MAX_USERS][RARCH_FIRST_META_KEY];
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
struct retro_subsystem_info *data;
|
|
||||||
unsigned size;
|
|
||||||
} subsystem;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
struct retro_controller_info *data;
|
|
||||||
unsigned size;
|
|
||||||
} ports;
|
|
||||||
unsigned rotation;
|
|
||||||
unsigned performance_level;
|
|
||||||
char valid_extensions[255];
|
|
||||||
bool load_no_content;
|
|
||||||
bool supports_vfs;
|
|
||||||
} rarch_system_info_t;
|
|
||||||
|
|
||||||
typedef struct retro_ctx_input_state_info
|
|
||||||
{
|
|
||||||
retro_input_state_t cb;
|
|
||||||
} retro_ctx_input_state_info_t;
|
|
||||||
|
|
||||||
typedef struct retro_ctx_cheat_info
|
|
||||||
{
|
|
||||||
const char *code;
|
|
||||||
unsigned index;
|
|
||||||
bool enabled;
|
|
||||||
} retro_ctx_cheat_info_t;
|
|
||||||
|
|
||||||
typedef struct retro_ctx_api_info
|
|
||||||
{
|
|
||||||
unsigned version;
|
|
||||||
} retro_ctx_api_info_t;
|
|
||||||
|
|
||||||
typedef struct retro_ctx_region_info
|
|
||||||
{
|
|
||||||
unsigned region;
|
|
||||||
} retro_ctx_region_info_t;
|
|
||||||
|
|
||||||
typedef struct retro_ctx_controller_info
|
|
||||||
{
|
|
||||||
unsigned port;
|
|
||||||
unsigned device;
|
|
||||||
} retro_ctx_controller_info_t;
|
|
||||||
|
|
||||||
typedef struct retro_ctx_memory_info
|
|
||||||
{
|
|
||||||
void *data;
|
|
||||||
size_t size;
|
|
||||||
unsigned id;
|
|
||||||
} retro_ctx_memory_info_t;
|
|
||||||
|
|
||||||
typedef struct retro_ctx_load_content_info
|
|
||||||
{
|
|
||||||
struct retro_game_info *info;
|
|
||||||
const struct string_list *content;
|
|
||||||
const struct retro_subsystem_info *special;
|
|
||||||
} retro_ctx_load_content_info_t;
|
|
||||||
|
|
||||||
typedef struct retro_ctx_serialize_info
|
|
||||||
{
|
|
||||||
const void *data_const;
|
|
||||||
void *data;
|
|
||||||
size_t size;
|
|
||||||
} retro_ctx_serialize_info_t;
|
|
||||||
|
|
||||||
typedef struct retro_ctx_size_info
|
|
||||||
{
|
|
||||||
size_t size;
|
|
||||||
} retro_ctx_size_info_t;
|
|
||||||
|
|
||||||
typedef struct retro_ctx_environ_info
|
|
||||||
{
|
|
||||||
retro_environment_t env;
|
|
||||||
} retro_ctx_environ_info_t;
|
|
||||||
|
|
||||||
typedef struct retro_callbacks
|
|
||||||
{
|
|
||||||
retro_video_refresh_t frame_cb;
|
|
||||||
retro_audio_sample_t sample_cb;
|
|
||||||
retro_audio_sample_batch_t sample_batch_cb;
|
|
||||||
retro_input_state_t state_cb;
|
|
||||||
retro_input_poll_t poll_cb;
|
|
||||||
} retro_callbacks_t;
|
|
||||||
|
|
||||||
#ifdef HAVE_REWIND
|
#ifdef HAVE_REWIND
|
||||||
bool core_set_rewind_callbacks(void);
|
bool core_set_rewind_callbacks(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
32
core_type.h
32
core_type.h
|
@ -1,32 +0,0 @@
|
||||||
/* RetroArch - A frontend for libretro.
|
|
||||||
* Copyright (C) 2011-2017 - Daniel De Matteis
|
|
||||||
* Copyright (C) 2016-2019 - Brad Parker
|
|
||||||
*
|
|
||||||
* RetroArch is free software: you can redistribute it and/or modify it under the terms
|
|
||||||
* of the GNU General Public License as published by the Free Software Found-
|
|
||||||
* ation, either version 3 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE. See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with RetroArch.
|
|
||||||
* If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __CORE_TYPE_H
|
|
||||||
#define __CORE_TYPE_H
|
|
||||||
|
|
||||||
enum rarch_core_type
|
|
||||||
{
|
|
||||||
CORE_TYPE_PLAIN = 0,
|
|
||||||
CORE_TYPE_DUMMY,
|
|
||||||
CORE_TYPE_FFMPEG,
|
|
||||||
CORE_TYPE_MPV,
|
|
||||||
CORE_TYPE_IMAGEVIEWER,
|
|
||||||
CORE_TYPE_NETRETROPAD,
|
|
||||||
CORE_TYPE_VIDEO_PROCESSOR,
|
|
||||||
CORE_TYPE_GONG
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -22,7 +22,7 @@
|
||||||
#include <retro_common_api.h>
|
#include <retro_common_api.h>
|
||||||
#include <libretro.h>
|
#include <libretro.h>
|
||||||
|
|
||||||
#include "core_type.h"
|
#include "retroarch_types.h"
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
|
|
|
@ -1053,11 +1053,11 @@ static LRESULT CALLBACK wnd_proc_common_internal(HWND hwnd,
|
||||||
break;
|
break;
|
||||||
#ifdef HAVE_CLIP_WINDOW
|
#ifdef HAVE_CLIP_WINDOW
|
||||||
case WM_SETFOCUS:
|
case WM_SETFOCUS:
|
||||||
if (input_mouse_grabbed())
|
if (input_state_get_ptr()->grab_mouse_state)
|
||||||
win32_clip_window(true);
|
win32_clip_window(true);
|
||||||
break;
|
break;
|
||||||
case WM_KILLFOCUS:
|
case WM_KILLFOCUS:
|
||||||
if (input_mouse_grabbed())
|
if (input_state_get_ptr()->grab_mouse_state)
|
||||||
win32_clip_window(false);
|
win32_clip_window(false);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1128,7 +1128,7 @@ static LRESULT CALLBACK wnd_proc_winraw_common_internal(HWND hwnd,
|
||||||
break;
|
break;
|
||||||
case WM_SETFOCUS:
|
case WM_SETFOCUS:
|
||||||
#ifdef HAVE_CLIP_WINDOW
|
#ifdef HAVE_CLIP_WINDOW
|
||||||
if (input_mouse_grabbed())
|
if (input_state_get_ptr()->grab_mouse_state)
|
||||||
win32_clip_window(true);
|
win32_clip_window(true);
|
||||||
#endif
|
#endif
|
||||||
#if !defined(_XBOX)
|
#if !defined(_XBOX)
|
||||||
|
@ -1138,7 +1138,7 @@ static LRESULT CALLBACK wnd_proc_winraw_common_internal(HWND hwnd,
|
||||||
break;
|
break;
|
||||||
case WM_KILLFOCUS:
|
case WM_KILLFOCUS:
|
||||||
#ifdef HAVE_CLIP_WINDOW
|
#ifdef HAVE_CLIP_WINDOW
|
||||||
if (input_mouse_grabbed())
|
if (input_state_get_ptr()->grab_mouse_state)
|
||||||
win32_clip_window(false);
|
win32_clip_window(false);
|
||||||
#endif
|
#endif
|
||||||
#if !defined(_XBOX)
|
#if !defined(_XBOX)
|
||||||
|
@ -1264,11 +1264,11 @@ static LRESULT CALLBACK wnd_proc_common_dinput_internal(HWND hwnd,
|
||||||
break;
|
break;
|
||||||
#ifdef HAVE_CLIP_WINDOW
|
#ifdef HAVE_CLIP_WINDOW
|
||||||
case WM_SETFOCUS:
|
case WM_SETFOCUS:
|
||||||
if (input_mouse_grabbed())
|
if (input_state_get_ptr()->grab_mouse_state)
|
||||||
win32_clip_window(true);
|
win32_clip_window(true);
|
||||||
break;
|
break;
|
||||||
case WM_KILLFOCUS:
|
case WM_KILLFOCUS:
|
||||||
if (input_mouse_grabbed())
|
if (input_state_get_ptr()->grab_mouse_state)
|
||||||
win32_clip_window(false);
|
win32_clip_window(false);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -45,7 +45,8 @@ static void *qnx_joypad_init(void *data)
|
||||||
static int32_t qnx_joypad_button(unsigned port, uint16_t joykey)
|
static int32_t qnx_joypad_button(unsigned port, uint16_t joykey)
|
||||||
{
|
{
|
||||||
qnx_input_device_t* controller = NULL;
|
qnx_input_device_t* controller = NULL;
|
||||||
qnx_input_t *qnx = (qnx_input_t*)input_driver_get_data();
|
qnx_input_t *qnx =
|
||||||
|
(qnx_input_t*)input_state_get_ptr()->current_data;
|
||||||
|
|
||||||
if (!qnx || port >= DEFAULT_MAX_PADS)
|
if (!qnx || port >= DEFAULT_MAX_PADS)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -99,7 +100,8 @@ static int16_t qnx_joypad_axis_state(
|
||||||
|
|
||||||
static int16_t qnx_joypad_axis(unsigned port, uint32_t joyaxis)
|
static int16_t qnx_joypad_axis(unsigned port, uint32_t joyaxis)
|
||||||
{
|
{
|
||||||
qnx_input_t *qnx = (qnx_input_t*)input_driver_get_data();
|
qnx_input_t *qnx =
|
||||||
|
(qnx_input_t*)input_state_get_ptr()->current_data;
|
||||||
qnx_input_device_t* controller = NULL;
|
qnx_input_device_t* controller = NULL;
|
||||||
if (!qnx || port >= DEFAULT_MAX_PADS)
|
if (!qnx || port >= DEFAULT_MAX_PADS)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -114,7 +116,8 @@ static int16_t qnx_joypad_state(
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
int16_t ret = 0;
|
int16_t ret = 0;
|
||||||
qnx_input_t *qnx = (qnx_input_t*)input_driver_get_data();
|
qnx_input_t *qnx =
|
||||||
|
(qnx_input_t*)input_state_get_ptr()->current_data;
|
||||||
qnx_input_device_t* controller = NULL;
|
qnx_input_device_t* controller = NULL;
|
||||||
uint16_t port_idx = joypad_info->joy_idx;
|
uint16_t port_idx = joypad_info->joy_idx;
|
||||||
|
|
||||||
|
|
|
@ -299,132 +299,13 @@ hid_driver_t *hid_drivers[] = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**************************************/
|
static input_driver_state_t input_driver_st = {0}; /* double alignment */
|
||||||
|
|
||||||
/* private function prototypes */
|
|
||||||
|
|
||||||
static const input_device_driver_t *input_joypad_init_first(void *data);
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************/
|
/**************************************/
|
||||||
|
|
||||||
bool input_driver_set_rumble(
|
input_driver_state_t *input_state_get_ptr(void)
|
||||||
input_driver_state_t *driver_state, unsigned port, unsigned joy_idx,
|
|
||||||
enum retro_rumble_effect effect, uint16_t strength)
|
|
||||||
{
|
{
|
||||||
const input_device_driver_t *primary_joypad;
|
return &input_driver_st;
|
||||||
const input_device_driver_t *sec_joypad;
|
|
||||||
bool rumble_state = false;
|
|
||||||
|
|
||||||
if (!driver_state || (joy_idx >= MAX_USERS))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
primary_joypad = driver_state->primary_joypad;
|
|
||||||
sec_joypad = driver_state->secondary_joypad;
|
|
||||||
|
|
||||||
if (primary_joypad && primary_joypad->set_rumble)
|
|
||||||
rumble_state = primary_joypad->set_rumble(joy_idx, effect, strength);
|
|
||||||
|
|
||||||
/* if sec_joypad exists, this set_rumble() return value will replace primary_joypad's return */
|
|
||||||
if (sec_joypad && sec_joypad->set_rumble)
|
|
||||||
rumble_state = sec_joypad->set_rumble(joy_idx, effect, strength);
|
|
||||||
|
|
||||||
return rumble_state;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************/
|
|
||||||
|
|
||||||
bool input_driver_set_rumble_gain(
|
|
||||||
input_driver_state_t *driver_state, unsigned gain,
|
|
||||||
unsigned input_max_users)
|
|
||||||
{
|
|
||||||
unsigned i;
|
|
||||||
|
|
||||||
if (driver_state->primary_joypad
|
|
||||||
&& driver_state->primary_joypad->set_rumble_gain)
|
|
||||||
{
|
|
||||||
for (i = 0; i < input_max_users; i++)
|
|
||||||
driver_state->primary_joypad->set_rumble_gain(i, gain);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************/
|
|
||||||
|
|
||||||
bool input_driver_set_sensor(
|
|
||||||
input_driver_state_t *driver_state, unsigned port, bool sensors_enable,
|
|
||||||
enum retro_sensor_action action, unsigned rate)
|
|
||||||
{
|
|
||||||
const input_driver_t *current_driver;
|
|
||||||
void *current_data;
|
|
||||||
|
|
||||||
if (!driver_state || !driver_state->current_data)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
current_driver = driver_state->current_driver;
|
|
||||||
current_data = driver_state->current_data;
|
|
||||||
|
|
||||||
/* If sensors are disabled, inhibit any enable
|
|
||||||
* actions (but always allow disable actions) */
|
|
||||||
if (!sensors_enable &&
|
|
||||||
((action == RETRO_SENSOR_ACCELEROMETER_ENABLE) ||
|
|
||||||
(action == RETRO_SENSOR_GYROSCOPE_ENABLE) ||
|
|
||||||
(action == RETRO_SENSOR_ILLUMINANCE_ENABLE)))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (current_driver && current_driver->set_sensor_state)
|
|
||||||
return current_driver->set_sensor_state(current_data,
|
|
||||||
port, action, rate);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************/
|
|
||||||
|
|
||||||
float input_driver_get_sensor(
|
|
||||||
input_driver_state_t *driver_state,
|
|
||||||
unsigned port, bool sensors_enable, unsigned id)
|
|
||||||
{
|
|
||||||
const input_driver_t *current_driver;
|
|
||||||
void *current_data;
|
|
||||||
|
|
||||||
if (!driver_state || !driver_state->current_data)
|
|
||||||
return 0.0f;
|
|
||||||
|
|
||||||
current_driver = driver_state->current_driver;
|
|
||||||
current_data = driver_state->current_data;
|
|
||||||
|
|
||||||
if (sensors_enable && current_driver->get_sensor_input)
|
|
||||||
return current_driver->get_sensor_input(current_data, port, id);
|
|
||||||
|
|
||||||
return 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
const input_device_driver_t *input_joypad_init_driver(
|
|
||||||
const char *ident, void *data)
|
|
||||||
{
|
|
||||||
unsigned i;
|
|
||||||
|
|
||||||
if (ident && *ident)
|
|
||||||
{
|
|
||||||
for (i = 0; joypad_drivers[i]; i++)
|
|
||||||
{
|
|
||||||
if (string_is_equal(ident, joypad_drivers[i]->ident)
|
|
||||||
&& joypad_drivers[i]->init)
|
|
||||||
{
|
|
||||||
void *ptr = joypad_drivers[i]->init(data);
|
|
||||||
if (ptr)
|
|
||||||
{
|
|
||||||
RARCH_LOG("[Joypad]: Found joypad driver: \"%s\".\n",
|
|
||||||
joypad_drivers[i]->ident);
|
|
||||||
return joypad_drivers[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return input_joypad_init_first(data); /* fall back to first available driver */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -458,14 +339,127 @@ static const input_device_driver_t *input_joypad_init_first(void *data)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool input_driver_set_rumble(
|
||||||
|
unsigned port, unsigned joy_idx,
|
||||||
|
enum retro_rumble_effect effect, uint16_t strength)
|
||||||
|
{
|
||||||
|
const input_device_driver_t *primary_joypad;
|
||||||
|
const input_device_driver_t *sec_joypad;
|
||||||
|
bool rumble_state = false;
|
||||||
|
|
||||||
|
if (joy_idx >= MAX_USERS)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
primary_joypad = input_driver_st.primary_joypad;
|
||||||
|
sec_joypad = input_driver_st.secondary_joypad;
|
||||||
|
|
||||||
|
if (primary_joypad && primary_joypad->set_rumble)
|
||||||
|
rumble_state = primary_joypad->set_rumble(joy_idx, effect, strength);
|
||||||
|
|
||||||
|
/* if sec_joypad exists, this set_rumble() return value will replace primary_joypad's return */
|
||||||
|
if (sec_joypad && sec_joypad->set_rumble)
|
||||||
|
rumble_state = sec_joypad->set_rumble(joy_idx, effect, strength);
|
||||||
|
|
||||||
|
return rumble_state;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool input_driver_set_rumble_gain(
|
||||||
|
unsigned gain,
|
||||||
|
unsigned input_max_users)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
if ( input_driver_st.primary_joypad
|
||||||
|
&& input_driver_st.primary_joypad->set_rumble_gain)
|
||||||
|
{
|
||||||
|
for (i = 0; i < input_max_users; i++)
|
||||||
|
input_driver_st.primary_joypad->set_rumble_gain(i, gain);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool input_driver_set_sensor(
|
||||||
|
unsigned port, bool sensors_enable,
|
||||||
|
enum retro_sensor_action action, unsigned rate)
|
||||||
|
{
|
||||||
|
const input_driver_t *current_driver;
|
||||||
|
void *current_data;
|
||||||
|
|
||||||
|
if (!input_driver_st.current_data)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
current_driver = input_driver_st.current_driver;
|
||||||
|
current_data = input_driver_st.current_data;
|
||||||
|
|
||||||
|
/* If sensors are disabled, inhibit any enable
|
||||||
|
* actions (but always allow disable actions) */
|
||||||
|
if (!sensors_enable &&
|
||||||
|
((action == RETRO_SENSOR_ACCELEROMETER_ENABLE) ||
|
||||||
|
(action == RETRO_SENSOR_GYROSCOPE_ENABLE) ||
|
||||||
|
(action == RETRO_SENSOR_ILLUMINANCE_ENABLE)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (current_driver && current_driver->set_sensor_state)
|
||||||
|
return current_driver->set_sensor_state(current_data,
|
||||||
|
port, action, rate);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************/
|
||||||
|
|
||||||
|
float input_driver_get_sensor(
|
||||||
|
unsigned port, bool sensors_enable, unsigned id)
|
||||||
|
{
|
||||||
|
const input_driver_t *current_driver;
|
||||||
|
void *current_data;
|
||||||
|
|
||||||
|
if (!input_driver_st.current_data)
|
||||||
|
return 0.0f;
|
||||||
|
|
||||||
|
current_driver = input_driver_st.current_driver;
|
||||||
|
current_data = input_driver_st.current_data;
|
||||||
|
|
||||||
|
if (sensors_enable && current_driver->get_sensor_input)
|
||||||
|
return current_driver->get_sensor_input(current_data, port, id);
|
||||||
|
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
const input_device_driver_t *input_joypad_init_driver(
|
||||||
|
const char *ident, void *data)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
if (ident && *ident)
|
||||||
|
{
|
||||||
|
for (i = 0; joypad_drivers[i]; i++)
|
||||||
|
{
|
||||||
|
if (string_is_equal(ident, joypad_drivers[i]->ident)
|
||||||
|
&& joypad_drivers[i]->init)
|
||||||
|
{
|
||||||
|
void *ptr = joypad_drivers[i]->init(data);
|
||||||
|
if (ptr)
|
||||||
|
{
|
||||||
|
RARCH_LOG("[Joypad]: Found joypad driver: \"%s\".\n",
|
||||||
|
joypad_drivers[i]->ident);
|
||||||
|
return joypad_drivers[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return input_joypad_init_first(data); /* fall back to first available driver */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool input_driver_button_combo(
|
bool input_driver_button_combo(
|
||||||
input_driver_state_t *input_driver_state,
|
|
||||||
unsigned mode,
|
unsigned mode,
|
||||||
retro_time_t current_time,
|
retro_time_t current_time,
|
||||||
input_bits_t* p_input)
|
input_bits_t* p_input)
|
||||||
{
|
{
|
||||||
retro_assert(input_driver_state != NULL);
|
retro_assert(p_input != NULL);
|
||||||
retro_assert(p_input != NULL);
|
|
||||||
|
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
|
@ -515,7 +509,7 @@ bool input_driver_button_combo(
|
||||||
break;
|
break;
|
||||||
case INPUT_COMBO_HOLD_START:
|
case INPUT_COMBO_HOLD_START:
|
||||||
{
|
{
|
||||||
rarch_timer_t *timer = &input_driver_state->combo_timers[INPUT_COMBO_HOLD_START];
|
rarch_timer_t *timer = &input_driver_st.combo_timers[INPUT_COMBO_HOLD_START];
|
||||||
|
|
||||||
if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_START))
|
if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_START))
|
||||||
{
|
{
|
||||||
|
@ -554,7 +548,7 @@ bool input_driver_button_combo(
|
||||||
break;
|
break;
|
||||||
case INPUT_COMBO_HOLD_SELECT:
|
case INPUT_COMBO_HOLD_SELECT:
|
||||||
{
|
{
|
||||||
rarch_timer_t *timer = &input_driver_state->combo_timers[INPUT_COMBO_HOLD_SELECT];
|
rarch_timer_t *timer = &input_driver_st.combo_timers[INPUT_COMBO_HOLD_SELECT];
|
||||||
|
|
||||||
if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_SELECT))
|
if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_SELECT))
|
||||||
{
|
{
|
||||||
|
@ -1789,6 +1783,209 @@ void input_overlay_auto_rotate_(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void input_poll_overlay(
|
||||||
|
bool keyboard_mapping_blocked,
|
||||||
|
settings_t *settings,
|
||||||
|
void *ol_data,
|
||||||
|
enum overlay_visibility *overlay_visibility,
|
||||||
|
float opacity,
|
||||||
|
unsigned analog_dpad_mode,
|
||||||
|
float axis_threshold)
|
||||||
|
{
|
||||||
|
input_overlay_state_t old_key_state;
|
||||||
|
unsigned i, j;
|
||||||
|
input_overlay_t *ol = (input_overlay_t*)ol_data;
|
||||||
|
uint16_t key_mod = 0;
|
||||||
|
bool polled = false;
|
||||||
|
bool button_pressed = false;
|
||||||
|
input_driver_state_t *input_st = &input_driver_st;
|
||||||
|
void *input_data = input_st->current_data;
|
||||||
|
input_overlay_state_t *ol_state = &ol->overlay_state;
|
||||||
|
input_driver_t *current_input = input_st->current_driver;
|
||||||
|
enum overlay_show_input_type
|
||||||
|
input_overlay_show_inputs = (enum overlay_show_input_type)
|
||||||
|
settings->uints.input_overlay_show_inputs;
|
||||||
|
unsigned input_overlay_show_inputs_port = settings->uints.input_overlay_show_inputs_port;
|
||||||
|
float touch_scale = (float)settings->uints.input_touch_scale;
|
||||||
|
|
||||||
|
if (!ol_state)
|
||||||
|
return;
|
||||||
|
|
||||||
|
memcpy(old_key_state.keys, ol_state->keys,
|
||||||
|
sizeof(ol_state->keys));
|
||||||
|
memset(ol_state, 0, sizeof(*ol_state));
|
||||||
|
|
||||||
|
if (current_input->input_state)
|
||||||
|
{
|
||||||
|
rarch_joypad_info_t joypad_info;
|
||||||
|
unsigned device = ol->active->full_screen
|
||||||
|
? RARCH_DEVICE_POINTER_SCREEN
|
||||||
|
: RETRO_DEVICE_POINTER;
|
||||||
|
const input_device_driver_t
|
||||||
|
*joypad = input_st->primary_joypad;
|
||||||
|
#ifdef HAVE_MFI
|
||||||
|
const input_device_driver_t
|
||||||
|
*sec_joypad = input_st->secondary_joypad;
|
||||||
|
#else
|
||||||
|
const input_device_driver_t
|
||||||
|
*sec_joypad = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
joypad_info.joy_idx = 0;
|
||||||
|
joypad_info.auto_binds = NULL;
|
||||||
|
joypad_info.axis_threshold = 0.0f;
|
||||||
|
|
||||||
|
for (i = 0;
|
||||||
|
current_input->input_state(
|
||||||
|
input_data,
|
||||||
|
joypad,
|
||||||
|
sec_joypad,
|
||||||
|
&joypad_info,
|
||||||
|
NULL,
|
||||||
|
keyboard_mapping_blocked,
|
||||||
|
0,
|
||||||
|
device,
|
||||||
|
i,
|
||||||
|
RETRO_DEVICE_ID_POINTER_PRESSED);
|
||||||
|
i++)
|
||||||
|
{
|
||||||
|
input_overlay_state_t polled_data;
|
||||||
|
int16_t x = current_input->input_state(
|
||||||
|
input_data,
|
||||||
|
joypad,
|
||||||
|
sec_joypad,
|
||||||
|
&joypad_info,
|
||||||
|
NULL,
|
||||||
|
keyboard_mapping_blocked,
|
||||||
|
0,
|
||||||
|
device,
|
||||||
|
i,
|
||||||
|
RETRO_DEVICE_ID_POINTER_X);
|
||||||
|
int16_t y = current_input->input_state(
|
||||||
|
input_data,
|
||||||
|
joypad,
|
||||||
|
sec_joypad,
|
||||||
|
&joypad_info,
|
||||||
|
NULL,
|
||||||
|
keyboard_mapping_blocked,
|
||||||
|
0,
|
||||||
|
device,
|
||||||
|
i,
|
||||||
|
RETRO_DEVICE_ID_POINTER_Y);
|
||||||
|
|
||||||
|
memset(&polled_data, 0, sizeof(struct input_overlay_state));
|
||||||
|
|
||||||
|
if (ol->enable)
|
||||||
|
input_overlay_poll(ol, &polled_data, x, y, touch_scale);
|
||||||
|
else
|
||||||
|
ol->blocked = false;
|
||||||
|
|
||||||
|
bits_or_bits(ol_state->buttons.data,
|
||||||
|
polled_data.buttons.data,
|
||||||
|
ARRAY_SIZE(polled_data.buttons.data));
|
||||||
|
|
||||||
|
for (j = 0; j < ARRAY_SIZE(ol_state->keys); j++)
|
||||||
|
ol_state->keys[j] |= polled_data.keys[j];
|
||||||
|
|
||||||
|
/* Fingers pressed later take priority and matched up
|
||||||
|
* with overlay poll priorities. */
|
||||||
|
for (j = 0; j < 4; j++)
|
||||||
|
if (polled_data.analog[j])
|
||||||
|
ol_state->analog[j] = polled_data.analog[j];
|
||||||
|
|
||||||
|
polled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( OVERLAY_GET_KEY(ol_state, RETROK_LSHIFT) ||
|
||||||
|
OVERLAY_GET_KEY(ol_state, RETROK_RSHIFT))
|
||||||
|
key_mod |= RETROKMOD_SHIFT;
|
||||||
|
|
||||||
|
if (OVERLAY_GET_KEY(ol_state, RETROK_LCTRL) ||
|
||||||
|
OVERLAY_GET_KEY(ol_state, RETROK_RCTRL))
|
||||||
|
key_mod |= RETROKMOD_CTRL;
|
||||||
|
|
||||||
|
if ( OVERLAY_GET_KEY(ol_state, RETROK_LALT) ||
|
||||||
|
OVERLAY_GET_KEY(ol_state, RETROK_RALT))
|
||||||
|
key_mod |= RETROKMOD_ALT;
|
||||||
|
|
||||||
|
if ( OVERLAY_GET_KEY(ol_state, RETROK_LMETA) ||
|
||||||
|
OVERLAY_GET_KEY(ol_state, RETROK_RMETA))
|
||||||
|
key_mod |= RETROKMOD_META;
|
||||||
|
|
||||||
|
/* CAPSLOCK SCROLLOCK NUMLOCK */
|
||||||
|
for (i = 0; i < ARRAY_SIZE(ol_state->keys); i++)
|
||||||
|
{
|
||||||
|
if (ol_state->keys[i] != old_key_state.keys[i])
|
||||||
|
{
|
||||||
|
uint32_t orig_bits = old_key_state.keys[i];
|
||||||
|
uint32_t new_bits = ol_state->keys[i];
|
||||||
|
|
||||||
|
for (j = 0; j < 32; j++)
|
||||||
|
if ((orig_bits & (1 << j)) != (new_bits & (1 << j)))
|
||||||
|
input_keyboard_event(new_bits & (1 << j),
|
||||||
|
i * 32 + j, 0, key_mod, RETRO_DEVICE_POINTER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Map "analog" buttons to analog axes like regular input drivers do. */
|
||||||
|
for (j = 0; j < 4; j++)
|
||||||
|
{
|
||||||
|
unsigned bind_plus = RARCH_ANALOG_LEFT_X_PLUS + 2 * j;
|
||||||
|
unsigned bind_minus = bind_plus + 1;
|
||||||
|
|
||||||
|
if (ol_state->analog[j])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ((BIT256_GET(ol->overlay_state.buttons, bind_plus)))
|
||||||
|
ol_state->analog[j] += 0x7fff;
|
||||||
|
if ((BIT256_GET(ol->overlay_state.buttons, bind_minus)))
|
||||||
|
ol_state->analog[j] -= 0x7fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check for analog_dpad_mode.
|
||||||
|
* Map analogs to d-pad buttons when configured. */
|
||||||
|
switch (analog_dpad_mode)
|
||||||
|
{
|
||||||
|
case ANALOG_DPAD_LSTICK:
|
||||||
|
case ANALOG_DPAD_RSTICK:
|
||||||
|
{
|
||||||
|
float analog_x, analog_y;
|
||||||
|
unsigned analog_base = 2;
|
||||||
|
|
||||||
|
if (analog_dpad_mode == ANALOG_DPAD_LSTICK)
|
||||||
|
analog_base = 0;
|
||||||
|
|
||||||
|
analog_x = (float)ol_state->analog[analog_base + 0] / 0x7fff;
|
||||||
|
analog_y = (float)ol_state->analog[analog_base + 1] / 0x7fff;
|
||||||
|
|
||||||
|
if (analog_x <= -axis_threshold)
|
||||||
|
BIT256_SET(ol_state->buttons, RETRO_DEVICE_ID_JOYPAD_LEFT);
|
||||||
|
if (analog_x >= axis_threshold)
|
||||||
|
BIT256_SET(ol_state->buttons, RETRO_DEVICE_ID_JOYPAD_RIGHT);
|
||||||
|
if (analog_y <= -axis_threshold)
|
||||||
|
BIT256_SET(ol_state->buttons, RETRO_DEVICE_ID_JOYPAD_UP);
|
||||||
|
if (analog_y >= axis_threshold)
|
||||||
|
BIT256_SET(ol_state->buttons, RETRO_DEVICE_ID_JOYPAD_DOWN);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (input_overlay_show_inputs != OVERLAY_SHOW_INPUT_NONE)
|
||||||
|
button_pressed = input_overlay_add_inputs(ol,
|
||||||
|
(input_overlay_show_inputs == OVERLAY_SHOW_INPUT_TOUCHED),
|
||||||
|
input_overlay_show_inputs_port);
|
||||||
|
|
||||||
|
if (button_pressed || polled)
|
||||||
|
input_overlay_post_poll(overlay_visibility, ol,
|
||||||
|
button_pressed, opacity);
|
||||||
|
else
|
||||||
|
input_overlay_poll_clear(overlay_visibility, ol, opacity);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2110,7 +2307,6 @@ void *input_driver_init_wrap(input_driver_t *input, const char *name)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool input_driver_find_driver(
|
bool input_driver_find_driver(
|
||||||
input_driver_state_t *input_driver_state,
|
|
||||||
settings_t *settings,
|
settings_t *settings,
|
||||||
const char *prefix,
|
const char *prefix,
|
||||||
bool verbosity_enabled)
|
bool verbosity_enabled)
|
||||||
|
@ -2121,9 +2317,9 @@ bool input_driver_find_driver(
|
||||||
|
|
||||||
if (i >= 0)
|
if (i >= 0)
|
||||||
{
|
{
|
||||||
input_driver_state->current_driver = (input_driver_t*)input_drivers[i];
|
input_driver_st.current_driver = (input_driver_t*)input_drivers[i];
|
||||||
RARCH_LOG("[Input]: Found %s: \"%s\".\n", prefix,
|
RARCH_LOG("[Input]: Found %s: \"%s\".\n", prefix,
|
||||||
input_driver_state->current_driver->ident);
|
input_driver_st.current_driver->ident);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2142,7 +2338,7 @@ bool input_driver_find_driver(
|
||||||
tmp = (input_driver_t*)input_drivers[0];
|
tmp = (input_driver_t*)input_drivers[0];
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
return false;
|
return false;
|
||||||
input_driver_state->current_driver = tmp;
|
input_driver_st.current_driver = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -2169,3 +2365,238 @@ void input_mapper_reset(void *data)
|
||||||
for (i = 0; i < (RETROK_LAST / 32 + 1); i++)
|
for (i = 0; i < (RETROK_LAST / 32 + 1); i++)
|
||||||
handle->keys[i] = 0;
|
handle->keys[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the sensor state. Used by RETRO_ENVIRONMENT_GET_SENSOR_INTERFACE.
|
||||||
|
*
|
||||||
|
* @param port
|
||||||
|
* @param action
|
||||||
|
* @param rate
|
||||||
|
*
|
||||||
|
* @return true if the sensor state has been successfully set
|
||||||
|
**/
|
||||||
|
bool input_set_sensor_state(unsigned port,
|
||||||
|
enum retro_sensor_action action, unsigned rate)
|
||||||
|
{
|
||||||
|
settings_t *settings = config_get_ptr();
|
||||||
|
bool input_sensors_enable = settings->bools.input_sensors_enable;
|
||||||
|
return input_driver_set_sensor(
|
||||||
|
port, input_sensors_enable, action, rate);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *joypad_driver_name(unsigned i)
|
||||||
|
{
|
||||||
|
if (!input_driver_st.primary_joypad || !input_driver_st.primary_joypad->name)
|
||||||
|
return NULL;
|
||||||
|
return input_driver_st.primary_joypad->name(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
void joypad_driver_reinit(void *data, const char *joypad_driver_name)
|
||||||
|
{
|
||||||
|
if (input_driver_st.primary_joypad)
|
||||||
|
{
|
||||||
|
const input_device_driver_t *tmp = input_driver_st.primary_joypad;
|
||||||
|
input_driver_st.primary_joypad = NULL;
|
||||||
|
tmp->destroy();
|
||||||
|
}
|
||||||
|
#ifdef HAVE_MFI
|
||||||
|
if (input_driver_st.secondary_joypad)
|
||||||
|
{
|
||||||
|
const input_device_driver_t *tmp = input_driver_st.secondary_joypad;
|
||||||
|
input_driver_st.secondary_joypad = NULL;
|
||||||
|
tmp->destroy();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (!input_driver_st.primary_joypad)
|
||||||
|
input_driver_st.primary_joypad = input_joypad_init_driver(joypad_driver_name, data);
|
||||||
|
#ifdef HAVE_MFI
|
||||||
|
if (!input_driver_st.secondary_joypad)
|
||||||
|
input_driver_st.secondary_joypad = input_joypad_init_driver("mfi", data);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the sensor state associated with the provided port and ID.
|
||||||
|
*
|
||||||
|
* @param port
|
||||||
|
* @param id Sensor ID
|
||||||
|
*
|
||||||
|
* @return The current state associated with the port and ID as a float
|
||||||
|
**/
|
||||||
|
float input_get_sensor_state(unsigned port, unsigned id)
|
||||||
|
{
|
||||||
|
settings_t *settings = config_get_ptr();
|
||||||
|
bool input_sensors_enable = settings->bools.input_sensors_enable;
|
||||||
|
|
||||||
|
return input_driver_get_sensor(port, input_sensors_enable, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the rumble state. Used by RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE.
|
||||||
|
*
|
||||||
|
* @param port User number.
|
||||||
|
* @param effect Rumble effect.
|
||||||
|
* @param strength Strength of rumble effect.
|
||||||
|
*
|
||||||
|
* @return true if the rumble state has been successfully set
|
||||||
|
**/
|
||||||
|
bool input_set_rumble_state(unsigned port,
|
||||||
|
enum retro_rumble_effect effect, uint16_t strength)
|
||||||
|
{
|
||||||
|
settings_t *settings = config_get_ptr();
|
||||||
|
unsigned joy_idx = settings->uints.input_joypad_index[port];
|
||||||
|
uint16_t scaled_strength = strength;
|
||||||
|
|
||||||
|
/* If gain setting is not suported, do software gain control */
|
||||||
|
if (input_driver_st.primary_joypad)
|
||||||
|
{
|
||||||
|
if (!input_driver_st.primary_joypad->set_rumble_gain)
|
||||||
|
{
|
||||||
|
unsigned rumble_gain = settings->uints.input_rumble_gain;
|
||||||
|
scaled_strength = (rumble_gain * strength) / 100.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return input_driver_set_rumble(
|
||||||
|
port, joy_idx, effect, scaled_strength);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the rumble gain. Used by MENU_ENUM_LABEL_INPUT_RUMBLE_GAIN.
|
||||||
|
*
|
||||||
|
* @param gain Rumble gain, 0-100 [%]
|
||||||
|
*
|
||||||
|
* @return true if the rumble gain has been successfully set
|
||||||
|
**/
|
||||||
|
bool input_set_rumble_gain(unsigned gain)
|
||||||
|
{
|
||||||
|
settings_t *settings = config_get_ptr();
|
||||||
|
if (input_driver_set_rumble_gain(
|
||||||
|
gain, settings->uints.input_max_users))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t input_driver_get_capabilities(void)
|
||||||
|
{
|
||||||
|
if ( !input_driver_st.current_driver ||
|
||||||
|
!input_driver_st.current_driver->get_capabilities)
|
||||||
|
return 0;
|
||||||
|
return input_driver_st.current_driver->get_capabilities(input_driver_st.current_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void input_driver_init_joypads(void)
|
||||||
|
{
|
||||||
|
settings_t *settings = config_get_ptr();
|
||||||
|
if (!input_driver_st.primary_joypad)
|
||||||
|
input_driver_st.primary_joypad = input_joypad_init_driver(
|
||||||
|
settings->arrays.input_joypad_driver,
|
||||||
|
input_driver_st.current_data);
|
||||||
|
#ifdef HAVE_MFI
|
||||||
|
if (!input_driver_st.secondary_joypad)
|
||||||
|
input_driver_st.secondary_joypad = input_joypad_init_driver(
|
||||||
|
"mfi",
|
||||||
|
input_driver_st.current_data);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool input_key_pressed(int key, bool keyboard_pressed)
|
||||||
|
{
|
||||||
|
/* If a keyboard key is pressed then immediately return
|
||||||
|
* true, otherwise call button_is_pressed to determine
|
||||||
|
* if the input comes from another input device */
|
||||||
|
if (!(
|
||||||
|
(key < RARCH_BIND_LIST_END)
|
||||||
|
&& keyboard_pressed
|
||||||
|
)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
settings_t *settings = config_get_ptr();
|
||||||
|
const input_device_driver_t
|
||||||
|
*joypad = (const input_device_driver_t*)
|
||||||
|
input_driver_st.primary_joypad;
|
||||||
|
const uint64_t bind_joykey = input_config_binds[0][key].joykey;
|
||||||
|
const uint64_t bind_joyaxis = input_config_binds[0][key].joyaxis;
|
||||||
|
const uint64_t autobind_joykey = input_autoconf_binds[0][key].joykey;
|
||||||
|
const uint64_t autobind_joyaxis= input_autoconf_binds[0][key].joyaxis;
|
||||||
|
uint16_t port = 0;
|
||||||
|
float axis_threshold = settings->floats.input_axis_threshold;
|
||||||
|
const uint64_t joykey = (bind_joykey != NO_BTN)
|
||||||
|
? bind_joykey : autobind_joykey;
|
||||||
|
const uint32_t joyaxis = (bind_joyaxis != AXIS_NONE)
|
||||||
|
? bind_joyaxis : autobind_joyaxis;
|
||||||
|
|
||||||
|
if ((uint16_t)joykey != NO_BTN && joypad->button(
|
||||||
|
port, (uint16_t)joykey))
|
||||||
|
return true;
|
||||||
|
if (joyaxis != AXIS_NONE &&
|
||||||
|
((float)abs(joypad->axis(port, joyaxis))
|
||||||
|
/ 0x8000) > axis_threshold)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool video_driver_init_input(
|
||||||
|
input_driver_t *tmp,
|
||||||
|
settings_t *settings,
|
||||||
|
bool verbosity_enabled)
|
||||||
|
{
|
||||||
|
void *new_data = NULL;
|
||||||
|
input_driver_t **input = &input_driver_st.current_driver;
|
||||||
|
if (*input)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
/* Video driver didn't provide an input driver,
|
||||||
|
* so we use configured one. */
|
||||||
|
RARCH_LOG("[Video]: Graphics driver did not initialize an input driver."
|
||||||
|
" Attempting to pick a suitable driver.\n");
|
||||||
|
|
||||||
|
if (tmp)
|
||||||
|
*input = tmp;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!(input_driver_find_driver(
|
||||||
|
settings, "input driver",
|
||||||
|
verbosity_enabled)))
|
||||||
|
{
|
||||||
|
RARCH_ERR("[Video]: Cannot find input driver. Exiting ...\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This should never really happen as tmp (driver.input) is always
|
||||||
|
* found before this in find_driver_input(), or we have aborted
|
||||||
|
* in a similar fashion anyways. */
|
||||||
|
if ( !input_driver_st.current_driver ||
|
||||||
|
!(new_data = input_driver_init_wrap(
|
||||||
|
input_driver_st.current_driver,
|
||||||
|
settings->arrays.input_joypad_driver)))
|
||||||
|
{
|
||||||
|
RARCH_ERR("[Video]: Cannot initialize input driver. Exiting ...\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
input_driver_st.current_data = new_data;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool input_driver_grab_mouse(void)
|
||||||
|
{
|
||||||
|
if (!input_driver_st.current_driver || !input_driver_st.current_driver->grab_mouse)
|
||||||
|
return false;
|
||||||
|
input_driver_st.current_driver->grab_mouse(
|
||||||
|
input_driver_st.current_data, true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool input_driver_ungrab_mouse(void)
|
||||||
|
{
|
||||||
|
if (!input_driver_st.current_driver || !input_driver_st.current_driver->grab_mouse)
|
||||||
|
return false;
|
||||||
|
input_driver_st.current_driver->grab_mouse(input_driver_st.current_data, false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,16 +22,16 @@
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "../config.h"
|
|
||||||
#endif /* HAVE_CONFIG_H */
|
|
||||||
|
|
||||||
#include <boolean.h>
|
#include <boolean.h>
|
||||||
#include <retro_common_api.h>
|
#include <retro_common_api.h>
|
||||||
#include <retro_inline.h>
|
#include <retro_inline.h>
|
||||||
#include <libretro.h>
|
#include <libretro.h>
|
||||||
#include <retro_miscellaneous.h>
|
#include <retro_miscellaneous.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "../config.h"
|
||||||
|
#endif /* HAVE_CONFIG_H */
|
||||||
|
|
||||||
#include "input_defines.h"
|
#include "input_defines.h"
|
||||||
#include "input_types.h"
|
#include "input_types.h"
|
||||||
#ifdef HAVE_OVERLAY
|
#ifdef HAVE_OVERLAY
|
||||||
|
@ -45,63 +45,12 @@
|
||||||
#include "../configuration.h"
|
#include "../configuration.h"
|
||||||
#include "../performance_counters.h"
|
#include "../performance_counters.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_COMMAND
|
||||||
|
#include "../command.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
struct retro_keybind
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Human-readable label for the control.
|
|
||||||
*/
|
|
||||||
char *joykey_label;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Human-readable label for an analog axis.
|
|
||||||
*/
|
|
||||||
char *joyaxis_label;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Joypad axis. Negative and positive axes are both represented by this variable.
|
|
||||||
*/
|
|
||||||
uint32_t joyaxis;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default joy axis binding value for resetting bind to default.
|
|
||||||
*/
|
|
||||||
uint32_t def_joyaxis;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Used by input_{push,pop}_analog_dpad().
|
|
||||||
*/
|
|
||||||
uint32_t orig_joyaxis;
|
|
||||||
|
|
||||||
enum msg_hash_enums enum_idx;
|
|
||||||
|
|
||||||
enum retro_key key;
|
|
||||||
|
|
||||||
uint16_t id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* What mouse button ID has been mapped to this control.
|
|
||||||
*/
|
|
||||||
uint16_t mbutton;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Joypad key. Joypad POV (hats) are embedded into this key as well.
|
|
||||||
**/
|
|
||||||
uint16_t joykey;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default key binding value (for resetting bind).
|
|
||||||
*/
|
|
||||||
uint16_t def_joykey;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determines whether or not the binding is valid.
|
|
||||||
*/
|
|
||||||
bool valid;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* line_complete callback (when carriage return is pressed)
|
* line_complete callback (when carriage return is pressed)
|
||||||
*
|
*
|
||||||
|
@ -349,19 +298,37 @@ struct rarch_joypad_driver
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Array of timers, one for each entry in enum input_combo_type.
|
||||||
|
*/
|
||||||
|
rarch_timer_t combo_timers[INPUT_COMBO_LAST];
|
||||||
|
|
||||||
/* pointers */
|
/* pointers */
|
||||||
input_driver_t *current_driver;
|
input_driver_t *current_driver;
|
||||||
void *current_data;
|
void *current_data;
|
||||||
const input_device_driver_t *primary_joypad; /* ptr alignment */
|
const input_device_driver_t *primary_joypad; /* ptr alignment */
|
||||||
const input_device_driver_t *secondary_joypad; /* ptr alignment */
|
const input_device_driver_t *secondary_joypad; /* ptr alignment */
|
||||||
|
#ifdef HAVE_COMMAND
|
||||||
|
command_t *command[MAX_CMD_DRIVERS];
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_NETWORKGAMEPAD
|
||||||
|
input_remote_t *remote;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
turbo_buttons_t turbo_btns; /* int32_t alignment */
|
||||||
|
|
||||||
|
input_mapper_t mapper; /* uint32_t alignment */
|
||||||
|
|
||||||
/* primitives */
|
/* primitives */
|
||||||
bool nonblocking_flag;
|
bool nonblocking_flag;
|
||||||
|
bool keyboard_linefeed_enable;
|
||||||
|
|
||||||
|
bool block_hotkey;
|
||||||
|
bool block_libretro_input;
|
||||||
|
bool grab_mouse_state;
|
||||||
|
bool analog_requested[MAX_USERS];
|
||||||
|
bool keyboard_mapping_blocked;
|
||||||
|
|
||||||
/**
|
|
||||||
* Array of timers, one for each entry in enum input_combo_type.
|
|
||||||
*/
|
|
||||||
rarch_timer_t combo_timers[INPUT_COMBO_LAST];
|
|
||||||
} input_driver_state_t;
|
} input_driver_state_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -386,25 +353,23 @@ const char* config_get_input_driver_options(void);
|
||||||
* @return true if the rumble state has been successfully set
|
* @return true if the rumble state has been successfully set
|
||||||
**/
|
**/
|
||||||
bool input_driver_set_rumble(
|
bool input_driver_set_rumble(
|
||||||
input_driver_state_t *driver_state, unsigned port, unsigned joy_idx,
|
unsigned port, unsigned joy_idx,
|
||||||
enum retro_rumble_effect effect, uint16_t strength);
|
enum retro_rumble_effect effect, uint16_t strength);
|
||||||
/**
|
/**
|
||||||
* Sets the rumble gain.
|
* Sets the rumble gain.
|
||||||
*
|
*
|
||||||
* @param driver_state
|
|
||||||
* @param gain Rumble gain, 0-100 [%]
|
* @param gain Rumble gain, 0-100 [%]
|
||||||
* @param input_max_users
|
* @param input_max_users
|
||||||
*
|
*
|
||||||
* @return true if the rumble gain has been successfully set
|
* @return true if the rumble gain has been successfully set
|
||||||
**/
|
**/
|
||||||
bool input_driver_set_rumble_gain(
|
bool input_driver_set_rumble_gain(
|
||||||
input_driver_state_t *driver_state, unsigned gain,
|
unsigned gain,
|
||||||
unsigned input_max_users);
|
unsigned input_max_users);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the sensor state.
|
* Sets the sensor state.
|
||||||
*
|
*
|
||||||
* @param driver_state
|
|
||||||
* @param port
|
* @param port
|
||||||
* @param sensors_enable
|
* @param sensors_enable
|
||||||
* @param effect Sensor action
|
* @param effect Sensor action
|
||||||
|
@ -413,13 +378,12 @@ bool input_driver_set_rumble_gain(
|
||||||
* @return true if the sensor state has been successfully set
|
* @return true if the sensor state has been successfully set
|
||||||
**/
|
**/
|
||||||
bool input_driver_set_sensor(
|
bool input_driver_set_sensor(
|
||||||
input_driver_state_t *driver_state, unsigned port, bool sensors_enable,
|
unsigned port, bool sensors_enable,
|
||||||
enum retro_sensor_action action, unsigned rate);
|
enum retro_sensor_action action, unsigned rate);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the sensor state associated with the provided port and ID.
|
* Retrieves the sensor state associated with the provided port and ID.
|
||||||
*
|
*
|
||||||
* @param driver_state
|
|
||||||
* @param port
|
* @param port
|
||||||
* @param sensors_enable
|
* @param sensors_enable
|
||||||
* @param id Sensor ID
|
* @param id Sensor ID
|
||||||
|
@ -427,9 +391,19 @@ bool input_driver_set_sensor(
|
||||||
* @return The current state associated with the port and ID as a float
|
* @return The current state associated with the port and ID as a float
|
||||||
**/
|
**/
|
||||||
float input_driver_get_sensor(
|
float input_driver_get_sensor(
|
||||||
input_driver_state_t *driver_state,
|
|
||||||
unsigned port, bool sensors_enable, unsigned id);
|
unsigned port, bool sensors_enable, unsigned id);
|
||||||
|
|
||||||
|
uint64_t input_driver_get_capabilities(void);
|
||||||
|
|
||||||
|
bool video_driver_init_input(
|
||||||
|
input_driver_t *tmp,
|
||||||
|
settings_t *settings,
|
||||||
|
bool verbosity_enabled);
|
||||||
|
|
||||||
|
bool input_driver_grab_mouse(void);
|
||||||
|
|
||||||
|
bool input_driver_ungrab_mouse(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get an enumerated list of all joypad driver names
|
* Get an enumerated list of all joypad driver names
|
||||||
*
|
*
|
||||||
|
@ -515,6 +489,7 @@ struct input_keyboard_ctx_wait
|
||||||
void input_keyboard_event(bool down, unsigned code, uint32_t character,
|
void input_keyboard_event(bool down, unsigned code, uint32_t character,
|
||||||
uint16_t mod, unsigned device);
|
uint16_t mod, unsigned device);
|
||||||
|
|
||||||
|
input_driver_state_t *input_state_get_ptr(void);
|
||||||
|
|
||||||
/*************************************/
|
/*************************************/
|
||||||
#ifdef HAVE_HID
|
#ifdef HAVE_HID
|
||||||
|
@ -725,13 +700,11 @@ char *input_config_get_device_name_ptr(unsigned port);
|
||||||
size_t input_config_get_device_name_size(unsigned port);
|
size_t input_config_get_device_name_size(unsigned port);
|
||||||
|
|
||||||
bool input_driver_button_combo(
|
bool input_driver_button_combo(
|
||||||
input_driver_state_t *input_driver_state,
|
|
||||||
unsigned mode,
|
unsigned mode,
|
||||||
retro_time_t current_time,
|
retro_time_t current_time,
|
||||||
input_bits_t* p_input);
|
input_bits_t* p_input);
|
||||||
|
|
||||||
bool input_driver_find_driver(
|
bool input_driver_find_driver(
|
||||||
input_driver_state_t *input_driver_state,
|
|
||||||
settings_t *settings,
|
settings_t *settings,
|
||||||
const char *prefix,
|
const char *prefix,
|
||||||
bool verbosity_enabled);
|
bool verbosity_enabled);
|
||||||
|
@ -839,13 +812,46 @@ void input_config_get_bind_string_joykey(
|
||||||
int16_t input_state_internal(unsigned port, unsigned device,
|
int16_t input_state_internal(unsigned port, unsigned device,
|
||||||
unsigned idx, unsigned id);
|
unsigned idx, unsigned id);
|
||||||
|
|
||||||
/*****************************************************************************/
|
bool input_key_pressed(int key, bool keyboard_pressed);
|
||||||
|
|
||||||
|
bool input_set_rumble_state(unsigned port,
|
||||||
|
enum retro_rumble_effect effect, uint16_t strength);
|
||||||
|
|
||||||
|
bool input_set_rumble_gain(unsigned gain);
|
||||||
|
|
||||||
|
float input_get_sensor_state(unsigned port, unsigned id);
|
||||||
|
|
||||||
|
bool input_set_sensor_state(unsigned port,
|
||||||
|
enum retro_sensor_action action, unsigned rate);
|
||||||
|
|
||||||
|
void *input_driver_init_wrap(input_driver_t *input, const char *name);
|
||||||
|
|
||||||
const struct retro_keybind *input_config_get_bind_auto(unsigned port, unsigned id);
|
const struct retro_keybind *input_config_get_bind_auto(unsigned port, unsigned id);
|
||||||
|
|
||||||
void input_config_reset_autoconfig_binds(unsigned port);
|
void input_config_reset_autoconfig_binds(unsigned port);
|
||||||
|
|
||||||
void input_config_reset(void);
|
void input_config_reset(void);
|
||||||
|
|
||||||
|
const char *joypad_driver_name(unsigned i);
|
||||||
|
|
||||||
|
void joypad_driver_reinit(void *data, const char *joypad_driver_name);
|
||||||
|
|
||||||
|
#ifdef HAVE_OVERLAY
|
||||||
|
/*
|
||||||
|
* input_poll_overlay:
|
||||||
|
*
|
||||||
|
* Poll pressed buttons/keys on currently active overlay.
|
||||||
|
**/
|
||||||
|
void input_poll_overlay(
|
||||||
|
bool keyboard_mapping_blocked,
|
||||||
|
settings_t *settings,
|
||||||
|
void *ol_data,
|
||||||
|
enum overlay_visibility *overlay_visibility,
|
||||||
|
float opacity,
|
||||||
|
unsigned analog_dpad_mode,
|
||||||
|
float axis_threshold);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(ANDROID)
|
#if defined(ANDROID)
|
||||||
#define DEFAULT_MAX_PADS 8
|
#define DEFAULT_MAX_PADS 8
|
||||||
#define ANDROID_KEYBOARD_PORT DEFAULT_MAX_PADS
|
#define ANDROID_KEYBOARD_PORT DEFAULT_MAX_PADS
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#include <formats/image.h>
|
#include <formats/image.h>
|
||||||
#include <queues/task_queue.h>
|
#include <queues/task_queue.h>
|
||||||
|
|
||||||
#include "input_driver.h"
|
#include "input_types.h"
|
||||||
|
|
||||||
#define OVERLAY_GET_KEY(state, key) (((state)->keys[(key) / 32] >> ((key) % 32)) & 1)
|
#define OVERLAY_GET_KEY(state, key) (((state)->keys[(key) / 32] >> ((key) % 32)) & 1)
|
||||||
#define OVERLAY_SET_KEY(state, key) (state)->keys[(key) / 32] |= 1 << ((key) % 32)
|
#define OVERLAY_SET_KEY(state, key) (state)->keys[(key) / 32] |= 1 << ((key) % 32)
|
||||||
|
|
|
@ -23,17 +23,8 @@
|
||||||
#include <boolean.h>
|
#include <boolean.h>
|
||||||
#include <retro_common_api.h>
|
#include <retro_common_api.h>
|
||||||
|
|
||||||
typedef struct input_mapper
|
#include "input_defines.h"
|
||||||
{
|
#include "input_types.h"
|
||||||
/* Left X, Left Y, Right X, Right Y */
|
|
||||||
int16_t analog_value[MAX_USERS][8];
|
|
||||||
/* The whole keyboard state */
|
|
||||||
uint32_t keys[RETROK_LAST / 32 + 1];
|
|
||||||
/* RetroPad button state of remapped keyboard keys */
|
|
||||||
unsigned key_button[RETROK_LAST];
|
|
||||||
/* This is a bitmask of (1 << key_bind_id). */
|
|
||||||
input_bits_t buttons[MAX_USERS];
|
|
||||||
} input_mapper_t;
|
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
#ifndef __INPUT_TYPES__H
|
#ifndef __INPUT_TYPES__H
|
||||||
#define __INPUT_TYPES__H
|
#define __INPUT_TYPES__H
|
||||||
|
|
||||||
|
#include "../msg_hash.h"
|
||||||
|
|
||||||
enum input_auto_game_focus_type
|
enum input_auto_game_focus_type
|
||||||
{
|
{
|
||||||
AUTO_GAME_FOCUS_OFF = 0,
|
AUTO_GAME_FOCUS_OFF = 0,
|
||||||
|
@ -25,11 +27,46 @@ enum input_auto_game_focus_type
|
||||||
AUTO_GAME_FOCUS_LAST
|
AUTO_GAME_FOCUS_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct rarch_joypad_driver input_device_driver_t;
|
/* Turbo support. */
|
||||||
typedef struct input_keyboard_line input_keyboard_line_t;
|
struct turbo_buttons
|
||||||
typedef struct rarch_joypad_info rarch_joypad_info_t;
|
{
|
||||||
typedef struct input_driver input_driver_t;
|
int32_t turbo_pressed[MAX_USERS];
|
||||||
typedef struct input_keyboard_ctx_wait input_keyboard_ctx_wait_t;
|
unsigned count;
|
||||||
|
uint16_t enable[MAX_USERS];
|
||||||
|
bool frame_enable[MAX_USERS];
|
||||||
|
bool mode1_enable[MAX_USERS];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct retro_keybind
|
||||||
|
{
|
||||||
|
/* Human-readable label for the control. */
|
||||||
|
char *joykey_label;
|
||||||
|
/* Human-readable label for an analog axis. */
|
||||||
|
char *joyaxis_label;
|
||||||
|
/*
|
||||||
|
* Joypad axis. Negative and positive axes are both
|
||||||
|
* represented by this variable.
|
||||||
|
*/
|
||||||
|
uint32_t joyaxis;
|
||||||
|
/* Default joy axis binding value for resetting bind to default. */
|
||||||
|
uint32_t def_joyaxis;
|
||||||
|
/* Used by input_{push,pop}_analog_dpad(). */
|
||||||
|
uint32_t orig_joyaxis;
|
||||||
|
|
||||||
|
enum msg_hash_enums enum_idx;
|
||||||
|
|
||||||
|
enum retro_key key;
|
||||||
|
|
||||||
|
uint16_t id;
|
||||||
|
/* What mouse button ID has been mapped to this control. */
|
||||||
|
uint16_t mbutton;
|
||||||
|
/* Joypad key. Joypad POV (hats) are embedded into this key as well. */
|
||||||
|
uint16_t joykey;
|
||||||
|
/* Default key binding value (for resetting bind). */
|
||||||
|
uint16_t def_joykey;
|
||||||
|
/* Determines whether or not the binding is valid. */
|
||||||
|
bool valid;
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -38,7 +75,26 @@ typedef struct
|
||||||
uint16_t analog_buttons[16];
|
uint16_t analog_buttons[16];
|
||||||
} input_bits_t;
|
} input_bits_t;
|
||||||
|
|
||||||
|
typedef struct input_mapper
|
||||||
|
{
|
||||||
|
/* Left X, Left Y, Right X, Right Y */
|
||||||
|
int16_t analog_value[MAX_USERS][8];
|
||||||
|
/* The whole keyboard state */
|
||||||
|
uint32_t keys[RETROK_LAST / 32 + 1];
|
||||||
|
/* RetroPad button state of remapped keyboard keys */
|
||||||
|
unsigned key_button[RETROK_LAST];
|
||||||
|
/* This is a bitmask of (1 << key_bind_id). */
|
||||||
|
input_bits_t buttons[MAX_USERS];
|
||||||
|
} input_mapper_t;
|
||||||
|
|
||||||
|
typedef struct rarch_joypad_driver input_device_driver_t;
|
||||||
|
typedef struct input_keyboard_line input_keyboard_line_t;
|
||||||
|
typedef struct rarch_joypad_info rarch_joypad_info_t;
|
||||||
|
typedef struct input_driver input_driver_t;
|
||||||
|
typedef struct input_keyboard_ctx_wait input_keyboard_ctx_wait_t;
|
||||||
|
|
||||||
typedef struct joypad_connection joypad_connection_t;
|
typedef struct joypad_connection joypad_connection_t;
|
||||||
typedef struct pad_connection_listener_interface pad_connection_listener_t;
|
typedef struct pad_connection_listener_interface pad_connection_listener_t;
|
||||||
|
typedef struct turbo_buttons turbo_buttons_t;
|
||||||
|
|
||||||
#endif /* __INPUT_TYPES__H */
|
#endif /* __INPUT_TYPES__H */
|
||||||
|
|
|
@ -3134,7 +3134,7 @@ void netplay_sync_post_frame(netplay_t *netplay, bool stalled)
|
||||||
if (netplay->catch_up)
|
if (netplay->catch_up)
|
||||||
{
|
{
|
||||||
netplay->catch_up = false;
|
netplay->catch_up = false;
|
||||||
input_unset_nonblock_state();
|
input_state_get_ptr()->nonblocking_flag = false;
|
||||||
driver_set_nonblock_state();
|
driver_set_nonblock_state();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -3327,7 +3327,7 @@ void netplay_sync_post_frame(netplay_t *netplay, bool stalled)
|
||||||
if (netplay->self_frame_count + 1 >= lo_frame_count)
|
if (netplay->self_frame_count + 1 >= lo_frame_count)
|
||||||
{
|
{
|
||||||
netplay->catch_up = false;
|
netplay->catch_up = false;
|
||||||
input_unset_nonblock_state();
|
input_state_get_ptr()->nonblocking_flag = false;
|
||||||
driver_set_nonblock_state();
|
driver_set_nonblock_state();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3354,9 +3354,9 @@ void netplay_sync_post_frame(netplay_t *netplay, bool stalled)
|
||||||
if (netplay->catch_up_behind <= cur_behind)
|
if (netplay->catch_up_behind <= cur_behind)
|
||||||
{
|
{
|
||||||
/* We're definitely falling behind! */
|
/* We're definitely falling behind! */
|
||||||
netplay->catch_up = true;
|
netplay->catch_up = true;
|
||||||
netplay->catch_up_time = 0;
|
netplay->catch_up_time = 0;
|
||||||
input_set_nonblock_state();
|
input_state_get_ptr()->nonblocking_flag = true;
|
||||||
driver_set_nonblock_state();
|
driver_set_nonblock_state();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -416,7 +416,6 @@
|
||||||
05A8E23920A63CED0084ABDA /* IOSurface.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOSurface.framework; path = System/Library/Frameworks/IOSurface.framework; sourceTree = SDKROOT; };
|
05A8E23920A63CED0084ABDA /* IOSurface.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOSurface.framework; path = System/Library/Frameworks/IOSurface.framework; sourceTree = SDKROOT; };
|
||||||
05A8E23B20A63CF50084ABDA /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
05A8E23B20A63CF50084ABDA /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||||
05B5F90D20ED6A03009C521F /* content.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = content.h; path = ../../content.h; sourceTree = "<group>"; };
|
05B5F90D20ED6A03009C521F /* content.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = content.h; path = ../../content.h; sourceTree = "<group>"; };
|
||||||
05B5F90E20ED6A03009C521F /* core_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = core_type.h; path = ../../core_type.h; sourceTree = "<group>"; };
|
|
||||||
05B5F90F20ED6A03009C521F /* command.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = command.c; path = ../../command.c; sourceTree = "<group>"; };
|
05B5F90F20ED6A03009C521F /* command.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = command.c; path = ../../command.c; sourceTree = "<group>"; };
|
||||||
05B5F91120ED6AAE009C521F /* retroarch.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = retroarch.c; path = ../../retroarch.c; sourceTree = "<group>"; };
|
05B5F91120ED6AAE009C521F /* retroarch.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = retroarch.c; path = ../../retroarch.c; sourceTree = "<group>"; };
|
||||||
05B5F91220ED6AAF009C521F /* retroarch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = retroarch.h; path = ../../retroarch.h; sourceTree = "<group>"; };
|
05B5F91220ED6AAF009C521F /* retroarch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = retroarch.h; path = ../../retroarch.h; sourceTree = "<group>"; };
|
||||||
|
@ -1180,7 +1179,6 @@
|
||||||
05BF821520ED69D100D95B19 /* core_impl.c */,
|
05BF821520ED69D100D95B19 /* core_impl.c */,
|
||||||
05BF821820ED69D100D95B19 /* core_info.c */,
|
05BF821820ED69D100D95B19 /* core_info.c */,
|
||||||
05BF821B20ED69D100D95B19 /* core_info.h */,
|
05BF821B20ED69D100D95B19 /* core_info.h */,
|
||||||
05B5F90E20ED6A03009C521F /* core_type.h */,
|
|
||||||
05BF821920ED69D100D95B19 /* core.h */,
|
05BF821920ED69D100D95B19 /* core.h */,
|
||||||
0548E2B220F976E10094A083 /* driver.c */,
|
0548E2B220F976E10094A083 /* driver.c */,
|
||||||
0548E2B520F976E20094A083 /* driver.h */,
|
0548E2B520F976E20094A083 /* driver.h */,
|
||||||
|
|
|
@ -254,7 +254,6 @@
|
||||||
92B9EC9824E0537500E6CFB2 /* config.def.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = config.def.h; path = ../../config.def.h; sourceTree = "<group>"; };
|
92B9EC9824E0537500E6CFB2 /* config.def.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = config.def.h; path = ../../config.def.h; sourceTree = "<group>"; };
|
||||||
92B9EC9924E0537500E6CFB2 /* config.features.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = config.features.h; path = ../../config.features.h; sourceTree = "<group>"; };
|
92B9EC9924E0537500E6CFB2 /* config.features.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = config.features.h; path = ../../config.features.h; sourceTree = "<group>"; };
|
||||||
92B9EC9A24E0537500E6CFB2 /* content.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = content.h; path = ../../content.h; sourceTree = "<group>"; };
|
92B9EC9A24E0537500E6CFB2 /* content.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = content.h; path = ../../content.h; sourceTree = "<group>"; };
|
||||||
92B9EC9B24E0539000E6CFB2 /* core_type.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = core_type.h; path = ../../core_type.h; sourceTree = "<group>"; };
|
|
||||||
92B9EC9C24E0539000E6CFB2 /* core_info.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = core_info.c; path = ../../core_info.c; sourceTree = "<group>"; };
|
92B9EC9C24E0539000E6CFB2 /* core_info.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = core_info.c; path = ../../core_info.c; sourceTree = "<group>"; };
|
||||||
92B9EC9D24E0539000E6CFB2 /* core_info.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = core_info.h; path = ../../core_info.h; sourceTree = "<group>"; };
|
92B9EC9D24E0539000E6CFB2 /* core_info.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = core_info.h; path = ../../core_info.h; sourceTree = "<group>"; };
|
||||||
92B9EC9E24E0539000E6CFB2 /* core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = core.h; path = ../../core.h; sourceTree = "<group>"; };
|
92B9EC9E24E0539000E6CFB2 /* core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = core.h; path = ../../core.h; sourceTree = "<group>"; };
|
||||||
|
@ -847,7 +846,6 @@
|
||||||
92B9ECBF24E054B500E6CFB2 /* core_backup.h */,
|
92B9ECBF24E054B500E6CFB2 /* core_backup.h */,
|
||||||
92B9EC9C24E0539000E6CFB2 /* core_info.c */,
|
92B9EC9C24E0539000E6CFB2 /* core_info.c */,
|
||||||
92B9EC9D24E0539000E6CFB2 /* core_info.h */,
|
92B9EC9D24E0539000E6CFB2 /* core_info.h */,
|
||||||
92B9EC9B24E0539000E6CFB2 /* core_type.h */,
|
|
||||||
92B9ECB024E054B400E6CFB2 /* core_updater_list.c */,
|
92B9ECB024E054B400E6CFB2 /* core_updater_list.c */,
|
||||||
92B9ECB624E054B500E6CFB2 /* core_updater_list.h */,
|
92B9ECB624E054B500E6CFB2 /* core_updater_list.h */,
|
||||||
92B9EC9E24E0539000E6CFB2 /* core.h */,
|
92B9EC9E24E0539000E6CFB2 /* core.h */,
|
||||||
|
|
1215
retroarch.c
1215
retroarch.c
File diff suppressed because it is too large
Load Diff
418
retroarch.h
418
retroarch.h
|
@ -41,14 +41,10 @@
|
||||||
#include "audio/audio_defines.h"
|
#include "audio/audio_defines.h"
|
||||||
#include "gfx/video_driver.h"
|
#include "gfx/video_driver.h"
|
||||||
|
|
||||||
#include "core_type.h"
|
|
||||||
#include "core.h"
|
#include "core.h"
|
||||||
|
|
||||||
#ifdef HAVE_MENU
|
|
||||||
#include "menu/menu_defines.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "runloop.h"
|
#include "runloop.h"
|
||||||
|
#include "retroarch_types.h"
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
|
@ -83,285 +79,6 @@ RETRO_BEGIN_DECLS
|
||||||
* 3 - Late
|
* 3 - Late
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum rarch_ctl_state
|
|
||||||
{
|
|
||||||
RARCH_CTL_NONE = 0,
|
|
||||||
|
|
||||||
/* Deinitializes RetroArch. */
|
|
||||||
RARCH_CTL_MAIN_DEINIT,
|
|
||||||
|
|
||||||
RARCH_CTL_IS_INITED,
|
|
||||||
|
|
||||||
RARCH_CTL_IS_DUMMY_CORE,
|
|
||||||
RARCH_CTL_IS_CORE_LOADED,
|
|
||||||
|
|
||||||
#if defined(HAVE_RUNAHEAD) && (defined(HAVE_DYNAMIC) || defined(HAVE_DYLIB))
|
|
||||||
RARCH_CTL_IS_SECOND_CORE_AVAILABLE,
|
|
||||||
RARCH_CTL_IS_SECOND_CORE_LOADED,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
RARCH_CTL_IS_BPS_PREF,
|
|
||||||
RARCH_CTL_UNSET_BPS_PREF,
|
|
||||||
|
|
||||||
RARCH_CTL_IS_PATCH_BLOCKED,
|
|
||||||
|
|
||||||
RARCH_CTL_IS_UPS_PREF,
|
|
||||||
RARCH_CTL_UNSET_UPS_PREF,
|
|
||||||
|
|
||||||
RARCH_CTL_IS_IPS_PREF,
|
|
||||||
RARCH_CTL_UNSET_IPS_PREF,
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIGFILE
|
|
||||||
/* Block config read */
|
|
||||||
RARCH_CTL_SET_BLOCK_CONFIG_READ,
|
|
||||||
RARCH_CTL_UNSET_BLOCK_CONFIG_READ,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Username */
|
|
||||||
RARCH_CTL_HAS_SET_USERNAME,
|
|
||||||
|
|
||||||
RARCH_CTL_HAS_SET_SUBSYSTEMS,
|
|
||||||
|
|
||||||
RARCH_CTL_IS_IDLE,
|
|
||||||
RARCH_CTL_SET_IDLE,
|
|
||||||
|
|
||||||
RARCH_CTL_SET_WINDOWED_SCALE,
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIGFILE
|
|
||||||
RARCH_CTL_IS_OVERRIDES_ACTIVE,
|
|
||||||
|
|
||||||
RARCH_CTL_IS_REMAPS_CORE_ACTIVE,
|
|
||||||
RARCH_CTL_SET_REMAPS_CORE_ACTIVE,
|
|
||||||
|
|
||||||
RARCH_CTL_IS_REMAPS_CONTENT_DIR_ACTIVE,
|
|
||||||
RARCH_CTL_SET_REMAPS_CONTENT_DIR_ACTIVE,
|
|
||||||
|
|
||||||
RARCH_CTL_IS_REMAPS_GAME_ACTIVE,
|
|
||||||
RARCH_CTL_SET_REMAPS_GAME_ACTIVE,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
RARCH_CTL_IS_MISSING_BIOS,
|
|
||||||
RARCH_CTL_SET_MISSING_BIOS,
|
|
||||||
RARCH_CTL_UNSET_MISSING_BIOS,
|
|
||||||
|
|
||||||
RARCH_CTL_IS_GAME_OPTIONS_ACTIVE,
|
|
||||||
RARCH_CTL_IS_FOLDER_OPTIONS_ACTIVE,
|
|
||||||
|
|
||||||
RARCH_CTL_IS_PAUSED,
|
|
||||||
RARCH_CTL_SET_PAUSED,
|
|
||||||
|
|
||||||
RARCH_CTL_SET_SHUTDOWN,
|
|
||||||
|
|
||||||
/* Runloop state */
|
|
||||||
RARCH_CTL_STATE_FREE,
|
|
||||||
|
|
||||||
/* Performance counters */
|
|
||||||
RARCH_CTL_GET_PERFCNT,
|
|
||||||
RARCH_CTL_SET_PERFCNT_ENABLE,
|
|
||||||
RARCH_CTL_UNSET_PERFCNT_ENABLE,
|
|
||||||
RARCH_CTL_IS_PERFCNT_ENABLE,
|
|
||||||
|
|
||||||
/* Core options */
|
|
||||||
RARCH_CTL_HAS_CORE_OPTIONS,
|
|
||||||
RARCH_CTL_GET_CORE_OPTION_SIZE,
|
|
||||||
RARCH_CTL_CORE_OPTIONS_LIST_GET,
|
|
||||||
RARCH_CTL_CORE_OPTION_PREV,
|
|
||||||
RARCH_CTL_CORE_OPTION_NEXT,
|
|
||||||
RARCH_CTL_CORE_OPTION_UPDATE_DISPLAY,
|
|
||||||
RARCH_CTL_CORE_IS_RUNNING,
|
|
||||||
|
|
||||||
/* BSV Movie */
|
|
||||||
RARCH_CTL_BSV_MOVIE_IS_INITED
|
|
||||||
};
|
|
||||||
|
|
||||||
enum rarch_capabilities
|
|
||||||
{
|
|
||||||
RARCH_CAPABILITIES_NONE = 0,
|
|
||||||
RARCH_CAPABILITIES_CPU,
|
|
||||||
RARCH_CAPABILITIES_COMPILER
|
|
||||||
};
|
|
||||||
|
|
||||||
enum rarch_override_setting
|
|
||||||
{
|
|
||||||
RARCH_OVERRIDE_SETTING_NONE = 0,
|
|
||||||
RARCH_OVERRIDE_SETTING_LIBRETRO,
|
|
||||||
RARCH_OVERRIDE_SETTING_VERBOSITY,
|
|
||||||
RARCH_OVERRIDE_SETTING_LIBRETRO_DIRECTORY,
|
|
||||||
RARCH_OVERRIDE_SETTING_SAVE_PATH,
|
|
||||||
RARCH_OVERRIDE_SETTING_STATE_PATH,
|
|
||||||
#ifdef HAVE_NETWORKING
|
|
||||||
RARCH_OVERRIDE_SETTING_NETPLAY_MODE,
|
|
||||||
RARCH_OVERRIDE_SETTING_NETPLAY_IP_ADDRESS,
|
|
||||||
RARCH_OVERRIDE_SETTING_NETPLAY_IP_PORT,
|
|
||||||
RARCH_OVERRIDE_SETTING_NETPLAY_STATELESS_MODE,
|
|
||||||
RARCH_OVERRIDE_SETTING_NETPLAY_CHECK_FRAMES,
|
|
||||||
#endif
|
|
||||||
RARCH_OVERRIDE_SETTING_UPS_PREF,
|
|
||||||
RARCH_OVERRIDE_SETTING_BPS_PREF,
|
|
||||||
RARCH_OVERRIDE_SETTING_IPS_PREF,
|
|
||||||
RARCH_OVERRIDE_SETTING_LIBRETRO_DEVICE,
|
|
||||||
RARCH_OVERRIDE_SETTING_LOG_TO_FILE,
|
|
||||||
RARCH_OVERRIDE_SETTING_LAST
|
|
||||||
};
|
|
||||||
|
|
||||||
enum runloop_action
|
|
||||||
{
|
|
||||||
RUNLOOP_ACTION_NONE = 0,
|
|
||||||
RUNLOOP_ACTION_AUTOSAVE
|
|
||||||
};
|
|
||||||
|
|
||||||
struct rarch_main_wrap
|
|
||||||
{
|
|
||||||
char **argv;
|
|
||||||
const char *content_path;
|
|
||||||
const char *sram_path;
|
|
||||||
const char *state_path;
|
|
||||||
const char *config_path;
|
|
||||||
const char *libretro_path;
|
|
||||||
int argc;
|
|
||||||
bool verbose;
|
|
||||||
bool no_content;
|
|
||||||
bool touched;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct rarch_resolution
|
|
||||||
{
|
|
||||||
unsigned idx;
|
|
||||||
unsigned id;
|
|
||||||
} rarch_resolution_t;
|
|
||||||
|
|
||||||
/* All run-time- / command line flag-related globals go here. */
|
|
||||||
|
|
||||||
typedef struct global
|
|
||||||
{
|
|
||||||
#ifdef HAVE_MENU
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
retro_time_t prev_start_time;
|
|
||||||
retro_time_t noop_press_time;
|
|
||||||
retro_time_t noop_start_time;
|
|
||||||
retro_time_t action_start_time;
|
|
||||||
retro_time_t action_press_time;
|
|
||||||
} menu;
|
|
||||||
#endif
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
char *remapfile;
|
|
||||||
char savefile[8192];
|
|
||||||
char savestate[8192];
|
|
||||||
char cheatfile[8192];
|
|
||||||
char ups[8192];
|
|
||||||
char bps[8192];
|
|
||||||
char ips[8192];
|
|
||||||
char label[8192];
|
|
||||||
} name;
|
|
||||||
|
|
||||||
/* Recording. */
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
size_t gpu_width;
|
|
||||||
size_t gpu_height;
|
|
||||||
unsigned width;
|
|
||||||
unsigned height;
|
|
||||||
char path[8192];
|
|
||||||
char config[8192];
|
|
||||||
char output_dir[8192];
|
|
||||||
char config_dir[8192];
|
|
||||||
bool use_output_dir;
|
|
||||||
} record;
|
|
||||||
|
|
||||||
/* Settings and/or global state that is specific to
|
|
||||||
* a console-style implementation. */
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
uint32_t *list;
|
|
||||||
unsigned count;
|
|
||||||
rarch_resolution_t current;
|
|
||||||
rarch_resolution_t initial;
|
|
||||||
bool check;
|
|
||||||
} resolutions;
|
|
||||||
unsigned gamma_correction;
|
|
||||||
unsigned int flicker_filter_index;
|
|
||||||
unsigned char soft_filter_index;
|
|
||||||
bool pal_enable;
|
|
||||||
bool pal60_enable;
|
|
||||||
} screen;
|
|
||||||
|
|
||||||
bool flickerfilter_enable;
|
|
||||||
bool softfilter_enable;
|
|
||||||
|
|
||||||
} console;
|
|
||||||
unsigned old_analog_dpad_mode[MAX_USERS];
|
|
||||||
unsigned old_libretro_device[MAX_USERS];
|
|
||||||
bool old_analog_dpad_mode_set;
|
|
||||||
bool old_libretro_device_set;
|
|
||||||
bool remapping_cache_active;
|
|
||||||
/* Settings and/or global states specific to menus */
|
|
||||||
#ifdef HAVE_MENU
|
|
||||||
enum menu_action menu_prev_action;
|
|
||||||
#endif
|
|
||||||
bool launched_from_cli;
|
|
||||||
bool cli_load_menu_on_error;
|
|
||||||
} global_t;
|
|
||||||
|
|
||||||
typedef struct content_file_override
|
|
||||||
{
|
|
||||||
char *ext;
|
|
||||||
bool need_fullpath;
|
|
||||||
bool persistent_data;
|
|
||||||
} content_file_override_t;
|
|
||||||
|
|
||||||
typedef struct content_file_info
|
|
||||||
{
|
|
||||||
char *full_path;
|
|
||||||
char *archive_path;
|
|
||||||
char *archive_file;
|
|
||||||
char *dir;
|
|
||||||
char *name;
|
|
||||||
char *ext;
|
|
||||||
char *meta; /* Unused at present */
|
|
||||||
void *data;
|
|
||||||
size_t data_size;
|
|
||||||
bool file_in_archive;
|
|
||||||
bool persistent_data;
|
|
||||||
} content_file_info_t;
|
|
||||||
|
|
||||||
typedef struct content_file_list
|
|
||||||
{
|
|
||||||
content_file_info_t *entries;
|
|
||||||
struct string_list *temporary_files;
|
|
||||||
struct retro_game_info *game_info;
|
|
||||||
struct retro_game_info_ext *game_info_ext;
|
|
||||||
size_t size;
|
|
||||||
} content_file_list_t;
|
|
||||||
|
|
||||||
typedef struct content_state
|
|
||||||
{
|
|
||||||
char *pending_subsystem_roms[RARCH_MAX_SUBSYSTEM_ROMS];
|
|
||||||
|
|
||||||
content_file_override_t *content_override_list;
|
|
||||||
content_file_list_t *content_list;
|
|
||||||
|
|
||||||
int pending_subsystem_rom_num;
|
|
||||||
int pending_subsystem_id;
|
|
||||||
unsigned pending_subsystem_rom_id;
|
|
||||||
uint32_t rom_crc;
|
|
||||||
|
|
||||||
char companion_ui_crc32[32];
|
|
||||||
char pending_subsystem_ident[255];
|
|
||||||
char pending_rom_crc_path[PATH_MAX_LENGTH];
|
|
||||||
char companion_ui_db_name[PATH_MAX_LENGTH];
|
|
||||||
|
|
||||||
bool is_inited;
|
|
||||||
bool core_does_not_need_content;
|
|
||||||
bool pending_subsystem_init;
|
|
||||||
bool pending_rom_crc;
|
|
||||||
} content_state_t;
|
|
||||||
|
|
||||||
bool retroarch_ctl(enum rarch_ctl_state state, void *data);
|
bool retroarch_ctl(enum rarch_ctl_state state, void *data);
|
||||||
|
|
||||||
int retroarch_get_capabilities(enum rarch_capabilities type,
|
int retroarch_get_capabilities(enum rarch_capabilities type,
|
||||||
|
@ -650,101 +367,6 @@ extern audio_driver_t audio_rwebaudio;
|
||||||
|
|
||||||
/* Recording */
|
/* Recording */
|
||||||
|
|
||||||
enum ffemu_pix_format
|
|
||||||
{
|
|
||||||
FFEMU_PIX_RGB565 = 0,
|
|
||||||
FFEMU_PIX_BGR24,
|
|
||||||
FFEMU_PIX_ARGB8888
|
|
||||||
};
|
|
||||||
|
|
||||||
enum streaming_mode
|
|
||||||
{
|
|
||||||
STREAMING_MODE_TWITCH = 0,
|
|
||||||
STREAMING_MODE_YOUTUBE,
|
|
||||||
STREAMING_MODE_FACEBOOK,
|
|
||||||
STREAMING_MODE_LOCAL,
|
|
||||||
STREAMING_MODE_CUSTOM
|
|
||||||
};
|
|
||||||
|
|
||||||
enum record_config_type
|
|
||||||
{
|
|
||||||
RECORD_CONFIG_TYPE_RECORDING_CUSTOM = 0,
|
|
||||||
RECORD_CONFIG_TYPE_RECORDING_LOW_QUALITY,
|
|
||||||
RECORD_CONFIG_TYPE_RECORDING_MED_QUALITY,
|
|
||||||
RECORD_CONFIG_TYPE_RECORDING_HIGH_QUALITY,
|
|
||||||
RECORD_CONFIG_TYPE_RECORDING_LOSSLESS_QUALITY,
|
|
||||||
RECORD_CONFIG_TYPE_RECORDING_WEBM_FAST,
|
|
||||||
RECORD_CONFIG_TYPE_RECORDING_WEBM_HIGH_QUALITY,
|
|
||||||
RECORD_CONFIG_TYPE_RECORDING_GIF,
|
|
||||||
RECORD_CONFIG_TYPE_RECORDING_APNG,
|
|
||||||
RECORD_CONFIG_TYPE_STREAMING_CUSTOM,
|
|
||||||
RECORD_CONFIG_TYPE_STREAMING_LOW_QUALITY,
|
|
||||||
RECORD_CONFIG_TYPE_STREAMING_MED_QUALITY,
|
|
||||||
RECORD_CONFIG_TYPE_STREAMING_HIGH_QUALITY,
|
|
||||||
RECORD_CONFIG_TYPE_STREAMING_NETPLAY
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Parameters passed to ffemu_new() */
|
|
||||||
struct record_params
|
|
||||||
{
|
|
||||||
/* Framerate per second of input video. */
|
|
||||||
double fps;
|
|
||||||
/* Sample rate of input audio. */
|
|
||||||
double samplerate;
|
|
||||||
|
|
||||||
/* Filename to dump to. */
|
|
||||||
const char *filename;
|
|
||||||
|
|
||||||
/* Path to config. Optional. */
|
|
||||||
const char *config;
|
|
||||||
|
|
||||||
const char *audio_resampler;
|
|
||||||
|
|
||||||
/* Desired output resolution. */
|
|
||||||
unsigned out_width;
|
|
||||||
unsigned out_height;
|
|
||||||
|
|
||||||
/* Total size of framebuffer used in input. */
|
|
||||||
unsigned fb_width;
|
|
||||||
unsigned fb_height;
|
|
||||||
|
|
||||||
/* Audio channels. */
|
|
||||||
unsigned channels;
|
|
||||||
|
|
||||||
unsigned video_record_scale_factor;
|
|
||||||
unsigned video_stream_scale_factor;
|
|
||||||
unsigned video_record_threads;
|
|
||||||
unsigned streaming_mode;
|
|
||||||
|
|
||||||
/* Aspect ratio of input video. Parameters are passed to the muxer,
|
|
||||||
* the video itself is not scaled.
|
|
||||||
*/
|
|
||||||
float aspect_ratio;
|
|
||||||
|
|
||||||
enum record_config_type preset;
|
|
||||||
|
|
||||||
/* Input pixel format. */
|
|
||||||
enum ffemu_pix_format pix_fmt;
|
|
||||||
|
|
||||||
bool video_gpu_record;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct record_video_data
|
|
||||||
{
|
|
||||||
const void *data;
|
|
||||||
unsigned width;
|
|
||||||
unsigned height;
|
|
||||||
int pitch;
|
|
||||||
bool is_dupe;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct record_audio_data
|
|
||||||
{
|
|
||||||
const void *data;
|
|
||||||
size_t frames;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct record_driver
|
typedef struct record_driver
|
||||||
{
|
{
|
||||||
void *(*init)(const struct record_params *params);
|
void *(*init)(const struct record_params *params);
|
||||||
|
@ -830,44 +452,6 @@ unsigned int retroarch_get_rotation(void);
|
||||||
|
|
||||||
void retroarch_init_task_queue(void);
|
void retroarch_init_task_queue(void);
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* BEGIN helper functions for input_driver refactoring
|
|
||||||
*
|
|
||||||
* These functions have similar names and signatures to functions that now require
|
|
||||||
* an input_driver_state_t pointer to be passed to them. They essentially wrap
|
|
||||||
* the newer functions by grabbing pointer to the driver state struct and the
|
|
||||||
* settings struct.
|
|
||||||
******************************************************************************/
|
|
||||||
bool input_set_rumble_state(unsigned port,
|
|
||||||
enum retro_rumble_effect effect, uint16_t strength);
|
|
||||||
|
|
||||||
bool input_set_rumble_gain(unsigned gain);
|
|
||||||
|
|
||||||
float input_get_sensor_state(unsigned port, unsigned id);
|
|
||||||
|
|
||||||
bool input_set_sensor_state(unsigned port,
|
|
||||||
enum retro_sensor_action action, unsigned rate);
|
|
||||||
|
|
||||||
void input_set_nonblock_state(void);
|
|
||||||
|
|
||||||
void input_unset_nonblock_state(void);
|
|
||||||
|
|
||||||
void *input_driver_get_data(void);
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* END helper functions for input_driver refactoring
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
bool input_key_pressed(int key, bool keyboard_pressed);
|
|
||||||
|
|
||||||
bool input_mouse_grabbed(void);
|
|
||||||
|
|
||||||
const char *joypad_driver_name(unsigned i);
|
|
||||||
void joypad_driver_reinit(void *data, const char *joypad_driver_name);
|
|
||||||
|
|
||||||
void *input_driver_init_wrap(input_driver_t *input, const char *name);
|
|
||||||
|
|
||||||
/* Human readable order of input binds */
|
/* Human readable order of input binds */
|
||||||
static const unsigned input_config_bind_order[] = {
|
static const unsigned input_config_bind_order[] = {
|
||||||
RETRO_DEVICE_ID_JOYPAD_UP,
|
RETRO_DEVICE_ID_JOYPAD_UP,
|
||||||
|
|
|
@ -765,18 +765,6 @@ typedef struct my_list_t
|
||||||
int size;
|
int size;
|
||||||
} my_list;
|
} my_list;
|
||||||
|
|
||||||
typedef struct turbo_buttons turbo_buttons_t;
|
|
||||||
|
|
||||||
/* Turbo support. */
|
|
||||||
struct turbo_buttons
|
|
||||||
{
|
|
||||||
int32_t turbo_pressed[MAX_USERS];
|
|
||||||
unsigned count;
|
|
||||||
uint16_t enable[MAX_USERS];
|
|
||||||
bool frame_enable[MAX_USERS];
|
|
||||||
bool mode1_enable[MAX_USERS];
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct input_game_focus_state
|
typedef struct input_game_focus_state
|
||||||
{
|
{
|
||||||
bool enabled;
|
bool enabled;
|
||||||
|
@ -822,8 +810,6 @@ typedef struct discord_state discord_state_t;
|
||||||
|
|
||||||
struct rarch_state
|
struct rarch_state
|
||||||
{
|
{
|
||||||
input_driver_state_t input_driver_state;
|
|
||||||
|
|
||||||
double audio_source_ratio_original;
|
double audio_source_ratio_original;
|
||||||
double audio_source_ratio_current;
|
double audio_source_ratio_current;
|
||||||
struct retro_system_av_info video_driver_av_info; /* double alignment */
|
struct retro_system_av_info video_driver_av_info; /* double alignment */
|
||||||
|
@ -948,12 +934,6 @@ struct rarch_state
|
||||||
|
|
||||||
void *keyboard_press_data;
|
void *keyboard_press_data;
|
||||||
|
|
||||||
#ifdef HAVE_COMMAND
|
|
||||||
command_t *input_driver_command[MAX_CMD_DRIVERS];
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETWORKGAMEPAD
|
|
||||||
input_remote_t *input_driver_remote;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_HID
|
#ifdef HAVE_HID
|
||||||
const void *hid_data;
|
const void *hid_data;
|
||||||
|
@ -1056,8 +1036,6 @@ struct rarch_state
|
||||||
|
|
||||||
jmp_buf error_sjlj_context; /* 4-byte alignment,
|
jmp_buf error_sjlj_context; /* 4-byte alignment,
|
||||||
put it right before long */
|
put it right before long */
|
||||||
|
|
||||||
turbo_buttons_t input_driver_turbo_btns; /* int32_t alignment */
|
|
||||||
int osk_ptr;
|
int osk_ptr;
|
||||||
#if defined(HAVE_COMMAND)
|
#if defined(HAVE_COMMAND)
|
||||||
#ifdef HAVE_NETWORK_CMD
|
#ifdef HAVE_NETWORK_CMD
|
||||||
|
@ -1159,8 +1137,6 @@ struct rarch_state
|
||||||
*/
|
*/
|
||||||
gfx_ctx_flags_t deferred_flag_data; /* uint32_t alignment */
|
gfx_ctx_flags_t deferred_flag_data; /* uint32_t alignment */
|
||||||
retro_bits_t has_set_libretro_device; /* uint32_t alignment */
|
retro_bits_t has_set_libretro_device; /* uint32_t alignment */
|
||||||
input_mapper_t input_driver_mapper; /* uint32_t alignment */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_BSV_MOVIE
|
#ifdef HAVE_BSV_MOVIE
|
||||||
struct bsv_state bsv_movie_state; /* char alignment */
|
struct bsv_state bsv_movie_state; /* char alignment */
|
||||||
|
@ -1330,21 +1306,11 @@ struct rarch_state
|
||||||
bool has_set_netplay_check_frames;
|
bool has_set_netplay_check_frames;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool input_driver_keyboard_linefeed_enable;
|
|
||||||
|
|
||||||
bool input_driver_block_hotkey;
|
|
||||||
bool input_driver_block_libretro_input;
|
|
||||||
bool input_driver_grab_mouse_state;
|
|
||||||
bool input_driver_analog_requested[MAX_USERS];
|
|
||||||
|
|
||||||
input_game_focus_state_t game_focus_state; /* bool alignment */
|
input_game_focus_state_t game_focus_state; /* bool alignment */
|
||||||
|
|
||||||
bool recording_enable;
|
bool recording_enable;
|
||||||
bool streaming_enable;
|
bool streaming_enable;
|
||||||
|
|
||||||
|
|
||||||
bool main_ui_companion_is_on_foreground;
|
bool main_ui_companion_is_on_foreground;
|
||||||
bool keyboard_mapping_blocked;
|
|
||||||
retro_bits_512_t keyboard_mapping_bits;
|
retro_bits_512_t keyboard_mapping_bits;
|
||||||
|
|
||||||
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
||||||
|
|
|
@ -62,8 +62,6 @@ static void runloop_apply_fastmotion_override(
|
||||||
struct rarch_state *p_rarch, runloop_state_t *p_runloop,
|
struct rarch_state *p_rarch, runloop_state_t *p_runloop,
|
||||||
settings_t *settings);
|
settings_t *settings);
|
||||||
|
|
||||||
static uint64_t input_driver_get_capabilities(void);
|
|
||||||
|
|
||||||
static void uninit_libretro_symbols(
|
static void uninit_libretro_symbols(
|
||||||
struct rarch_state *p_rarch,
|
struct rarch_state *p_rarch,
|
||||||
struct retro_core_t *current_core);
|
struct retro_core_t *current_core);
|
||||||
|
|
|
@ -0,0 +1,528 @@
|
||||||
|
#ifndef _RETROARCH_TYPES_H
|
||||||
|
#define _RETROARCH_TYPES_H
|
||||||
|
|
||||||
|
#include <boolean.h>
|
||||||
|
#include <retro_inline.h>
|
||||||
|
#include <retro_common_api.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_MENU
|
||||||
|
#include "menu/menu_defines.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "input/input_defines.h"
|
||||||
|
#include "disk_control_interface.h"
|
||||||
|
|
||||||
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
/* Polling is performed before
|
||||||
|
* call to retro_run. */
|
||||||
|
POLL_TYPE_EARLY = 0,
|
||||||
|
|
||||||
|
/* Polling is performed when requested. */
|
||||||
|
POLL_TYPE_NORMAL,
|
||||||
|
|
||||||
|
/* Polling is performed on first call to
|
||||||
|
* retro_input_state per frame. */
|
||||||
|
POLL_TYPE_LATE
|
||||||
|
};
|
||||||
|
|
||||||
|
enum rarch_core_type
|
||||||
|
{
|
||||||
|
CORE_TYPE_PLAIN = 0,
|
||||||
|
CORE_TYPE_DUMMY,
|
||||||
|
CORE_TYPE_FFMPEG,
|
||||||
|
CORE_TYPE_MPV,
|
||||||
|
CORE_TYPE_IMAGEVIEWER,
|
||||||
|
CORE_TYPE_NETRETROPAD,
|
||||||
|
CORE_TYPE_VIDEO_PROCESSOR,
|
||||||
|
CORE_TYPE_GONG
|
||||||
|
};
|
||||||
|
|
||||||
|
enum rarch_ctl_state
|
||||||
|
{
|
||||||
|
RARCH_CTL_NONE = 0,
|
||||||
|
|
||||||
|
/* Deinitializes RetroArch. */
|
||||||
|
RARCH_CTL_MAIN_DEINIT,
|
||||||
|
|
||||||
|
RARCH_CTL_IS_INITED,
|
||||||
|
|
||||||
|
RARCH_CTL_IS_DUMMY_CORE,
|
||||||
|
RARCH_CTL_IS_CORE_LOADED,
|
||||||
|
|
||||||
|
#if defined(HAVE_RUNAHEAD) && (defined(HAVE_DYNAMIC) || defined(HAVE_DYLIB))
|
||||||
|
RARCH_CTL_IS_SECOND_CORE_AVAILABLE,
|
||||||
|
RARCH_CTL_IS_SECOND_CORE_LOADED,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
RARCH_CTL_IS_BPS_PREF,
|
||||||
|
RARCH_CTL_UNSET_BPS_PREF,
|
||||||
|
|
||||||
|
RARCH_CTL_IS_PATCH_BLOCKED,
|
||||||
|
|
||||||
|
RARCH_CTL_IS_UPS_PREF,
|
||||||
|
RARCH_CTL_UNSET_UPS_PREF,
|
||||||
|
|
||||||
|
RARCH_CTL_IS_IPS_PREF,
|
||||||
|
RARCH_CTL_UNSET_IPS_PREF,
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIGFILE
|
||||||
|
/* Block config read */
|
||||||
|
RARCH_CTL_SET_BLOCK_CONFIG_READ,
|
||||||
|
RARCH_CTL_UNSET_BLOCK_CONFIG_READ,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Username */
|
||||||
|
RARCH_CTL_HAS_SET_USERNAME,
|
||||||
|
|
||||||
|
RARCH_CTL_HAS_SET_SUBSYSTEMS,
|
||||||
|
|
||||||
|
RARCH_CTL_IS_IDLE,
|
||||||
|
RARCH_CTL_SET_IDLE,
|
||||||
|
|
||||||
|
RARCH_CTL_SET_WINDOWED_SCALE,
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIGFILE
|
||||||
|
RARCH_CTL_IS_OVERRIDES_ACTIVE,
|
||||||
|
|
||||||
|
RARCH_CTL_IS_REMAPS_CORE_ACTIVE,
|
||||||
|
RARCH_CTL_SET_REMAPS_CORE_ACTIVE,
|
||||||
|
|
||||||
|
RARCH_CTL_IS_REMAPS_CONTENT_DIR_ACTIVE,
|
||||||
|
RARCH_CTL_SET_REMAPS_CONTENT_DIR_ACTIVE,
|
||||||
|
|
||||||
|
RARCH_CTL_IS_REMAPS_GAME_ACTIVE,
|
||||||
|
RARCH_CTL_SET_REMAPS_GAME_ACTIVE,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
RARCH_CTL_IS_MISSING_BIOS,
|
||||||
|
RARCH_CTL_SET_MISSING_BIOS,
|
||||||
|
RARCH_CTL_UNSET_MISSING_BIOS,
|
||||||
|
|
||||||
|
RARCH_CTL_IS_GAME_OPTIONS_ACTIVE,
|
||||||
|
RARCH_CTL_IS_FOLDER_OPTIONS_ACTIVE,
|
||||||
|
|
||||||
|
RARCH_CTL_IS_PAUSED,
|
||||||
|
RARCH_CTL_SET_PAUSED,
|
||||||
|
|
||||||
|
RARCH_CTL_SET_SHUTDOWN,
|
||||||
|
|
||||||
|
/* Runloop state */
|
||||||
|
RARCH_CTL_STATE_FREE,
|
||||||
|
|
||||||
|
/* Performance counters */
|
||||||
|
RARCH_CTL_GET_PERFCNT,
|
||||||
|
RARCH_CTL_SET_PERFCNT_ENABLE,
|
||||||
|
RARCH_CTL_UNSET_PERFCNT_ENABLE,
|
||||||
|
RARCH_CTL_IS_PERFCNT_ENABLE,
|
||||||
|
|
||||||
|
/* Core options */
|
||||||
|
RARCH_CTL_HAS_CORE_OPTIONS,
|
||||||
|
RARCH_CTL_GET_CORE_OPTION_SIZE,
|
||||||
|
RARCH_CTL_CORE_OPTIONS_LIST_GET,
|
||||||
|
RARCH_CTL_CORE_OPTION_PREV,
|
||||||
|
RARCH_CTL_CORE_OPTION_NEXT,
|
||||||
|
RARCH_CTL_CORE_OPTION_UPDATE_DISPLAY,
|
||||||
|
RARCH_CTL_CORE_IS_RUNNING,
|
||||||
|
|
||||||
|
/* BSV Movie */
|
||||||
|
RARCH_CTL_BSV_MOVIE_IS_INITED
|
||||||
|
};
|
||||||
|
|
||||||
|
enum rarch_capabilities
|
||||||
|
{
|
||||||
|
RARCH_CAPABILITIES_NONE = 0,
|
||||||
|
RARCH_CAPABILITIES_CPU,
|
||||||
|
RARCH_CAPABILITIES_COMPILER
|
||||||
|
};
|
||||||
|
|
||||||
|
enum rarch_override_setting
|
||||||
|
{
|
||||||
|
RARCH_OVERRIDE_SETTING_NONE = 0,
|
||||||
|
RARCH_OVERRIDE_SETTING_LIBRETRO,
|
||||||
|
RARCH_OVERRIDE_SETTING_VERBOSITY,
|
||||||
|
RARCH_OVERRIDE_SETTING_LIBRETRO_DIRECTORY,
|
||||||
|
RARCH_OVERRIDE_SETTING_SAVE_PATH,
|
||||||
|
RARCH_OVERRIDE_SETTING_STATE_PATH,
|
||||||
|
#ifdef HAVE_NETWORKING
|
||||||
|
RARCH_OVERRIDE_SETTING_NETPLAY_MODE,
|
||||||
|
RARCH_OVERRIDE_SETTING_NETPLAY_IP_ADDRESS,
|
||||||
|
RARCH_OVERRIDE_SETTING_NETPLAY_IP_PORT,
|
||||||
|
RARCH_OVERRIDE_SETTING_NETPLAY_STATELESS_MODE,
|
||||||
|
RARCH_OVERRIDE_SETTING_NETPLAY_CHECK_FRAMES,
|
||||||
|
#endif
|
||||||
|
RARCH_OVERRIDE_SETTING_UPS_PREF,
|
||||||
|
RARCH_OVERRIDE_SETTING_BPS_PREF,
|
||||||
|
RARCH_OVERRIDE_SETTING_IPS_PREF,
|
||||||
|
RARCH_OVERRIDE_SETTING_LIBRETRO_DEVICE,
|
||||||
|
RARCH_OVERRIDE_SETTING_LOG_TO_FILE,
|
||||||
|
RARCH_OVERRIDE_SETTING_LAST
|
||||||
|
};
|
||||||
|
|
||||||
|
enum runloop_action
|
||||||
|
{
|
||||||
|
RUNLOOP_ACTION_NONE = 0,
|
||||||
|
RUNLOOP_ACTION_AUTOSAVE
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum ffemu_pix_format
|
||||||
|
{
|
||||||
|
FFEMU_PIX_RGB565 = 0,
|
||||||
|
FFEMU_PIX_BGR24,
|
||||||
|
FFEMU_PIX_ARGB8888
|
||||||
|
};
|
||||||
|
|
||||||
|
enum streaming_mode
|
||||||
|
{
|
||||||
|
STREAMING_MODE_TWITCH = 0,
|
||||||
|
STREAMING_MODE_YOUTUBE,
|
||||||
|
STREAMING_MODE_FACEBOOK,
|
||||||
|
STREAMING_MODE_LOCAL,
|
||||||
|
STREAMING_MODE_CUSTOM
|
||||||
|
};
|
||||||
|
|
||||||
|
enum record_config_type
|
||||||
|
{
|
||||||
|
RECORD_CONFIG_TYPE_RECORDING_CUSTOM = 0,
|
||||||
|
RECORD_CONFIG_TYPE_RECORDING_LOW_QUALITY,
|
||||||
|
RECORD_CONFIG_TYPE_RECORDING_MED_QUALITY,
|
||||||
|
RECORD_CONFIG_TYPE_RECORDING_HIGH_QUALITY,
|
||||||
|
RECORD_CONFIG_TYPE_RECORDING_LOSSLESS_QUALITY,
|
||||||
|
RECORD_CONFIG_TYPE_RECORDING_WEBM_FAST,
|
||||||
|
RECORD_CONFIG_TYPE_RECORDING_WEBM_HIGH_QUALITY,
|
||||||
|
RECORD_CONFIG_TYPE_RECORDING_GIF,
|
||||||
|
RECORD_CONFIG_TYPE_RECORDING_APNG,
|
||||||
|
RECORD_CONFIG_TYPE_STREAMING_CUSTOM,
|
||||||
|
RECORD_CONFIG_TYPE_STREAMING_LOW_QUALITY,
|
||||||
|
RECORD_CONFIG_TYPE_STREAMING_MED_QUALITY,
|
||||||
|
RECORD_CONFIG_TYPE_STREAMING_HIGH_QUALITY,
|
||||||
|
RECORD_CONFIG_TYPE_STREAMING_NETPLAY
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct rarch_memory_descriptor
|
||||||
|
{
|
||||||
|
struct retro_memory_descriptor core; /* uint64_t alignment */
|
||||||
|
size_t disconnect_mask;
|
||||||
|
} rarch_memory_descriptor_t;
|
||||||
|
|
||||||
|
typedef struct rarch_memory_map
|
||||||
|
{
|
||||||
|
rarch_memory_descriptor_t *descriptors;
|
||||||
|
unsigned num_descriptors;
|
||||||
|
} rarch_memory_map_t;
|
||||||
|
|
||||||
|
typedef struct rarch_system_info
|
||||||
|
{
|
||||||
|
struct retro_location_callback location_cb; /* ptr alignment */
|
||||||
|
disk_control_interface_t disk_control; /* ptr alignment */
|
||||||
|
struct retro_system_info info; /* ptr alignment */
|
||||||
|
rarch_memory_map_t mmaps; /* ptr alignment */
|
||||||
|
const char *input_desc_btn[MAX_USERS][RARCH_FIRST_META_KEY];
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
struct retro_subsystem_info *data;
|
||||||
|
unsigned size;
|
||||||
|
} subsystem;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
struct retro_controller_info *data;
|
||||||
|
unsigned size;
|
||||||
|
} ports;
|
||||||
|
unsigned rotation;
|
||||||
|
unsigned performance_level;
|
||||||
|
char valid_extensions[255];
|
||||||
|
bool load_no_content;
|
||||||
|
bool supports_vfs;
|
||||||
|
} rarch_system_info_t;
|
||||||
|
|
||||||
|
typedef struct retro_ctx_input_state_info
|
||||||
|
{
|
||||||
|
retro_input_state_t cb;
|
||||||
|
} retro_ctx_input_state_info_t;
|
||||||
|
|
||||||
|
typedef struct retro_ctx_cheat_info
|
||||||
|
{
|
||||||
|
const char *code;
|
||||||
|
unsigned index;
|
||||||
|
bool enabled;
|
||||||
|
} retro_ctx_cheat_info_t;
|
||||||
|
|
||||||
|
typedef struct retro_ctx_api_info
|
||||||
|
{
|
||||||
|
unsigned version;
|
||||||
|
} retro_ctx_api_info_t;
|
||||||
|
|
||||||
|
typedef struct retro_ctx_region_info
|
||||||
|
{
|
||||||
|
unsigned region;
|
||||||
|
} retro_ctx_region_info_t;
|
||||||
|
|
||||||
|
typedef struct retro_ctx_controller_info
|
||||||
|
{
|
||||||
|
unsigned port;
|
||||||
|
unsigned device;
|
||||||
|
} retro_ctx_controller_info_t;
|
||||||
|
|
||||||
|
typedef struct retro_ctx_memory_info
|
||||||
|
{
|
||||||
|
void *data;
|
||||||
|
size_t size;
|
||||||
|
unsigned id;
|
||||||
|
} retro_ctx_memory_info_t;
|
||||||
|
|
||||||
|
typedef struct retro_ctx_load_content_info
|
||||||
|
{
|
||||||
|
struct retro_game_info *info;
|
||||||
|
const struct string_list *content;
|
||||||
|
const struct retro_subsystem_info *special;
|
||||||
|
} retro_ctx_load_content_info_t;
|
||||||
|
|
||||||
|
typedef struct retro_ctx_serialize_info
|
||||||
|
{
|
||||||
|
const void *data_const;
|
||||||
|
void *data;
|
||||||
|
size_t size;
|
||||||
|
} retro_ctx_serialize_info_t;
|
||||||
|
|
||||||
|
typedef struct retro_ctx_size_info
|
||||||
|
{
|
||||||
|
size_t size;
|
||||||
|
} retro_ctx_size_info_t;
|
||||||
|
|
||||||
|
typedef struct retro_ctx_environ_info
|
||||||
|
{
|
||||||
|
retro_environment_t env;
|
||||||
|
} retro_ctx_environ_info_t;
|
||||||
|
|
||||||
|
typedef struct retro_callbacks
|
||||||
|
{
|
||||||
|
retro_video_refresh_t frame_cb;
|
||||||
|
retro_audio_sample_t sample_cb;
|
||||||
|
retro_audio_sample_batch_t sample_batch_cb;
|
||||||
|
retro_input_state_t state_cb;
|
||||||
|
retro_input_poll_t poll_cb;
|
||||||
|
} retro_callbacks_t;
|
||||||
|
|
||||||
|
struct rarch_main_wrap
|
||||||
|
{
|
||||||
|
char **argv;
|
||||||
|
const char *content_path;
|
||||||
|
const char *sram_path;
|
||||||
|
const char *state_path;
|
||||||
|
const char *config_path;
|
||||||
|
const char *libretro_path;
|
||||||
|
int argc;
|
||||||
|
bool verbose;
|
||||||
|
bool no_content;
|
||||||
|
bool touched;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct rarch_resolution
|
||||||
|
{
|
||||||
|
unsigned idx;
|
||||||
|
unsigned id;
|
||||||
|
} rarch_resolution_t;
|
||||||
|
|
||||||
|
/* All run-time- / command line flag-related globals go here. */
|
||||||
|
|
||||||
|
typedef struct global
|
||||||
|
{
|
||||||
|
#ifdef HAVE_MENU
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
retro_time_t prev_start_time;
|
||||||
|
retro_time_t noop_press_time;
|
||||||
|
retro_time_t noop_start_time;
|
||||||
|
retro_time_t action_start_time;
|
||||||
|
retro_time_t action_press_time;
|
||||||
|
} menu;
|
||||||
|
#endif
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
char *remapfile;
|
||||||
|
char savefile[8192];
|
||||||
|
char savestate[8192];
|
||||||
|
char cheatfile[8192];
|
||||||
|
char ups[8192];
|
||||||
|
char bps[8192];
|
||||||
|
char ips[8192];
|
||||||
|
char label[8192];
|
||||||
|
} name;
|
||||||
|
|
||||||
|
/* Recording. */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
size_t gpu_width;
|
||||||
|
size_t gpu_height;
|
||||||
|
unsigned width;
|
||||||
|
unsigned height;
|
||||||
|
char path[8192];
|
||||||
|
char config[8192];
|
||||||
|
char output_dir[8192];
|
||||||
|
char config_dir[8192];
|
||||||
|
bool use_output_dir;
|
||||||
|
} record;
|
||||||
|
|
||||||
|
/* Settings and/or global state that is specific to
|
||||||
|
* a console-style implementation. */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32_t *list;
|
||||||
|
unsigned count;
|
||||||
|
rarch_resolution_t current;
|
||||||
|
rarch_resolution_t initial;
|
||||||
|
bool check;
|
||||||
|
} resolutions;
|
||||||
|
unsigned gamma_correction;
|
||||||
|
unsigned int flicker_filter_index;
|
||||||
|
unsigned char soft_filter_index;
|
||||||
|
bool pal_enable;
|
||||||
|
bool pal60_enable;
|
||||||
|
} screen;
|
||||||
|
|
||||||
|
bool flickerfilter_enable;
|
||||||
|
bool softfilter_enable;
|
||||||
|
|
||||||
|
} console;
|
||||||
|
unsigned old_analog_dpad_mode[MAX_USERS];
|
||||||
|
unsigned old_libretro_device[MAX_USERS];
|
||||||
|
bool old_analog_dpad_mode_set;
|
||||||
|
bool old_libretro_device_set;
|
||||||
|
bool remapping_cache_active;
|
||||||
|
/* Settings and/or global states specific to menus */
|
||||||
|
#ifdef HAVE_MENU
|
||||||
|
enum menu_action menu_prev_action;
|
||||||
|
#endif
|
||||||
|
bool launched_from_cli;
|
||||||
|
bool cli_load_menu_on_error;
|
||||||
|
} global_t;
|
||||||
|
|
||||||
|
typedef struct content_file_override
|
||||||
|
{
|
||||||
|
char *ext;
|
||||||
|
bool need_fullpath;
|
||||||
|
bool persistent_data;
|
||||||
|
} content_file_override_t;
|
||||||
|
|
||||||
|
typedef struct content_file_info
|
||||||
|
{
|
||||||
|
char *full_path;
|
||||||
|
char *archive_path;
|
||||||
|
char *archive_file;
|
||||||
|
char *dir;
|
||||||
|
char *name;
|
||||||
|
char *ext;
|
||||||
|
char *meta; /* Unused at present */
|
||||||
|
void *data;
|
||||||
|
size_t data_size;
|
||||||
|
bool file_in_archive;
|
||||||
|
bool persistent_data;
|
||||||
|
} content_file_info_t;
|
||||||
|
|
||||||
|
typedef struct content_file_list
|
||||||
|
{
|
||||||
|
content_file_info_t *entries;
|
||||||
|
struct string_list *temporary_files;
|
||||||
|
struct retro_game_info *game_info;
|
||||||
|
struct retro_game_info_ext *game_info_ext;
|
||||||
|
size_t size;
|
||||||
|
} content_file_list_t;
|
||||||
|
|
||||||
|
typedef struct content_state
|
||||||
|
{
|
||||||
|
char *pending_subsystem_roms[RARCH_MAX_SUBSYSTEM_ROMS];
|
||||||
|
|
||||||
|
content_file_override_t *content_override_list;
|
||||||
|
content_file_list_t *content_list;
|
||||||
|
|
||||||
|
int pending_subsystem_rom_num;
|
||||||
|
int pending_subsystem_id;
|
||||||
|
unsigned pending_subsystem_rom_id;
|
||||||
|
uint32_t rom_crc;
|
||||||
|
|
||||||
|
char companion_ui_crc32[32];
|
||||||
|
char pending_subsystem_ident[255];
|
||||||
|
char pending_rom_crc_path[PATH_MAX_LENGTH];
|
||||||
|
char companion_ui_db_name[PATH_MAX_LENGTH];
|
||||||
|
|
||||||
|
bool is_inited;
|
||||||
|
bool core_does_not_need_content;
|
||||||
|
bool pending_subsystem_init;
|
||||||
|
bool pending_rom_crc;
|
||||||
|
} content_state_t;
|
||||||
|
|
||||||
|
/* Parameters passed to ffemu_new() */
|
||||||
|
struct record_params
|
||||||
|
{
|
||||||
|
/* Framerate per second of input video. */
|
||||||
|
double fps;
|
||||||
|
/* Sample rate of input audio. */
|
||||||
|
double samplerate;
|
||||||
|
|
||||||
|
/* Filename to dump to. */
|
||||||
|
const char *filename;
|
||||||
|
|
||||||
|
/* Path to config. Optional. */
|
||||||
|
const char *config;
|
||||||
|
|
||||||
|
const char *audio_resampler;
|
||||||
|
|
||||||
|
/* Desired output resolution. */
|
||||||
|
unsigned out_width;
|
||||||
|
unsigned out_height;
|
||||||
|
|
||||||
|
/* Total size of framebuffer used in input. */
|
||||||
|
unsigned fb_width;
|
||||||
|
unsigned fb_height;
|
||||||
|
|
||||||
|
/* Audio channels. */
|
||||||
|
unsigned channels;
|
||||||
|
|
||||||
|
unsigned video_record_scale_factor;
|
||||||
|
unsigned video_stream_scale_factor;
|
||||||
|
unsigned video_record_threads;
|
||||||
|
unsigned streaming_mode;
|
||||||
|
|
||||||
|
/* Aspect ratio of input video. Parameters are passed to the muxer,
|
||||||
|
* the video itself is not scaled.
|
||||||
|
*/
|
||||||
|
float aspect_ratio;
|
||||||
|
|
||||||
|
enum record_config_type preset;
|
||||||
|
|
||||||
|
/* Input pixel format. */
|
||||||
|
enum ffemu_pix_format pix_fmt;
|
||||||
|
|
||||||
|
bool video_gpu_record;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct record_video_data
|
||||||
|
{
|
||||||
|
const void *data;
|
||||||
|
unsigned width;
|
||||||
|
unsigned height;
|
||||||
|
int pitch;
|
||||||
|
bool is_dupe;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct record_audio_data
|
||||||
|
{
|
||||||
|
const void *data;
|
||||||
|
size_t frames;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
RETRO_END_DECLS
|
||||||
|
|
||||||
|
#endif
|
|
@ -29,7 +29,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../content.h"
|
#include "../content.h"
|
||||||
#include "../core_type.h"
|
#include "../retroarch_types.h"
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
|
|
|
@ -427,7 +427,7 @@ static ui_application_t ui_application_cocoa = {
|
||||||
NSPoint pos = CONVERT_POINT();
|
NSPoint pos = CONVERT_POINT();
|
||||||
cocoa_input_data_t
|
cocoa_input_data_t
|
||||||
*apple = (cocoa_input_data_t*)
|
*apple = (cocoa_input_data_t*)
|
||||||
input_driver_get_data();
|
input_state_get_ptr()->current_data;
|
||||||
if (!apple)
|
if (!apple)
|
||||||
return;
|
return;
|
||||||
/* Relative */
|
/* Relative */
|
||||||
|
@ -456,7 +456,7 @@ static ui_application_t ui_application_cocoa = {
|
||||||
NSPoint pos = CONVERT_POINT();
|
NSPoint pos = CONVERT_POINT();
|
||||||
cocoa_input_data_t
|
cocoa_input_data_t
|
||||||
*apple = (cocoa_input_data_t*)
|
*apple = (cocoa_input_data_t*)
|
||||||
input_driver_get_data();
|
input_state_get_ptr()->current_data;
|
||||||
if (!apple || pos.y < 0)
|
if (!apple || pos.y < 0)
|
||||||
return;
|
return;
|
||||||
apple->mouse_buttons |= (1 << number);
|
apple->mouse_buttons |= (1 << number);
|
||||||
|
@ -471,7 +471,7 @@ static ui_application_t ui_application_cocoa = {
|
||||||
NSPoint pos = CONVERT_POINT();
|
NSPoint pos = CONVERT_POINT();
|
||||||
cocoa_input_data_t
|
cocoa_input_data_t
|
||||||
*apple = (cocoa_input_data_t*)
|
*apple = (cocoa_input_data_t*)
|
||||||
input_driver_get_data();
|
input_state_get_ptr()->current_data;
|
||||||
if (!apple || pos.y < 0)
|
if (!apple || pos.y < 0)
|
||||||
return;
|
return;
|
||||||
apple->mouse_buttons &= ~(1 << number);
|
apple->mouse_buttons &= ~(1 << number);
|
||||||
|
|
|
@ -111,7 +111,8 @@ void get_ios_version(int *major, int *minor)
|
||||||
static void handle_touch_event(NSArray* touches)
|
static void handle_touch_event(NSArray* touches)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
cocoa_input_data_t *apple = (cocoa_input_data_t*)input_driver_get_data();
|
cocoa_input_data_t *apple = (cocoa_input_data_t*)
|
||||||
|
input_state_get_ptr()->current_data;
|
||||||
float scale = cocoa_screen_get_native_scale();
|
float scale = cocoa_screen_get_native_scale();
|
||||||
|
|
||||||
if (!apple)
|
if (!apple)
|
||||||
|
|
|
@ -4943,7 +4943,7 @@ static void ui_companion_qt_toggle(void *data, bool force)
|
||||||
settings_t *settings = config_get_ptr();
|
settings_t *settings = config_get_ptr();
|
||||||
bool ui_companion_toggle = settings->bools.ui_companion_toggle;
|
bool ui_companion_toggle = settings->bools.ui_companion_toggle;
|
||||||
bool video_fullscreen = settings->bools.video_fullscreen;
|
bool video_fullscreen = settings->bools.video_fullscreen;
|
||||||
bool mouse_grabbed = input_mouse_grabbed();
|
bool mouse_grabbed = input_state_get_ptr()->grab_mouse_state;
|
||||||
|
|
||||||
if (ui_companion_toggle || force)
|
if (ui_companion_toggle || force)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue