Try this, it's only a proof of concept I put together in 20 minutes, so it's not good code or even remotely robust, but it'll get you started I hope:
Add "using System.Collections;" to the Si4703 class I uploaded before.
Also add this code to the same class.
public string PrintRadioName() { int j = 0; string token = ""; string fullRadioName = ""; while (true && j < 500) { j++; this.ReadRegisters(); if ((this.Si4703_Registers[Si4703.STATUSRSSI] & (1 << Si4703.RDSR)) > 1) { var radioNameSoFar = this.ReadRadioName(); if (radioNameSoFar != null) { if (token != (string)radioNameSoFar.Value) { token = (string)radioNameSoFar.Value; fullRadioName += radioNameSoFar.Value; } if (fullRadioName.Length > 16) { return fullRadioName; } } } } return string.Empty; } public DictionaryEntry ReadRadioName() { if ((this.Si4703_Registers[RDSB] >> 11) == 0 || (this.Si4703_Registers[RDSB] >> 11) == 1) { int Dh = (this.Si4703_Registers[RDSD] & 0xFF00) >> 8; int Dl = (this.Si4703_Registers[RDSD] & 0x00FF); int infoOrder = (this.Si4703_Registers[RDSB] & 0x00FF); var radioName = new System.Text.UTF8Encoding(); byte blockerrors = (byte)((this.Si4703_Registers[STATUSRSSI] & 0x0600) >> 9); //Mask in BLERA DictionaryEntry d; if (blockerrors == 0) { if ((Dh >= 32 && Dh <= 127) && (Dl >= 32 && Dl <= 127)) { var radioChars = radioName.GetChars(new byte[] { (byte)Dh, (byte)Dl }); d = new DictionaryEntry(infoOrder, "" + radioChars[0] + radioChars[1]); return d; } } } return null; }
And call the "PrintRadioName" method after you tune to a radio station with a strong signal. If there's something there, it should return it into a string variable. I was able to get some RDS information with this, so hopefully it'll work in your part of the world too. Anyway, give it a try and let me know what happens.
Jeremy