<bump>
So, I've been experimenting with writing a 'driver' for this. Well, it's not so much a driver- for HIDs, those are built into Windows itself, for the most part- but rather a program that receives 'HID reports' from the device, and responds accordingly.
The software that came with the PowerMate is this dinky little program that sits in the system tray, and allows you to set responses for six different 'actions' of the device. These are: rotate clockwise/counterclockwise, click (the knob is also a button), long click (ie, held down for a moment rather than quickly pressed and released), and rotate clockwise/counterclockwise while holding the button down. The program also recognizes which is the foreground application, and different applications can have different settings. The responses can be various things, such as adjusting volume, scrolling a window, sending virtual keystrokes to applications, and so on.
Now, what I've been thinking is that I can improve on this by adding modifier keys (for example, holding SHIFT while rotating) to increase the number of actions the software would recognize. I could also add entirely new base actions, such as double-clicking, because the device itself (as far as I know) simply sends updates when I was also considering a shortcut that allowed the user to cycle through various settings with the device itself (think 'changing modes').
The LED can also be controlled through software. Basically, it has two modes: pulse, and constant. For pulse, the LED pulses in brightness from completely off to maximum brightness, and one of the parameters is pulse rate. For constant brightness, it is simply set at a level from zero to maximum through software. The pulsing can be set through software, but once set, it remains until something else sets the brightness or pulse rate; it doesn't require the software to send commands (in other words, the device itself handles it, not the USB host). I've considered having the LED flash on certain events. One way to implement this could be to expose a method to other programs, and when this method is called, the LED would flash several times, and then return to the previous setting. This could be useful for various alerts, or as a form of acknowledgment from the software itself (such as when changing modes, where the LED could flash a number of times according to the selected mode).
Why am I going on about this? That's simple. I'm wondering if anyone has any suggestions as to what could make a program like this more functional. If you've got an idea that I could use, I'd be happy to hear it.
So far, what I have is some HID enumeration code and a bit for registering the device. It currently recognizes which HIDs are connected, and parses out various values from the plug-and-play ID string retrieved from Windows. It can also tell the difference between various instances of the same device, which I've tested with two of the same model of Logitech mouse (since I don't have two PowerMates). Though it doesn't seem like a lot, this constitutes the lion's share of the p/invoke stuff I need to code, so almost all the rest can be good old managed C#.
