----- Original Message -----
From: "Bertrik Sikken" <bertrik_at_sikken.nl>
To: "Rockbox development" <rockbox-dev_at_cool.haxx.se>
Sent: Friday, November 04, 2011 4:52 PM
Subject: RDS support in Rockbox
> The Si4703 can be configured to capture one RDS packet, then
> raise an pin voltage for 5 ms. My plan is to attach an interrupt
> to this event that wakes up a high-prio thread to read the RDS
> packet. It then feeds the raw RDS packet into a generic RDS processor
> that collects packets until a full RDS message has been assembled.
>
I doubt all that is necessary especially with a tuner GPIO interrupt
available in at least some cases and possibly the introduction of an async
I2C driver (not too hard really). I'd suggest not imposing a particular
interface on all hardware but have the hardware implement those details as a
middle layer.
> I'm thinking of the following interface:
> - int rds_process(uint16_t data[4])
What's that now? RDS is always 4 16-bit words?
> which returns a number indicating what kind of data has been
> received. When something is received, the fm tuner driver can call
> a function to get a copy of the RDS data, something like:
> - bool rds_get_stationname(char *buf, int bufsize)
> - bool rds_get_radiotext(char *buf, int bufsize)
Could probably just fill-out a structure provided by the caller with a flag
member indicating which are valid (few single-use calls).
> When the FM frequency is changed, the RDS data is invalidated with
> - void rds_reset(void)
Why not just reread it? The UI can clear its fields. The tuner can indicate
a frequency change internally and clear its own data.
> What do you think?
Needs a bit more thought.
Mike
Received on 2011-11-05