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;
165 if (ALooper_pollAll(0,
NULL, &events, (
void**)&source) == LOOPER_ID_USER) {
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,
static SDL_Event events[EVENT_BUF_SIZE]
SDL_SensorDriver SDL_ANDROID_SensorDriver
int SDL_PrivateSensorUpdate(SDL_Sensor *sensor, float *data, int num_values)
SDL_SensorID SDL_GetNextSensorInstanceID()
GLsizei GLsizei GLchar * source
static SDL_Sensor * SDL_sensors
ASensorEventQueue * eventqueue
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)
#define SDL_OutOfMemory()
#define SDL_arraysize(array)