22#include "SDL_config.h"
24#ifdef SDL_SENSOR_ANDROID
27#include <android/sensor.h>
32#include "../SDL_syssensor.h"
33#include "../SDL_sensor_c.h"
37#define LOOPER_ID_USER 3
46static ASensorManager* SDL_sensor_manager;
47static ALooper* SDL_sensor_looper;
49static int SDL_sensors_count;
52SDL_ANDROID_SensorInit(
void)
57 SDL_sensor_manager = ASensorManager_getInstance();
58 if (!SDL_sensor_manager) {
62 SDL_sensor_looper = ALooper_forThread();
63 if (!SDL_sensor_looper) {
64 SDL_sensor_looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);
65 if (!SDL_sensor_looper) {
66 return SDL_SetError(
"Couldn't create sensor event loop");
71 sensors_count = ASensorManager_getSensorList(SDL_sensor_manager, &sensors);
72 if (sensors_count > 0) {
78 for (
i = 0;
i < sensors_count; ++
i) {
82 SDL_sensors_count = sensors_count;
88SDL_ANDROID_SensorGetCount(
void)
90 return SDL_sensors_count;
94SDL_ANDROID_SensorDetect(
void)
99SDL_ANDROID_SensorGetDeviceName(
int device_index)
101 return ASensor_getName(
SDL_sensors[device_index].asensor);
105SDL_ANDROID_SensorGetDeviceType(
int device_index)
107 switch (ASensor_getType(
SDL_sensors[device_index].asensor)) {
118SDL_ANDROID_SensorGetDeviceNonPortableType(
int device_index)
120 return ASensor_getType(
SDL_sensors[device_index].asensor);
124SDL_ANDROID_SensorGetDeviceInstanceID(
int device_index)
130SDL_ANDROID_SensorOpen(SDL_Sensor *sensor,
int device_index)
135 if (hwdata ==
NULL) {
140 hwdata->
eventqueue = ASensorManager_createEventQueue(SDL_sensor_manager, SDL_sensor_looper, LOOPER_ID_USER,
NULL,
NULL);
143 return SDL_SetError(
"Couldn't create sensor event queue");
147 ASensorManager_destroyEventQueue(SDL_sensor_manager, hwdata->
eventqueue);
154 sensor->hwdata = hwdata;
159SDL_ANDROID_SensorUpdate(SDL_Sensor *sensor)
163 struct android_poll_source*
source;
167 while (ASensorEventQueue_getEvents(sensor->hwdata->eventqueue, &
event, 1) > 0) {
174SDL_ANDROID_SensorClose(SDL_Sensor *sensor)
176 if (sensor->hwdata) {
177 ASensorEventQueue_disableSensor(sensor->hwdata->eventqueue, sensor->hwdata->asensor);
178 ASensorManager_destroyEventQueue(SDL_sensor_manager, sensor->hwdata->eventqueue);
180 sensor->hwdata =
NULL;
185SDL_ANDROID_SensorQuit(
void)
190 SDL_sensors_count = 0;
196 SDL_ANDROID_SensorInit,
197 SDL_ANDROID_SensorGetCount,
198 SDL_ANDROID_SensorDetect,
199 SDL_ANDROID_SensorGetDeviceName,
200 SDL_ANDROID_SensorGetDeviceType,
201 SDL_ANDROID_SensorGetDeviceNonPortableType,
202 SDL_ANDROID_SensorGetDeviceInstanceID,
203 SDL_ANDROID_SensorOpen,
204 SDL_ANDROID_SensorUpdate,
205 SDL_ANDROID_SensorClose,
206 SDL_ANDROID_SensorQuit,
#define SDL_OutOfMemory()
GLsizei GLsizei GLchar * source
static SDL_Sensor * SDL_sensors
SDL_SensorID SDL_GetNextSensorInstanceID()
int SDL_PrivateSensorUpdate(SDL_Sensor *sensor, float *data, int num_values)
#define SDL_arraysize(array)
SDL_SensorDriver SDL_ANDROID_SensorDriver
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
ASensorEventQueue * eventqueue
static SDL_Event events[EVENT_BUF_SIZE]