1 /* RetroArch - A frontend for libretro. 2 * Copyright (C) 2010-2014 - Hans-Kristian Arntzen 3 * Copyright (C) 2011-2017 - Daniel De Matteis 4 * 5 * RetroArch is free software: you can redistribute it and/or modify it under the terms 6 * of the GNU General Public License as published by the Free Software Found- 7 * ation, either version 3 of the License, or (at your option) any later version. 8 * 9 * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 10 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 11 * PURPOSE. See the GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License along with RetroArch. 14 * If not, see <http://www.gnu.org/licenses/>. 15 */ 16 17 #ifndef __FRONTEND_DRIVER_H 18 #define __FRONTEND_DRIVER_H 19 20 #include <stdint.h> 21 #include <stddef.h> 22 23 #include <boolean.h> 24 #include <retro_common_api.h> 25 #include <lists/string_list.h> 26 27 #include <libretro.h> 28 29 RETRO_BEGIN_DECLS 30 31 enum frontend_powerstate 32 { 33 FRONTEND_POWERSTATE_NONE = 0, 34 FRONTEND_POWERSTATE_NO_SOURCE, 35 FRONTEND_POWERSTATE_CHARGING, 36 FRONTEND_POWERSTATE_CHARGED, 37 FRONTEND_POWERSTATE_ON_POWER_SOURCE 38 }; 39 40 enum frontend_fork 41 { 42 FRONTEND_FORK_NONE = 0, 43 FRONTEND_FORK_CORE, 44 FRONTEND_FORK_CORE_WITH_ARGS, 45 FRONTEND_FORK_RESTART 46 }; 47 48 enum frontend_architecture 49 { 50 FRONTEND_ARCH_NONE = 0, 51 FRONTEND_ARCH_X86, 52 FRONTEND_ARCH_X86_64, 53 FRONTEND_ARCH_PPC, 54 FRONTEND_ARCH_ARM, 55 FRONTEND_ARCH_ARMV7, 56 FRONTEND_ARCH_ARMV8, 57 FRONTEND_ARCH_MIPS, 58 FRONTEND_ARCH_TILE 59 }; 60 61 /* different platforms may only support some of these types */ 62 enum path_change_type 63 { 64 PATH_CHANGE_TYPE_MODIFIED = (1 << 0), 65 PATH_CHANGE_TYPE_WRITE_FILE_CLOSED = (1 << 1), 66 PATH_CHANGE_TYPE_FILE_MOVED = (1 << 2), 67 PATH_CHANGE_TYPE_FILE_DELETED = (1 << 3) 68 }; 69 70 typedef struct path_change_data 71 { 72 void *data; 73 } path_change_data_t; 74 75 typedef void (*environment_get_t)(int *argc, char *argv[], void *args, 76 void *params_data); 77 typedef void (*process_args_t)(int *argc, char *argv[]); 78 79 typedef struct frontend_ctx_driver 80 { 81 environment_get_t environment_get; 82 void (*init)(void *data); 83 void (*deinit)(void *data); 84 void (*exitspawn)(char *s, size_t len, char *args); 85 86 process_args_t process_args; 87 void (*exec)(const char *, bool); 88 bool (*set_fork)(enum frontend_fork fork_mode); 89 void (*shutdown)(bool); 90 void (*get_name)(char *, size_t); 91 void (*get_os)(char *, size_t, int *major, int *minor); 92 int (*get_rating)(void); 93 void (*content_loaded)(void); 94 enum frontend_architecture (*get_architecture)(void); 95 enum frontend_powerstate (*get_powerstate)(int *seconds, int *percent); 96 int (*parse_drive_list)(void*, bool); 97 uint64_t (*get_total_mem)(void); 98 uint64_t (*get_free_mem)(void); 99 void (*install_signal_handler)(void); 100 int (*get_signal_handler_state)(void); 101 void (*set_signal_handler_state)(int value); 102 void (*destroy_signal_handler_state)(void); 103 void (*attach_console)(void); 104 void (*detach_console)(void); 105 void (*get_lakka_version)(char *, size_t); 106 /* TODO/FIXME: Need to implement some sort of startup brightness setting. */ 107 void (*set_screen_brightness)(int); 108 void (*watch_path_for_changes)(struct string_list *list, int flags, path_change_data_t **change_data); 109 bool (*check_for_path_changes)(path_change_data_t *change_data); 110 void (*set_sustained_performance_mode)(bool on); 111 const char* (*get_cpu_model_name)(void); 112 enum retro_language (*get_user_language)(void); 113 bool (*is_narrator_running)(void); 114 bool (*accessibility_speak)(int speed, 115 const char* speak_text, int priority); 116 117 const char *ident; 118 119 const struct video_driver *(*get_video_driver)(void); 120 } frontend_ctx_driver_t; 121 122 extern frontend_ctx_driver_t frontend_ctx_gx; 123 extern frontend_ctx_driver_t frontend_ctx_wiiu; 124 extern frontend_ctx_driver_t frontend_ctx_ps3; 125 extern frontend_ctx_driver_t frontend_ctx_xdk; 126 extern frontend_ctx_driver_t frontend_ctx_qnx; 127 extern frontend_ctx_driver_t frontend_ctx_darwin; 128 extern frontend_ctx_driver_t frontend_ctx_unix; 129 extern frontend_ctx_driver_t frontend_ctx_psp; 130 extern frontend_ctx_driver_t frontend_ctx_ps2; 131 extern frontend_ctx_driver_t frontend_ctx_ctr; 132 extern frontend_ctx_driver_t frontend_ctx_switch; 133 extern frontend_ctx_driver_t frontend_ctx_win32; 134 extern frontend_ctx_driver_t frontend_ctx_uwp; 135 extern frontend_ctx_driver_t frontend_ctx_xenon; 136 extern frontend_ctx_driver_t frontend_ctx_emscripten; 137 extern frontend_ctx_driver_t frontend_ctx_dos; 138 extern frontend_ctx_driver_t frontend_ctx_switch; 139 extern frontend_ctx_driver_t frontend_ctx_orbis; 140 141 /** 142 * frontend_ctx_find_driver: 143 * @ident : Identifier name of driver to find. 144 * 145 * Finds driver with @ident. Does not initialize. 146 * 147 * Returns: pointer to driver if successful, otherwise NULL. 148 **/ 149 frontend_ctx_driver_t *frontend_ctx_find_driver(const char *ident); 150 151 frontend_ctx_driver_t *frontend_get_ptr(void); 152 153 /** 154 * frontend_ctx_init_first: 155 * 156 * Finds first suitable driver and initialize. 157 * 158 * Returns: pointer to first suitable driver, otherwise NULL. 159 **/ 160 frontend_ctx_driver_t *frontend_ctx_init_first(void); 161 162 int frontend_driver_parse_drive_list(void *data, bool load_content); 163 164 void frontend_driver_content_loaded(void); 165 166 bool frontend_driver_set_fork(enum frontend_fork fork_mode); 167 168 void frontend_driver_process_args(int *argc, char *argv[]); 169 170 bool frontend_driver_is_inited(void); 171 172 void frontend_driver_init_first(void *args); 173 174 void frontend_driver_free(void); 175 176 enum frontend_architecture frontend_driver_get_cpu_architecture(void); 177 178 const void *frontend_driver_get_cpu_architecture_str( 179 char *frontend_architecture, size_t size); 180 181 environment_get_t frontend_driver_environment_get_ptr(void); 182 183 bool frontend_driver_has_get_video_driver_func(void); 184 185 const struct video_driver *frontend_driver_get_video_driver(void); 186 187 void frontend_driver_shutdown(bool a); 188 189 void frontend_driver_deinit(void *args); 190 191 void frontend_driver_exitspawn(char *s, size_t len, char *args); 192 193 bool frontend_driver_has_fork(void); 194 195 bool frontend_driver_get_core_extension(char *s, size_t len); 196 197 bool frontend_driver_get_salamander_basename(char *s, size_t len); 198 199 uint64_t frontend_driver_get_total_memory(void); 200 201 uint64_t frontend_driver_get_free_memory(void); 202 203 void frontend_driver_install_signal_handler(void); 204 205 int frontend_driver_get_signal_handler_state(void); 206 207 void frontend_driver_set_signal_handler_state(int value); 208 209 void frontend_driver_destroy_signal_handler_state(void); 210 211 void frontend_driver_attach_console(void); 212 213 void frontend_driver_detach_console(void); 214 215 void frontend_driver_set_screen_brightness(int value); 216 217 bool frontend_driver_can_set_screen_brightness(void); 218 219 bool frontend_driver_can_watch_for_changes(void); 220 221 void frontend_driver_watch_path_for_changes(struct string_list *list, int flags, path_change_data_t **change_data); 222 223 bool frontend_driver_check_for_path_changes(path_change_data_t *change_data); 224 225 void frontend_driver_set_sustained_performance_mode(bool on); 226 227 const char* frontend_driver_get_cpu_model_name(void); 228 229 enum retro_language frontend_driver_get_user_language(void); 230 231 RETRO_END_DECLS 232 233 #endif 234