diff options
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/hosted/samsungypr/radio-ypr.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/firmware/target/hosted/samsungypr/radio-ypr.c b/firmware/target/hosted/samsungypr/radio-ypr.c index af49c4c3f2..4fccf2616f 100644 --- a/firmware/target/hosted/samsungypr/radio-ypr.c +++ b/firmware/target/hosted/samsungypr/radio-ypr.c | |||
@@ -88,6 +88,7 @@ static void NORETURN_ATTR rds_thread(void) | |||
88 | /* start up frozen */ | 88 | /* start up frozen */ |
89 | int timeout = TIMEOUT_BLOCK; | 89 | int timeout = TIMEOUT_BLOCK; |
90 | struct queue_event ev; | 90 | struct queue_event ev; |
91 | bool rds_rdy = false; | ||
91 | 92 | ||
92 | while (true) { | 93 | while (true) { |
93 | queue_wait_w_tmo(&rds_queue, &ev, timeout); | 94 | queue_wait_w_tmo(&rds_queue, &ev, timeout); |
@@ -96,10 +97,14 @@ static void NORETURN_ATTR rds_thread(void) | |||
96 | /* power up: timeout after 1 tick, else block indefinitely */ | 97 | /* power up: timeout after 1 tick, else block indefinitely */ |
97 | timeout = ev.data ? 1 : TIMEOUT_BLOCK; | 98 | timeout = ev.data ? 1 : TIMEOUT_BLOCK; |
98 | break; | 99 | break; |
99 | case SYS_TIMEOUT: | 100 | case SYS_TIMEOUT:; |
100 | /* Captures RDS data and processes it */ | 101 | /* Captures RDS data and processes it */ |
101 | if ((si4709_read_reg(STATUSRSSI) & STATUSRSSI_RDSR) >> 8) { | 102 | bool rdsr = si4709_read_reg(STATUSRSSI) & STATUSRSSI_RDSR; |
102 | si4700_rds_process(); | 103 | if (rdsr != rds_rdy) { |
104 | rds_rdy = rdsr; | ||
105 | if (rdsr) { | ||
106 | si4700_rds_process(); | ||
107 | } | ||
103 | } | 108 | } |
104 | break; | 109 | break; |
105 | } | 110 | } |