From 5a2c6aa5d66644830eebd5e194ca1309637b634b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 1 May 2015 23:59:23 +0200 Subject: [PATCH] (Android) Create android_app_read_cmd --- frontend/drivers/android_native_app_glue.c | 32 ++++++++++++++++++++++ frontend/drivers/android_native_app_glue.h | 4 +++ input/drivers/android_input.c | 5 +--- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/frontend/drivers/android_native_app_glue.c b/frontend/drivers/android_native_app_glue.c index fc55a86e91..e8e10a655c 100644 --- a/frontend/drivers/android_native_app_glue.c +++ b/frontend/drivers/android_native_app_glue.c @@ -20,12 +20,44 @@ struct android_app *g_android; struct android_app_userdata *g_android_userdata; +static void free_saved_state(struct android_app* android_app) +{ + slock_lock(android_app->mutex); + if (android_app->savedState != NULL) + { + free(android_app->savedState); + android_app->savedState = NULL; + android_app->savedStateSize = 0; + } + slock_unlock(android_app->mutex); +} + void android_app_write_cmd(struct android_app *android_app, int8_t cmd) { if (write(android_app->msgwrite, &cmd, sizeof(cmd)) != sizeof(cmd)) RARCH_ERR("Failure writing android_app cmd: %s\n", strerror(errno)); } +int8_t android_app_read_cmd(struct android_app *android_app) +{ + int8_t cmd; + if (read(android_app->msgread, &cmd, sizeof(cmd)) == sizeof(cmd)) + { + switch (cmd) + { + case APP_CMD_SAVE_STATE: + free_saved_state(android_app); + break; + } + return cmd; + } + else + { + RARCH_ERR("No data on command pipe.\n"); + } + return 1; +} + static void android_app_set_input(void *data, AInputQueue* inputQueue) { struct android_app *android_app = (struct android_app*)data; diff --git a/frontend/drivers/android_native_app_glue.h b/frontend/drivers/android_native_app_glue.h index 6a3546a301..7e8d4ac407 100644 --- a/frontend/drivers/android_native_app_glue.h +++ b/frontend/drivers/android_native_app_glue.h @@ -332,6 +332,10 @@ enum APP_CMD_DEAD, }; +void android_app_write_cmd(struct android_app *android_app, int8_t cmd); + +int8_t android_app_read_cmd(struct android_app *android_app); + #ifdef __cplusplus } #endif diff --git a/input/drivers/android_input.c b/input/drivers/android_input.c index 427dab0698..4feec1f336 100644 --- a/input/drivers/android_input.c +++ b/input/drivers/android_input.c @@ -115,15 +115,12 @@ static void engine_handle_dpad_getaxisvalue( static void engine_handle_cmd(void) { - int8_t cmd; struct android_app *android_app = (struct android_app*)g_android; struct android_app_userdata *userdata = (struct android_app_userdata*)g_android_userdata; runloop_t *runloop = rarch_main_get_ptr(); global_t *global = global_get_ptr(); driver_t *driver = driver_get_ptr(); - - if (read(android_app->msgread, &cmd, sizeof(cmd)) != sizeof(cmd)) - cmd = -1; + int8_t cmd = android_app_read_cmd(android_app); switch (cmd) {