Project

General

Profile

#ifndef HIDPARSER_H
#define HIDPARSER_H

#include <common/integer.h>

#define CONFIG_TYPE_NONE 0
#define CONFIG_TYPE_MOUSE 1
#define CONFIG_TYPE_KEYBOARD 2
#define CONFIG_TYPE_JOYSTICK 3

// currently only joysticks are supported
typedef struct {
uint8_t type: 2; // CONFIG_TYPE_...
uint8_t report_id;
uint8_t report_size;

union {
struct {
struct {
uint8_t byte_offset;
uint8_t size; // 8 or 16 bits supported
struct {
/* uint8_t minl;
uint8_t minh;
uint8_t maxl;
uint8_t maxh;*/
uint16_t min;
uint16_t max;
} logical;
} axis[2]; // x and y axis

struct {
uint8_t byte_offset;
uint8_t bitmask;
} button[24]; // 24 buttons
} joystick;
};
} hid_config_t;

bool parse_report_descriptor(uint8_t *rep, uint16_t rep_size, hid_config_t *conf);

#endif // HIDPARSER_H
(8-8/17)