I thought I'd document my investigations with the Griffin NA10629 PowerMate USB MultiMedia Controller.
One of the best bargains I found was a Griffin Technology NA16029 PowerMate USB Multimedia Controller. The seller is a friend; he was trying (and succeeding) to push off a lot of his gear on me. We were actually in reverse price negotiations at one point–as he kept discounting prices, I was trying to raise them. Griffin Technology PowerMate Knob - gripes. By Griffin Technology PowerMate is the coolest volume knob your computer has ever seen - but it's so much more. You can use it to edit home movies or scroll through long documents or create your.
- When Griffin Technology revealed the original PowerMate —a hefty polished aluminum programmable knob—way back in 2001, most users were left scratching their head as to what they'd use it for.
- Wirelessly control everything, from volume to key commands. PowerMate Bluetooth is the wireless programmable controller that replaces extra keystrokes with a simple twist or a click.
Motivations
A good high-resolution knob is the sort of thing I've been looking for for a while. In the MIDI world, they simply don't exist; 7-bits of resolution ain't enough. Two weeks ago, I googled 'USB Knob' in the hopes that a generic peripheral would pop up. And this thing did. So I bought it.
In past, I've parsed data from the Logitech F310 game controller and the Huion 680s tablet. Sharepoint site templates free. I feel hopeful in being able to read data from the Griffin.
Decoding the byte stream
The first step in hacking any peripheral device is to figure outhow it speaks to the computer, which is some sort of binary message.
When I plug it in, the Griffin seems to light up. Off to good start.
Running 'dmesg | tail' shows that the Linux kernel is able to know it exists:
Linux can treat every device as a filehandle, and this device resides in/dev/input/by-id/usb-GriffinTechnologyInc.Griffin_PowerMate-event-if00.The raw binary data can be sent into a hex reader in the following way:
With a little trial and error and looking the hex output, I am able to figure out that the message size is 24 bytes long. The hex can be grouped in the following way:
This produces some hex that looks like this:
At this point, I look for patterns in the data. From experience, I caninfer that most of the chunks refer to timestamp data, and that the rightmostbytes contain the data I need.
From the data, I am able to figure out how button toggle message worked.I am also able to conclude that the Griffin does not store any typeof internal value like a typical potentiometer would. Instead,it sends messages about when it is turned, and the direction it isgoing in.
The message format of the Griffin adds an extra complication. Theend goal is to get the Griffin data inside of Sporth, but there isno built in way to actually handle this step-based approachto incrementing data. Soundpipe and Sporth code has to be written.
Creating a Soundpipe Module and Sporth UGen
A new Soundpipe module is made specifically for the Griffin calledincr. When triggered, the module will increment up or down bya specified step. Other parameters to incr are minimum, maximum,and the initial value. It is a pretty trivial module. The sourcecode can be found here.
As it turns out, incr is the first soundpipe module with a triggerthat takes sign into account. When it is negative, it increments downwards. when it is positive, it increments upwards.
Once the incr module is created and documented properly., it can then be quickly turned into a Sporth ugen thanks to a code generator I wrote in lua.
Now that there is way to handle the Griffin data, the Griffin dataneeds to be brought into sporth.
Creating a Sporth Plugin
The Sporth plugin to built will allow the Griffin to be parsed inside of Sporth. Luckily, a good chunk of this code can be recycled from my previouswork with the huion tablet.
The way it works is pretty straight forward: the Sporth pluginwill spawn a thread which will open the Griffin as a file. It willparse it at 24 bytes at a time. Every time a knob message is recieved,the sporth plugin will send out either a positive or negative trigger for incrementing up or down. To prevent the loop from takingup too much CPU, the while loop has a usleep();
Since triggers are exactly one sample long, some careful thought has to given with regards to creating the trigger signal with the asynchronous threads. The thread thereforedoesn't set the trigger directly; it sets a switchthat tells sporth to trigger. Once triggered, sport shuts thatswitch off.
The final code can be found here
Writing Music
With the parsing figured out, it's now time for the hard stuff:making musical sense out of the knob. In the Griffin repository,I've taken some stabs at some Sporth patches, but there is stillplenty to be done. I am still in the process of incorporatingthis into my musical workflow, but thats for a future post.
My Powermate USB sporting a white rubber band grip.
After publishing the post about my PowerMate USB controller, Mike Ladd replied on Facebook:
“Do what I did a couple of years ago and add a lobster claw rubber band to the [PowerMate] tuning wheel.”

In case you’re not familiar, Mike is referring to the thick, wide rubber bands that are placed on lobster claws to hold them shut. Mike included the following video; you can see that the rubber band fits perfectly around the top of the tuning knob, giving it a little extra grip.
This same type of rubber band can often be found in the produce department of grocery stores as it’s used to hold bunches of broccoli, asparagus and other produce together.
Griffin Technology Knob
Many thanks for the tip, Mike!
