I got a guitar effects unit for Christmas. It has a USB port, but the manufacturer's documentation insists it's only for uploading new firmware via their bit of dedicated software.
But it turns out that it does more than that, and someone's written a Windows program to tweak the patches'n'stuff. But it's closed-source (apparently he doesn't want people to break their devices
), and I'm mostly a Linux shop, and really CBA to be firing up VirtualBox every time I want to fiddle around with it.
So I broke out a copy of Wireshark, installed his software on Windows, and made lots of lovely packet captures of it doing various things. Now I'm reverse-engineering everything into a nice tidy Python class to be able to do the same stuff, but programmatically.
I used to do quite a lot of this kind of thing back in the day. It's got much more complicated now, though: when I was doing this stuff before, it was all serial ports, ASCII, and timing. Now, it's USB device descriptors, Unicode, language support, and so on. But the detective work of figuring out what the protocol is doing is still much the same, although it's a steep learning curve - the docs for the Python USB libraries are a little sketchy, so I've got a window open with the library source in, and doing lots of grepping for function calls, etc.
I'm having fun
Almost as much fun as actually
using the effects unit.