diff options
author | Bertrik Sikken <bertrik@sikken.nl> | 2012-02-16 20:49:06 +0100 |
---|---|---|
committer | Bertrik Sikken <bertrik@sikken.nl> | 2012-02-16 20:49:06 +0100 |
commit | 565a4b5baadad431e63ec183a2eaea6564346940 (patch) | |
tree | 6f1c60bdaf48f63ff7aedeeadc468e21de72ded5 | |
parent | d2f97da668836f5d825c9aaef0d58dea64fc4dd5 (diff) | |
download | rockbox-565a4b5baadad431e63ec183a2eaea6564346940.tar.gz rockbox-565a4b5baadad431e63ec183a2eaea6564346940.zip |
rds: make programme identification (pi) decoding safer, show pi in the debug screen
Change-Id: I8b547400f4a28ee387157848b9640a3361df937f
-rw-r--r-- | apps/debug_menu.c | 21 | ||||
-rw-r--r-- | firmware/drivers/rds.c | 16 |
2 files changed, 22 insertions, 15 deletions
diff --git a/apps/debug_menu.c b/apps/debug_menu.c index a249a9be9a..28f36edeb7 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c | |||
@@ -124,6 +124,10 @@ | |||
124 | #include "iap.h" | 124 | #include "iap.h" |
125 | #endif | 125 | #endif |
126 | 126 | ||
127 | #ifdef HAVE_RDS_CAP | ||
128 | #include "rds.h" | ||
129 | #endif | ||
130 | |||
127 | /*---------------------------------------------------*/ | 131 | /*---------------------------------------------------*/ |
128 | /* SPECIAL DEBUG STUFF */ | 132 | /* SPECIAL DEBUG STUFF */ |
129 | /*---------------------------------------------------*/ | 133 | /*---------------------------------------------------*/ |
@@ -1851,15 +1855,6 @@ static int radio_callback(int btn, struct gui_synclist *lists) | |||
1851 | simplelist_addline(SIMPLELIST_ADD_LINE,"%02X: %04X %04X %04X %04X", | 1855 | simplelist_addline(SIMPLELIST_ADD_LINE,"%02X: %04X %04X %04X %04X", |
1852 | i, nfo.regs[i], nfo.regs[i+1], nfo.regs[i+2], nfo.regs[i+3]); | 1856 | i, nfo.regs[i], nfo.regs[i+1], nfo.regs[i+2], nfo.regs[i+3]); |
1853 | } | 1857 | } |
1854 | #ifdef HAVE_RDS_CAP | ||
1855 | simplelist_addline(SIMPLELIST_ADD_LINE, ""); | ||
1856 | simplelist_addline(SIMPLELIST_ADD_LINE, "RDS Info:"); | ||
1857 | simplelist_addline(SIMPLELIST_ADD_LINE, | ||
1858 | si4700_get_rds_info(RADIO_RDS_NAME)); | ||
1859 | |||
1860 | simplelist_addline(SIMPLELIST_ADD_LINE, | ||
1861 | si4700_get_rds_info(RADIO_RDS_TEXT)); | ||
1862 | #endif | ||
1863 | } | 1858 | } |
1864 | #endif /* SI4700 */ | 1859 | #endif /* SI4700 */ |
1865 | #if (CONFIG_TUNER & RDA5802) | 1860 | #if (CONFIG_TUNER & RDA5802) |
@@ -1874,6 +1869,14 @@ static int radio_callback(int btn, struct gui_synclist *lists) | |||
1874 | } | 1869 | } |
1875 | } | 1870 | } |
1876 | #endif /* RDA55802 */ | 1871 | #endif /* RDA55802 */ |
1872 | |||
1873 | #ifdef HAVE_RDS_CAP | ||
1874 | simplelist_addline(SIMPLELIST_ADD_LINE, "RDS Info:"); | ||
1875 | simplelist_addline(SIMPLELIST_ADD_LINE, "PI:%04X PS:'%8s'", | ||
1876 | rds_get_pi(), rds_get_ps()); | ||
1877 | simplelist_addline(SIMPLELIST_ADD_LINE, "RT:%s", | ||
1878 | rds_get_rt()); | ||
1879 | #endif | ||
1877 | return ACTION_REDRAW; | 1880 | return ACTION_REDRAW; |
1878 | } | 1881 | } |
1879 | static bool dbg_fm_radio(void) | 1882 | static bool dbg_fm_radio(void) |
diff --git a/firmware/drivers/rds.c b/firmware/drivers/rds.c index 05b17aba12..73118b4c37 100644 --- a/firmware/drivers/rds.c +++ b/firmware/drivers/rds.c | |||
@@ -25,7 +25,8 @@ | |||
25 | #include "rds.h" | 25 | #include "rds.h" |
26 | 26 | ||
27 | /* programme identification */ | 27 | /* programme identification */ |
28 | static uint16_t pi; | 28 | static uint16_t pi_code; |
29 | static uint16_t pi_last; | ||
29 | /* program service name */ | 30 | /* program service name */ |
30 | static char ps_data[9]; | 31 | static char ps_data[9]; |
31 | static char ps_copy[9]; | 32 | static char ps_copy[9]; |
@@ -69,11 +70,12 @@ void rds_reset(void) | |||
69 | { | 70 | { |
70 | int oldlevel = rds_disable_irq_save(); | 71 | int oldlevel = rds_disable_irq_save(); |
71 | 72 | ||
73 | pi_code = 0; | ||
74 | pi_last = 0; | ||
72 | ps_copy[0] = '\0'; | 75 | ps_copy[0] = '\0'; |
73 | ps_segment = 0; | 76 | ps_segment = 0; |
74 | rt_copy[0] = '\0'; | 77 | rt_copy[0] = '\0'; |
75 | rt_segment = 0; | 78 | rt_segment = 0; |
76 | pi = 0; | ||
77 | 79 | ||
78 | rds_restore_irq(oldlevel); | 80 | rds_restore_irq(oldlevel); |
79 | } | 81 | } |
@@ -180,10 +182,12 @@ bool rds_process(uint16_t data[4]) | |||
180 | { | 182 | { |
181 | int group; | 183 | int group; |
182 | 184 | ||
183 | /* get programme identification */ | 185 | /* process programme identification (PI) code */ |
184 | if (pi == 0) { | 186 | uint16_t pi = data[0]; |
185 | pi = data[0]; | 187 | if (pi == pi_last) { |
188 | pi_code = pi; | ||
186 | } | 189 | } |
190 | pi_last = pi; | ||
187 | 191 | ||
188 | /* handle rds data based on group */ | 192 | /* handle rds data based on group */ |
189 | group = (data[1] >> 11) & 0x1F; | 193 | group = (data[1] >> 11) & 0x1F; |
@@ -210,7 +214,7 @@ bool rds_process(uint16_t data[4]) | |||
210 | /* returns the programme identification code */ | 214 | /* returns the programme identification code */ |
211 | uint16_t rds_get_pi(void) | 215 | uint16_t rds_get_pi(void) |
212 | { | 216 | { |
213 | return pi; | 217 | return pi_code; |
214 | } | 218 | } |
215 | 219 | ||
216 | /* returns the most recent valid programme service name */ | 220 | /* returns the most recent valid programme service name */ |