diff options
author | Bertrik Sikken <bertrik@sikken.nl> | 2010-11-11 21:13:29 +0000 |
---|---|---|
committer | Bertrik Sikken <bertrik@sikken.nl> | 2010-11-11 21:13:29 +0000 |
commit | de870b3ee049262f984254305c7a062a1cdf3026 (patch) | |
tree | f9636eb3e4634ac223a0c5a6dadeb4e1a25b61db /firmware/drivers/tuner | |
parent | b787c0dd05ef4ddd6727a86b06d2491be8600f07 (diff) | |
download | rockbox-de870b3ee049262f984254305c7a062a1cdf3026.tar.gz rockbox-de870b3ee049262f984254305c7a062a1cdf3026.zip |
Signal strength meter for FM radio - FS#8151 by Przemysław Hołubowski
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28559 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers/tuner')
-rw-r--r-- | firmware/drivers/tuner/lv24020lp.c | 22 | ||||
-rw-r--r-- | firmware/drivers/tuner/rda5802.c | 22 | ||||
-rw-r--r-- | firmware/drivers/tuner/si4700.c | 18 | ||||
-rw-r--r-- | firmware/drivers/tuner/tea5760uk.c | 17 | ||||
-rw-r--r-- | firmware/drivers/tuner/tea5767.c | 16 |
5 files changed, 94 insertions, 1 deletions
diff --git a/firmware/drivers/tuner/lv24020lp.c b/firmware/drivers/tuner/lv24020lp.c index 0228888309..590ca9641e 100644 --- a/firmware/drivers/tuner/lv24020lp.c +++ b/firmware/drivers/tuner/lv24020lp.c | |||
@@ -35,6 +35,10 @@ | |||
35 | 35 | ||
36 | static struct mutex tuner_mtx; | 36 | static struct mutex tuner_mtx; |
37 | 37 | ||
38 | /* define RSSI range */ | ||
39 | #define RSSI_MIN 5 | ||
40 | #define RSSI_MAX 75 | ||
41 | |||
38 | /* define to enable tuner logging */ | 42 | /* define to enable tuner logging */ |
39 | #undef SANYO_TUNER_LOG_FILE | 43 | #undef SANYO_TUNER_LOG_FILE |
40 | #undef SANYO_TUNER_LOGF | 44 | #undef SANYO_TUNER_LOGF |
@@ -966,6 +970,8 @@ int lv24020lp_set(int setting, int value) | |||
966 | int lv24020lp_get(int setting) | 970 | int lv24020lp_get(int setting) |
967 | { | 971 | { |
968 | int val = -1; | 972 | int val = -1; |
973 | const unsigned char fst[7] = {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f}; | ||
974 | unsigned char fst_ndx, fs; | ||
969 | 975 | ||
970 | mutex_lock(&tuner_mtx); | 976 | mutex_lock(&tuner_mtx); |
971 | 977 | ||
@@ -994,6 +1000,22 @@ int lv24020lp_get(int setting) | |||
994 | break; | 1000 | break; |
995 | } | 1001 | } |
996 | 1002 | ||
1003 | case RADIO_RSSI: | ||
1004 | fs = RSS_FS(lv24020lp_read(RADIO_STAT)); | ||
1005 | for(fst_ndx=0; fst_ndx<7; fst_ndx++) | ||
1006 | if(fs == fst[fst_ndx]) | ||
1007 | break; | ||
1008 | val = 75 - 10*fst_ndx; | ||
1009 | break; | ||
1010 | |||
1011 | case RADIO_RSSI_MIN: | ||
1012 | val = RSSI_MIN; | ||
1013 | break; | ||
1014 | |||
1015 | case RADIO_RSSI_MAX: | ||
1016 | val = RSSI_MAX; | ||
1017 | break; | ||
1018 | |||
997 | default: | 1019 | default: |
998 | val = lv24020lp_debug_info(setting); | 1020 | val = lv24020lp_debug_info(setting); |
999 | } | 1021 | } |
diff --git a/firmware/drivers/tuner/rda5802.c b/firmware/drivers/tuner/rda5802.c index 43dffe2355..82dc0bbcb9 100644 --- a/firmware/drivers/tuner/rda5802.c +++ b/firmware/drivers/tuner/rda5802.c | |||
@@ -34,6 +34,10 @@ | |||
34 | 34 | ||
35 | #define I2C_ADR 0x20 | 35 | #define I2C_ADR 0x20 |
36 | 36 | ||
37 | /* define RSSI range */ | ||
38 | #define RSSI_MIN 0 | ||
39 | #define RSSI_MAX 70 | ||
40 | |||
37 | /** Registers and bits **/ | 41 | /** Registers and bits **/ |
38 | #define POWERCFG 0x2 | 42 | #define POWERCFG 0x2 |
39 | #define CHANNEL 0x3 | 43 | #define CHANNEL 0x3 |
@@ -263,6 +267,12 @@ static bool rda5802_st(void) | |||
263 | return (rda5802_read_reg(READCHAN) & READCHAN_ST); | 267 | return (rda5802_read_reg(READCHAN) & READCHAN_ST); |
264 | } | 268 | } |
265 | 269 | ||
270 | static int rda5802_rssi(void) | ||
271 | { | ||
272 | uint16_t status = rda5802_read_reg(STATUSRSSI); | ||
273 | return STATUSRSSI_RSSIr(status); | ||
274 | } | ||
275 | |||
266 | /* tuner abstraction layer: set something to the tuner */ | 276 | /* tuner abstraction layer: set something to the tuner */ |
267 | int rda5802_set(int setting, int value) | 277 | int rda5802_set(int setting, int value) |
268 | { | 278 | { |
@@ -323,6 +333,18 @@ int rda5802_get(int setting) | |||
323 | case RADIO_STEREO: | 333 | case RADIO_STEREO: |
324 | val = rda5802_st(); | 334 | val = rda5802_st(); |
325 | break; | 335 | break; |
336 | |||
337 | case RADIO_RSSI: | ||
338 | val = rda5802_rssi(); | ||
339 | break; | ||
340 | |||
341 | case RADIO_RSSI_MIN: | ||
342 | val = RSSI_MIN; | ||
343 | break; | ||
344 | |||
345 | case RADIO_RSSI_MAX: | ||
346 | val = RSSI_MAX; | ||
347 | break; | ||
326 | } | 348 | } |
327 | 349 | ||
328 | return val; | 350 | return val; |
diff --git a/firmware/drivers/tuner/si4700.c b/firmware/drivers/tuner/si4700.c index dfc0e46caf..4747357037 100644 --- a/firmware/drivers/tuner/si4700.c +++ b/firmware/drivers/tuner/si4700.c | |||
@@ -50,6 +50,10 @@ extern int si4700_st(void); | |||
50 | 50 | ||
51 | #define I2C_ADR 0x20 | 51 | #define I2C_ADR 0x20 |
52 | 52 | ||
53 | /* define RSSI range */ | ||
54 | #define RSSI_MIN 0 | ||
55 | #define RSSI_MAX 70 | ||
56 | |||
53 | /** Registers and bits - "x" denotes Si4702/03 only (so they say) **/ | 57 | /** Registers and bits - "x" denotes Si4702/03 only (so they say) **/ |
54 | #define DEVICEID 0x0 | 58 | #define DEVICEID 0x0 |
55 | #define CHIPID 0x1 | 59 | #define CHIPID 0x1 |
@@ -197,7 +201,7 @@ extern int si4700_st(void); | |||
197 | #define STATUSRSSI_BLERA (0x3 << 9) /* x */ | 201 | #define STATUSRSSI_BLERA (0x3 << 9) /* x */ |
198 | #define STATUSRSSI_ST (0x1 << 8) | 202 | #define STATUSRSSI_ST (0x1 << 8) |
199 | #define STATUSRSSI_RSSI (0xff << 0) | 203 | #define STATUSRSSI_RSSI (0xff << 0) |
200 | #define STATUSRSSI_RSSIr(x) ((x) & 0xff) | 204 | #define STATUSRSSI_RSSIr(x) ((x) & 0xff) |
201 | 205 | ||
202 | /* READCHAN (0xB) */ | 206 | /* READCHAN (0xB) */ |
203 | #define READCHAN_BLERB (0x3 << 14) /* x */ | 207 | #define READCHAN_BLERB (0x3 << 14) /* x */ |
@@ -481,6 +485,18 @@ int si4700_get(int setting) | |||
481 | case RADIO_STEREO: | 485 | case RADIO_STEREO: |
482 | val = si4700_st(); | 486 | val = si4700_st(); |
483 | break; | 487 | break; |
488 | |||
489 | case RADIO_RSSI: | ||
490 | val = STATUSRSSI_RSSIr(si4700_read_reg(STATUSRSSI)); | ||
491 | break; | ||
492 | |||
493 | case RADIO_RSSI_MIN: | ||
494 | val = RSSI_MIN; | ||
495 | break; | ||
496 | |||
497 | case RADIO_RSSI_MAX: | ||
498 | val = RSSI_MAX; | ||
499 | break; | ||
484 | } | 500 | } |
485 | 501 | ||
486 | return val; | 502 | return val; |
diff --git a/firmware/drivers/tuner/tea5760uk.c b/firmware/drivers/tuner/tea5760uk.c index 20234e28ed..c1dff598b3 100644 --- a/firmware/drivers/tuner/tea5760uk.c +++ b/firmware/drivers/tuner/tea5760uk.c | |||
@@ -30,6 +30,10 @@ | |||
30 | 30 | ||
31 | #define I2C_ADR 0x22 | 31 | #define I2C_ADR 0x22 |
32 | 32 | ||
33 | /* define RSSI range */ | ||
34 | #define RSSI_MIN 4 | ||
35 | #define RSSI_MAX 46 | ||
36 | |||
33 | static bool tuner_present = false; | 37 | static bool tuner_present = false; |
34 | static unsigned char write_bytes[7] = { | 38 | static unsigned char write_bytes[7] = { |
35 | 0x00, /* INTREG LSB */ | 39 | 0x00, /* INTREG LSB */ |
@@ -138,6 +142,19 @@ int tea5760_get(int setting) | |||
138 | case RADIO_STEREO: | 142 | case RADIO_STEREO: |
139 | val = read_bytes[9] >> 2; | 143 | val = read_bytes[9] >> 2; |
140 | break; | 144 | break; |
145 | |||
146 | case RADIO_RSSI: | ||
147 | val = (read_bytes[9] >> 4) & 0x0F; | ||
148 | val = 4 + (28 * val + 5) / 10; | ||
149 | break; | ||
150 | |||
151 | case RADIO_RSSI_MIN: | ||
152 | val = RSSI_MIN; | ||
153 | break; | ||
154 | |||
155 | case RADIO_RSSI_MAX: | ||
156 | val = RSSI_MAX; | ||
157 | break; | ||
141 | } | 158 | } |
142 | 159 | ||
143 | return val; | 160 | return val; |
diff --git a/firmware/drivers/tuner/tea5767.c b/firmware/drivers/tuner/tea5767.c index 67aa808f23..3f3af68602 100644 --- a/firmware/drivers/tuner/tea5767.c +++ b/firmware/drivers/tuner/tea5767.c | |||
@@ -34,6 +34,10 @@ | |||
34 | #define I2C_ADR 0xC0 | 34 | #define I2C_ADR 0xC0 |
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | /* define RSSI range */ | ||
38 | #define RSSI_MIN 10 | ||
39 | #define RSSI_MAX 55 | ||
40 | |||
37 | static bool tuner_present = true; | 41 | static bool tuner_present = true; |
38 | static unsigned char write_bytes[5] = { 0x00, 0x00, 0x00, 0x00, 0x00 }; | 42 | static unsigned char write_bytes[5] = { 0x00, 0x00, 0x00, 0x00, 0x00 }; |
39 | 43 | ||
@@ -132,6 +136,18 @@ int tea5767_get(int setting) | |||
132 | case RADIO_STEREO: | 136 | case RADIO_STEREO: |
133 | val = read_bytes[2] >> 7; | 137 | val = read_bytes[2] >> 7; |
134 | break; | 138 | break; |
139 | |||
140 | case RADIO_RSSI: | ||
141 | val = 10 + 3*(read_bytes[3] >> 4); | ||
142 | break; | ||
143 | |||
144 | case RADIO_RSSI_MIN: | ||
145 | val = RSSI_MIN; | ||
146 | break; | ||
147 | |||
148 | case RADIO_RSSI_MAX: | ||
149 | val = RSSI_MAX; | ||
150 | break; | ||
135 | } | 151 | } |
136 | 152 | ||
137 | return val; | 153 | return val; |