BoomzBox HD Radio. Not quite a review, more of a progress report.
Every month, mp3car selects someone to receive an "Innovation Grant". That is, they give a piece of hardware or software to a community member in an effort to help spawn innovation and creativity among the community. They were nice enough to choose me to receive one of their brand new shiny BoomzBox HD radios. First off I want to say thanks! Upon receiving it, the first thing I did of course was plug it in and try to get it up and running. After some initial issues with the drivers I opened up the interface box to see what was inside. It has a FTDI interface chip and a TI Analog to Digital USB chip, both on a FTDI USB hub. So of course I replaced the drivers included with the radio with the official FTDI drivers for the two FTDI chips and had no further driver related issues. Control for the device is over virtual com port (serial), and audio shows up as another input ("USB Audio Codec"). This of course leads to some interesting audio issues writing my own test app, however let's start by using the radio as it was originally intended before I go off on a tangent.
I started the application that came with the radio and the radio works as expected... audio over usb and all that. Pretty simple stuff and fairly easy to play around with. It locks on to HD Stations quickly even with a wire antenna and the sound quality is good for radio. I used it to listen to radio for about an hour and the box wasn't even warm to the touch, so heat should not be an issue. I decided that it was about time that I should start trying to decode the protocol and get at least a rudimentary third party application up and running in an effort to get this thing into Linux and OSX as I promised.
Fortunately when you first connect to the radio, it turns on with the previous settings (Station, volume, etc). This means I could set it to a station in the "official" application, close the program, and start up mine. This let me figure out how to pipe audio from the input over to the output, which was a hassle, but quite successful. I learned that you should not turn on the audio until after the radio starts up as you will hear some garbage and popping but that's easily fixed by delaying audio startup by a second or so.
After trying unsuccessfully to get some kind of official help with the protocol (Very amusing for reasons a few people here are aware of) I decided to figure it out myself. I loaded up my friendly Portmon serial port monitoring utility, which on a side note is a favorite second only to a hardware logic analyzer for decoding serial protocols. I went to town playing around with the official application. After a few captures, and some tinkering around I've managed to get the radio up and running, switching stations, even reading RDS and HDText in my own application. Woot!
I will be releasing the source code for a control library in c#, GPL of course since the SDK will likely not be open if past experience is any indication, and therefor incompatible with GPL. I may consider LGPL if there is enough interest in integrating it in closed source apps. I will also be porting this to a c++ library for both Linux and OSX, and am more than willing to work with any OSX Frontend developers on integrating it into their frontend.
Also If anyone is interested, I will also be releasing some of my notes on the protocol, as well as documentation as to what does what, and in what sequence as I've found out. Just in case anyone wants to write their own library, and doesn't want to dig through mine.
Well there you have it, the Mp3car BoomzBox HD from a programmers perspective. Not nearly as difficult as I thought it would be, but all in all a very enjoyable unit. If anyone writing a frontend is interested in integration before I get the library released, I can give you the heads up on what kind of interface the it will have so you can start in on integration before I am finished with it, just let me know.