Updates the SDL library to the latest standard bugfix release

This commit is contained in:
JeffR 2023-07-13 15:20:29 -05:00
parent cb766f2878
commit 083d2175ea
1280 changed files with 343926 additions and 179615 deletions

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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
@ -41,42 +41,37 @@ static SDL_SensorDriver *SDL_sensor_drivers[] = {
#ifdef SDL_SENSOR_WINDOWS
&SDL_WINDOWS_SensorDriver,
#endif
#ifdef SDL_SENSOR_VITA
&SDL_VITA_SensorDriver,
#endif
#ifdef SDL_SENSOR_N3DS
&SDL_N3DS_SensorDriver,
#endif
#if defined(SDL_SENSOR_DUMMY) || defined(SDL_SENSOR_DISABLED)
&SDL_DUMMY_SensorDriver
#endif
#if defined(SDL_SENSOR_VITA)
&SDL_VITA_SensorDriver
#endif
};
static SDL_Sensor *SDL_sensors = NULL;
static SDL_bool SDL_updating_sensor = SDL_FALSE;
static SDL_mutex *SDL_sensor_lock = NULL; /* This needs to support recursive locks */
static SDL_atomic_t SDL_next_sensor_instance_id;
static SDL_Sensor *SDL_sensors SDL_GUARDED_BY(SDL_sensor_lock) = NULL;
static SDL_atomic_t SDL_next_sensor_instance_id SDL_GUARDED_BY(SDL_sensor_lock);
static SDL_bool SDL_updating_sensor SDL_GUARDED_BY(SDL_sensor_lock) = SDL_FALSE;
void
SDL_LockSensors(void)
void SDL_LockSensors(void) SDL_ACQUIRE(SDL_sensor_lock)
{
if (SDL_sensor_lock) {
SDL_LockMutex(SDL_sensor_lock);
}
SDL_LockMutex(SDL_sensor_lock);
}
void
SDL_UnlockSensors(void)
void SDL_UnlockSensors(void) SDL_RELEASE(SDL_sensor_lock)
{
if (SDL_sensor_lock) {
SDL_UnlockMutex(SDL_sensor_lock);
}
SDL_UnlockMutex(SDL_sensor_lock);
}
int
SDL_SensorInit(void)
int SDL_SensorInit(void)
{
int i, status;
/* Create the sensor list lock */
if (!SDL_sensor_lock) {
if (SDL_sensor_lock == NULL) {
SDL_sensor_lock = SDL_CreateMutex();
}
@ -98,8 +93,7 @@ SDL_SensorInit(void)
/*
* Count the number of sensors attached to the system
*/
int
SDL_NumSensors(void)
int SDL_NumSensors(void)
{
int i, total_sensors = 0;
SDL_LockSensors();
@ -123,8 +117,7 @@ SDL_SensorID SDL_GetNextSensorInstanceID()
* Get the driver and device index for an API device index
* This should be called while the sensor lock is held, to prevent another thread from updating the list
*/
static SDL_bool
SDL_GetDriverAndSensorIndex(int device_index, SDL_SensorDriver **driver, int *driver_index)
static SDL_bool SDL_GetDriverAndSensorIndex(int device_index, SDL_SensorDriver **driver, int *driver_index)
{
int i, num_sensors, total_sensors = 0;
@ -148,8 +141,7 @@ SDL_GetDriverAndSensorIndex(int device_index, SDL_SensorDriver **driver, int *dr
/*
* Get the implementation dependent name of a sensor
*/
const char *
SDL_SensorGetDeviceName(int device_index)
const char *SDL_SensorGetDeviceName(int device_index)
{
SDL_SensorDriver *driver;
const char *name = NULL;
@ -164,8 +156,7 @@ SDL_SensorGetDeviceName(int device_index)
return name;
}
SDL_SensorType
SDL_SensorGetDeviceType(int device_index)
SDL_SensorType SDL_SensorGetDeviceType(int device_index)
{
SDL_SensorDriver *driver;
SDL_SensorType type = SDL_SENSOR_INVALID;
@ -179,8 +170,7 @@ SDL_SensorGetDeviceType(int device_index)
return type;
}
int
SDL_SensorGetDeviceNonPortableType(int device_index)
int SDL_SensorGetDeviceNonPortableType(int device_index)
{
SDL_SensorDriver *driver;
int type = -1;
@ -194,8 +184,7 @@ SDL_SensorGetDeviceNonPortableType(int device_index)
return type;
}
SDL_SensorID
SDL_SensorGetDeviceInstanceID(int device_index)
SDL_SensorID SDL_SensorGetDeviceInstanceID(int device_index)
{
SDL_SensorDriver *driver;
SDL_SensorID instance_id = -1;
@ -216,8 +205,7 @@ SDL_SensorGetDeviceInstanceID(int device_index)
*
* This function returns a sensor identifier, or NULL if an error occurred.
*/
SDL_Sensor *
SDL_SensorOpen(int device_index)
SDL_Sensor *SDL_SensorOpen(int device_index)
{
SDL_SensorDriver *driver;
SDL_SensorID instance_id;
@ -239,16 +227,16 @@ SDL_SensorOpen(int device_index)
instance_id = driver->GetDeviceInstanceID(device_index);
while (sensorlist) {
if (instance_id == sensorlist->instance_id) {
sensor = sensorlist;
++sensor->ref_count;
SDL_UnlockSensors();
return sensor;
sensor = sensorlist;
++sensor->ref_count;
SDL_UnlockSensors();
return sensor;
}
sensorlist = sensorlist->next;
}
/* Create and initialize the sensor */
sensor = (SDL_Sensor *) SDL_calloc(sizeof(*sensor), 1);
sensor = (SDL_Sensor *)SDL_calloc(sizeof(*sensor), 1);
if (sensor == NULL) {
SDL_OutOfMemory();
SDL_UnlockSensors();
@ -288,8 +276,7 @@ SDL_SensorOpen(int device_index)
/*
* Find the SDL_Sensor that owns this instance id
*/
SDL_Sensor *
SDL_SensorFromInstanceID(SDL_SensorID instance_id)
SDL_Sensor *SDL_SensorFromInstanceID(SDL_SensorID instance_id)
{
SDL_Sensor *sensor;
@ -306,8 +293,7 @@ SDL_SensorFromInstanceID(SDL_SensorID instance_id)
/*
* Checks to make sure the sensor is valid.
*/
static int
SDL_PrivateSensorValid(SDL_Sensor * sensor)
static int SDL_PrivateSensorValid(SDL_Sensor *sensor)
{
int valid;
@ -324,8 +310,7 @@ SDL_PrivateSensorValid(SDL_Sensor * sensor)
/*
* Get the friendly name of this sensor
*/
const char *
SDL_SensorGetName(SDL_Sensor * sensor)
const char *SDL_SensorGetName(SDL_Sensor *sensor)
{
if (!SDL_PrivateSensorValid(sensor)) {
return NULL;
@ -337,8 +322,7 @@ SDL_SensorGetName(SDL_Sensor * sensor)
/*
* Get the type of this sensor
*/
SDL_SensorType
SDL_SensorGetType(SDL_Sensor * sensor)
SDL_SensorType SDL_SensorGetType(SDL_Sensor *sensor)
{
if (!SDL_PrivateSensorValid(sensor)) {
return SDL_SENSOR_INVALID;
@ -350,8 +334,7 @@ SDL_SensorGetType(SDL_Sensor * sensor)
/*
* Get the platform dependent type of this sensor
*/
int
SDL_SensorGetNonPortableType(SDL_Sensor * sensor)
int SDL_SensorGetNonPortableType(SDL_Sensor *sensor)
{
if (!SDL_PrivateSensorValid(sensor)) {
return -1;
@ -363,8 +346,7 @@ SDL_SensorGetNonPortableType(SDL_Sensor * sensor)
/*
* Get the instance id for this opened sensor
*/
SDL_SensorID
SDL_SensorGetInstanceID(SDL_Sensor * sensor)
SDL_SensorID SDL_SensorGetInstanceID(SDL_Sensor *sensor)
{
if (!SDL_PrivateSensorValid(sensor)) {
return -1;
@ -376,23 +358,32 @@ SDL_SensorGetInstanceID(SDL_Sensor * sensor)
/*
* Get the current state of this sensor
*/
int
SDL_SensorGetData(SDL_Sensor * sensor, float *data, int num_values)
int SDL_SensorGetData(SDL_Sensor *sensor, float *data, int num_values)
{
return SDL_SensorGetDataWithTimestamp(sensor, NULL, data, num_values);
}
/*
* Get the current state of this sensor
*/
int SDL_SensorGetDataWithTimestamp(SDL_Sensor *sensor, Uint64 *timestamp, float *data, int num_values)
{
if (!SDL_PrivateSensorValid(sensor)) {
return -1;
}
num_values = SDL_min(num_values, SDL_arraysize(sensor->data));
SDL_memcpy(data, sensor->data, num_values*sizeof(*data));
SDL_memcpy(data, sensor->data, num_values * sizeof(*data));
if (timestamp) {
*timestamp = sensor->timestamp_us;
}
return 0;
}
/*
* Close a sensor previously opened with SDL_SensorOpen()
*/
void
SDL_SensorClose(SDL_Sensor * sensor)
void SDL_SensorClose(SDL_Sensor *sensor)
{
SDL_Sensor *sensorlist;
SDL_Sensor *sensorlistprev;
@ -441,16 +432,15 @@ SDL_SensorClose(SDL_Sensor * sensor)
SDL_UnlockSensors();
}
void
SDL_SensorQuit(void)
void SDL_SensorQuit(void)
{
int i;
SDL_LockSensors();
/* Make sure we're not getting called in the middle of updating sensors */
SDL_assert(!SDL_updating_sensor);
SDL_LockSensors();
/* Stop the event polling */
while (SDL_sensors) {
SDL_sensors->ref_count = 1;
@ -459,7 +449,7 @@ SDL_SensorQuit(void)
/* Quit the sensor setup */
for (i = 0; i < SDL_arraysize(SDL_sensor_drivers); ++i) {
SDL_sensor_drivers[i]->Quit();
SDL_sensor_drivers[i]->Quit();
}
SDL_UnlockSensors();
@ -474,11 +464,9 @@ SDL_SensorQuit(void)
}
}
/* These are global for SDL_syssensor.c and SDL_events.c */
int
SDL_PrivateSensorUpdate(SDL_Sensor *sensor, float *data, int num_values)
int SDL_PrivateSensorUpdate(SDL_Sensor *sensor, Uint64 timestamp_us, float *data, int num_values)
{
int posted;
@ -486,7 +474,8 @@ SDL_PrivateSensorUpdate(SDL_Sensor *sensor, float *data, int num_values)
/* Update internal sensor state */
num_values = SDL_min(num_values, SDL_arraysize(sensor->data));
SDL_memcpy(sensor->data, data, num_values*sizeof(*data));
SDL_memcpy(sensor->data, data, num_values * sizeof(*data));
sensor->timestamp_us = timestamp_us;
/* Post the event, if desired */
posted = 0;
@ -497,15 +486,15 @@ SDL_PrivateSensorUpdate(SDL_Sensor *sensor, float *data, int num_values)
event.sensor.which = sensor->instance_id;
num_values = SDL_min(num_values, SDL_arraysize(event.sensor.data));
SDL_memset(event.sensor.data, 0, sizeof(event.sensor.data));
SDL_memcpy(event.sensor.data, data, num_values*sizeof(*data));
SDL_memcpy(event.sensor.data, data, num_values * sizeof(*data));
event.sensor.timestamp_us = timestamp_us;
posted = SDL_PushEvent(&event) == 1;
}
#endif /* !SDL_EVENTS_DISABLED */
return posted;
}
void
SDL_SensorUpdate(void)
void SDL_SensorUpdate(void)
{
int i;
SDL_Sensor *sensor, *next;
@ -524,15 +513,10 @@ SDL_SensorUpdate(void)
SDL_updating_sensor = SDL_TRUE;
/* Make sure the list is unlocked while dispatching events to prevent application deadlocks */
SDL_UnlockSensors();
for (sensor = SDL_sensors; sensor; sensor = sensor->next) {
sensor->driver->Update(sensor);
}
SDL_LockSensors();
SDL_updating_sensor = SDL_FALSE;
/* If any sensors were closed while updating, free them here */

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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
@ -37,7 +37,7 @@ extern int SDL_SensorInit(void);
extern void SDL_SensorQuit(void);
/* Internal event queueing functions */
extern int SDL_PrivateSensorUpdate(SDL_Sensor *sensor, float *data, int num_values);
extern int SDL_PrivateSensorUpdate(SDL_Sensor *sensor, Uint64 timestamp_us, float *data, int num_values);
#endif /* SDL_sensor_c_h_ */

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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
@ -32,20 +32,21 @@
/* The SDL sensor structure */
struct _SDL_Sensor
{
SDL_SensorID instance_id; /* Device instance, monotonically increasing from 0 */
char *name; /* Sensor name - system dependent */
SDL_SensorType type; /* Type of the sensor */
int non_portable_type; /* Platform dependent type of the sensor */
SDL_SensorID instance_id; /* Device instance, monotonically increasing from 0 */
char *name; /* Sensor name - system dependent */
SDL_SensorType type; /* Type of the sensor */
int non_portable_type; /* Platform dependent type of the sensor */
float data[16]; /* The current state of the sensor */
Uint64 timestamp_us; /* The timestamp of the last sensor update */
float data[16]; /* The current state of the sensor */
struct _SDL_SensorDriver *driver;
struct sensor_hwdata *hwdata; /* Driver dependent information */
struct sensor_hwdata *hwdata; /* Driver dependent information */
int ref_count; /* Reference count for multiple opens */
int ref_count; /* Reference count for multiple opens */
struct _SDL_Sensor *next; /* pointer to next sensor we have allocated */
struct _SDL_Sensor *next; /* pointer to next sensor we have allocated */
};
typedef struct _SDL_SensorDriver
@ -78,17 +79,17 @@ typedef struct _SDL_SensorDriver
The sensor to open is specified by the device index.
It returns 0, or -1 if there is an error.
*/
int (*Open)(SDL_Sensor * sensor, int device_index);
int (*Open)(SDL_Sensor *sensor, int device_index);
/* Function to update the state of a sensor - called as a device poll.
* This function shouldn't update the sensor structure directly,
* but instead should call SDL_PrivateSensorUpdate() to deliver events
* and update sensor device state.
*/
void (*Update)(SDL_Sensor * sensor);
void (*Update)(SDL_Sensor *sensor);
/* Function to close a sensor after use */
void (*Close)(SDL_Sensor * sensor);
void (*Close)(SDL_Sensor *sensor);
/* Function to perform any system-specific sensor related cleanup */
void (*Quit)(void);
@ -101,6 +102,7 @@ extern SDL_SensorDriver SDL_COREMOTION_SensorDriver;
extern SDL_SensorDriver SDL_WINDOWS_SensorDriver;
extern SDL_SensorDriver SDL_DUMMY_SensorDriver;
extern SDL_SensorDriver SDL_VITA_SensorDriver;
extern SDL_SensorDriver SDL_N3DS_SensorDriver;
#endif /* SDL_syssensor_h_ */

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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
@ -32,10 +32,9 @@
#include "SDL_androidsensor.h"
#include "../SDL_syssensor.h"
#include "../SDL_sensor_c.h"
//#include "../../core/android/SDL_android.h"
#ifndef LOOPER_ID_USER
#define LOOPER_ID_USER 3
#define LOOPER_ID_USER 3
#endif
typedef struct
@ -44,26 +43,25 @@ typedef struct
SDL_SensorID instance_id;
} SDL_AndroidSensor;
static ASensorManager* SDL_sensor_manager;
static ALooper* SDL_sensor_looper;
static ASensorManager *SDL_sensor_manager;
static ALooper *SDL_sensor_looper;
static SDL_AndroidSensor *SDL_sensors;
static int SDL_sensors_count;
static int
SDL_ANDROID_SensorInit(void)
static int SDL_ANDROID_SensorInit(void)
{
int i, sensors_count;
ASensorList sensors;
SDL_sensor_manager = ASensorManager_getInstance();
if (!SDL_sensor_manager) {
if (SDL_sensor_manager == NULL) {
return SDL_SetError("Couldn't create sensor manager");
}
SDL_sensor_looper = ALooper_forThread();
if (!SDL_sensor_looper) {
if (SDL_sensor_looper == NULL) {
SDL_sensor_looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);
if (!SDL_sensor_looper) {
if (SDL_sensor_looper == NULL) {
return SDL_SetError("Couldn't create sensor event loop");
}
}
@ -72,7 +70,7 @@ SDL_ANDROID_SensorInit(void)
sensors_count = ASensorManager_getSensorList(SDL_sensor_manager, &sensors);
if (sensors_count > 0) {
SDL_sensors = (SDL_AndroidSensor *)SDL_calloc(sensors_count, sizeof(*SDL_sensors));
if (!SDL_sensors) {
if (SDL_sensors == NULL) {
return SDL_OutOfMemory();
}
@ -85,25 +83,21 @@ SDL_ANDROID_SensorInit(void)
return 0;
}
static int
SDL_ANDROID_SensorGetCount(void)
static int SDL_ANDROID_SensorGetCount(void)
{
return SDL_sensors_count;
}
static void
SDL_ANDROID_SensorDetect(void)
static void SDL_ANDROID_SensorDetect(void)
{
}
static const char *
SDL_ANDROID_SensorGetDeviceName(int device_index)
static const char *SDL_ANDROID_SensorGetDeviceName(int device_index)
{
return ASensor_getName(SDL_sensors[device_index].asensor);
}
static SDL_SensorType
SDL_ANDROID_SensorGetDeviceType(int device_index)
static SDL_SensorType SDL_ANDROID_SensorGetDeviceType(int device_index)
{
switch (ASensor_getType(SDL_sensors[device_index].asensor)) {
case 0x00000001:
@ -115,20 +109,17 @@ SDL_ANDROID_SensorGetDeviceType(int device_index)
}
}
static int
SDL_ANDROID_SensorGetDeviceNonPortableType(int device_index)
static int SDL_ANDROID_SensorGetDeviceNonPortableType(int device_index)
{
return ASensor_getType(SDL_sensors[device_index].asensor);
}
static SDL_SensorID
SDL_ANDROID_SensorGetDeviceInstanceID(int device_index)
static SDL_SensorID SDL_ANDROID_SensorGetDeviceInstanceID(int device_index)
{
return SDL_sensors[device_index].instance_id;
}
static int
SDL_ANDROID_SensorOpen(SDL_Sensor *sensor, int device_index)
static int SDL_ANDROID_SensorOpen(SDL_Sensor *sensor, int device_index)
{
struct sensor_hwdata *hwdata;
int delay_us, min_delay_us;
@ -163,24 +154,22 @@ SDL_ANDROID_SensorOpen(SDL_Sensor *sensor, int device_index)
sensor->hwdata = hwdata;
return 0;
}
static void
SDL_ANDROID_SensorUpdate(SDL_Sensor *sensor)
static void SDL_ANDROID_SensorUpdate(SDL_Sensor *sensor)
{
int events;
ASensorEvent event;
struct android_poll_source* source;
struct android_poll_source *source;
if (ALooper_pollAll(0, NULL, &events, (void**)&source) == LOOPER_ID_USER) {
if (ALooper_pollAll(0, NULL, &events, (void **)&source) == LOOPER_ID_USER) {
SDL_zero(event);
while (ASensorEventQueue_getEvents(sensor->hwdata->eventqueue, &event, 1) > 0) {
SDL_PrivateSensorUpdate(sensor, event.data, SDL_arraysize(event.data));
SDL_PrivateSensorUpdate(sensor, 0, event.data, SDL_arraysize(event.data));
}
}
}
static void
SDL_ANDROID_SensorClose(SDL_Sensor *sensor)
static void SDL_ANDROID_SensorClose(SDL_Sensor *sensor)
{
if (sensor->hwdata) {
ASensorEventQueue_disableSensor(sensor->hwdata->eventqueue, sensor->hwdata->asensor);
@ -190,8 +179,7 @@ SDL_ANDROID_SensorClose(SDL_Sensor *sensor)
}
}
static void
SDL_ANDROID_SensorQuit(void)
static void SDL_ANDROID_SensorQuit(void)
{
if (SDL_sensors) {
SDL_free(SDL_sensors);
@ -200,8 +188,7 @@ SDL_ANDROID_SensorQuit(void)
}
}
SDL_SensorDriver SDL_ANDROID_SensorDriver =
{
SDL_SensorDriver SDL_ANDROID_SensorDriver = {
SDL_ANDROID_SensorInit,
SDL_ANDROID_SensorGetCount,
SDL_ANDROID_SensorDetect,

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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
@ -27,5 +27,4 @@ struct sensor_hwdata
ASensorEventQueue *eventqueue;
};
/* vi: set ts=4 sw=4 expandtab: */

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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
@ -26,5 +26,4 @@ struct sensor_hwdata
float data[3];
};
/* vi: set ts=4 sw=4 expandtab: */

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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
@ -42,8 +42,7 @@ static CMMotionManager *SDL_motion_manager;
static SDL_CoreMotionSensor *SDL_sensors;
static int SDL_sensors_count;
static int
SDL_COREMOTION_SensorInit(void)
static int SDL_COREMOTION_SensorInit(void)
{
int i, sensors_count = 0;
@ -80,19 +79,16 @@ SDL_COREMOTION_SensorInit(void)
return 0;
}
static int
SDL_COREMOTION_SensorGetCount(void)
static int SDL_COREMOTION_SensorGetCount(void)
{
return SDL_sensors_count;
}
static void
SDL_COREMOTION_SensorDetect(void)
static void SDL_COREMOTION_SensorDetect(void)
{
}
static const char *
SDL_COREMOTION_SensorGetDeviceName(int device_index)
static const char *SDL_COREMOTION_SensorGetDeviceName(int device_index)
{
switch (SDL_sensors[device_index].type) {
case SDL_SENSOR_ACCEL:
@ -104,26 +100,22 @@ SDL_COREMOTION_SensorGetDeviceName(int device_index)
}
}
static SDL_SensorType
SDL_COREMOTION_SensorGetDeviceType(int device_index)
static SDL_SensorType SDL_COREMOTION_SensorGetDeviceType(int device_index)
{
return SDL_sensors[device_index].type;
}
static int
SDL_COREMOTION_SensorGetDeviceNonPortableType(int device_index)
static int SDL_COREMOTION_SensorGetDeviceNonPortableType(int device_index)
{
return SDL_sensors[device_index].type;
}
static SDL_SensorID
SDL_COREMOTION_SensorGetDeviceInstanceID(int device_index)
static SDL_SensorID SDL_COREMOTION_SensorGetDeviceInstanceID(int device_index)
{
return SDL_sensors[device_index].instance_id;
}
static int
SDL_COREMOTION_SensorOpen(SDL_Sensor *sensor, int device_index)
static int SDL_COREMOTION_SensorOpen(SDL_Sensor *sensor, int device_index)
{
struct sensor_hwdata *hwdata;
@ -133,8 +125,7 @@ SDL_COREMOTION_SensorOpen(SDL_Sensor *sensor, int device_index)
}
sensor->hwdata = hwdata;
switch (sensor->type)
{
switch (sensor->type) {
case SDL_SENSOR_ACCEL:
[SDL_motion_manager startAccelerometerUpdates];
break;
@ -146,55 +137,49 @@ SDL_COREMOTION_SensorOpen(SDL_Sensor *sensor, int device_index)
}
return 0;
}
static void
SDL_COREMOTION_SensorUpdate(SDL_Sensor *sensor)
static void SDL_COREMOTION_SensorUpdate(SDL_Sensor *sensor)
{
switch (sensor->type)
{
switch (sensor->type) {
case SDL_SENSOR_ACCEL:
{
CMAccelerometerData *accelerometerData = SDL_motion_manager.accelerometerData;
if (accelerometerData) {
CMAcceleration acceleration = accelerometerData.acceleration;
float data[3];
data[0] = -acceleration.x * SDL_STANDARD_GRAVITY;
data[1] = -acceleration.y * SDL_STANDARD_GRAVITY;
data[2] = -acceleration.z * SDL_STANDARD_GRAVITY;
if (SDL_memcmp(data, sensor->hwdata->data, sizeof(data)) != 0) {
SDL_PrivateSensorUpdate(sensor, data, SDL_arraysize(data));
SDL_memcpy(sensor->hwdata->data, data, sizeof(data));
}
{
CMAccelerometerData *accelerometerData = SDL_motion_manager.accelerometerData;
if (accelerometerData) {
CMAcceleration acceleration = accelerometerData.acceleration;
float data[3];
data[0] = -acceleration.x * SDL_STANDARD_GRAVITY;
data[1] = -acceleration.y * SDL_STANDARD_GRAVITY;
data[2] = -acceleration.z * SDL_STANDARD_GRAVITY;
if (SDL_memcmp(data, sensor->hwdata->data, sizeof(data)) != 0) {
SDL_PrivateSensorUpdate(sensor, 0, data, SDL_arraysize(data));
SDL_memcpy(sensor->hwdata->data, data, sizeof(data));
}
}
break;
} break;
case SDL_SENSOR_GYRO:
{
CMGyroData *gyroData = SDL_motion_manager.gyroData;
if (gyroData) {
CMRotationRate rotationRate = gyroData.rotationRate;
float data[3];
data[0] = rotationRate.x;
data[1] = rotationRate.y;
data[2] = rotationRate.z;
if (SDL_memcmp(data, sensor->hwdata->data, sizeof(data)) != 0) {
SDL_PrivateSensorUpdate(sensor, data, SDL_arraysize(data));
SDL_memcpy(sensor->hwdata->data, data, sizeof(data));
}
{
CMGyroData *gyroData = SDL_motion_manager.gyroData;
if (gyroData) {
CMRotationRate rotationRate = gyroData.rotationRate;
float data[3];
data[0] = rotationRate.x;
data[1] = rotationRate.y;
data[2] = rotationRate.z;
if (SDL_memcmp(data, sensor->hwdata->data, sizeof(data)) != 0) {
SDL_PrivateSensorUpdate(sensor, 0, data, SDL_arraysize(data));
SDL_memcpy(sensor->hwdata->data, data, sizeof(data));
}
}
break;
} break;
default:
break;
}
}
static void
SDL_COREMOTION_SensorClose(SDL_Sensor *sensor)
static void SDL_COREMOTION_SensorClose(SDL_Sensor *sensor)
{
if (sensor->hwdata) {
switch (sensor->type)
{
switch (sensor->type) {
case SDL_SENSOR_ACCEL:
[SDL_motion_manager stopAccelerometerUpdates];
break;
@ -209,13 +194,11 @@ SDL_COREMOTION_SensorClose(SDL_Sensor *sensor)
}
}
static void
SDL_COREMOTION_SensorQuit(void)
static void SDL_COREMOTION_SensorQuit(void)
{
}
SDL_SensorDriver SDL_COREMOTION_SensorDriver =
{
SDL_SensorDriver SDL_COREMOTION_SensorDriver = {
SDL_COREMOTION_SensorInit,
SDL_COREMOTION_SensorGetCount,
SDL_COREMOTION_SensorDetect,

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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
@ -29,70 +29,58 @@
#include "SDL_dummysensor.h"
#include "../SDL_syssensor.h"
static int
SDL_DUMMY_SensorInit(void)
static int SDL_DUMMY_SensorInit(void)
{
return 0;
}
static int
SDL_DUMMY_SensorGetCount(void)
static int SDL_DUMMY_SensorGetCount(void)
{
return 0;
}
static void
SDL_DUMMY_SensorDetect(void)
static void SDL_DUMMY_SensorDetect(void)
{
}
static const char *
SDL_DUMMY_SensorGetDeviceName(int device_index)
static const char *SDL_DUMMY_SensorGetDeviceName(int device_index)
{
return NULL;
}
static SDL_SensorType
SDL_DUMMY_SensorGetDeviceType(int device_index)
static SDL_SensorType SDL_DUMMY_SensorGetDeviceType(int device_index)
{
return SDL_SENSOR_INVALID;
}
static int
SDL_DUMMY_SensorGetDeviceNonPortableType(int device_index)
static int SDL_DUMMY_SensorGetDeviceNonPortableType(int device_index)
{
return -1;
}
static SDL_SensorID
SDL_DUMMY_SensorGetDeviceInstanceID(int device_index)
static SDL_SensorID SDL_DUMMY_SensorGetDeviceInstanceID(int device_index)
{
return -1;
}
static int
SDL_DUMMY_SensorOpen(SDL_Sensor *sensor, int device_index)
static int SDL_DUMMY_SensorOpen(SDL_Sensor *sensor, int device_index)
{
return SDL_Unsupported();
}
static void
SDL_DUMMY_SensorUpdate(SDL_Sensor *sensor)
static void SDL_DUMMY_SensorUpdate(SDL_Sensor *sensor)
{
}
static void
SDL_DUMMY_SensorClose(SDL_Sensor *sensor)
static void SDL_DUMMY_SensorClose(SDL_Sensor *sensor)
{
}
static void
SDL_DUMMY_SensorQuit(void)
static void SDL_DUMMY_SensorQuit(void)
{
}
SDL_SensorDriver SDL_DUMMY_SensorDriver =
{
SDL_SensorDriver SDL_DUMMY_SensorDriver = {
SDL_DUMMY_SensorInit,
SDL_DUMMY_SensorGetCount,
SDL_DUMMY_SensorDetect,

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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

View file

@ -0,0 +1,207 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2023 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, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include "../../SDL_internal.h"
#ifdef SDL_SENSOR_N3DS
#include <3ds.h>
#include "../SDL_syssensor.h"
/* 1 accelerometer and 1 gyroscope */
#define N3DS_SENSOR_COUNT 2
typedef struct
{
SDL_SensorType type;
SDL_SensorID instance_id;
} SDL_N3DSSensor;
static SDL_N3DSSensor N3DS_sensors[N3DS_SENSOR_COUNT];
SDL_FORCE_INLINE int InitN3DSServices(void);
SDL_FORCE_INLINE void UpdateN3DSAccelerometer(SDL_Sensor *sensor);
SDL_FORCE_INLINE void UpdateN3DSGyroscope(SDL_Sensor *sensor);
SDL_FORCE_INLINE SDL_bool
IsDeviceIndexValid(int device_index)
{
return device_index >= 0 && device_index < N3DS_SENSOR_COUNT;
}
static int N3DS_SensorInit(void)
{
if (InitN3DSServices() < 0) {
return SDL_SetError("Failed to initialise N3DS services");
}
N3DS_sensors[0].type = SDL_SENSOR_ACCEL;
N3DS_sensors[0].instance_id = SDL_GetNextSensorInstanceID();
N3DS_sensors[1].type = SDL_SENSOR_GYRO;
N3DS_sensors[1].instance_id = SDL_GetNextSensorInstanceID();
return 0;
}
SDL_FORCE_INLINE int
InitN3DSServices(void)
{
if (R_FAILED(hidInit())) {
return -1;
}
if (R_FAILED(HIDUSER_EnableAccelerometer())) {
return -1;
}
if (R_FAILED(HIDUSER_EnableGyroscope())) {
return -1;
}
return 0;
}
static int N3DS_SensorGetCount(void)
{
return N3DS_SENSOR_COUNT;
}
static void N3DS_SensorDetect(void)
{
}
static const char *N3DS_SensorGetDeviceName(int device_index)
{
if (IsDeviceIndexValid(device_index)) {
switch (N3DS_sensors[device_index].type) {
case SDL_SENSOR_ACCEL:
return "Accelerometer";
case SDL_SENSOR_GYRO:
return "Gyroscope";
default:
return "Unknown";
}
}
return NULL;
}
static SDL_SensorType N3DS_SensorGetDeviceType(int device_index)
{
if (IsDeviceIndexValid(device_index)) {
return N3DS_sensors[device_index].type;
}
return SDL_SENSOR_INVALID;
}
static int N3DS_SensorGetDeviceNonPortableType(int device_index)
{
return (int)N3DS_SensorGetDeviceType(device_index);
}
static SDL_SensorID N3DS_SensorGetDeviceInstanceID(int device_index)
{
if (IsDeviceIndexValid(device_index)) {
return N3DS_sensors[device_index].instance_id;
}
return -1;
}
static int N3DS_SensorOpen(SDL_Sensor *sensor, int device_index)
{
return 0;
}
static void N3DS_SensorUpdate(SDL_Sensor *sensor)
{
switch (sensor->type) {
case SDL_SENSOR_ACCEL:
UpdateN3DSAccelerometer(sensor);
break;
case SDL_SENSOR_GYRO:
UpdateN3DSGyroscope(sensor);
break;
default:
break;
}
}
SDL_FORCE_INLINE void
UpdateN3DSAccelerometer(SDL_Sensor *sensor)
{
static accelVector previous_state = { 0, 0, 0 };
accelVector current_state;
float data[3];
hidAccelRead(&current_state);
if (SDL_memcmp(&previous_state, &current_state, sizeof(accelVector)) != 0) {
SDL_memcpy(&previous_state, &current_state, sizeof(accelVector));
data[0] = (float)current_state.x * SDL_STANDARD_GRAVITY;
data[1] = (float)current_state.y * SDL_STANDARD_GRAVITY;
data[2] = (float)current_state.z * SDL_STANDARD_GRAVITY;
SDL_PrivateSensorUpdate(sensor, 0, data, sizeof(data));
}
}
SDL_FORCE_INLINE void
UpdateN3DSGyroscope(SDL_Sensor *sensor)
{
static angularRate previous_state = { 0, 0, 0 };
angularRate current_state;
float data[3];
hidGyroRead(&current_state);
if (SDL_memcmp(&previous_state, &current_state, sizeof(angularRate)) != 0) {
SDL_memcpy(&previous_state, &current_state, sizeof(angularRate));
data[0] = (float)current_state.x;
data[1] = (float)current_state.y;
data[2] = (float)current_state.z;
SDL_PrivateSensorUpdate(sensor, 0, data, sizeof(data));
}
}
static void N3DS_SensorClose(SDL_Sensor *sensor)
{
}
static void N3DS_SensorQuit(void)
{
HIDUSER_DisableGyroscope();
HIDUSER_DisableAccelerometer();
hidExit();
}
SDL_SensorDriver SDL_N3DS_SensorDriver = {
.Init = N3DS_SensorInit,
.GetCount = N3DS_SensorGetCount,
.Detect = N3DS_SensorDetect,
.GetDeviceName = N3DS_SensorGetDeviceName,
.GetDeviceType = N3DS_SensorGetDeviceType,
.GetDeviceNonPortableType = N3DS_SensorGetDeviceNonPortableType,
.GetDeviceInstanceID = N3DS_SensorGetDeviceInstanceID,
.Open = N3DS_SensorOpen,
.Update = N3DS_SensorUpdate,
.Close = N3DS_SensorClose,
.Quit = N3DS_SensorQuit,
};
#endif /* SDL_SENSOR_N3DS */
/* vi: set ts=4 sw=4 expandtab: */

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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
@ -42,8 +42,7 @@ typedef struct
static SDL_VitaSensor *SDL_sensors;
static int SDL_sensors_count;
static int
SDL_VITA_SensorInit(void)
static int SDL_VITA_SensorInit(void)
{
sceMotionReset();
sceMotionStartSampling();
@ -55,7 +54,7 @@ SDL_VITA_SensorInit(void)
SDL_sensors_count = 2;
SDL_sensors = (SDL_VitaSensor *)SDL_calloc(SDL_sensors_count, sizeof(*SDL_sensors));
if (!SDL_sensors) {
if (SDL_sensors == NULL) {
return SDL_OutOfMemory();
}
@ -67,36 +66,32 @@ SDL_VITA_SensorInit(void)
return 0;
}
static int
SDL_VITA_SensorGetCount(void)
static int SDL_VITA_SensorGetCount(void)
{
return SDL_sensors_count;
}
static void
SDL_VITA_SensorDetect(void)
static void SDL_VITA_SensorDetect(void)
{
}
static const char *
SDL_VITA_SensorGetDeviceName(int device_index)
static const char *SDL_VITA_SensorGetDeviceName(int device_index)
{
if (device_index < SDL_sensors_count) {
switch (SDL_sensors[device_index].type) {
case SDL_SENSOR_ACCEL:
return "Accelerometer";
case SDL_SENSOR_GYRO:
return "Gyro";
default:
return "Unknown";
case SDL_SENSOR_ACCEL:
return "Accelerometer";
case SDL_SENSOR_GYRO:
return "Gyro";
default:
return "Unknown";
}
}
return NULL;
}
static SDL_SensorType
SDL_VITA_SensorGetDeviceType(int device_index)
static SDL_SensorType SDL_VITA_SensorGetDeviceType(int device_index)
{
if (device_index < SDL_sensors_count) {
return SDL_sensors[device_index].type;
@ -105,8 +100,7 @@ SDL_VITA_SensorGetDeviceType(int device_index)
return SDL_SENSOR_INVALID;
}
static int
SDL_VITA_SensorGetDeviceNonPortableType(int device_index)
static int SDL_VITA_SensorGetDeviceNonPortableType(int device_index)
{
if (device_index < SDL_sensors_count) {
return SDL_sensors[device_index].type;
@ -114,8 +108,7 @@ SDL_VITA_SensorGetDeviceNonPortableType(int device_index)
return -1;
}
static SDL_SensorID
SDL_VITA_SensorGetDeviceInstanceID(int device_index)
static SDL_SensorID SDL_VITA_SensorGetDeviceInstanceID(int device_index)
{
if (device_index < SDL_sensors_count) {
return SDL_sensors[device_index].instance_id;
@ -123,8 +116,7 @@ SDL_VITA_SensorGetDeviceInstanceID(int device_index)
return -1;
}
static int
SDL_VITA_SensorOpen(SDL_Sensor *sensor, int device_index)
static int SDL_VITA_SensorOpen(SDL_Sensor *sensor, int device_index)
{
struct sensor_hwdata *hwdata;
@ -137,70 +129,71 @@ SDL_VITA_SensorOpen(SDL_Sensor *sensor, int device_index)
return 0;
}
static void
SDL_VITA_SensorUpdate(SDL_Sensor *sensor)
static void SDL_VITA_SensorUpdate(SDL_Sensor *sensor)
{
int err = 0;
SceMotionSensorState motionState[SCE_MOTION_MAX_NUM_STATES];
SDL_memset(motionState, 0, sizeof(motionState));
err = sceMotionGetSensorState(motionState, SCE_MOTION_MAX_NUM_STATES);
if (err != 0)
{
if (err != 0) {
return;
}
for (int i = 0; i < SCE_MOTION_MAX_NUM_STATES; i++)
{
if (sensor->hwdata->counter < motionState[i].counter)
{
for (int i = 0; i < SCE_MOTION_MAX_NUM_STATES; i++) {
if (sensor->hwdata->counter < motionState[i].counter) {
unsigned int timestamp = motionState[i].timestamp;
sensor->hwdata->counter = motionState[i].counter;
switch (sensor->type)
if (sensor->hwdata->timestamp_us) {
unsigned int delta;
if (sensor->hwdata->last_timestamp > timestamp) {
SDL_COMPILE_TIME_ASSERT(timestamp, sizeof(timestamp) == sizeof(Uint32));
delta = (SDL_MAX_UINT32 - sensor->hwdata->last_timestamp + timestamp + 1);
} else {
delta = (timestamp - sensor->hwdata->last_timestamp);
}
sensor->hwdata->timestamp_us += delta;
} else {
sensor->hwdata->timestamp_us = timestamp;
}
sensor->hwdata->last_timestamp = timestamp;
switch (sensor->type) {
case SDL_SENSOR_ACCEL:
{
case SDL_SENSOR_ACCEL:
{
float data[3];
data[0] = motionState[i].accelerometer.x * SDL_STANDARD_GRAVITY;
data[1] = motionState[i].accelerometer.y * SDL_STANDARD_GRAVITY;
data[2] = motionState[i].accelerometer.z * SDL_STANDARD_GRAVITY;
if (SDL_memcmp(data, sensor->hwdata->data, sizeof(data)) != 0) {
SDL_PrivateSensorUpdate(sensor, data, SDL_arraysize(data));
SDL_memcpy(sensor->hwdata->data, data, sizeof(data));
}
}
break;
case SDL_SENSOR_GYRO:
{
float data[3];
data[0] = motionState[i].gyro.x;
data[1] = motionState[i].gyro.y;
data[2] = motionState[i].gyro.z;
if (SDL_memcmp(data, sensor->hwdata->data, sizeof(data)) != 0) {
SDL_PrivateSensorUpdate(sensor, data, SDL_arraysize(data));
SDL_memcpy(sensor->hwdata->data, data, sizeof(data));
}
}
break;
default:
float data[3];
data[0] = motionState[i].accelerometer.x * SDL_STANDARD_GRAVITY;
data[1] = motionState[i].accelerometer.y * SDL_STANDARD_GRAVITY;
data[2] = motionState[i].accelerometer.z * SDL_STANDARD_GRAVITY;
SDL_PrivateSensorUpdate(sensor, sensor->hwdata->timestamp_us, data, SDL_arraysize(data));
} break;
case SDL_SENSOR_GYRO:
{
float data[3];
data[0] = motionState[i].gyro.x;
data[1] = motionState[i].gyro.y;
data[2] = motionState[i].gyro.z;
SDL_PrivateSensorUpdate(sensor, sensor->hwdata->timestamp_us, data, SDL_arraysize(data));
} break;
default:
break;
}
}
}
}
static void
SDL_VITA_SensorClose(SDL_Sensor *sensor)
static void SDL_VITA_SensorClose(SDL_Sensor *sensor)
{
}
static void
SDL_VITA_SensorQuit(void)
static void SDL_VITA_SensorQuit(void)
{
sceMotionStopSampling();
}
SDL_SensorDriver SDL_VITA_SensorDriver =
{
SDL_SensorDriver SDL_VITA_SensorDriver = {
SDL_VITA_SensorInit,
SDL_VITA_SensorGetCount,
SDL_VITA_SensorDetect,

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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
@ -23,8 +23,9 @@
/* The private structure used to keep track of a sensor */
struct sensor_hwdata
{
float data[3];
Uint32 counter;
unsigned int last_timestamp;
Uint64 timestamp_us;
};
/* vi: set ts=4 sw=4 expandtab: */

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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
@ -65,9 +65,9 @@ static SDL_Windows_Sensor *SDL_sensors;
static int ConnectSensor(ISensor *sensor);
static int DisconnectSensor(ISensor *sensor);
static HRESULT STDMETHODCALLTYPE ISensorManagerEventsVtbl_QueryInterface(ISensorManagerEvents * This, REFIID riid, void **ppvObject)
static HRESULT STDMETHODCALLTYPE ISensorManagerEventsVtbl_QueryInterface(ISensorManagerEvents *This, REFIID riid, void **ppvObject)
{
if (!ppvObject) {
if (ppvObject == NULL) {
return E_INVALIDARG;
}
@ -79,17 +79,17 @@ static HRESULT STDMETHODCALLTYPE ISensorManagerEventsVtbl_QueryInterface(ISensor
return E_NOINTERFACE;
}
static ULONG STDMETHODCALLTYPE ISensorManagerEventsVtbl_AddRef(ISensorManagerEvents * This)
static ULONG STDMETHODCALLTYPE ISensorManagerEventsVtbl_AddRef(ISensorManagerEvents *This)
{
return 1;
}
static ULONG STDMETHODCALLTYPE ISensorManagerEventsVtbl_Release(ISensorManagerEvents * This)
static ULONG STDMETHODCALLTYPE ISensorManagerEventsVtbl_Release(ISensorManagerEvents *This)
{
return 1;
}
static HRESULT STDMETHODCALLTYPE ISensorManagerEventsVtbl_OnSensorEnter(ISensorManagerEvents * This, ISensor *pSensor, SensorState state)
static HRESULT STDMETHODCALLTYPE ISensorManagerEventsVtbl_OnSensorEnter(ISensorManagerEvents *This, ISensor *pSensor, SensorState state)
{
ConnectSensor(pSensor);
return S_OK;
@ -105,9 +105,9 @@ static ISensorManagerEvents sensor_manager_events = {
&sensor_manager_events_vtbl
};
static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_QueryInterface(ISensorEvents * This, REFIID riid, void **ppvObject)
static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_QueryInterface(ISensorEvents *This, REFIID riid, void **ppvObject)
{
if (!ppvObject) {
if (ppvObject == NULL) {
return E_INVALIDARG;
}
@ -119,17 +119,17 @@ static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_QueryInterface(ISensorEvents
return E_NOINTERFACE;
}
static ULONG STDMETHODCALLTYPE ISensorEventsVtbl_AddRef(ISensorEvents * This)
static ULONG STDMETHODCALLTYPE ISensorEventsVtbl_AddRef(ISensorEvents *This)
{
return 1;
}
static ULONG STDMETHODCALLTYPE ISensorEventsVtbl_Release(ISensorEvents * This)
static ULONG STDMETHODCALLTYPE ISensorEventsVtbl_Release(ISensorEvents *This)
{
return 1;
}
static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnStateChanged(ISensorEvents * This, ISensor *pSensor, SensorState state)
static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnStateChanged(ISensorEvents *This, ISensor *pSensor, SensorState state)
{
#ifdef DEBUG_SENSORS
int i;
@ -145,7 +145,7 @@ static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnStateChanged(ISensorEvents
return S_OK;
}
static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnDataUpdated(ISensorEvents * This, ISensor *pSensor, ISensorDataReport *pNewData)
static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnDataUpdated(ISensorEvents *This, ISensor *pSensor, ISensorDataReport *pNewData)
{
int i;
@ -171,7 +171,7 @@ static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnDataUpdated(ISensorEvents *
values[0] = (float)valueX.dblVal * SDL_STANDARD_GRAVITY;
values[1] = (float)valueY.dblVal * SDL_STANDARD_GRAVITY;
values[2] = (float)valueZ.dblVal * SDL_STANDARD_GRAVITY;
SDL_PrivateSensorUpdate(SDL_sensors[i].sensor_opened, values, 3);
SDL_PrivateSensorUpdate(SDL_sensors[i].sensor_opened, 0, values, 3);
}
break;
case SDL_SENSOR_GYRO:
@ -186,7 +186,7 @@ static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnDataUpdated(ISensorEvents *
values[0] = (float)valueX.dblVal * DEGREES_TO_RADIANS;
values[1] = (float)valueY.dblVal * DEGREES_TO_RADIANS;
values[2] = (float)valueZ.dblVal * DEGREES_TO_RADIANS;
SDL_PrivateSensorUpdate(SDL_sensors[i].sensor_opened, values, 3);
SDL_PrivateSensorUpdate(SDL_sensors[i].sensor_opened, 0, values, 3);
}
break;
default:
@ -202,7 +202,7 @@ static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnDataUpdated(ISensorEvents *
return S_OK;
}
static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnEvent(ISensorEvents * This, ISensor *pSensor, REFGUID eventID, IPortableDeviceValues *pEventData)
static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnEvent(ISensorEvents *This, ISensor *pSensor, REFGUID eventID, IPortableDeviceValues *pEventData)
{
#ifdef DEBUG_SENSORS
int i;
@ -218,7 +218,7 @@ static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnEvent(ISensorEvents * This,
return S_OK;
}
static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnLeave(ISensorEvents * This, REFSENSOR_ID ID)
static HRESULT STDMETHODCALLTYPE ISensorEventsVtbl_OnLeave(ISensorEvents *This, REFSENSOR_ID ID)
{
int i;
@ -286,7 +286,7 @@ static int ConnectSensor(ISensor *sensor)
if (bstr_name != NULL) {
SysFreeString(bstr_name);
}
if (!name) {
if (name == NULL) {
return SDL_OutOfMemory();
}
@ -343,8 +343,7 @@ static int DisconnectSensor(ISensor *sensor)
return 0;
}
static int
SDL_WINDOWS_SensorInit(void)
static int SDL_WINDOWS_SensorInit(void)
{
HRESULT hr;
ISensorCollection *sensor_collection = NULL;
@ -353,7 +352,7 @@ SDL_WINDOWS_SensorInit(void)
SDL_windowscoinit = SDL_TRUE;
}
hr = CoCreateInstance(&SDL_CLSID_SensorManager, NULL, CLSCTX_INPROC_SERVER, &SDL_IID_SensorManager, (LPVOID *) &SDL_sensor_manager);
hr = CoCreateInstance(&SDL_CLSID_SensorManager, NULL, CLSCTX_INPROC_SERVER, &SDL_IID_SensorManager, (LPVOID *)&SDL_sensor_manager);
if (FAILED(hr)) {
/* If we can't create a sensor manager (i.e. on Wine), we won't have any sensors, but don't fail the init */
return 0; /* WIN_SetErrorFromHRESULT("Couldn't create the sensor manager", hr); */
@ -392,55 +391,46 @@ SDL_WINDOWS_SensorInit(void)
return 0;
}
static int
SDL_WINDOWS_SensorGetCount(void)
static int SDL_WINDOWS_SensorGetCount(void)
{
return SDL_num_sensors;
}
static void
SDL_WINDOWS_SensorDetect(void)
static void SDL_WINDOWS_SensorDetect(void)
{
}
static const char *
SDL_WINDOWS_SensorGetDeviceName(int device_index)
static const char *SDL_WINDOWS_SensorGetDeviceName(int device_index)
{
return SDL_sensors[device_index].name;
}
static SDL_SensorType
SDL_WINDOWS_SensorGetDeviceType(int device_index)
static SDL_SensorType SDL_WINDOWS_SensorGetDeviceType(int device_index)
{
return SDL_sensors[device_index].type;
}
static int
SDL_WINDOWS_SensorGetDeviceNonPortableType(int device_index)
static int SDL_WINDOWS_SensorGetDeviceNonPortableType(int device_index)
{
return -1;
}
static SDL_SensorID
SDL_WINDOWS_SensorGetDeviceInstanceID(int device_index)
static SDL_SensorID SDL_WINDOWS_SensorGetDeviceInstanceID(int device_index)
{
return SDL_sensors[device_index].id;
}
static int
SDL_WINDOWS_SensorOpen(SDL_Sensor *sensor, int device_index)
static int SDL_WINDOWS_SensorOpen(SDL_Sensor *sensor, int device_index)
{
SDL_sensors[device_index].sensor_opened = sensor;
return 0;
}
static void
SDL_WINDOWS_SensorUpdate(SDL_Sensor *sensor)
static void SDL_WINDOWS_SensorUpdate(SDL_Sensor *sensor)
{
}
static void
SDL_WINDOWS_SensorClose(SDL_Sensor *sensor)
static void SDL_WINDOWS_SensorClose(SDL_Sensor *sensor)
{
int i;
@ -452,8 +442,7 @@ SDL_WINDOWS_SensorClose(SDL_Sensor *sensor)
}
}
static void
SDL_WINDOWS_SensorQuit(void)
static void SDL_WINDOWS_SensorQuit(void)
{
while (SDL_num_sensors > 0) {
DisconnectSensor(SDL_sensors[0].sensor);
@ -470,8 +459,7 @@ SDL_WINDOWS_SensorQuit(void)
}
}
SDL_SensorDriver SDL_WINDOWS_SensorDriver =
{
SDL_SensorDriver SDL_WINDOWS_SensorDriver = {
SDL_WINDOWS_SensorInit,
SDL_WINDOWS_SensorGetCount,
SDL_WINDOWS_SensorDetect,

View file

@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
Copyright (C) 1997-2023 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