sdl

FORK: Simple Directmedia Layer
git clone https://git.neptards.moe/neptards/sdl.git
Log | Files | Refs

testsensor.c (3423B)


      1 /*
      2   Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
      3 
      4   This software is provided 'as-is', without any express or implied
      5   warranty.  In no event will the authors be held liable for any damages
      6   arising from the use of this software.
      7 
      8   Permission is granted to anyone to use this software for any purpose,
      9   including commercial applications, and to alter it and redistribute it
     10   freely.
     11 */
     12 
     13 /* Simple test of the SDL sensor code */
     14 
     15 #include "SDL.h"
     16 
     17 static const char *GetSensorTypeString(SDL_SensorType type)
     18 {
     19     static char unknown_type[64];
     20 
     21     switch (type)
     22     {
     23     case SDL_SENSOR_INVALID:
     24         return "SDL_SENSOR_INVALID";
     25     case SDL_SENSOR_UNKNOWN:
     26         return "SDL_SENSOR_UNKNOWN";
     27     case SDL_SENSOR_ACCEL:
     28         return "SDL_SENSOR_ACCEL";
     29     case SDL_SENSOR_GYRO:
     30         return "SDL_SENSOR_GYRO";
     31     default:
     32         SDL_snprintf(unknown_type, sizeof(unknown_type), "UNKNOWN (%d)", type);
     33         return unknown_type;
     34     }
     35 }
     36 
     37 static void HandleSensorEvent(SDL_SensorEvent *event)
     38 {
     39     SDL_Sensor *sensor = SDL_SensorFromInstanceID(event->which);
     40     if (!sensor) {
     41         SDL_Log("Couldn't get sensor for sensor event\n");
     42         return;
     43     }
     44 
     45     switch (SDL_SensorGetType(sensor)) {
     46     case SDL_SENSOR_ACCEL:
     47         SDL_Log("Accelerometer update: %.2f, %.2f, %.2f\n", event->data[0], event->data[1], event->data[2]);
     48         break;
     49     case SDL_SENSOR_GYRO:
     50         SDL_Log("Gyro update: %.2f, %.2f, %.2f\n", event->data[0], event->data[1], event->data[2]);
     51         break;
     52     default:
     53         SDL_Log("Sensor update for sensor type %s\n", GetSensorTypeString(SDL_SensorGetType(sensor)));
     54         break;
     55     }
     56 }
     57 
     58 int
     59 main(int argc, char **argv)
     60 {
     61     int i;
     62     int num_sensors, num_opened;
     63 
     64     /* Load the SDL library */
     65     if (SDL_Init(SDL_INIT_SENSOR) < 0) {
     66         SDL_Log("Couldn't initialize SDL: %s\n", SDL_GetError());
     67         return (1);
     68     }
     69 
     70     num_sensors = SDL_NumSensors();
     71     num_opened = 0;
     72 
     73     SDL_Log("There are %d sensors available\n", num_sensors);
     74     for (i = 0; i < num_sensors; ++i) {
     75         SDL_Log("Sensor %d: %s, type %s, platform type %d\n",
     76             SDL_SensorGetDeviceInstanceID(i),
     77             SDL_SensorGetDeviceName(i),
     78             GetSensorTypeString(SDL_SensorGetDeviceType(i)),
     79             SDL_SensorGetDeviceNonPortableType(i));
     80 
     81         if (SDL_SensorGetDeviceType(i) != SDL_SENSOR_UNKNOWN) {
     82             SDL_Sensor *sensor = SDL_SensorOpen(i);
     83             if (sensor == NULL) {
     84                 SDL_Log("Couldn't open sensor %d: %s\n", SDL_SensorGetDeviceInstanceID(i), SDL_GetError());
     85             } else {
     86                 ++num_opened;
     87             }
     88         }
     89     }
     90     SDL_Log("Opened %d sensors\n", num_opened);
     91 
     92     if (num_opened > 0) {
     93         SDL_bool done = SDL_FALSE;
     94         SDL_Event event;
     95 
     96         SDL_CreateWindow("Sensor Test", 0, 0, 0, 0, SDL_WINDOW_FULLSCREEN_DESKTOP);
     97         while (!done) {
     98             while (SDL_PollEvent(&event) > 0) {
     99                 switch (event.type) {
    100                 case SDL_SENSORUPDATE:
    101                     HandleSensorEvent(&event.sensor);
    102                     break;
    103                 case SDL_MOUSEBUTTONUP:
    104                 case SDL_KEYUP:
    105                 case SDL_QUIT:
    106                     done = SDL_TRUE;
    107                     break;
    108                 default:
    109                     break;
    110                 }
    111             }
    112         }
    113     }
    114 
    115     SDL_Quit();
    116     return (0);
    117 }