RetroArch/retroarch.h

438 lines
11 KiB
C
Raw Normal View History

2015-01-09 16:40:47 +00:00
/* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
2016-01-10 03:06:50 +00:00
* Copyright (C) 2011-2016 - Daniel De Matteis
*
2015-01-09 16:40:47 +00:00
* 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 __RETROARCH_H
#define __RETROARCH_H
2017-05-11 07:11:46 +00:00
#include <stdint.h>
#include <stddef.h>
#include <stdlib.h>
2015-06-02 15:17:46 +00:00
2016-06-03 00:39:35 +00:00
#include <retro_common_api.h>
2017-05-11 07:11:46 +00:00
#include <boolean.h>
2016-06-03 00:39:35 +00:00
#include <queues/task_queue.h>
#include <queues/message_queue.h>
2016-05-27 17:26:45 +00:00
#include "core_type.h"
2017-05-11 07:11:46 +00:00
#include "core.h"
2017-05-13 16:20:14 +00:00
#ifdef HAVE_MENU
2019-01-31 19:36:39 +00:00
#include "menu/menu_defines.h"
#endif
2016-06-03 00:39:35 +00:00
RETRO_BEGIN_DECLS
2015-01-09 16:40:47 +00:00
2018-09-11 22:45:01 +00:00
#define RETRO_ENVIRONMENT_RETROARCH_START_BLOCK 0x800000
#define RETRO_ENVIRONMENT_SET_SAVE_STATE_IN_BACKGROUND (2 | RETRO_ENVIRONMENT_RETROARCH_START_BLOCK)
/* bool * --
* Boolean value that tells the front end to save states in the
* background or not.
*/
#define RETRO_ENVIRONMENT_GET_CLEAR_ALL_THREAD_WAITS_CB (3 | RETRO_ENVIRONMENT_RETROARCH_START_BLOCK)
/* retro_environment_t * --
* Provides the callback to the frontend method which will cancel
* all currently waiting threads. Used when coordination is needed
* between the core and the frontend to gracefully stop all threads.
*/
enum rarch_ctl_state
{
RARCH_CTL_NONE = 0,
2015-09-27 00:16:24 +00:00
/* Initialize all drivers. */
RARCH_CTL_INIT,
/* Deinitializes RetroArch. */
RARCH_CTL_MAIN_DEINIT,
RARCH_CTL_IS_INITED,
2016-01-19 22:44:32 +00:00
RARCH_CTL_IS_DUMMY_CORE,
2015-12-07 14:01:53 +00:00
RARCH_CTL_PREINIT,
2015-12-07 14:03:54 +00:00
RARCH_CTL_DESTROY,
2016-09-29 03:36:21 +00:00
RARCH_CTL_IS_BPS_PREF,
RARCH_CTL_UNSET_BPS_PREF,
RARCH_CTL_IS_PATCH_BLOCKED,
RARCH_CTL_SET_PATCH_BLOCKED,
RARCH_CTL_UNSET_PATCH_BLOCKED,
RARCH_CTL_IS_UPS_PREF,
RARCH_CTL_UNSET_UPS_PREF,
RARCH_CTL_IS_IPS_PREF,
RARCH_CTL_UNSET_IPS_PREF,
RARCH_CTL_IS_SRAM_USED,
2016-01-27 18:53:07 +00:00
RARCH_CTL_SET_SRAM_ENABLE,
RARCH_CTL_SET_SRAM_ENABLE_FORCE,
RARCH_CTL_UNSET_SRAM_ENABLE,
2016-01-27 18:53:07 +00:00
2016-09-28 05:23:14 +00:00
RARCH_CTL_IS_SRAM_LOAD_DISABLED,
RARCH_CTL_IS_SRAM_SAVE_DISABLED,
2016-05-27 16:07:51 +00:00
/* Block config read */
2015-11-30 21:09:28 +00:00
RARCH_CTL_SET_BLOCK_CONFIG_READ,
RARCH_CTL_UNSET_BLOCK_CONFIG_READ,
RARCH_CTL_IS_BLOCK_CONFIG_READ,
2016-05-27 16:07:51 +00:00
/* Username */
2016-04-05 22:30:21 +00:00
RARCH_CTL_HAS_SET_USERNAME,
RARCH_CTL_USERNAME_SET,
2017-05-15 03:06:23 +00:00
RARCH_CTL_USERNAME_UNSET,
RARCH_CTL_SET_FRAME_LIMIT,
RARCH_CTL_TASK_INIT,
RARCH_CTL_FRAME_TIME_FREE,
RARCH_CTL_SET_FRAME_TIME_LAST,
RARCH_CTL_SET_FRAME_TIME,
RARCH_CTL_IS_IDLE,
RARCH_CTL_SET_IDLE,
RARCH_CTL_GET_WINDOWED_SCALE,
RARCH_CTL_SET_WINDOWED_SCALE,
RARCH_CTL_IS_OVERRIDES_ACTIVE,
RARCH_CTL_SET_OVERRIDES_ACTIVE,
RARCH_CTL_UNSET_OVERRIDES_ACTIVE,
2017-08-05 05:37:26 +00:00
RARCH_CTL_IS_REMAPS_CORE_ACTIVE,
RARCH_CTL_SET_REMAPS_CORE_ACTIVE,
RARCH_CTL_UNSET_REMAPS_CORE_ACTIVE,
RARCH_CTL_IS_REMAPS_CONTENT_DIR_ACTIVE,
RARCH_CTL_SET_REMAPS_CONTENT_DIR_ACTIVE,
RARCH_CTL_UNSET_REMAPS_CONTENT_DIR_ACTIVE,
2017-08-05 05:37:26 +00:00
RARCH_CTL_IS_REMAPS_GAME_ACTIVE,
RARCH_CTL_SET_REMAPS_GAME_ACTIVE,
RARCH_CTL_UNSET_REMAPS_GAME_ACTIVE,
2017-05-15 03:06:23 +00:00
RARCH_CTL_IS_MISSING_BIOS,
RARCH_CTL_SET_MISSING_BIOS,
RARCH_CTL_UNSET_MISSING_BIOS,
RARCH_CTL_IS_GAME_OPTIONS_ACTIVE,
RARCH_CTL_IS_NONBLOCK_FORCED,
RARCH_CTL_SET_NONBLOCK_FORCED,
RARCH_CTL_UNSET_NONBLOCK_FORCED,
RARCH_CTL_IS_PAUSED,
RARCH_CTL_SET_PAUSED,
RARCH_CTL_SET_CORE_SHUTDOWN,
RARCH_CTL_SET_SHUTDOWN,
RARCH_CTL_UNSET_SHUTDOWN,
2017-05-15 03:06:23 +00:00
RARCH_CTL_IS_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,
/* Key event */
RARCH_CTL_FRONTEND_KEY_EVENT_GET,
2019-01-10 01:49:25 +00:00
RARCH_CTL_UNSET_KEY_EVENT,
2017-05-15 03:06:23 +00:00
RARCH_CTL_KEY_EVENT_GET,
RARCH_CTL_DATA_DEINIT,
/* Core options */
RARCH_CTL_HAS_CORE_OPTIONS,
RARCH_CTL_GET_CORE_OPTION_SIZE,
RARCH_CTL_IS_CORE_OPTION_UPDATED,
RARCH_CTL_CORE_OPTIONS_LIST_GET,
RARCH_CTL_CORE_OPTION_PREV,
RARCH_CTL_CORE_OPTION_NEXT,
RARCH_CTL_CORE_OPTIONS_GET,
RARCH_CTL_CORE_OPTIONS_INIT,
RARCH_CTL_CORE_OPTIONS_DEINIT,
/* System info */
RARCH_CTL_SYSTEM_INFO_INIT,
RARCH_CTL_SYSTEM_INFO_FREE,
/* HTTP server */
RARCH_CTL_HTTPSERVER_INIT,
RARCH_CTL_HTTPSERVER_DESTROY,
RARCH_CTL_CONTENT_RUNTIME_LOG_INIT,
RARCH_CTL_CONTENT_RUNTIME_LOG_DEINIT
};
2015-05-13 11:21:43 +00:00
enum rarch_capabilities
{
RARCH_CAPABILITIES_NONE = 0,
RARCH_CAPABILITIES_CPU,
2015-06-26 14:04:42 +00:00
RARCH_CAPABILITIES_COMPILER
2015-05-13 11:21:43 +00:00
};
enum rarch_override_setting
{
RARCH_OVERRIDE_SETTING_NONE = 0,
2016-08-01 18:47:19 +00:00
RARCH_OVERRIDE_SETTING_LIBRETRO,
RARCH_OVERRIDE_SETTING_VERBOSITY,
2016-08-01 19:51:23 +00:00
RARCH_OVERRIDE_SETTING_LIBRETRO_DIRECTORY,
RARCH_OVERRIDE_SETTING_SAVE_PATH,
RARCH_OVERRIDE_SETTING_STATE_PATH,
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,
2016-08-01 19:51:23 +00:00
RARCH_OVERRIDE_SETTING_UPS_PREF,
RARCH_OVERRIDE_SETTING_BPS_PREF,
RARCH_OVERRIDE_SETTING_IPS_PREF,
RARCH_OVERRIDE_SETTING_LIBRETRO_DEVICE,
RARCH_OVERRIDE_SETTING_LAST
};
2017-05-11 07:11:46 +00:00
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;
bool verbose;
bool no_content;
bool touched;
2017-09-08 23:10:00 +00:00
int argc;
};
2017-05-11 07:11:46 +00:00
typedef struct rarch_resolution
{
unsigned idx;
unsigned id;
} rarch_resolution_t;
/* All run-time- / command line flag-related globals go here. */
typedef struct global
{
struct
{
char savefile[8192];
char savestate[8192];
char cheatfile[8192];
char ups[8192];
char bps[8192];
char ips[8192];
char label[8192];
2017-09-29 18:47:54 +00:00
char *remapfile;
2017-05-11 07:11:46 +00:00
} name;
/* Recording. */
struct
{
2017-09-09 17:58:09 +00:00
bool use_output_dir;
2017-05-11 07:11:46 +00:00
char path[8192];
char config[8192];
2017-09-09 17:58:09 +00:00
char output_dir[8192];
char config_dir[8192];
2017-05-11 07:11:46 +00:00
unsigned width;
unsigned height;
size_t gpu_width;
size_t gpu_height;
} record;
/* Settings and/or global state that is specific to
2017-05-11 07:11:46 +00:00
* a console-style implementation. */
struct
{
2017-09-09 17:58:09 +00:00
bool flickerfilter_enable;
bool softfilter_enable;
2017-05-11 07:11:46 +00:00
struct
{
2017-09-09 17:58:09 +00:00
bool pal_enable;
bool pal60_enable;
unsigned char soft_filter_index;
unsigned gamma_correction;
unsigned int flicker_filter_index;
2017-05-11 07:11:46 +00:00
struct
{
2017-09-09 17:58:09 +00:00
bool check;
unsigned count;
uint32_t *list;
2017-05-11 07:11:46 +00:00
rarch_resolution_t current;
rarch_resolution_t initial;
} resolutions;
} screen;
} console;
/* Settings and/or global states specific to menus */
2018-08-14 09:18:24 +00:00
#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 ;
enum menu_action prev_action ;
} menu;
2018-08-14 09:18:24 +00:00
#endif
2017-05-11 07:11:46 +00:00
} global_t;
2015-09-27 00:04:53 +00:00
bool rarch_ctl(enum rarch_ctl_state state, void *data);
2015-01-09 16:40:47 +00:00
2016-05-09 05:09:26 +00:00
int retroarch_get_capabilities(enum rarch_capabilities type,
2016-01-26 04:56:53 +00:00
char *s, size_t len);
2015-04-16 18:17:05 +00:00
2016-10-01 03:51:03 +00:00
void retroarch_override_setting_set(enum rarch_override_setting enum_idx, void *data);
2016-08-01 18:41:42 +00:00
void retroarch_override_setting_unset(enum rarch_override_setting enum_idx, void *data);
2016-08-01 18:41:42 +00:00
2016-10-01 04:05:08 +00:00
bool retroarch_override_setting_is_set(enum rarch_override_setting enum_idx, void *data);
2016-08-01 18:41:42 +00:00
2016-05-09 05:09:26 +00:00
bool retroarch_validate_game_options(char *s, size_t len, bool mkdir);
2017-05-15 02:36:48 +00:00
bool retroarch_is_forced_fullscreen(void);
2017-12-17 17:56:26 +00:00
void retroarch_unset_forced_fullscreen(void);
void retroarch_set_current_core_type(enum rarch_core_type type, bool explicitly_set);
2016-05-11 19:44:52 +00:00
2018-01-31 03:11:09 +00:00
void retroarch_set_shader_preset(const char* preset);
void retroarch_unset_shader_preset(void);
char* retroarch_get_shader_preset(void);
bool retroarch_is_switching_display_mode(void);
void retroarch_set_switching_display_mode(void);
void retroarch_unset_switching_display_mode(void);
2016-03-22 01:45:25 +00:00
/**
2016-05-09 05:09:26 +00:00
* retroarch_fail:
2016-03-22 01:45:25 +00:00
* @error_code : Error code.
* @error : Error message to show.
*
* Sanely kills the program.
**/
2016-05-09 05:09:26 +00:00
void retroarch_fail(int error_code, const char *error);
2016-03-22 01:45:25 +00:00
2016-05-11 18:50:34 +00:00
/**
* retroarch_main_init:
* @argc : Count of (commandline) arguments.
* @argv : (Commandline) arguments.
*
* Initializes the program.
*
* Returns: 1 (true) on success, otherwise false (0) if there was an error.
**/
bool retroarch_main_init(int argc, char *argv[]);
bool retroarch_main_quit(void);
2017-05-11 07:11:46 +00:00
global_t *global_get_ptr(void);
/**
* runloop_iterate:
*
* Run Libretro core in RetroArch for one frame.
*
* Returns: 0 on successful run,
* Returns 1 if we have to wait until button input in order
2017-05-11 07:11:46 +00:00
* to wake up the loop.
* Returns -1 if we forcibly quit out of the
* RetroArch iteration loop.
2017-05-11 07:11:46 +00:00
**/
int runloop_iterate(unsigned *sleep_ms);
void runloop_task_msg_queue_push(retro_task_t *task,
const char *msg,
unsigned prio, unsigned duration,
bool flush);
void runloop_msg_queue_push(const char *msg,
unsigned prio, unsigned duration,
bool flush,
char *title,
enum message_queue_icon icon, enum message_queue_category category);
2017-05-11 07:11:46 +00:00
bool runloop_msg_queue_pull(const char **ret);
void runloop_get_status(bool *is_paused, bool *is_idle, bool *is_slowmotion,
bool *is_perfcnt_enable);
void runloop_set(enum runloop_action action);
void runloop_unset(enum runloop_action action);
void rarch_menu_running(void);
void rarch_menu_running_finished(void);
2017-05-12 01:39:37 +00:00
bool retroarch_is_on_main_thread(void);
char *get_retroarch_launch_arguments(void);
2017-05-11 07:11:46 +00:00
rarch_system_info_t *runloop_get_system_info(void);
2018-10-30 07:21:32 +00:00
struct retro_system_info *runloop_get_libretro_system_info(void);
#ifdef HAVE_THREADS
void runloop_msg_queue_lock(void);
void runloop_msg_queue_unlock(void);
#endif
void rarch_force_video_driver_fallback(const char *driver);
void rarch_core_runtime_tick(void);
void rarch_send_debug_info(void);
bool rarch_write_debug_info(void);
void rarch_get_cpu_architecture_string(char *cpu_arch_str, size_t len);
2019-03-21 16:56:24 +00:00
void rarch_log_file_init(void);
void rarch_log_file_deinit(void);
enum retro_language rarch_get_language_from_iso(const char *lang);
2016-06-03 00:39:35 +00:00
RETRO_END_DECLS
2015-01-09 16:40:47 +00:00
#endif