Files
azeron-cyborg-linux/libazeron/azeron.h
Aodhan Collins 0267543622 Initial commit
2026-02-22 12:51:32 +00:00

152 lines
4.5 KiB
C

/*
* Azeron Linux Configuration Library
* Copyright (C) 2024 Azeron Linux Project
*
* SPDX-License-Identifier: MIT
*/
#ifndef AZERON_H
#define AZERON_H
#include <stdint.h>
#include <stdbool.h>
#include <json-c/json.h>
#ifdef __cplusplus
extern "C" {
#endif
#define AZERON_VENDOR_ID 0x16d0
#define AZERON_PRODUCT_ID 0x113c
#define AZERON_MAX_BUTTONS 32
#define AZERON_MAX_PROFILES 3
/* Error codes */
enum azeron_error {
AZERON_SUCCESS = 0,
AZERON_ERROR_INIT = -1,
AZERON_ERROR_NOT_FOUND = -2,
AZERON_ERROR_ACCESS = -3,
AZERON_ERROR_IO = -4,
AZERON_ERROR_PROTOCOL = -5,
AZERON_ERROR_INVALID_PARAM = -6,
AZERON_ERROR_NO_MEM = -7,
AZERON_ERROR_UNSUPPORTED = -8,
};
/* Button types that can be mapped */
enum azeron_button_type {
AZERON_BTN_KEYBOARD = 0,
AZERON_BTN_MOUSE,
AZERON_BTN_GAMEPAD,
AZERON_BTN_MACRO,
AZERON_BTN_LAYER_SWITCH,
};
/* Analog stick modes */
enum azeron_stick_mode {
AZERON_STICK_ANALOG = 0,
AZERON_STICK_DIGITAL_4,
AZERON_STICK_DIGITAL_8,
AZERON_STICK_MOUSE,
};
/* Device information */
struct azeron_device_info {
uint16_t vendor_id;
uint16_t product_id;
char serial_number[64];
char manufacturer[128];
char product[128];
uint8_t firmware_version;
uint8_t num_profiles;
uint8_t active_profile;
};
/* Button mapping */
struct azeron_button_mapping {
uint8_t button_id;
enum azeron_button_type type;
uint16_t key_code; /* Linux input event code */
char *macro; /* For macro type */
uint8_t layer_target; /* For layer switch type */
};
/* Analog stick configuration */
struct azeron_stick_config {
enum azeron_stick_mode mode;
uint8_t deadzone; /* 0-100 */
uint8_t sensitivity; /* 0-100 */
bool invert_x;
bool invert_y;
uint8_t response_curve; /* 0=linear, 1=exponential, etc. */
};
/* Profile configuration */
struct azeron_profile {
uint8_t profile_id;
char name[64];
struct azeron_button_mapping buttons[AZERON_MAX_BUTTONS];
uint8_t num_buttons;
struct azeron_stick_config stick_config;
};
/* Opaque device handle */
struct azeron_device;
/* Library initialization */
int azeron_init(void);
void azeron_exit(void);
const char *azeron_error_string(int error);
/* Device management */
int azeron_device_list(struct azeron_device_info **devices, size_t *count);
void azeron_device_list_free(struct azeron_device_info *devices, size_t count);
int azeron_device_open(struct azeron_device **device, uint16_t vendor_id, uint16_t product_id);
int azeron_device_open_index(struct azeron_device **device, size_t index);
void azeron_device_close(struct azeron_device *device);
int azeron_device_get_info(struct azeron_device *device, struct azeron_device_info *info);
/* Button mapping */
int azeron_device_get_button_mapping(struct azeron_device *device, uint8_t button_id,
struct azeron_button_mapping *mapping);
int azeron_device_set_button_mapping(struct azeron_device *device,
const struct azeron_button_mapping *mapping);
/* Analog stick configuration */
int azeron_device_get_stick_config(struct azeron_device *device,
struct azeron_stick_config *config);
int azeron_device_set_stick_config(struct azeron_device *device,
const struct azeron_stick_config *config);
/* Profile management */
int azeron_device_get_active_profile(struct azeron_device *device, uint8_t *profile_id);
int azeron_device_set_active_profile(struct azeron_device *device, uint8_t profile_id);
int azeron_device_get_profile(struct azeron_device *device, uint8_t profile_id,
struct azeron_profile *profile);
int azeron_device_set_profile(struct azeron_device *device,
const struct azeron_profile *profile);
/* Configuration import/export */
int azeron_device_export_config(struct azeron_device *device, const char *filename);
int azeron_device_import_config(struct azeron_device *device, const char *filename);
int azeron_device_export_config_json(struct azeron_device *device, struct json_object **json);
int azeron_device_import_config_json(struct azeron_device *device, struct json_object *json);
/* Utility functions */
const char *azeron_button_type_string(enum azeron_button_type type);
const char *azeron_stick_mode_string(enum azeron_stick_mode mode);
int azeron_keycode_from_string(const char *key_name);
const char *azeron_keycode_to_string(int keycode);
#ifdef __cplusplus
}
#endif
#endif /* AZERON_H */