forked from len0rd/rockbox
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
This commit is contained in:
parent
b787c0dd05
commit
de870b3ee0
17 changed files with 157 additions and 1 deletions
|
@ -475,6 +475,17 @@ const char *get_radio_token(struct wps_token *token, int preset_offset,
|
||||||
case SKIN_TOKEN_TUNER_CURFREQ:
|
case SKIN_TOKEN_TUNER_CURFREQ:
|
||||||
return format_freq_MHz(radio_current_frequency(),
|
return format_freq_MHz(radio_current_frequency(),
|
||||||
region_data->freq_step, buf, buf_size);
|
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_NAME:
|
||||||
case SKIN_TOKEN_PRESET_FREQ:
|
case SKIN_TOKEN_PRESET_FREQ:
|
||||||
case SKIN_TOKEN_PRESET_ID:
|
case SKIN_TOKEN_PRESET_ID:
|
||||||
|
|
|
@ -12647,3 +12647,20 @@
|
||||||
*: "Start File Browser at root"
|
*: "Start File Browser at root"
|
||||||
</voice>
|
</voice>
|
||||||
</phrase>
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: LANG_FM_RSSI
|
||||||
|
desc: Signal strength of a received FM station
|
||||||
|
user: core
|
||||||
|
<source>
|
||||||
|
*: none
|
||||||
|
radio: "Signal strength:"
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: none
|
||||||
|
radio: "Signal strength:"
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: none
|
||||||
|
radio: "Signal strength:"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
|
|
|
@ -12580,3 +12580,20 @@
|
||||||
*: "Rozpocznij Przeglądanie Plików Tutaj"
|
*: "Rozpocznij Przeglądanie Plików Tutaj"
|
||||||
</voice>
|
</voice>
|
||||||
</phrase>
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: LANG_FM_RSSI
|
||||||
|
desc: Signal strength of a received FM station
|
||||||
|
user: core
|
||||||
|
<source>
|
||||||
|
*: none
|
||||||
|
radio: "Signal strength:"
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: none
|
||||||
|
radio: "Poziom sygnału:"
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: none
|
||||||
|
radio: "Poziom sygnału:"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "skin_engine/skin_engine.h"
|
#include "skin_engine/skin_engine.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "radio.h"
|
#include "radio.h"
|
||||||
|
#include "tuner.h"
|
||||||
#include "action.h"
|
#include "action.h"
|
||||||
#include "appevents.h"
|
#include "appevents.h"
|
||||||
#include "statusbar-skinned.h"
|
#include "statusbar-skinned.h"
|
||||||
|
@ -41,6 +42,9 @@ char* default_radio_skin(enum screen_type screen)
|
||||||
"%Sx(Station:) %tf MHz\n"
|
"%Sx(Station:) %tf MHz\n"
|
||||||
"%?St(force fm mono)<%Sx(Force Mono)|%?ts<%Sx(Stereo)|%Sx(Mono)>>\n"
|
"%?St(force fm mono)<%Sx(Force Mono)|%?ts<%Sx(Stereo)|%Sx(Mono)>>\n"
|
||||||
"%Sx(Mode:) %?tm<%Sx(Scan)|%Sx(Preset)>\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)
|
#if CONFIG_CODEC != SWCODEC && !defined(SIMULATOR)
|
||||||
"%?Rr<%Sx(Time:) %Rh:%Rn:%Rs|%?St(prerecording time)<%pm|%Sx(Prerecord Time) %Rs>>\n"
|
"%?Rr<%Sx(Time:) %Rh:%Rn:%Rs|%?St(prerecording time)<%pm|%Sx(Prerecord Time) %Rs>>\n"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -35,6 +35,10 @@
|
||||||
|
|
||||||
static struct mutex tuner_mtx;
|
static struct mutex tuner_mtx;
|
||||||
|
|
||||||
|
/* define RSSI range */
|
||||||
|
#define RSSI_MIN 5
|
||||||
|
#define RSSI_MAX 75
|
||||||
|
|
||||||
/* define to enable tuner logging */
|
/* define to enable tuner logging */
|
||||||
#undef SANYO_TUNER_LOG_FILE
|
#undef SANYO_TUNER_LOG_FILE
|
||||||
#undef SANYO_TUNER_LOGF
|
#undef SANYO_TUNER_LOGF
|
||||||
|
@ -966,6 +970,8 @@ int lv24020lp_set(int setting, int value)
|
||||||
int lv24020lp_get(int setting)
|
int lv24020lp_get(int setting)
|
||||||
{
|
{
|
||||||
int val = -1;
|
int val = -1;
|
||||||
|
const unsigned char fst[7] = {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f};
|
||||||
|
unsigned char fst_ndx, fs;
|
||||||
|
|
||||||
mutex_lock(&tuner_mtx);
|
mutex_lock(&tuner_mtx);
|
||||||
|
|
||||||
|
@ -994,6 +1000,22 @@ int lv24020lp_get(int setting)
|
||||||
break;
|
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:
|
default:
|
||||||
val = lv24020lp_debug_info(setting);
|
val = lv24020lp_debug_info(setting);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,10 @@
|
||||||
|
|
||||||
#define I2C_ADR 0x20
|
#define I2C_ADR 0x20
|
||||||
|
|
||||||
|
/* define RSSI range */
|
||||||
|
#define RSSI_MIN 0
|
||||||
|
#define RSSI_MAX 70
|
||||||
|
|
||||||
/** Registers and bits **/
|
/** Registers and bits **/
|
||||||
#define POWERCFG 0x2
|
#define POWERCFG 0x2
|
||||||
#define CHANNEL 0x3
|
#define CHANNEL 0x3
|
||||||
|
@ -263,6 +267,12 @@ static bool rda5802_st(void)
|
||||||
return (rda5802_read_reg(READCHAN) & READCHAN_ST);
|
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 */
|
/* tuner abstraction layer: set something to the tuner */
|
||||||
int rda5802_set(int setting, int value)
|
int rda5802_set(int setting, int value)
|
||||||
{
|
{
|
||||||
|
@ -323,6 +333,18 @@ int rda5802_get(int setting)
|
||||||
case RADIO_STEREO:
|
case RADIO_STEREO:
|
||||||
val = rda5802_st();
|
val = rda5802_st();
|
||||||
break;
|
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;
|
return val;
|
||||||
|
|
|
@ -50,6 +50,10 @@ extern int si4700_st(void);
|
||||||
|
|
||||||
#define I2C_ADR 0x20
|
#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) **/
|
/** Registers and bits - "x" denotes Si4702/03 only (so they say) **/
|
||||||
#define DEVICEID 0x0
|
#define DEVICEID 0x0
|
||||||
#define CHIPID 0x1
|
#define CHIPID 0x1
|
||||||
|
@ -197,7 +201,7 @@ extern int si4700_st(void);
|
||||||
#define STATUSRSSI_BLERA (0x3 << 9) /* x */
|
#define STATUSRSSI_BLERA (0x3 << 9) /* x */
|
||||||
#define STATUSRSSI_ST (0x1 << 8)
|
#define STATUSRSSI_ST (0x1 << 8)
|
||||||
#define STATUSRSSI_RSSI (0xff << 0)
|
#define STATUSRSSI_RSSI (0xff << 0)
|
||||||
#define STATUSRSSI_RSSIr(x) ((x) & 0xff)
|
#define STATUSRSSI_RSSIr(x) ((x) & 0xff)
|
||||||
|
|
||||||
/* READCHAN (0xB) */
|
/* READCHAN (0xB) */
|
||||||
#define READCHAN_BLERB (0x3 << 14) /* x */
|
#define READCHAN_BLERB (0x3 << 14) /* x */
|
||||||
|
@ -481,6 +485,18 @@ int si4700_get(int setting)
|
||||||
case RADIO_STEREO:
|
case RADIO_STEREO:
|
||||||
val = si4700_st();
|
val = si4700_st();
|
||||||
break;
|
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;
|
return val;
|
||||||
|
|
|
@ -30,6 +30,10 @@
|
||||||
|
|
||||||
#define I2C_ADR 0x22
|
#define I2C_ADR 0x22
|
||||||
|
|
||||||
|
/* define RSSI range */
|
||||||
|
#define RSSI_MIN 4
|
||||||
|
#define RSSI_MAX 46
|
||||||
|
|
||||||
static bool tuner_present = false;
|
static bool tuner_present = false;
|
||||||
static unsigned char write_bytes[7] = {
|
static unsigned char write_bytes[7] = {
|
||||||
0x00, /* INTREG LSB */
|
0x00, /* INTREG LSB */
|
||||||
|
@ -138,6 +142,19 @@ int tea5760_get(int setting)
|
||||||
case RADIO_STEREO:
|
case RADIO_STEREO:
|
||||||
val = read_bytes[9] >> 2;
|
val = read_bytes[9] >> 2;
|
||||||
break;
|
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;
|
return val;
|
||||||
|
|
|
@ -34,6 +34,10 @@
|
||||||
#define I2C_ADR 0xC0
|
#define I2C_ADR 0xC0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* define RSSI range */
|
||||||
|
#define RSSI_MIN 10
|
||||||
|
#define RSSI_MAX 55
|
||||||
|
|
||||||
static bool tuner_present = true;
|
static bool tuner_present = true;
|
||||||
static unsigned char write_bytes[5] = { 0x00, 0x00, 0x00, 0x00, 0x00 };
|
static unsigned char write_bytes[5] = { 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
|
|
||||||
|
@ -132,6 +136,18 @@ int tea5767_get(int setting)
|
||||||
case RADIO_STEREO:
|
case RADIO_STEREO:
|
||||||
val = read_bytes[2] >> 7;
|
val = read_bytes[2] >> 7;
|
||||||
break;
|
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;
|
return val;
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
/* Define additional tuner messages here */
|
/* Define additional tuner messages here */
|
||||||
#define HAVE_RADIO_REGION
|
#define HAVE_RADIO_REGION
|
||||||
|
#define HAVE_RADIO_RSSI
|
||||||
|
|
||||||
#define LV24020LP_CTRL_STAT (RADIO_GET_CHIP_FIRST+0)
|
#define LV24020LP_CTRL_STAT (RADIO_GET_CHIP_FIRST+0)
|
||||||
#define LV24020LP_REG_STAT (RADIO_GET_CHIP_FIRST+1)
|
#define LV24020LP_REG_STAT (RADIO_GET_CHIP_FIRST+1)
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#define _RDA5802_H_
|
#define _RDA5802_H_
|
||||||
|
|
||||||
#define HAVE_RADIO_REGION
|
#define HAVE_RADIO_REGION
|
||||||
|
#define HAVE_RADIO_RSSI
|
||||||
|
|
||||||
struct rda5802_dbg_info
|
struct rda5802_dbg_info
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#define _SI4700_H_
|
#define _SI4700_H_
|
||||||
|
|
||||||
#define HAVE_RADIO_REGION
|
#define HAVE_RADIO_REGION
|
||||||
|
#define HAVE_RADIO_RSSI
|
||||||
|
|
||||||
struct si4700_dbg_info
|
struct si4700_dbg_info
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "tuner.h"
|
#include "tuner.h"
|
||||||
|
|
||||||
#define HAVE_RADIO_REGION
|
#define HAVE_RADIO_REGION
|
||||||
|
#define HAVE_RADIO_RSSI
|
||||||
|
|
||||||
struct tea5760_dbg_info
|
struct tea5760_dbg_info
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#define HAVE_RADIO_REGION
|
#define HAVE_RADIO_REGION
|
||||||
#define HAVE_RADIO_MUTE_TIMEOUT
|
#define HAVE_RADIO_MUTE_TIMEOUT
|
||||||
|
#define HAVE_RADIO_RSSI
|
||||||
|
|
||||||
struct tea5767_dbg_info
|
struct tea5767_dbg_info
|
||||||
{
|
{
|
||||||
|
|
|
@ -46,6 +46,9 @@ enum
|
||||||
RADIO_STEREO,
|
RADIO_STEREO,
|
||||||
/* RADIO_EVENT is an event that requests a screen update */
|
/* RADIO_EVENT is an event that requests a screen update */
|
||||||
RADIO_EVENT,
|
RADIO_EVENT,
|
||||||
|
RADIO_RSSI,
|
||||||
|
RADIO_RSSI_MIN,
|
||||||
|
RADIO_RSSI_MAX,
|
||||||
|
|
||||||
/* Put new general-purpose readback values above this line */
|
/* Put new general-purpose readback values above this line */
|
||||||
__RADIO_GET_STANDARD_LAST
|
__RADIO_GET_STANDARD_LAST
|
||||||
|
|
|
@ -153,6 +153,9 @@ static const struct tag_info legal_tags[] =
|
||||||
{ SKIN_TOKEN_TUNER_MINFREQ, "ta", "", SKIN_REFRESH_STATIC },
|
{ SKIN_TOKEN_TUNER_MINFREQ, "ta", "", SKIN_REFRESH_STATIC },
|
||||||
{ SKIN_TOKEN_TUNER_MAXFREQ, "tb", "", SKIN_REFRESH_STATIC },
|
{ SKIN_TOKEN_TUNER_MAXFREQ, "tb", "", SKIN_REFRESH_STATIC },
|
||||||
{ SKIN_TOKEN_TUNER_CURFREQ, "tf", "", SKIN_REFRESH_DYNAMIC },
|
{ 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_ID, "Ti", "", SKIN_REFRESH_STATIC },
|
||||||
{ SKIN_TOKEN_PRESET_NAME, "Tn", "", SKIN_REFRESH_STATIC },
|
{ SKIN_TOKEN_PRESET_NAME, "Tn", "", SKIN_REFRESH_STATIC },
|
||||||
{ SKIN_TOKEN_PRESET_FREQ, "Tf", "", SKIN_REFRESH_STATIC },
|
{ SKIN_TOKEN_PRESET_FREQ, "Tf", "", SKIN_REFRESH_STATIC },
|
||||||
|
|
|
@ -249,6 +249,9 @@ enum skin_token_type {
|
||||||
SKIN_TOKEN_TUNER_MINFREQ, /* changes based on "region" */
|
SKIN_TOKEN_TUNER_MINFREQ, /* changes based on "region" */
|
||||||
SKIN_TOKEN_TUNER_MAXFREQ, /* changes based on "region" */
|
SKIN_TOKEN_TUNER_MAXFREQ, /* changes based on "region" */
|
||||||
SKIN_TOKEN_TUNER_CURFREQ,
|
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_ID, /* "id" of this preset.. really the array element number */
|
||||||
SKIN_TOKEN_PRESET_NAME,
|
SKIN_TOKEN_PRESET_NAME,
|
||||||
SKIN_TOKEN_PRESET_FREQ,
|
SKIN_TOKEN_PRESET_FREQ,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue