jsfw/hid.h

48 lines
1.3 KiB
C
Raw Normal View History

2022-08-30 17:54:56 -05:00
// vi:ft=c
#ifndef HID_H_
#define HID_H_
2022-08-30 08:37:34 -05:00
#include "net.h"
2022-10-07 18:36:53 -05:00
#include "server.h"
2022-08-30 17:56:56 -05:00
2022-08-31 11:59:06 -05:00
#include <linux/input-event-codes.h>
2022-10-12 15:28:50 -05:00
#include <stdbool.h>
2023-03-18 10:31:33 -05:00
#include <stddef.h>
2022-08-30 08:37:34 -05:00
#include <stdint.h>
2022-08-27 19:29:43 -05:00
2023-03-18 12:41:17 -05:00
// Unique identifier for devices (provided by linux)
2022-08-29 17:27:03 -05:00
typedef uint64_t uniq_t;
2022-08-27 19:29:43 -05:00
// Mapping to go from index to id of events
// the id of an event is the code field of a input_event struct
// the index is given (somewhat arbitrarily) by hid.c::setup_device, this is done because ids are sparse
// and innefficient to transfer over network (especially for keys that can range from 0 to 700).
2022-08-29 17:27:03 -05:00
typedef struct {
2022-08-30 17:54:56 -05:00
uint16_t abs_indices[ABS_CNT];
uint16_t rel_indices[REL_CNT];
uint16_t key_indices[KEY_CNT];
2022-08-30 08:37:34 -05:00
} DeviceMap;
// A struct representing a connected device
2022-08-30 08:37:34 -05:00
typedef struct {
int event;
int hidraw;
uniq_t uniq;
2022-10-12 12:33:18 -05:00
uint64_t id;
2022-08-30 08:37:34 -05:00
char *name;
DeviceMap mapping;
DeviceInfo device_info;
2022-08-29 17:27:03 -05:00
} PhysicalDevice;
2022-10-07 18:36:53 -05:00
typedef struct {
PhysicalDevice dev;
ServerConfigController ctr;
} Controller;
2023-03-18 12:41:17 -05:00
void *hid_thread(void *arg);
void return_device(Controller *c);
void forget_device(Controller *c);
bool get_device(char **tags, size_t tag_count, bool *stop, Controller *res, uint8_t *index);
void apply_controller_state(Controller *c, DeviceControllerState *state);
2022-08-27 19:29:43 -05:00
#endif