diff --git a/Makefile.common b/Makefile.common
index d86e149789..4cc2597f63 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -100,6 +100,7 @@ OBJ += frontend/frontend.o \
audio/audio_driver.o \
input/input_driver.o \
gfx/video_driver.o \
+ osk_driver.o \
driver.o \
settings.o \
settings_list.o \
diff --git a/driver.c b/driver.c
index 7d0b5297e6..e41e3bb743 100644
--- a/driver.c
+++ b/driver.c
@@ -40,80 +40,6 @@
driver_t driver;
-static const input_osk_driver_t *osk_drivers[] = {
-#ifdef __CELLOS_LV2__
- &input_ps3_osk,
-#endif
- &input_null_osk,
- NULL,
-};
-
-/**
- * osk_driver_find_handle:
- * @index : index of driver to get handle to.
- *
- * Returns: handle to OSK driver at index. Can be NULL
- * if nothing found.
- **/
-static const void *osk_driver_find_handle(int index)
-{
- const void *drv = osk_drivers[index];
- if (!drv)
- return NULL;
- return drv;
-}
-
-/**
- * osk_driver_find_ident:
- * @index : index of driver to get handle to.
- *
- * Returns: Human-readable identifier of OSK driver at index. Can be NULL
- * if nothing found.
- **/
-static const char *osk_driver_find_ident(int index)
-{
- const input_osk_driver_t *drv = osk_drivers[index];
- if (!drv)
- return NULL;
- return drv->ident;
-}
-
-/**
- * config_get_osk_driver_options:
- *
- * Get an enumerated list of all OSK (onscreen keyboard) driver names,
- * separated by '|'.
- *
- * Returns: string listing of all OSK (onscreen keyboard) driver names,
- * separated by '|'.
- **/
-const char* config_get_osk_driver_options(void)
-{
- union string_list_elem_attr attr;
- unsigned i;
- char *options = NULL;
- int options_len = 0;
- struct string_list *options_l = string_list_new();
-
- attr.i = 0;
-
- for (i = 0; osk_driver_find_handle(i); i++)
- {
- const char *opt = osk_driver_find_ident(i);
- options_len += strlen(opt) + 1;
- string_list_append(options_l, opt, attr);
- }
-
- options = (char*)calloc(options_len, sizeof(char));
-
- string_list_join_concat(options, options_len, options_l, "|");
-
- string_list_free(options_l);
- options_l = NULL;
-
- return options;
-}
-
static const camera_driver_t *camera_drivers[] = {
#ifdef HAVE_V4L2
&camera_v4l2,
@@ -537,61 +463,6 @@ void find_next_driver(const char *label, char *str, size_t sizeof_str)
RARCH_WARN("Couldn't find any next driver (current one: \"%s\").\n", str);
}
-/**
- * find_osk_driver:
- *
- * Find OSK (onscreen keyboard) driver.
- **/
-static void find_osk_driver(void)
-{
- int i = find_driver_index("osk_driver", g_settings.osk.driver);
- if (i >= 0)
- driver.osk = osk_driver_find_handle(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_driver_find_handle(d); d++)
- RARCH_LOG_OUTPUT("\t%s\n", osk_driver_find_ident(d));
-
- RARCH_WARN("Going to default to first OSK driver...\n");
-
- driver.osk = osk_driver_find_handle(0);
-
- if (!driver.osk)
- rarch_fail(1, "find_osk_driver()");
- }
-}
-
-static 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 = driver.osk->init(0);
-
- if (!driver.osk_data)
- {
- RARCH_ERR("Failed to initialize OSK driver. Will continue without OSK.\n");
- driver.osk_active = false;
- }
-}
-
-static void uninit_osk(void)
-{
- if (driver.osk_data && driver.osk && driver.osk->free)
- driver.osk->free(driver.osk_data);
- driver.osk_data = NULL;
-}
-
-
-
static void find_camera_driver(void)
{
int i = find_driver_index("camera_driver", g_settings.camera.driver);
diff --git a/driver.h b/driver.h
index 57e05d2b85..043d01b70c 100644
--- a/driver.h
+++ b/driver.h
@@ -31,6 +31,7 @@
#include "audio/audio_driver.h"
#include "menu/menu_driver.h"
+#include "osk_driver.h"
#include "audio/resamplers/resampler.h"
#include "record/ffemu.h"
@@ -160,20 +161,6 @@ enum analog_dpad_mode
ANALOG_DPAD_LAST
};
-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);
- void *(*get_text_buf)(void *data);
- const char *ident;
-} input_osk_driver_t;
-
typedef struct camera_driver
{
/* FIXME: params for initialization - queries for resolution,
@@ -615,17 +602,6 @@ const char* config_get_camera_driver_options(void);
**/
const char* config_get_video_driver_options(void);
-/**
- * config_get_osk_driver_options:
- *
- * Get an enumerated list of all OSK (onscreen keyboard) driver names,
- * separated by '|'.
- *
- * Returns: string listing of all OSK (onscreen keyboard) driver names,
- * separated by '|'.
- **/
-const char* config_get_osk_driver_options(void);
-
/**
* config_get_location_driver_options:
*
@@ -672,9 +648,6 @@ extern location_driver_t location_apple;
extern location_driver_t location_android;
extern location_driver_t location_null;
-extern input_osk_driver_t input_ps3_osk;
-extern input_osk_driver_t input_null_osk;
-
extern rarch_joypad_driver_t *joypad_drivers[];
#ifdef __cplusplus
diff --git a/griffin/griffin.c b/griffin/griffin.c
index 72e4305674..91b42b2a85 100644
--- a/griffin/griffin.c
+++ b/griffin/griffin.c
@@ -499,6 +499,7 @@ DRIVERS
#include "../gfx/video_driver.c"
#include "../input/input_driver.c"
#include "../audio/audio_driver.c"
+#include "../osk_driver.c"
#include "../driver.c"
/*============================================================
diff --git a/osk_driver.c b/osk_driver.c
new file mode 100644
index 0000000000..09f142cb01
--- /dev/null
+++ b/osk_driver.c
@@ -0,0 +1,148 @@
+/* RetroArch - A frontend for libretro.
+ * Copyright (C) 2010-2014 - Hans-Kristian Arntzen
+ * Copyright (C) 2011-2015 - Daniel De Matteis
+ *
+ * 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 .
+ */
+
+#include
+#include
+#include "osk_driver.h"
+#include "driver.h"
+#include "general.h"
+
+static const input_osk_driver_t *osk_drivers[] = {
+#ifdef __CELLOS_LV2__
+ &input_ps3_osk,
+#endif
+ &input_null_osk,
+ NULL,
+};
+
+/**
+ * osk_driver_find_handle:
+ * @index : index of driver to get handle to.
+ *
+ * Returns: handle to OSK driver at index. Can be NULL
+ * if nothing found.
+ **/
+const void *osk_driver_find_handle(int index)
+{
+ const void *drv = osk_drivers[index];
+ if (!drv)
+ return NULL;
+ return drv;
+}
+
+/**
+ * osk_driver_find_ident:
+ * @index : index of driver to get handle to.
+ *
+ * Returns: Human-readable identifier of OSK driver at index. Can be NULL
+ * if nothing found.
+ **/
+const char *osk_driver_find_ident(int index)
+{
+ const input_osk_driver_t *drv = osk_drivers[index];
+ if (!drv)
+ return NULL;
+ return drv->ident;
+}
+
+/**
+ * config_get_osk_driver_options:
+ *
+ * Get an enumerated list of all OSK (onscreen keyboard) driver names,
+ * separated by '|'.
+ *
+ * Returns: string listing of all OSK (onscreen keyboard) driver names,
+ * separated by '|'.
+ **/
+const char* config_get_osk_driver_options(void)
+{
+ union string_list_elem_attr attr;
+ unsigned i;
+ char *options = NULL;
+ int options_len = 0;
+ struct string_list *options_l = string_list_new();
+
+ attr.i = 0;
+
+ for (i = 0; osk_driver_find_handle(i); i++)
+ {
+ const char *opt = osk_driver_find_ident(i);
+ options_len += strlen(opt) + 1;
+ string_list_append(options_l, opt, attr);
+ }
+
+ options = (char*)calloc(options_len, sizeof(char));
+
+ string_list_join_concat(options, options_len, options_l, "|");
+
+ string_list_free(options_l);
+ options_l = NULL;
+
+ return options;
+}
+
+/**
+ * find_osk_driver:
+ *
+ * Find OSK (onscreen keyboard) driver.
+ **/
+void find_osk_driver(void)
+{
+ int i = find_driver_index("osk_driver", g_settings.osk.driver);
+ if (i >= 0)
+ driver.osk = osk_driver_find_handle(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_driver_find_handle(d); d++)
+ RARCH_LOG_OUTPUT("\t%s\n", osk_driver_find_ident(d));
+
+ RARCH_WARN("Going to default to first OSK driver...\n");
+
+ driver.osk = osk_driver_find_handle(0);
+
+ if (!driver.osk)
+ rarch_fail(1, "find_osk_driver()");
+ }
+}
+
+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 = driver.osk->init(0);
+
+ if (!driver.osk_data)
+ {
+ RARCH_ERR("Failed to initialize OSK driver. Will continue without OSK.\n");
+ driver.osk_active = false;
+ }
+}
+
+void uninit_osk(void)
+{
+ if (driver.osk_data && driver.osk && driver.osk->free)
+ driver.osk->free(driver.osk_data);
+ driver.osk_data = NULL;
+}
diff --git a/osk_driver.h b/osk_driver.h
new file mode 100644
index 0000000000..5d75be9ff0
--- /dev/null
+++ b/osk_driver.h
@@ -0,0 +1,89 @@
+/* RetroArch - A frontend for libretro.
+ * Copyright (C) 2010-2014 - Hans-Kristian Arntzen
+ * Copyright (C) 2011-2015 - Daniel De Matteis
+ *
+ * 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 .
+ */
+
+#ifndef __OSK_DRIVER__H
+#define __OSK_DRIVER__H
+
+#include
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+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);
+ void *(*get_text_buf)(void *data);
+ const char *ident;
+} input_osk_driver_t;
+
+/**
+ * osk_driver_find_handle:
+ * @index : index of driver to get handle to.
+ *
+ * Returns: handle to OSK driver at index. Can be NULL
+ * if nothing found.
+ **/
+const void *osk_driver_find_handle(int index);
+
+/**
+ * osk_driver_find_ident:
+ * @index : index of driver to get handle to.
+ *
+ * Returns: Human-readable identifier of OSK driver at index. Can be NULL
+ * if nothing found.
+ **/
+const char *osk_driver_find_ident(int index);
+
+/**
+ * config_get_osk_driver_options:
+ *
+ * Get an enumerated list of all OSK (onscreen keyboard) driver names,
+ * separated by '|'.
+ *
+ * Returns: string listing of all OSK (onscreen keyboard) driver names,
+ * separated by '|'.
+ **/
+const char* config_get_osk_driver_options(void);
+
+/**
+ * find_osk_driver:
+ *
+ * Find OSK (onscreen keyboard) driver.
+ **/
+void find_osk_driver(void);
+
+void init_osk(void);
+
+void uninit_osk(void);
+
+extern input_osk_driver_t input_ps3_osk;
+extern input_osk_driver_t input_null_osk;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif