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.

47 lines
851 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) };
});
}
);
)