So all-in-all, my goals are:
-steering wheel track control (This one's especially tricky since the protocol used by the BMW Y cable doesn't necessarily play nice with third party apps like rdio - the skip forward/back buttons just... don't work).
-(maybe) a2dp music streaming.
-everything AS OEM AS POSSIBLE.
In my car, I was finally able to retrofit bluetooth handsfree, some parts are still on the way to finish it, but we'll assume that's in. That leaves the music side.
I actually got one of these guys, the iskin curelean
hoping that, because it does iPod Accessory Protocol (serial port control) to AVRCP translation, I could get steering wheel control by just plugging it in.
Unfortunately, I think that because it doesn't respond to some control messages, it doesn't fully emulate an iPod and thus the car never detects an iPod plugged in and never issues serial commands from the console and wheel controls. So basically, it's only useful for streaming, and unfortunately the quality even at that isn't the best (as soon as there's lots going on, or high frequency sounds, you get a bit of a bubbling from whatever codec is being used for transmission).
The only real options I see after this are a Parrot system (which doesn't offer great integration - a little dongle to do wheel controls, which offers more control, but less integration, and no stereo integration for things like the phone book, which is the real bummer) or a Kufatec Fiscon.
Basically, I think the Fiscon is perfect, but I don't want to spend $450 without having tested one personally first.
I think the end result of all this is that I'm just going to straight up build my own. Plan is to plug in the normal Y cable and sniff the serial commands going between the phone and cable, then make a dongle which fully implements AVRCP, A2DP, and also uses those protocols to fully emulate an iPod plugged into the car when a phone is paired. It'll probably be a while before I actually get around to making it, so I guess I'll keep you guys updated. I'll probably blog it and start a new thread if/when I actually get to it.