Added microsecond timestamp to sensor values for PS4 and PS5 controllers using the HIDAPI driver
This commit is contained in:
parent
d71df6448b
commit
2c518747b9
26 changed files with 204 additions and 63 deletions
|
@ -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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue