Steering wheel remote audio control

Hi all, I think I have found the best way to do this. Simply use Pulse Width Modulation. I did mine on a PIC, I have a 7 bit PWM output (active low) at about 15kHz driving a standard RC low pass filter, with a 180R resistor into a 47u cap.

Connect the output of the RC filter into the 'tip'. So far I haven't been able to get the 'ring' working with the shift commands. I think I might need to make it open drain.

Here is the PIC code, I'm sure it would be easily translated. Basically it is a 1 byte command (cmd), 0-127 is without shift, 128-255 is with shift. Sets the voltage for 200ms, then takes it high again.

if (cmd&0x80) SHIFT_SetLow(); // make shift low if >127
PWM1_DutyCycleSet(cmd&0x7f); // load register with lower 7 bits
PWM1_LoadBufferSet(); // register -> control buffer
__delay_ms(200);
PWM1DCL = 0;
PWM1_LoadBufferSet();
SHIFT_SetHigh();

With my AVH A205BT I have found the following commands from these PWM register values (remember it is active low, so effectively from high resistance to low)

17 band
33 vol -
44 vol +
55 tune/track down
66 tune/track up
75 display
91 dial
115 phone menu