diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2017-01-30 09:52:05 -0500 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2017-02-11 22:19:32 -0500 |
commit | fc9695eb47732e1c189e2f033dbd55e5c346e8c4 (patch) | |
tree | 550830e9af67f47e3eb87587770b25d22110f57a /firmware/export/si4700.h | |
parent | 6436c6e749ab04fbd5d97804a6a1c3b3122b326d (diff) | |
download | rockbox-fc9695eb47732e1c189e2f033dbd55e5c346e8c4.tar.gz rockbox-fc9695eb47732e1c189e2f033dbd55e5c346e8c4.zip |
Improve radio RDS driver and framework
* Remove unused bits like the radio event and simplify basic
radio interface. It can be more self-contained with rds.h only
required by radio and tuner code.
* Add post-processing to text a-la Silicon Labs AN243. The chip's
error correction can only do so much; additional checks are highly
recommended. Simply testing for two identical messages in a row
is extremely effective and I've never seen corrupted text since
doing that, even with mediocre reception.
Groups segments must arrive in order, not randomly; logic change
only accepts them in order, starting at 0.
Time readout was made a bit better but really we'd need to use
verbose mode and ensure that no errors were seen during receiving
of time and more checks would be need to have a stable PI. The
text is the important bit anyway.
* Time out of stale text.
* Text is no longer updated until a complete group has been
received, as is specified in the standard. Perhaps go back to
scrolling text lines in the radio screen?
* Add proper character conversion to UTF-8. Only the default G0
table for the moment. The other two could be added in.
* Add variants "RDS_CFG_PROCESS" and "RDS_CFG_PUSH" to allow
the option for processed RDS data to be pushed to the driver and
still do proper post-processing (only text conversion for now for
the latter).
Change-Id: I4d83f8b2e89a209a5096d15ec266477318c66925
Diffstat (limited to 'firmware/export/si4700.h')
-rw-r--r-- | firmware/export/si4700.h | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/firmware/export/si4700.h b/firmware/export/si4700.h index 6b7992c025..bd75bf0817 100644 --- a/firmware/export/si4700.h +++ b/firmware/export/si4700.h | |||
@@ -35,36 +35,34 @@ struct si4700_dbg_info | |||
35 | }; | 35 | }; |
36 | 36 | ||
37 | bool si4700_detect(void); | 37 | bool si4700_detect(void); |
38 | void si4700_init(void); | 38 | void si4700_init(void) INIT_ATTR; |
39 | int si4700_set(int setting, int value); | 39 | int si4700_set(int setting, int value); |
40 | int si4700_get(int setting); | 40 | int si4700_get(int setting); |
41 | void si4700_dbg_info(struct si4700_dbg_info *nfo); | 41 | void si4700_dbg_info(struct si4700_dbg_info *nfo); |
42 | /* For interrupt-based mono/stereo indicator */ | 42 | /* For interrupt-based mono/stereo indicator */ |
43 | bool si4700_st(void); | 43 | bool si4700_st(void); |
44 | 44 | ||
45 | #ifdef HAVE_RDS_CAP | ||
45 | /** RDS support **/ | 46 | /** RDS support **/ |
46 | void si4700_rds_init(void); | 47 | |
48 | void si4700_rds_init(void) INIT_ATTR; | ||
47 | /* Radio is fully powered up or about to be powered down */ | 49 | /* Radio is fully powered up or about to be powered down */ |
48 | void si4700_rds_powerup(bool on); | 50 | void si4700_rds_powerup(bool on); |
49 | #ifdef RDS_ISR_PROCESSING | 51 | |
52 | #if (CONFIG_RDS & RDS_CFG_ISR) | ||
50 | /* Read raw RDS info for processing - asynchronously */ | 53 | /* Read raw RDS info for processing - asynchronously */ |
51 | void si4700_read_raw_async(int count); /* implemented by target */ | 54 | void si4700_rds_read_raw_async(unsigned char *buf, int count); /* implemented by target */ |
52 | void si4700_rds_read_raw_async(void); | 55 | void si4700_rds_interrupt(void); |
53 | void si4700_rds_read_raw_async_complete(unsigned char *regbuf, | 56 | #endif /* (CONFIG_RDS & RDS_CFG_ISR) */ |
54 | uint16_t data[4]); | 57 | |
55 | #else /* ndef RDS_ISR_PROCESSING */ | ||
56 | /* Read raw RDS info for processing */ | 58 | /* Read raw RDS info for processing */ |
57 | bool si4700_rds_read_raw(uint16_t data[4]); | 59 | void si4700_rds_process(void); |
58 | #endif /* RDS_ISR_PROCESSING */ | 60 | |
59 | /* Obtain specified string */ | 61 | #endif /* HAVE_RDS_CAP */ |
60 | char* si4700_get_rds_info(int setting); | ||
61 | /* Set the event flag */ | ||
62 | void si4700_rds_set_event(void); | ||
63 | 62 | ||
64 | #ifndef CONFIG_TUNER_MULTI | 63 | #ifndef CONFIG_TUNER_MULTI |
65 | #define tuner_set si4700_set | 64 | #define tuner_set si4700_set |
66 | #define tuner_get si4700_get | 65 | #define tuner_get si4700_get |
67 | #define tuner_get_rds_info si4700_get_rds_info | ||
68 | #endif | 66 | #endif |
69 | 67 | ||
70 | #endif /* _SI4700_H_ */ | 68 | #endif /* _SI4700_H_ */ |