You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.3 KiB
117 lines
3.3 KiB
/* |
|
Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org> |
|
|
|
This software is provided 'as-is', without any express or implied |
|
warranty. In no event will the authors be held liable for any damages |
|
arising from the use of this software. |
|
|
|
Permission is granted to anyone to use this software for any purpose, |
|
including commercial applications, and to alter it and redistribute it |
|
freely. |
|
*/ |
|
|
|
/* Simple test of the SDL sensor code */ |
|
|
|
#include "SDL.h" |
|
|
|
static const char *GetSensorTypeString(SDL_SensorType type) |
|
{ |
|
static char unknown_type[64]; |
|
|
|
switch (type) |
|
{ |
|
case SDL_SENSOR_INVALID: |
|
return "SDL_SENSOR_INVALID"; |
|
case SDL_SENSOR_UNKNOWN: |
|
return "SDL_SENSOR_UNKNOWN"; |
|
case SDL_SENSOR_ACCEL: |
|
return "SDL_SENSOR_ACCEL"; |
|
case SDL_SENSOR_GYRO: |
|
return "SDL_SENSOR_GYRO"; |
|
default: |
|
SDL_snprintf(unknown_type, sizeof(unknown_type), "UNKNOWN (%d)", type); |
|
return unknown_type; |
|
} |
|
} |
|
|
|
static void HandleSensorEvent(SDL_SensorEvent *event) |
|
{ |
|
SDL_Sensor *sensor = SDL_SensorFromInstanceID(event->which); |
|
if (!sensor) { |
|
SDL_Log("Couldn't get sensor for sensor event\n"); |
|
return; |
|
} |
|
|
|
switch (SDL_SensorGetType(sensor)) { |
|
case SDL_SENSOR_ACCEL: |
|
SDL_Log("Accelerometer update: %.2f, %.2f, %.2f\n", event->data[0], event->data[1], event->data[2]); |
|
break; |
|
case SDL_SENSOR_GYRO: |
|
SDL_Log("Gyro update: %.2f, %.2f, %.2f\n", event->data[0], event->data[1], event->data[2]); |
|
break; |
|
default: |
|
SDL_Log("Sensor update for sensor type %s\n", GetSensorTypeString(SDL_SensorGetType(sensor))); |
|
break; |
|
} |
|
} |
|
|
|
int |
|
main(int argc, char **argv) |
|
{ |
|
int i; |
|
int num_sensors, num_opened; |
|
|
|
/* Load the SDL library */ |
|
if (SDL_Init(SDL_INIT_SENSOR) < 0) { |
|
SDL_Log("Couldn't initialize SDL: %s\n", SDL_GetError()); |
|
return (1); |
|
} |
|
|
|
num_sensors = SDL_NumSensors(); |
|
num_opened = 0; |
|
|
|
SDL_Log("There are %d sensors available\n", num_sensors); |
|
for (i = 0; i < num_sensors; ++i) { |
|
SDL_Log("Sensor %d: %s, type %s, platform type %d\n", |
|
SDL_SensorGetDeviceInstanceID(i), |
|
SDL_SensorGetDeviceName(i), |
|
GetSensorTypeString(SDL_SensorGetDeviceType(i)), |
|
SDL_SensorGetDeviceNonPortableType(i)); |
|
|
|
if (SDL_SensorGetDeviceType(i) != SDL_SENSOR_UNKNOWN) { |
|
SDL_Sensor *sensor = SDL_SensorOpen(i); |
|
if (sensor == NULL) { |
|
SDL_Log("Couldn't open sensor %d: %s\n", SDL_SensorGetDeviceInstanceID(i), SDL_GetError()); |
|
} else { |
|
++num_opened; |
|
} |
|
} |
|
} |
|
SDL_Log("Opened %d sensors\n", num_opened); |
|
|
|
if (num_opened > 0) { |
|
SDL_bool done = SDL_FALSE; |
|
SDL_Event event; |
|
|
|
SDL_CreateWindow("Sensor Test", 0, 0, 0, 0, SDL_WINDOW_FULLSCREEN_DESKTOP); |
|
while (!done) { |
|
while (SDL_PollEvent(&event) > 0) { |
|
switch (event.type) { |
|
case SDL_SENSORUPDATE: |
|
HandleSensorEvent(&event.sensor); |
|
break; |
|
case SDL_MOUSEBUTTONUP: |
|
case SDL_KEYUP: |
|
case SDL_QUIT: |
|
done = SDL_TRUE; |
|
break; |
|
default: |
|
break; |
|
} |
|
} |
|
} |
|
} |
|
|
|
SDL_Quit(); |
|
return (0); |
|
}
|
|
|