mirror of
https://github.com/libretro/RetroArch
synced 2025-04-07 13:23:32 +00:00
(OSK) Refactor - (Onscreen Keyboard) - PS3-only backend for now -
I will make an overlay-based backend soon too for all other platforms
This commit is contained in:
parent
b20360948f
commit
aec049c803
@ -83,6 +83,9 @@ enum
|
|||||||
|
|
||||||
CAMERA_V4L2,
|
CAMERA_V4L2,
|
||||||
CAMERA_NULL,
|
CAMERA_NULL,
|
||||||
|
|
||||||
|
OSK_PS3,
|
||||||
|
OSK_NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES) || defined(__CELLOS_LV2__)
|
#if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES) || defined(__CELLOS_LV2__)
|
||||||
@ -187,6 +190,12 @@ enum
|
|||||||
#define CAMERA_DEFAULT_DRIVER CAMERA_NULL
|
#define CAMERA_DEFAULT_DRIVER CAMERA_NULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__CELLOS_LV2__)
|
||||||
|
#define OSK_DEFAULT_DRIVER OSK_PS3
|
||||||
|
#else
|
||||||
|
#define OSK_DEFAULT_DRIVER OSK_NULL
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(XENON) || defined(_XBOX360) || defined(__CELLOS_LV2__)
|
#if defined(XENON) || defined(_XBOX360) || defined(__CELLOS_LV2__)
|
||||||
#define DEFAULT_ASPECT_RATIO 1.7778f
|
#define DEFAULT_ASPECT_RATIO 1.7778f
|
||||||
#elif defined(_XBOX1) || defined(GEKKO) || defined(ANDROID) || defined(__BLACKBERRY_QNX__)
|
#elif defined(_XBOX1) || defined(GEKKO) || defined(ANDROID) || defined(__BLACKBERRY_QNX__)
|
||||||
|
108
driver.c
108
driver.c
@ -179,6 +179,59 @@ static const input_driver_t *input_drivers[] = {
|
|||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
static const input_osk_driver_t *osk_drivers[] = {
|
||||||
|
#ifdef __CELLOS_LV2__
|
||||||
|
&input_ps3_osk,
|
||||||
|
#endif
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int find_osk_driver_index(const char *driver)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
for (i = 0; osk_drivers[i]; i++)
|
||||||
|
if (strcasecmp(driver, osk_drivers[i]->ident) == 0)
|
||||||
|
return i;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void find_osk_driver(void)
|
||||||
|
{
|
||||||
|
int i = find_osk_driver_index(g_settings.osk.driver);
|
||||||
|
if (i >= 0)
|
||||||
|
driver.osk = osk_drivers[i];
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned d;
|
||||||
|
RARCH_ERR("Couldn't find any OSK driver named \"%s\"\n", g_settings.osk.driver);
|
||||||
|
RARCH_LOG_OUTPUT("Available OSK drivers are:\n");
|
||||||
|
for (d = 0; osk_drivers[d]; d++)
|
||||||
|
RARCH_LOG_OUTPUT("\t%s\n", osk_drivers[d]->ident);
|
||||||
|
|
||||||
|
rarch_fail(1, "find_osk_driver()");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void find_prev_osk_driver(void)
|
||||||
|
{
|
||||||
|
int i = find_osk_driver_index(g_settings.osk.driver);
|
||||||
|
if (i > 0)
|
||||||
|
strlcpy(g_settings.osk.driver, osk_drivers[i - 1]->ident, sizeof(g_settings.osk.driver));
|
||||||
|
else
|
||||||
|
RARCH_WARN("Couldn't find any previous osk driver (current one: \"%s\").\n", g_settings.osk.driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
void find_next_osk_driver(void)
|
||||||
|
{
|
||||||
|
int i = find_osk_driver_index(g_settings.osk.driver);
|
||||||
|
if (i >= 0 && osk_drivers[i + 1])
|
||||||
|
strlcpy(g_settings.osk.driver, osk_drivers[i + 1]->ident, sizeof(g_settings.osk.driver));
|
||||||
|
else
|
||||||
|
RARCH_WARN("Couldn't find any next osk driver (current one: \"%s\").\n", g_settings.osk.driver);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_CAMERA
|
#ifdef HAVE_CAMERA
|
||||||
static const camera_driver_t *camera_drivers[] = {
|
static const camera_driver_t *camera_drivers[] = {
|
||||||
#ifdef HAVE_V4L2
|
#ifdef HAVE_V4L2
|
||||||
@ -383,6 +436,9 @@ void init_drivers_pre(void)
|
|||||||
#ifdef HAVE_CAMERA
|
#ifdef HAVE_CAMERA
|
||||||
find_camera_driver();
|
find_camera_driver();
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
find_osk_driver();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void adjust_system_rates(void)
|
static void adjust_system_rates(void)
|
||||||
@ -558,6 +614,14 @@ void global_uninit_drivers(void)
|
|||||||
driver.camera_data = NULL;
|
driver.camera_data = NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
if (driver.osk && driver.osk_data)
|
||||||
|
{
|
||||||
|
driver.osk->free(driver.osk_data);
|
||||||
|
driver.osk_data = NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_CAMERA
|
#ifdef HAVE_CAMERA
|
||||||
@ -583,6 +647,26 @@ void init_camera(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
void init_osk(void)
|
||||||
|
{
|
||||||
|
// Resource leaks will follow if osk is initialized twice.
|
||||||
|
if (driver.osk_data)
|
||||||
|
return;
|
||||||
|
|
||||||
|
find_osk_driver();
|
||||||
|
|
||||||
|
//FIXME - refactor params later based on semantics
|
||||||
|
driver.osk_data = osk_init_func(0);
|
||||||
|
|
||||||
|
if (!driver.osk_data)
|
||||||
|
{
|
||||||
|
RARCH_ERR("Failed to initialize OSK driver. Will continue without OSK.\n");
|
||||||
|
g_extern.osk_active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void init_drivers(void)
|
void init_drivers(void)
|
||||||
{
|
{
|
||||||
driver.video_data_own = !driver.video_data;
|
driver.video_data_own = !driver.video_data;
|
||||||
@ -591,6 +675,9 @@ void init_drivers(void)
|
|||||||
#ifdef HAVE_CAMERA
|
#ifdef HAVE_CAMERA
|
||||||
driver.camera_data_own = !driver.camera_data;
|
driver.camera_data_own = !driver.camera_data;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
driver.osk_data_own = !driver.osk_data;
|
||||||
|
#endif
|
||||||
|
|
||||||
adjust_system_rates();
|
adjust_system_rates();
|
||||||
|
|
||||||
@ -609,6 +696,10 @@ void init_drivers(void)
|
|||||||
init_camera();
|
init_camera();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
init_osk();
|
||||||
|
#endif
|
||||||
|
|
||||||
// Keep non-throttled state as good as possible.
|
// Keep non-throttled state as good as possible.
|
||||||
if (driver.nonblock_state)
|
if (driver.nonblock_state)
|
||||||
driver_set_nonblock_state(driver.nonblock_state);
|
driver_set_nonblock_state(driver.nonblock_state);
|
||||||
@ -624,6 +715,14 @@ void uninit_camera(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
void uninit_osk(void)
|
||||||
|
{
|
||||||
|
if (driver.osk_data && driver.osk)
|
||||||
|
driver.osk->free(driver.osk_data);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void uninit_drivers(void)
|
void uninit_drivers(void)
|
||||||
{
|
{
|
||||||
uninit_audio();
|
uninit_audio();
|
||||||
@ -638,6 +737,12 @@ void uninit_drivers(void)
|
|||||||
|
|
||||||
if (driver.camera_data_own)
|
if (driver.camera_data_own)
|
||||||
driver.camera_data = NULL;
|
driver.camera_data = NULL;
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
uninit_osk();
|
||||||
|
|
||||||
|
if (driver.osk_data_own)
|
||||||
|
driver.osk_data = NULL;
|
||||||
#endif
|
#endif
|
||||||
if (driver.video_data_own)
|
if (driver.video_data_own)
|
||||||
driver.video_data = NULL;
|
driver.video_data = NULL;
|
||||||
@ -648,6 +753,9 @@ void uninit_drivers(void)
|
|||||||
|
|
||||||
#ifdef HAVE_CAMERA
|
#ifdef HAVE_CAMERA
|
||||||
driver.camera_data_own = false;
|
driver.camera_data_own = false;
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
driver.osk_data_own = false;
|
||||||
#endif
|
#endif
|
||||||
driver.video_data_own = false;
|
driver.video_data_own = false;
|
||||||
driver.audio_data_own = false;
|
driver.audio_data_own = false;
|
||||||
|
10
driver.h
10
driver.h
@ -341,9 +341,6 @@ typedef struct input_osk_driver
|
|||||||
void (*write_initial_msg)(void *data, const void *msg);
|
void (*write_initial_msg)(void *data, const void *msg);
|
||||||
bool (*start)(void *data);
|
bool (*start)(void *data);
|
||||||
void (*lifecycle)(void *data, uint64_t status);
|
void (*lifecycle)(void *data, uint64_t status);
|
||||||
bool (*cb_init)(void *data);
|
|
||||||
bool (*cb_callback)(void *data);
|
|
||||||
unsigned action;
|
|
||||||
const char *ident;
|
const char *ident;
|
||||||
} input_osk_driver_t;
|
} input_osk_driver_t;
|
||||||
|
|
||||||
@ -452,6 +449,10 @@ typedef struct driver
|
|||||||
const audio_driver_t *audio;
|
const audio_driver_t *audio;
|
||||||
const video_driver_t *video;
|
const video_driver_t *video;
|
||||||
const input_driver_t *input;
|
const input_driver_t *input;
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
const input_osk_driver_t *osk;
|
||||||
|
void *osk_data;
|
||||||
|
#endif
|
||||||
#ifdef HAVE_CAMERA
|
#ifdef HAVE_CAMERA
|
||||||
const camera_driver_t *camera;
|
const camera_driver_t *camera;
|
||||||
void *camera_data;
|
void *camera_data;
|
||||||
@ -480,6 +481,9 @@ typedef struct driver
|
|||||||
#ifdef HAVE_CAMERA
|
#ifdef HAVE_CAMERA
|
||||||
bool camera_data_own;
|
bool camera_data_own;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
bool osk_data_own;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_COMMAND
|
#ifdef HAVE_COMMAND
|
||||||
rarch_cmd_t *command;
|
rarch_cmd_t *command;
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
|
|
||||||
#define camera_init_func(device, caps, width, height) driver.camera->init(device, caps, width, height)
|
#define camera_init_func(device, caps, width, height) driver.camera->init(device, caps, width, height)
|
||||||
|
|
||||||
|
#define osk_init_func(unknown) driver.osk->init(unknown)
|
||||||
|
|
||||||
#define audio_init_func(device, rate, latency) driver.audio->init(device, rate, latency)
|
#define audio_init_func(device, rate, latency) driver.audio->init(device, rate, latency)
|
||||||
#define audio_write_func(buf, size) driver.audio->write(driver.audio_data, buf, size)
|
#define audio_write_func(buf, size) driver.audio->write(driver.audio_data, buf, size)
|
||||||
#define audio_stop_func() driver.audio->stop(driver.audio_data)
|
#define audio_stop_func() driver.audio->stop(driver.audio_data)
|
||||||
|
@ -154,7 +154,8 @@ static void callback_sysutil_exit(uint64_t status, uint64_t param, void *userdat
|
|||||||
case CELL_SYSUTIL_OSKDIALOG_INPUT_CANCELED:
|
case CELL_SYSUTIL_OSKDIALOG_INPUT_CANCELED:
|
||||||
case CELL_SYSUTIL_OSKDIALOG_FINISHED:
|
case CELL_SYSUTIL_OSKDIALOG_FINISHED:
|
||||||
case CELL_SYSUTIL_OSKDIALOG_UNLOADED:
|
case CELL_SYSUTIL_OSKDIALOG_UNLOADED:
|
||||||
oskutil_lifecycle(osk, status);
|
if (driver.osk && driver.osk_data)
|
||||||
|
driver.osk->lifecycle(driver.osk_data, status);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
16
general.h
16
general.h
@ -195,6 +195,16 @@ struct settings
|
|||||||
} camera;
|
} camera;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
char driver[32];
|
||||||
|
uint64_t state;
|
||||||
|
bool (*cb_init)(void *data);
|
||||||
|
bool (*cb_callback)(void *data);
|
||||||
|
} osk;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
char driver[32];
|
char driver[32];
|
||||||
@ -321,6 +331,9 @@ struct global
|
|||||||
bool video_active;
|
bool video_active;
|
||||||
#ifdef HAVE_CAMERA
|
#ifdef HAVE_CAMERA
|
||||||
bool camera_active;
|
bool camera_active;
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
bool osk_active;
|
||||||
#endif
|
#endif
|
||||||
bool force_fullscreen;
|
bool force_fullscreen;
|
||||||
|
|
||||||
@ -638,6 +651,9 @@ void config_set_defaults(void);
|
|||||||
#ifdef HAVE_CAMERA
|
#ifdef HAVE_CAMERA
|
||||||
const char *config_get_default_camera(void);
|
const char *config_get_default_camera(void);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
const char *config_get_default_osk(void);
|
||||||
|
#endif
|
||||||
const char *config_get_default_video(void);
|
const char *config_get_default_video(void);
|
||||||
const char *config_get_default_audio(void);
|
const char *config_get_default_audio(void);
|
||||||
const char *config_get_default_input(void);
|
const char *config_get_default_input(void);
|
||||||
|
@ -399,9 +399,6 @@ const input_osk_driver_t input_ps3_osk = {
|
|||||||
oskutil_write_initial_message,
|
oskutil_write_initial_message,
|
||||||
oskutil_start,
|
oskutil_start,
|
||||||
oskutil_lifecycle,
|
oskutil_lifecycle,
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
"ps3osk"
|
"ps3osk"
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
21
settings.c
21
settings.c
@ -148,6 +148,21 @@ const char *config_get_default_input(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
const char *config_get_default_osk(void)
|
||||||
|
{
|
||||||
|
switch (OSK_DEFAULT_DRIVER)
|
||||||
|
{
|
||||||
|
case OSK_PS3:
|
||||||
|
return "ps3osk";
|
||||||
|
case OSK_NULL:
|
||||||
|
return "null";
|
||||||
|
default:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_CAMERA
|
#ifdef HAVE_CAMERA
|
||||||
const char *config_get_default_camera(void)
|
const char *config_get_default_camera(void)
|
||||||
{
|
{
|
||||||
@ -174,6 +189,12 @@ void config_set_defaults(void)
|
|||||||
|
|
||||||
if (def_camera)
|
if (def_camera)
|
||||||
strlcpy(g_settings.camera.driver, def_camera, sizeof(g_settings.camera.driver));
|
strlcpy(g_settings.camera.driver, def_camera, sizeof(g_settings.camera.driver));
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_OSK
|
||||||
|
const char *def_osk = config_get_default_osk();
|
||||||
|
|
||||||
|
if (def_osk)
|
||||||
|
strlcpy(g_settings.osk.driver, def_osk, sizeof(g_settings.osk.driver));
|
||||||
#endif
|
#endif
|
||||||
if (def_video)
|
if (def_video)
|
||||||
strlcpy(g_settings.video.driver, def_video, sizeof(g_settings.video.driver));
|
strlcpy(g_settings.video.driver, def_video, sizeof(g_settings.video.driver));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user