Index: apps/gui/skin_engine/skin_tokens.c =================================================================== --- apps/gui/skin_engine/skin_tokens.c (revision 28354) +++ apps/gui/skin_engine/skin_tokens.c (working copy) @@ -475,6 +475,17 @@ case SKIN_TOKEN_TUNER_CURFREQ: return format_freq_MHz(radio_current_frequency(), region_data->freq_step, buf, buf_size); +#ifdef HAVE_RADIO_RSSI + case SKIN_TOKEN_TUNER_RSSI: + snprintf(buf, buf_size, "%d",tuner_get(RADIO_RSSI)); + return buf; + case SKIN_TOKEN_TUNER_RSSI_MIN: + snprintf(buf, buf_size, "%d",tuner_get(RADIO_RSSI_MIN)); + return buf; + case SKIN_TOKEN_TUNER_RSSI_MAX: + snprintf(buf, buf_size, "%d",tuner_get(RADIO_RSSI_MAX)); + return buf; +#endif case SKIN_TOKEN_PRESET_NAME: case SKIN_TOKEN_PRESET_FREQ: case SKIN_TOKEN_PRESET_ID: Index: apps/lang/english.lang =================================================================== --- apps/lang/english.lang (revision 28354) +++ apps/lang/english.lang (working copy) @@ -12647,3 +12647,20 @@ *: "Start File Browser at root" + + id: LANG_FM_RSSI + desc: Signal strength of a received FM station + user: core + + *: none + radio: "Signal strength:" + + + *: none + radio: "Signal strength:" + + + *: none + radio: "Signal strength:" + + Index: apps/lang/polski.lang =================================================================== --- apps/lang/polski.lang (revision 28354) +++ apps/lang/polski.lang (working copy) @@ -12580,3 +12580,20 @@ *: "Rozpocznij Przeglądanie Plików Tutaj" + + id: LANG_FM_RSSI + desc: Signal strength of a received FM station + user: core + + *: none + radio: "Signal strength:" + + + *: none + radio: "Poziom sygnału:" + + + *: none + radio: "Poziom sygnału:" + + Index: apps/radio/radio_skin.c =================================================================== --- apps/radio/radio_skin.c (revision 28354) +++ apps/radio/radio_skin.c (working copy) @@ -27,6 +27,7 @@ #include "skin_engine/skin_engine.h" #include "settings.h" #include "radio.h" +#include "tuner.h" #include "action.h" #include "appevents.h" #include "statusbar-skinned.h" @@ -41,6 +42,9 @@ "%Sx(Station:) %tf MHz\n" "%?St(force fm mono)<%Sx(Force Mono)|%?ts<%Sx(Stereo)|%Sx(Mono)>>\n" "%Sx(Mode:) %?tm<%Sx(Scan)|%Sx(Preset)>\n" +#ifdef HAVE_RADIO_RSSI + "%Sx(Signal strength:) %tr dBuV\n" +#endif #if CONFIG_CODEC != SWCODEC && !defined(SIMULATOR) "%?Rr<%Sx(Time:) %Rh:%Rn:%Rs|%?St(prerecording time)<%pm|%Sx(Prerecord Time) %Rs>>\n" #endif Index: firmware/drivers/tuner/lv24020lp.c =================================================================== --- firmware/drivers/tuner/lv24020lp.c (revision 28354) +++ firmware/drivers/tuner/lv24020lp.c (working copy) @@ -35,6 +35,10 @@ static struct mutex tuner_mtx; +/* define RSSI range */ +#define RSSI_MIN 5 +#define RSSI_MAX 75 + /* define to enable tuner logging */ #undef SANYO_TUNER_LOG_FILE #undef SANYO_TUNER_LOGF @@ -966,6 +970,8 @@ int lv24020lp_get(int setting) { int val = -1; + const unsigned char fst[7] = {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f}; + unsigned char fst_ndx, fs; mutex_lock(&tuner_mtx); @@ -994,6 +1000,22 @@ break; } + case RADIO_RSSI: + fs = RSS_FS(lv24020lp_read(RADIO_STAT)); + for(fst_ndx=0; fst_ndx<7; fst_ndx++) + if(fs == fst[fst_ndx]) + break; + val = 75 - 10*fst_ndx; + break; + + case RADIO_RSSI_MIN: + val = RSSI_MIN; + break; + + case RADIO_RSSI_MAX: + val = RSSI_MAX; + break; + default: val = lv24020lp_debug_info(setting); } Index: firmware/drivers/tuner/rda5802.c =================================================================== --- firmware/drivers/tuner/rda5802.c (revision 28354) +++ firmware/drivers/tuner/rda5802.c (working copy) @@ -34,6 +34,10 @@ #define I2C_ADR 0x20 +/* define RSSI range */ +#define RSSI_MIN 0 +#define RSSI_MAX 70 + /** Registers and bits **/ #define POWERCFG 0x2 #define CHANNEL 0x3 @@ -263,6 +267,12 @@ return (rda5802_read_reg(READCHAN) & READCHAN_ST); } +static int rda5802_rssi(void) +{ + uint16_t status = rda5802_read_reg(STATUSRSSI); + return STATUSRSSI_RSSIr(status); +} + /* tuner abstraction layer: set something to the tuner */ int rda5802_set(int setting, int value) { @@ -323,6 +333,18 @@ case RADIO_STEREO: val = rda5802_st(); break; + + case RADIO_RSSI: + val = rda5802_rssi(); + break; + + case RADIO_RSSI_MIN: + val = RSSI_MIN; + break; + + case RADIO_RSSI_MAX: + val = RSSI_MAX; + break; } return val; Index: firmware/drivers/tuner/si4700.c =================================================================== --- firmware/drivers/tuner/si4700.c (revision 28354) +++ firmware/drivers/tuner/si4700.c (working copy) @@ -50,6 +50,10 @@ #define I2C_ADR 0x20 +/* define RSSI range */ +#define RSSI_MIN 0 +#define RSSI_MAX 70 + /** Registers and bits - "x" denotes Si4702/03 only (so they say) **/ #define DEVICEID 0x0 #define CHIPID 0x1 @@ -197,7 +201,7 @@ #define STATUSRSSI_BLERA (0x3 << 9) /* x */ #define STATUSRSSI_ST (0x1 << 8) #define STATUSRSSI_RSSI (0xff << 0) - #define STATUSRSSI_RSSIr(x) ((x) & 0xff) +#define STATUSRSSI_RSSIr(x) ((x) & 0xff) /* READCHAN (0xB) */ #define READCHAN_BLERB (0x3 << 14) /* x */ @@ -481,6 +485,18 @@ case RADIO_STEREO: val = si4700_st(); break; + + case RADIO_RSSI: + val = STATUSRSSI_RSSIr(si4700_read_reg(STATUSRSSI)); + break; + + case RADIO_RSSI_MIN: + val = RSSI_MIN; + break; + + case RADIO_RSSI_MAX: + val = RSSI_MAX; + break; } return val; Index: firmware/drivers/tuner/tea5760uk.c =================================================================== --- firmware/drivers/tuner/tea5760uk.c (revision 28354) +++ firmware/drivers/tuner/tea5760uk.c (working copy) @@ -30,6 +30,10 @@ #define I2C_ADR 0x22 +/* define RSSI range */ +#define RSSI_MIN 4 +#define RSSI_MAX 46 + static bool tuner_present = false; static unsigned char write_bytes[7] = { 0x00, /* INTREG LSB */ @@ -138,6 +142,19 @@ case RADIO_STEREO: val = read_bytes[9] >> 2; break; + + case RADIO_RSSI: + val = (read_bytes[9] >> 4) & 0x0F; + val = 4 + (28 * val + 5) / 10; + break; + + case RADIO_RSSI_MIN: + val = RSSI_MIN; + break; + + case RADIO_RSSI_MAX: + val = RSSI_MAX; + break; } return val; Index: firmware/drivers/tuner/tea5767.c =================================================================== --- firmware/drivers/tuner/tea5767.c (revision 28354) +++ firmware/drivers/tuner/tea5767.c (working copy) @@ -34,6 +34,10 @@ #define I2C_ADR 0xC0 #endif +/* define RSSI range */ +#define RSSI_MIN 10 +#define RSSI_MAX 55 + static unsigned char write_bytes[5] = { 0x00, 0x00, 0x00, 0x00, 0x00 }; static void tea5767_set_clear(int byte, unsigned char bits, int set) @@ -131,6 +135,18 @@ case RADIO_STEREO: val = read_bytes[2] >> 7; break; + + case RADIO_RSSI: + val = 10 + 3*(read_bytes[3] >> 4); + break; + + case RADIO_RSSI_MIN: + val = RSSI_MIN; + break; + + case RADIO_RSSI_MAX: + val = RSSI_MAX; + break; } return val; Index: firmware/export/lv24020lp.h =================================================================== --- firmware/export/lv24020lp.h (revision 28354) +++ firmware/export/lv24020lp.h (working copy) @@ -25,6 +25,7 @@ /* Define additional tuner messages here */ #define HAVE_RADIO_REGION +#define HAVE_RADIO_RSSI #define LV24020LP_CTRL_STAT (RADIO_GET_CHIP_FIRST+0) #define LV24020LP_REG_STAT (RADIO_GET_CHIP_FIRST+1) Index: firmware/export/rda5802.h =================================================================== --- firmware/export/rda5802.h (revision 28354) +++ firmware/export/rda5802.h (working copy) @@ -26,6 +26,7 @@ #define _RDA5802_H_ #define HAVE_RADIO_REGION +#define HAVE_RADIO_RSSI struct rda5802_dbg_info { Index: firmware/export/si4700.h =================================================================== --- firmware/export/si4700.h (revision 28354) +++ firmware/export/si4700.h (working copy) @@ -26,6 +26,7 @@ #define _SI4700_H_ #define HAVE_RADIO_REGION +#define HAVE_RADIO_RSSI struct si4700_dbg_info { Index: firmware/export/tea5760.h =================================================================== --- firmware/export/tea5760.h (revision 28354) +++ firmware/export/tea5760.h (working copy) @@ -27,6 +27,7 @@ #include "tuner.h" #define HAVE_RADIO_REGION +#define HAVE_RADIO_RSSI struct tea5760_dbg_info { Index: firmware/export/tea5767.h =================================================================== --- firmware/export/tea5767.h (revision 28354) +++ firmware/export/tea5767.h (working copy) @@ -25,6 +25,7 @@ #define HAVE_RADIO_REGION #define HAVE_RADIO_MUTE_TIMEOUT +#define HAVE_RADIO_RSSI struct tea5767_dbg_info { Index: firmware/export/tuner.h =================================================================== --- firmware/export/tuner.h (revision 28354) +++ firmware/export/tuner.h (working copy) @@ -46,6 +46,9 @@ RADIO_STEREO, /* RADIO_EVENT is an event that requests a screen update */ RADIO_EVENT, + RADIO_RSSI, + RADIO_RSSI_MIN, + RADIO_RSSI_MAX, /* Put new general-purpose readback values above this line */ __RADIO_GET_STANDARD_LAST Index: lib/skin_parser/tag_table.c =================================================================== --- lib/skin_parser/tag_table.c (revision 28354) +++ lib/skin_parser/tag_table.c (working copy) @@ -153,6 +153,9 @@ { SKIN_TOKEN_TUNER_MINFREQ, "ta", "", SKIN_REFRESH_STATIC }, { SKIN_TOKEN_TUNER_MAXFREQ, "tb", "", SKIN_REFRESH_STATIC }, { SKIN_TOKEN_TUNER_CURFREQ, "tf", "", SKIN_REFRESH_DYNAMIC }, + { SKIN_TOKEN_TUNER_RSSI, "tr", "", SKIN_REFRESH_DYNAMIC }, + { SKIN_TOKEN_TUNER_RSSI_MIN, "tl", "", SKIN_REFRESH_STATIC }, + { SKIN_TOKEN_TUNER_RSSI_MAX, "th", "", SKIN_REFRESH_STATIC }, { SKIN_TOKEN_PRESET_ID, "Ti", "", SKIN_REFRESH_STATIC }, { SKIN_TOKEN_PRESET_NAME, "Tn", "", SKIN_REFRESH_STATIC }, { SKIN_TOKEN_PRESET_FREQ, "Tf", "", SKIN_REFRESH_STATIC }, Index: lib/skin_parser/tag_table.h =================================================================== --- lib/skin_parser/tag_table.h (revision 28354) +++ lib/skin_parser/tag_table.h (working copy) @@ -248,6 +248,9 @@ SKIN_TOKEN_TUNER_MINFREQ, /* changes based on "region" */ SKIN_TOKEN_TUNER_MAXFREQ, /* changes based on "region" */ SKIN_TOKEN_TUNER_CURFREQ, + SKIN_TOKEN_TUNER_RSSI, + SKIN_TOKEN_TUNER_RSSI_MIN, + SKIN_TOKEN_TUNER_RSSI_MAX, SKIN_TOKEN_PRESET_ID, /* "id" of this preset.. really the array element number */ SKIN_TOKEN_PRESET_NAME, SKIN_TOKEN_PRESET_FREQ,