(OSK PS3) Refactor OSK PS3 input

This commit is contained in:
twinaphex 2013-11-12 17:16:11 +01:00
parent fee97c961f
commit 8ce8051654
5 changed files with 81 additions and 16 deletions

View File

@ -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"

View File

@ -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);

View File

@ -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);

View File

@ -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
}

View File

@ -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
/*============================================================