report gyro & accel buffer to the output device

This commit is contained in:
Denis 2023-12-14 02:55:46 +01:00
parent 7985256277
commit f87028f8f7
No known key found for this signature in database
GPG key ID: DD9B63F805CF5C03
3 changed files with 60 additions and 3 deletions

View file

@ -5,8 +5,6 @@
#include "message.h"
#include "dev_evdev.h"
#include "dev_iio.h"
#include <libevdev-1.0/libevdev/libevdev.h>
#include <linux/input-event-codes.h>
typedef enum dev_in_type {
DEV_IN_TYPE_NONE,
@ -61,6 +59,9 @@ static int map_message_from_iio(dev_in_iio_t *const in_iio, in_message_t *const
uint8_t data[32];
struct timeval read_time;
gettimeofday(&read_time, NULL);
res = read(dev_iio_get_buffer_fd(in_iio->iiodev), &data[0], sizeof(data));
if (res == -1) {
res = errno;
@ -68,7 +69,28 @@ static int map_message_from_iio(dev_in_iio_t *const in_iio, in_message_t *const
goto send_message_from_iio_err;
}
res = 0;
if (res != 24) {
fprintf(stderr, "Invalid read lenght\n");
res = -EIO;
goto send_message_from_iio_err;
}
uint16_t *const scan_elements = (uint16_t*)&data[0];
messages[0].data.gamepad_set.element = GAMEPAD_ACCELEROMETER;
messages[0].data.gamepad_set.status.gyro.sample_time = read_time;
messages[0].data.gamepad_set.status.accel.x = scan_elements[0];
messages[0].data.gamepad_set.status.accel.y = scan_elements[1];
messages[0].data.gamepad_set.status.accel.z = scan_elements[2];
messages[1].type = GAMEPAD_SET_ELEMENT;
messages[1].data.gamepad_set.element = GAMEPAD_GYROSCOPE;
messages[1].data.gamepad_set.status.gyro.sample_time = read_time;
messages[1].data.gamepad_set.status.gyro.x = scan_elements[3];
messages[1].data.gamepad_set.status.gyro.y = scan_elements[4];
messages[1].data.gamepad_set.status.gyro.z = scan_elements[5];
res = 2;
send_message_from_iio_err:
return res;