(Android) Move sensorManager and sensorEventQueue to android_app

This commit is contained in:
twinaphex 2015-12-02 21:38:21 +01:00
parent b7d7dcef1c
commit e859fae4ee
2 changed files with 16 additions and 19 deletions

View File

@ -160,6 +160,8 @@ struct android_app
/* Below are "private" implementation of RA code. */ /* Below are "private" implementation of RA code. */
bool unfocused; bool unfocused;
unsigned accelerometer_event_rate; unsigned accelerometer_event_rate;
ASensorManager *sensorManager;
ASensorEventQueue *sensorEventQueue;
const ASensor* accelerometerSensor; const ASensor* accelerometerSensor;
uint64_t sensor_state_mask; uint64_t sensor_state_mask;
char current_ime[PATH_MAX_LENGTH]; char current_ime[PATH_MAX_LENGTH];

View File

@ -79,8 +79,6 @@ typedef struct android_input
sensor_t accelerometer_state; sensor_t accelerometer_state;
struct input_pointer pointer[MAX_TOUCH]; struct input_pointer pointer[MAX_TOUCH];
unsigned pointer_count; unsigned pointer_count;
ASensorManager *sensorManager;
ASensorEventQueue *sensorEventQueue;
const input_device_driver_t *joypad; const input_device_driver_t *joypad;
} android_input_t; } android_input_t;
@ -772,7 +770,7 @@ static void android_input_poll_user(void *data)
&& android_app->accelerometerSensor) && android_app->accelerometerSensor)
{ {
ASensorEvent event; ASensorEvent event;
while (ASensorEventQueue_getEvents(android->sensorEventQueue, &event, 1) > 0) while (ASensorEventQueue_getEvents(android_app->sensorEventQueue, &event, 1) > 0)
{ {
android->accelerometer_state.x = event.acceleration.x; android->accelerometer_state.x = event.acceleration.x;
android->accelerometer_state.y = event.acceleration.y; android->accelerometer_state.y = event.acceleration.y;
@ -905,12 +903,13 @@ static bool android_input_meta_key_pressed(void *data, int key)
static void android_input_free_input(void *data) static void android_input_free_input(void *data)
{ {
android_input_t *android = (android_input_t*)data; android_input_t *android = (android_input_t*)data;
struct android_app *android_app = (struct android_app*)g_android;
if (!android) if (!android)
return; return;
if (android->sensorManager) if (android_app->sensorManager)
ASensorManager_destroyEventQueue(android->sensorManager, ASensorManager_destroyEventQueue(android_app->sensorManager,
android->sensorEventQueue); android_app->sensorEventQueue);
if (android->joypad) if (android->joypad)
android->joypad->destroy(); android->joypad->destroy();
@ -930,24 +929,20 @@ static uint64_t android_input_get_capabilities(void *data)
(1 << RETRO_DEVICE_ANALOG); (1 << RETRO_DEVICE_ANALOG);
} }
static void android_input_enable_sensor_manager(void *data) static void android_input_enable_sensor_manager(struct android_app *android_app)
{ {
android_input_t *android = (android_input_t*)data; android_app->sensorManager = ASensorManager_getInstance();
struct android_app *android_app = (struct android_app*)g_android;
android->sensorManager = ASensorManager_getInstance();
android_app->accelerometerSensor = android_app->accelerometerSensor =
ASensorManager_getDefaultSensor(android->sensorManager, ASensorManager_getDefaultSensor(android_app->sensorManager,
ASENSOR_TYPE_ACCELEROMETER); ASENSOR_TYPE_ACCELEROMETER);
android->sensorEventQueue = android_app->sensorEventQueue =
ASensorManager_createEventQueue(android->sensorManager, ASensorManager_createEventQueue(android_app->sensorManager,
android_app->looper, LOOPER_ID_USER, NULL, NULL); android_app->looper, LOOPER_ID_USER, NULL, NULL);
} }
static bool android_input_set_sensor_state(void *data, unsigned port, static bool android_input_set_sensor_state(void *data, unsigned port,
enum retro_sensor_action action, unsigned event_rate) enum retro_sensor_action action, unsigned event_rate)
{ {
android_input_t *android = (android_input_t*)data;
struct android_app *android_app = (struct android_app*)g_android; struct android_app *android_app = (struct android_app*)g_android;
if (event_rate == 0) if (event_rate == 0)
@ -957,15 +952,15 @@ static bool android_input_set_sensor_state(void *data, unsigned port,
{ {
case RETRO_SENSOR_ACCELEROMETER_ENABLE: case RETRO_SENSOR_ACCELEROMETER_ENABLE:
if (!android_app->accelerometerSensor) if (!android_app->accelerometerSensor)
android_input_enable_sensor_manager(android); android_input_enable_sensor_manager(android_app);
if (android_app->accelerometerSensor) if (android_app->accelerometerSensor)
ASensorEventQueue_enableSensor(android->sensorEventQueue, ASensorEventQueue_enableSensor(android_app->sensorEventQueue,
android_app->accelerometerSensor); android_app->accelerometerSensor);
/* Events per second (in microseconds). */ /* Events per second (in microseconds). */
if (android_app->accelerometerSensor) if (android_app->accelerometerSensor)
ASensorEventQueue_setEventRate(android->sensorEventQueue, ASensorEventQueue_setEventRate(android_app->sensorEventQueue,
android_app->accelerometerSensor, (1000L / event_rate) android_app->accelerometerSensor, (1000L / event_rate)
* 1000); * 1000);
@ -975,7 +970,7 @@ static bool android_input_set_sensor_state(void *data, unsigned port,
case RETRO_SENSOR_ACCELEROMETER_DISABLE: case RETRO_SENSOR_ACCELEROMETER_DISABLE:
if (android_app->accelerometerSensor) if (android_app->accelerometerSensor)
ASensorEventQueue_disableSensor(android->sensorEventQueue, ASensorEventQueue_disableSensor(android_app->sensorEventQueue,
android_app->accelerometerSensor); android_app->accelerometerSensor);
BIT64_CLEAR(android_app->sensor_state_mask, RETRO_SENSOR_ACCELEROMETER_ENABLE); BIT64_CLEAR(android_app->sensor_state_mask, RETRO_SENSOR_ACCELEROMETER_ENABLE);