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"
36 #ifndef LOOPER_ID_USER
37 #define LOOPER_ID_USER 3
46 static ASensorManager* SDL_sensor_manager;
47 static ALooper* SDL_sensor_looper;
49 static int SDL_sensors_count;
52 SDL_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;
88 SDL_ANDROID_SensorGetCount(
void)
90 return SDL_sensors_count;
94 SDL_ANDROID_SensorDetect(
void)
99 SDL_ANDROID_SensorGetDeviceName(
int device_index)
101 return ASensor_getName(
SDL_sensors[device_index].asensor);
105 SDL_ANDROID_SensorGetDeviceType(
int device_index)
107 switch (ASensor_getType(
SDL_sensors[device_index].asensor)) {
118 SDL_ANDROID_SensorGetDeviceNonPortableType(
int device_index)
120 return ASensor_getType(
SDL_sensors[device_index].asensor);
124 SDL_ANDROID_SensorGetDeviceInstanceID(
int device_index)
130 SDL_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;
159 SDL_ANDROID_SensorUpdate(SDL_Sensor *sensor)
163 struct android_poll_source*
source;
167 while (ASensorEventQueue_getEvents(sensor->hwdata->eventqueue, &
event, 1) > 0) {
174 SDL_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;
185 SDL_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,