mirror of
https://github.com/libretro/RetroArch.git
synced 2025-02-26 04:36:56 +00:00
(OSK PS3) Refactor OSK PS3 input
This commit is contained in:
parent
fee97c961f
commit
8ce8051654
17
driver.h
17
driver.h
@ -331,6 +331,22 @@ typedef struct input_driver
|
||||
const rarch_joypad_driver_t *(*get_joypad_driver)(void *data);
|
||||
} input_driver_t;
|
||||
|
||||
typedef struct input_osk_driver
|
||||
{
|
||||
void *(*init)(size_t size);
|
||||
void (*free)(void *data);
|
||||
bool (*enable_key_layout)(void *data);
|
||||
void (*oskutil_create_activation_parameters)(void *data);
|
||||
void (*write_msg)(void *data, const void *msg);
|
||||
void (*write_initial_msg)(void *data, const void *msg);
|
||||
bool (*start)(void *data);
|
||||
void (*lifecycle)(void *data, uint64_t status);
|
||||
bool (*cb_init)(void *data);
|
||||
bool (*cb_callback)(void *data);
|
||||
unsigned action;
|
||||
const char *ident;
|
||||
} input_osk_driver_t;
|
||||
|
||||
typedef struct camera_driver
|
||||
{
|
||||
// FIXME: params for init - queries for resolution, framerate, color format
|
||||
@ -596,6 +612,7 @@ extern const input_driver_t input_qnx;
|
||||
extern const input_driver_t input_rwebinput;
|
||||
extern const input_driver_t input_null;
|
||||
extern const camera_driver_t camera_v4l2;
|
||||
extern const input_osk_driver_t input_ps3_osk;
|
||||
|
||||
#include "driver_funcs.h"
|
||||
|
||||
|
@ -33,6 +33,9 @@
|
||||
|
||||
rgui_handle_t *rgui;
|
||||
const menu_ctx_driver_t *menu_ctx;
|
||||
#ifdef HAVE_OSK
|
||||
input_osk_driver_t *osk;
|
||||
#endif
|
||||
|
||||
//forward decl
|
||||
static int menu_iterate_func(void *data, unsigned action);
|
||||
@ -382,6 +385,36 @@ bool load_menu_game(void)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_OSK
|
||||
static const input_osk_driver_t *osk_drivers[] = {
|
||||
#if defined(__CELLOS_LV2__)
|
||||
&input_ps3_osk,
|
||||
#endif
|
||||
NULL // zero length array is not valid
|
||||
};
|
||||
|
||||
static bool osk_init_first(void **data)
|
||||
{
|
||||
unsigned i;
|
||||
input_osk_driver_t **handle = (input_osk_driver_t**)data;
|
||||
|
||||
if (!osk_drivers[0])
|
||||
return false;
|
||||
|
||||
for (i = 0; osk_drivers[i]; i++)
|
||||
{
|
||||
void *h = osk_drivers[i]->init(0);
|
||||
if (h)
|
||||
{
|
||||
*handle = (input_osk_driver_t*)h;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
void menu_init(void)
|
||||
{
|
||||
if (!menu_ctx_init_first(&menu_ctx, ((void**)&rgui)))
|
||||
@ -412,8 +445,11 @@ void menu_init(void)
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_OSK
|
||||
//FIXME - will go through a proper interface
|
||||
rgui->oskutil_handle = (ps3_osk_t*)oskutil_init(0);
|
||||
if (!osk_init_first(((void**)&osk)))
|
||||
{
|
||||
RARCH_ERR("Could not initialize OSK.\n");
|
||||
rarch_fail(1, "osk_init()");
|
||||
}
|
||||
#endif
|
||||
|
||||
menu_init_history();
|
||||
@ -430,9 +466,8 @@ void menu_free(void)
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_OSK
|
||||
//FIXME - will go through a proper interface
|
||||
if (rgui->oskutil_handle)
|
||||
oskutil_free(rgui->oskutil_handle);
|
||||
if (osk)
|
||||
osk->free(osk);
|
||||
#endif
|
||||
|
||||
file_list_free(rgui->menu_stack);
|
||||
|
@ -264,6 +264,7 @@ enum
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint64_t old_input_state;
|
||||
@ -308,12 +309,6 @@ typedef struct
|
||||
struct retro_system_info info;
|
||||
bool load_no_rom;
|
||||
|
||||
#ifdef HAVE_OSK
|
||||
unsigned osk_param;
|
||||
ps3_osk_t *oskutil_handle;
|
||||
bool (*osk_init)(void *data);
|
||||
bool (*osk_callback)(void *data);
|
||||
#endif
|
||||
#ifdef HAVE_SHADER_MANAGER
|
||||
struct gfx_shader shader;
|
||||
#endif
|
||||
@ -326,6 +321,9 @@ typedef struct
|
||||
} rgui_handle_t;
|
||||
|
||||
extern rgui_handle_t *rgui;
|
||||
#ifdef HAVE_OSK
|
||||
extern input_osk_driver_t *osk;
|
||||
#endif
|
||||
|
||||
void menu_init(void);
|
||||
bool menu_iterate(void);
|
||||
|
@ -154,7 +154,7 @@ static void callback_sysutil_exit(uint64_t status, uint64_t param, void *userdat
|
||||
case CELL_SYSUTIL_OSKDIALOG_INPUT_CANCELED:
|
||||
case CELL_SYSUTIL_OSKDIALOG_FINISHED:
|
||||
case CELL_SYSUTIL_OSKDIALOG_UNLOADED:
|
||||
oskutil_lifecycle(rgui->oskutil_handle, status);
|
||||
oskutil_lifecycle(osk, status);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
@ -248,7 +248,7 @@ static int16_t ps3_input_state(void *data, const struct retro_keybind **binds,
|
||||
|
||||
#define OSK_IN_USE 1
|
||||
|
||||
void *oskutil_init(unsigned containersize)
|
||||
void *oskutil_init(size_t size)
|
||||
{
|
||||
ps3_osk_t *params = (ps3_osk_t*)calloc(1, sizeof(*params));
|
||||
|
||||
@ -256,8 +256,8 @@ void *oskutil_init(unsigned containersize)
|
||||
return NULL;
|
||||
|
||||
params->flags = 0;
|
||||
if (containersize)
|
||||
params->osk_memorycontainer = containersize;
|
||||
if (size)
|
||||
params->osk_memorycontainer = size;
|
||||
else
|
||||
params->osk_memorycontainer = 1024*1024*2;
|
||||
|
||||
@ -272,7 +272,7 @@ void oskutil_free(void *data)
|
||||
free(params);
|
||||
}
|
||||
|
||||
static bool oskutil_enable_key_layout (void *data)
|
||||
static bool oskutil_enable_key_layout(void *data)
|
||||
{
|
||||
(void)data;
|
||||
|
||||
@ -389,6 +389,21 @@ void oskutil_lifecycle(void *data, uint64_t status)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const input_osk_driver_t input_ps3_osk = {
|
||||
oskutil_init,
|
||||
oskutil_free,
|
||||
oskutil_enable_key_layout,
|
||||
oskutil_create_activation_parameters,
|
||||
oskutil_write_message,
|
||||
oskutil_write_initial_message,
|
||||
oskutil_start,
|
||||
oskutil_lifecycle,
|
||||
NULL,
|
||||
NULL,
|
||||
0,
|
||||
"ps3osk"
|
||||
};
|
||||
#endif
|
||||
|
||||
/*============================================================
|
||||
|
Loading…
x
Reference in New Issue
Block a user