summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/debug_menu.c21
-rw-r--r--firmware/drivers/rds.c16
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}
1879static bool dbg_fm_radio(void) 1882static 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 */
28static uint16_t pi; 28static uint16_t pi_code;
29static uint16_t pi_last;
29/* program service name */ 30/* program service name */
30static char ps_data[9]; 31static char ps_data[9];
31static char ps_copy[9]; 32static 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 */
211uint16_t rds_get_pi(void) 215uint16_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 */