Added microsecond timestamp to sensor values for PS4 and PS5 controllers using the HIDAPI driver

This commit is contained in:
Sam Lantinga 2022-09-27 09:56:02 -07:00
parent d71df6448b
commit 2c518747b9
26 changed files with 204 additions and 63 deletions

View file

@ -307,7 +307,7 @@ SDL_SensorFromInstanceID(SDL_SensorID instance_id)
* Checks to make sure the sensor is valid.
*/
static int
SDL_PrivateSensorValid(SDL_Sensor * sensor)
SDL_PrivateSensorValid(SDL_Sensor *sensor)
{
int valid;
@ -325,7 +325,7 @@ SDL_PrivateSensorValid(SDL_Sensor * sensor)
* Get the friendly name of this sensor
*/
const char *
SDL_SensorGetName(SDL_Sensor * sensor)
SDL_SensorGetName(SDL_Sensor *sensor)
{
if (!SDL_PrivateSensorValid(sensor)) {
return NULL;
@ -338,7 +338,7 @@ SDL_SensorGetName(SDL_Sensor * sensor)
* Get the type of this sensor
*/
SDL_SensorType
SDL_SensorGetType(SDL_Sensor * sensor)
SDL_SensorGetType(SDL_Sensor *sensor)
{
if (!SDL_PrivateSensorValid(sensor)) {
return SDL_SENSOR_INVALID;
@ -351,7 +351,7 @@ SDL_SensorGetType(SDL_Sensor * sensor)
* Get the platform dependent type of this sensor
*/
int
SDL_SensorGetNonPortableType(SDL_Sensor * sensor)
SDL_SensorGetNonPortableType(SDL_Sensor *sensor)
{
if (!SDL_PrivateSensorValid(sensor)) {
return -1;
@ -364,7 +364,7 @@ SDL_SensorGetNonPortableType(SDL_Sensor * sensor)
* Get the instance id for this opened sensor
*/
SDL_SensorID
SDL_SensorGetInstanceID(SDL_Sensor * sensor)
SDL_SensorGetInstanceID(SDL_Sensor *sensor)
{
if (!SDL_PrivateSensorValid(sensor)) {
return -1;
@ -377,7 +377,16 @@ SDL_SensorGetInstanceID(SDL_Sensor * sensor)
* Get the current state of this sensor
*/
int
SDL_SensorGetData(SDL_Sensor * sensor, float *data, int num_values)
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;
@ -385,6 +394,9 @@ SDL_SensorGetData(SDL_Sensor * sensor, float *data, int num_values)
num_values = SDL_min(num_values, SDL_arraysize(sensor->data));
SDL_memcpy(data, sensor->data, num_values*sizeof(*data));
if (timestamp) {
*timestamp = sensor->timestamp_us;
}
return 0;
}
@ -392,7 +404,7 @@ SDL_SensorGetData(SDL_Sensor * sensor, float *data, int num_values)
* Close a sensor previously opened with SDL_SensorOpen()
*/
void
SDL_SensorClose(SDL_Sensor * sensor)
SDL_SensorClose(SDL_Sensor *sensor)
{
SDL_Sensor *sensorlist;
SDL_Sensor *sensorlistprev;
@ -478,7 +490,7 @@ 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)
SDL_PrivateSensorUpdate(SDL_Sensor *sensor, Uint64 timestamp_us, float *data, int num_values)
{
int posted;
@ -487,6 +499,7 @@ 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));
sensor->timestamp_us = timestamp_us;
/* Post the event, if desired */
posted = 0;
@ -498,6 +511,7 @@ SDL_PrivateSensorUpdate(SDL_Sensor *sensor, float *data, int num_values)
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));
event.sensor.timestamp_us = timestamp_us;
posted = SDL_PushEvent(&event) == 1;
}
#endif /* !SDL_EVENTS_DISABLED */