65 lines
2.8 KiB
C
65 lines
2.8 KiB
C
/*
|
|
* Azeron Linux Configuration Library - Internal Header
|
|
* Copyright (C) 2024 Azeron Linux Project
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
#ifndef AZERON_INTERNAL_H
|
|
#define AZERON_INTERNAL_H
|
|
|
|
#include "azeron.h"
|
|
#include <libusb-1.0/libusb.h>
|
|
#include <pthread.h>
|
|
#include <stdio.h>
|
|
|
|
#define AZERON_USB_TIMEOUT 1000
|
|
#define AZERON_MAX_STRING_LENGTH 256
|
|
|
|
/* Debug logging */
|
|
#ifdef AZERON_DEBUG
|
|
#define AZERON_LOG(fmt, ...) fprintf(stderr, "[AZERON] " fmt "\n", ##__VA_ARGS__)
|
|
#else
|
|
#define AZERON_LOG(fmt, ...) do {} while (0)
|
|
#endif
|
|
|
|
/* Error logging */
|
|
#define AZERON_ERROR(fmt, ...) fprintf(stderr, "[AZERON ERROR] " fmt "\n", ##__VA_ARGS__)
|
|
|
|
/* Device structure */
|
|
struct azeron_device {
|
|
libusb_device_handle *handle;
|
|
libusb_context *context;
|
|
struct azeron_device_info info;
|
|
pthread_mutex_t mutex;
|
|
bool claimed;
|
|
};
|
|
|
|
/* Protocol functions */
|
|
int azeron_protocol_init(struct azeron_device *device);
|
|
int azeron_protocol_read_config(struct azeron_device *device, uint32_t offset, uint8_t *data, size_t *size);
|
|
int azeron_protocol_write_config(struct azeron_device *device, const uint8_t *data, size_t size);
|
|
int azeron_protocol_get_button_mapping(struct azeron_device *device, uint8_t button_id, struct azeron_button_mapping *mapping);
|
|
int azeron_protocol_set_button_mapping(struct azeron_device *device, const struct azeron_button_mapping *mapping);
|
|
int azeron_protocol_get_stick_config(struct azeron_device *device, struct azeron_stick_config *config);
|
|
int azeron_protocol_set_stick_config(struct azeron_device *device, const struct azeron_stick_config *config);
|
|
int azeron_protocol_get_active_profile(struct azeron_device *device, uint8_t *profile_id);
|
|
int azeron_protocol_set_active_profile(struct azeron_device *device, uint8_t profile_id);
|
|
int azeron_protocol_get_profile(struct azeron_device *device, uint8_t profile_id, struct azeron_profile *profile);
|
|
int azeron_protocol_set_profile(struct azeron_device *device, const struct azeron_profile *profile);
|
|
int azeron_protocol_save_to_device(struct azeron_device *device, uint8_t profile_id);
|
|
|
|
/* Device functions */
|
|
int azeron_device_claim(struct azeron_device *device);
|
|
int azeron_device_release(struct azeron_device *device);
|
|
int azeron_device_read(struct azeron_device *device, uint8_t endpoint, uint8_t *data, size_t size, int timeout);
|
|
int azeron_device_write(struct azeron_device *device, uint8_t endpoint, const uint8_t *data, size_t size, int timeout);
|
|
int azeron_device_control_transfer(struct azeron_device *device, uint8_t request_type, uint8_t request, uint16_t value, uint16_t index, uint8_t *data, size_t size, int timeout);
|
|
|
|
/* Utility functions */
|
|
const char *azeron_usb_error_string(int error);
|
|
int azeron_libusb_to_azeron_error(int libusb_error);
|
|
void azeron_device_info_from_libusb(struct azeron_device *device, libusb_device *libusb_dev);
|
|
|
|
#endif /* AZERON_INTERNAL_H */
|