You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
846 B
45 lines
846 B
~hidCtrl = (
|
|
defName: \hidCtrl,
|
|
// Array of HIDInfo objects
|
|
devices: [],
|
|
// List of HID objects. Maybe should be private later
|
|
connected: List.new(),
|
|
eventsMap: IdentityDictionary[
|
|
\X -> { | val | val.postln },
|
|
],
|
|
connect: {
|
|
|self|
|
|
self.devices.do {
|
|
|hidinfo|
|
|
var device = HID.open(
|
|
hidinfo.vendorID,
|
|
hidinfo.productID,
|
|
hidinfo.path
|
|
);
|
|
|
|
if(device.notNil) {
|
|
self.connected.add(device);
|
|
}
|
|
};
|
|
},
|
|
free: {
|
|
|self|
|
|
if(self.connected.size > 0) {
|
|
self.connected.do { |hid| hid.close };
|
|
self.connected.clear;
|
|
}
|
|
|
|
HIDdef(self.defName).free;
|
|
},
|
|
listen: {
|
|
|self|
|
|
HIDdef.usage(self.defName, {
|
|
|value, rawValue, usage, page, elid, ele, devid, device|
|
|
var name = HIDUsage.idsToName(page, usage);
|
|
var handler = self.eventsMap[name];
|
|
|
|
if(handler.notNil) { handler.(value) };
|
|
});
|
|
}
|
|
);
|