Generic Devices are a great addition to the feature set. I used to use MacDial to monitor events of my SurfaceDial knob (a neat piece of hardware). From my experience hacking MacDial, I know that if I turn the knob right, it reports the same state for every "click" (a rotation of "n" degrees). Unfortunately, BTT only reports a single event, no matter how far right I turn the knob. Could you make that optional? That would make rotary knobs like the SurfaceDial actually useful for macOS.
thanks so much
ah yes I will add a function that you can call to make it recognize again. Will upload a version that includes this later!
In 4.005 you can now just call
bttGetNextEvenWithoutChange(targetDevice, reportID)
from your analyzer function, then it will get the next report even if there hasn't been a change in the data itself.
Works like a charm -- very nice, and thanks so much.
As soon as you get around to Support sending "Key Repeat" events for keyboard shortcut action, it will turn my SurfaceDial into a nice shuttle for Final Cut Pro 
Nice, would be great if you could share your script!
The key repeat thing is on my TODO list and I should get to it soon.
Sure, very simple, though:
function analyzeDeviceInput(targetDevice, reportID, reportDataHex) {
let reportBuffer = buffer.Buffer.from(reportDataHex, 'hex');
if(reportBuffer.readUInt8(1) === 0x03) {
bttTriggerDeviceTrigger(targetDevice, 'button');
} else if(reportBuffer.readUInt8(2) === 0x01) {
bttTriggerDeviceTrigger(targetDevice, 'right');
} else if(reportBuffer.readUInt8(2) === 0xff) {
bttTriggerDeviceTrigger(targetDevice, 'left');
}
bttGetNextEvenWithoutChange(targetDevice, reportID)
}
The Dial actually has some other nice features, like haptic feedback and configurable sensitivity. I might try using the executeBTTCommand feature to enable those at some point.
1 Like
Thanks for sharing! Things like the Surface Dial are exactly the type of device I thought about when adding this generic device functionality. It's pretty nice being able to revive a small device with a few lines of code.
1 Like