21 #include "../SDL_internal.h"
31 #if !SDL_EVENTS_DISABLED
32 #include "../events/SDL_events_c.h"
36 #ifdef SDL_SENSOR_ANDROID
39 #ifdef SDL_SENSOR_COREMOTION
42 #if defined(SDL_SENSOR_DUMMY) || defined(SDL_SENSOR_DISABLED)
54 if (SDL_sensor_lock) {
62 if (SDL_sensor_lock) {
74 if (!SDL_sensor_lock) {
78 #if !SDL_EVENTS_DISABLED
86 if (SDL_sensor_drivers[i]->Init() >= 0) {
99 int i, total_sensors = 0;
102 total_sensors += SDL_sensor_drivers[
i]->
GetCount();
105 return total_sensors;
124 int i, num_sensors, total_sensors = 0;
126 if (device_index >= 0) {
128 num_sensors = SDL_sensor_drivers[
i]->
GetCount();
129 if (device_index < num_sensors) {
130 *driver = SDL_sensor_drivers[
i];
131 *driver_index = device_index;
134 device_index -= num_sensors;
135 total_sensors += num_sensors;
139 SDL_SetError(
"There are %d sensors available", total_sensors);
220 SDL_Sensor *sensorlist;
221 const char *sensorname =
NULL;
236 if (instance_id == sensorlist->instance_id) {
242 sensorlist = sensorlist->next;
246 sensor = (SDL_Sensor *)
SDL_calloc(
sizeof(*sensor), 1);
247 if (sensor ==
NULL) {
252 sensor->driver = driver;
253 sensor->instance_id = instance_id;
257 if (driver->
Open(sensor, device_index) < 0) {
292 for (sensor =
SDL_sensors; sensor; sensor = sensor->next) {
293 if (sensor->instance_id == instance_id) {
309 if (sensor ==
NULL) {
355 return sensor->non_portable_type;
368 return sensor->instance_id;
382 SDL_memcpy(data, sensor->data, num_values*
sizeof(*data));
392 SDL_Sensor *sensorlist;
393 SDL_Sensor *sensorlistprev;
402 if (--sensor->ref_count > 0) {
412 sensor->driver->Close(sensor);
413 sensor->hwdata =
NULL;
416 sensorlistprev =
NULL;
418 if (sensor == sensorlist) {
419 if (sensorlistprev) {
421 sensorlistprev->next = sensorlist->next;
427 sensorlistprev = sensorlist;
428 sensorlist = sensorlist->next;
457 SDL_sensor_drivers[
i]->
Quit();
462 #if !SDL_EVENTS_DISABLED
466 if (SDL_sensor_lock) {
468 SDL_sensor_lock =
NULL;
484 SDL_memcpy(sensor->data, data, num_values*
sizeof(*data));
488 #if !SDL_EVENTS_DISABLED
492 event.sensor.which = sensor->instance_id;
521 for (sensor =
SDL_sensors; sensor; sensor = sensor->next) {
522 sensor->driver->Update(sensor);
530 for (sensor =
SDL_sensors; sensor; sensor = sensor->next) {
531 if (sensor->ref_count <= 0) {
540 SDL_sensor_drivers[
i]->
Detect();