21 #include "../../SDL_internal.h"
23 #include "SDL_config.h"
25 #ifdef SDL_SENSOR_ANDROID
28 #include <android/sensor.h>
33 #include "../SDL_syssensor.h"
34 #include "../SDL_sensor_c.h"
37 #ifndef LOOPER_ID_USER
38 #define LOOPER_ID_USER 3
47 static ASensorManager* SDL_sensor_manager;
48 static ALooper* SDL_sensor_looper;
50 static int SDL_sensors_count;
53 SDL_ANDROID_SensorInit(
void)
58 SDL_sensor_manager = ASensorManager_getInstance();
59 if (!SDL_sensor_manager) {
63 SDL_sensor_looper = ALooper_forThread();
64 if (!SDL_sensor_looper) {
65 SDL_sensor_looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);
66 if (!SDL_sensor_looper) {
67 return SDL_SetError(
"Couldn't create sensor event loop");
72 sensors_count = ASensorManager_getSensorList(SDL_sensor_manager, &sensors);
73 if (sensors_count > 0) {
79 for (
i = 0;
i < sensors_count; ++
i) {
83 SDL_sensors_count = sensors_count;
89 SDL_ANDROID_SensorGetCount(
void)
91 return SDL_sensors_count;
95 SDL_ANDROID_SensorDetect(
void)
100 SDL_ANDROID_SensorGetDeviceName(
int device_index)
102 return ASensor_getName(
SDL_sensors[device_index].asensor);
106 SDL_ANDROID_SensorGetDeviceType(
int device_index)
108 switch (ASensor_getType(
SDL_sensors[device_index].asensor)) {
119 SDL_ANDROID_SensorGetDeviceNonPortableType(
int device_index)
121 return ASensor_getType(
SDL_sensors[device_index].asensor);
125 SDL_ANDROID_SensorGetDeviceInstanceID(
int device_index)
131 SDL_ANDROID_SensorOpen(SDL_Sensor *sensor,
int device_index)
134 int delay_us, min_delay_us;
137 if (hwdata ==
NULL) {
142 hwdata->
eventqueue = ASensorManager_createEventQueue(SDL_sensor_manager, SDL_sensor_looper, LOOPER_ID_USER,
NULL,
NULL);
145 return SDL_SetError(
"Couldn't create sensor event queue");
149 ASensorManager_destroyEventQueue(SDL_sensor_manager, hwdata->
eventqueue);
156 delay_us = 1000000 / 60;
157 min_delay_us = ASensor_getMinDelay(hwdata->
asensor);
158 if (delay_us < min_delay_us) {
159 delay_us = min_delay_us;
163 sensor->hwdata = hwdata;
168 SDL_ANDROID_SensorUpdate(SDL_Sensor *sensor)
172 struct android_poll_source*
source;
176 while (ASensorEventQueue_getEvents(sensor->hwdata->eventqueue, &
event, 1) > 0) {
183 SDL_ANDROID_SensorClose(SDL_Sensor *sensor)
185 if (sensor->hwdata) {
186 ASensorEventQueue_disableSensor(sensor->hwdata->eventqueue, sensor->hwdata->asensor);
187 ASensorManager_destroyEventQueue(SDL_sensor_manager, sensor->hwdata->eventqueue);
189 sensor->hwdata =
NULL;
194 SDL_ANDROID_SensorQuit(
void)
199 SDL_sensors_count = 0;
205 SDL_ANDROID_SensorInit,
206 SDL_ANDROID_SensorGetCount,
207 SDL_ANDROID_SensorDetect,
208 SDL_ANDROID_SensorGetDeviceName,
209 SDL_ANDROID_SensorGetDeviceType,
210 SDL_ANDROID_SensorGetDeviceNonPortableType,
211 SDL_ANDROID_SensorGetDeviceInstanceID,
212 SDL_ANDROID_SensorOpen,
213 SDL_ANDROID_SensorUpdate,
214 SDL_ANDROID_SensorClose,
215 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]