#ifndef NALL_HID_HPP
#define NALL_HID_HPP
namespace nall {
namespace HID {
struct Input {
string name;
int16_t value = 0;
Input() {}
Input(const string& name) : name(name) {}
};
struct Group {
string name;
vector input;
Group() {}
Group(const string& name) : name(name) {}
void append(const string& name) {
input.append({name});
}
maybe find(const string& name) {
for(unsigned id = 0; id < input.size(); id++) {
if(input[id].name == name) return id;
}
return nothing;
}
};
struct Device {
uint64_t id = 0;
string name;
vector group;
uint32_t pathID() const { return (uint32_t)(id >> 32); }
uint32_t deviceID() const { return (uint32_t)(id >> 0); }
uint16_t vendorID() const { return (uint16_t)(id >> 16); }
uint16_t productID() const { return (uint16_t)(id >> 0); }
virtual bool isNull() const { return false; }
virtual bool isKeyboard() const { return false; }
virtual bool isMouse() const { return false; }
virtual bool isJoypad() const { return false; }
void append(const string& name) {
group.append({name});
}
maybe find(const string& name) {
for(unsigned id = 0; id < group.size(); id++) {
if(group[id].name == name) return id;
}
return nothing;
}
};
struct Null : Device {
Null() {
name = "Null";
}
bool isNull() const { return true; }
};
struct Keyboard : Device {
enum GroupID : unsigned { Button };
Group& button() { return group[GroupID::Button]; }
Keyboard() {
name = "Keyboard";
append("Button");
}
bool isKeyboard() const { return true; }
};
struct Mouse : Device {
enum GroupID : unsigned { Axis, Button };
Group& axis() { return group[GroupID::Axis]; }
Group& button() { return group[GroupID::Button]; }
Mouse() {
name = "Mouse";
append("Axis");
append("Button");
}
bool isMouse() const { return true; }
};
struct Joypad : Device {
enum GroupID : unsigned { Axis, Hat, Trigger, Button };
Group& axis() { return group[GroupID::Axis]; }
Group& hat() { return group[GroupID::Hat]; }
Group& trigger() { return group[GroupID::Trigger]; }
Group& button() { return group[GroupID::Button]; }
bool rumble = false;
Joypad() {
name = "Joypad";
append("Axis");
append("Hat");
append("Trigger");
append("Button");
}
bool isJoypad() const { return true; }
};
}
}
#endif