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)
@@ -966,6 +966,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 +996,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 = RADIO_RSSI_MIN;
+ break;
+
+ case RADIO_RSSI_MAX:
+ val = RADIO_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)
@@ -263,6 +263,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 +329,18 @@
case RADIO_STEREO:
val = rda5802_st();
break;
+
+ case RADIO_RSSI:
+ val = rda5802_rssi();
+ break;
+
+ case RADIO_RSSI_MIN:
+ val = RADIO_RSSI_MIN;
+ break;
+
+ case RADIO_RSSI_MAX:
+ val = RADIO_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)
@@ -481,6 +481,18 @@
case RADIO_STEREO:
val = si4700_st();
break;
+
+ case RADIO_RSSI:
+ val = STATUSRSSI_RSSIr(si4700_read_reg(STATUSRSSI));
+ break;
+
+ case RADIO_RSSI_MIN:
+ val = RADIO_RSSI_MIN;
+ break;
+
+ case RADIO_RSSI_MAX:
+ val = RADIO_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)
@@ -138,6 +138,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 = RADIO_RSSI_MIN;
+ break;
+
+ case RADIO_RSSI_MAX:
+ val = RADIO_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)
@@ -131,6 +131,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 = RADIO_RSSI_MIN;
+ break;
+
+ case RADIO_RSSI_MAX:
+ val = RADIO_RSSI_MAX;
+ break;
}
return val;
Index: firmware/export/lv24020lp.h
===================================================================
--- firmware/export/lv24020lp.h (revision 28354)
+++ firmware/export/lv24020lp.h (working copy)
@@ -25,7 +25,11 @@
/* Define additional tuner messages here */
#define HAVE_RADIO_REGION
+#define HAVE_RADIO_RSSI
+#define RADIO_RSSI_MIN 5
+#define RADIO_RSSI_MAX 75
+
#define LV24020LP_CTRL_STAT (RADIO_GET_CHIP_FIRST+0)
#define LV24020LP_REG_STAT (RADIO_GET_CHIP_FIRST+1)
#define LV24020LP_MSS_FM (RADIO_GET_CHIP_FIRST+2)
Index: firmware/export/rda5802.h
===================================================================
--- firmware/export/rda5802.h (revision 28354)
+++ firmware/export/rda5802.h (working copy)
@@ -26,7 +26,11 @@
#define _RDA5802_H_
#define HAVE_RADIO_REGION
+#define HAVE_RADIO_RSSI
+#define RADIO_RSSI_MIN 0
+#define RADIO_RSSI_MAX 70
+
struct rda5802_dbg_info
{
uint16_t regs[16]; /* Read registers */
Index: firmware/export/si4700.h
===================================================================
--- firmware/export/si4700.h (revision 28354)
+++ firmware/export/si4700.h (working copy)
@@ -26,7 +26,11 @@
#define _SI4700_H_
#define HAVE_RADIO_REGION
+#define HAVE_RADIO_RSSI
+#define RADIO_RSSI_MIN 0
+#define RADIO_RSSI_MAX 70
+
struct si4700_dbg_info
{
uint16_t regs[16]; /* Read registers */
Index: firmware/export/tea5760.h
===================================================================
--- firmware/export/tea5760.h (revision 28354)
+++ firmware/export/tea5760.h (working copy)
@@ -27,7 +27,11 @@
#include "tuner.h"
#define HAVE_RADIO_REGION
+#define HAVE_RADIO_RSSI
+#define RADIO_RSSI_MIN 4
+#define RADIO_RSSI_MAX 46
+
struct tea5760_dbg_info
{
unsigned char read_regs[16];
Index: firmware/export/tea5767.h
===================================================================
--- firmware/export/tea5767.h (revision 28354)
+++ firmware/export/tea5767.h (working copy)
@@ -25,7 +25,11 @@
#define HAVE_RADIO_REGION
#define HAVE_RADIO_MUTE_TIMEOUT
+#define HAVE_RADIO_RSSI
+#define RADIO_RSSI_MIN 10
+#define RADIO_RSSI_MAX 55
+
struct tea5767_dbg_info
{
unsigned char read_regs[5];
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,