ratazana/ratazana.h
2025-11-10 04:53:37 -03:00

55 lines
1.3 KiB
C

/**
* Copyright (c) 2025 favewa
* SPDX-License-Identifier: BSD-3-Clause
*/
#pragma once
#include <stdbool.h>
#include <stdint.h>
typedef struct {
int fd;
uint8_t idx;
char path[256];
} ratazana_device_t;
typedef enum {
RATAZANA_OK = 0,
RATAZANA_ERROR_INVALID_ARG = -1,
RATAZANA_ERROR_IO = -2,
RATAZANA_ERROR_TIMEOUT = -3,
RATAZANA_ERROR_NOT_FOUND = -4,
RATAZANA_ERROR_PROTOCOL = -5,
RATAZANA_ERROR_ACCESS = -6,
} ratazana_result_t;
typedef enum {
HIDPP20, // mainly Logitech G-series gaming mice
} protocol_t;
typedef struct {
unsigned int vendor_id;
unsigned int product_id;
unsigned int bus_type;
char path[256]; // /dev/hidrawX path
char name[256]; // human-readable name
} ratazana_hid_device_t;
typedef bool (*ratazana_device_matcher_t)(ratazana_hid_device_t *info);
ratazana_result_t ratazana_hid_enumerate(ratazana_hid_device_t *out,
ratazana_device_matcher_t matcher);
ratazana_result_t ratazana_device_open(ratazana_device_t *restrict dev,
const char *restrict path,
uint8_t device_index);
void ratazana_device_close(ratazana_device_t *dev);
void ratazana_cleanup(ratazana_device_t *dev);
const char *ratazana_strerror(ratazana_result_t result);
[[gnu::format(printf, 1, 2)]]
_Noreturn void ratazana_fatal(const char *fmt, ...);