summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2010-11-18 11:47:42 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2010-11-18 11:47:42 +0000
commit1ce7ba4931c64a7ae6a95981e838db97d7e05699 (patch)
tree0bb3de85e23bb64951f3acbd176a20301f7efb30
parent62b8efe6741b61ef10d3c7b98dd0d3416b7fce11 (diff)
downloadrockbox-1ce7ba4931c64a7ae6a95981e838db97d7e05699.tar.gz
rockbox-1ce7ba4931c64a7ae6a95981e838db97d7e05699.zip
Make the %tr (radio RSSI) tag work as a bar tag or as a conditional.
As a conditional it scales its value to the number of options you give it (like volume) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28613 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/gui/skin_engine/skin_display.c19
-rw-r--r--apps/gui/skin_engine/skin_parser.c5
-rw-r--r--apps/gui/skin_engine/skin_render.c1
-rw-r--r--apps/gui/skin_engine/skin_tokens.c14
-rw-r--r--firmware/export/tuner.h17
-rw-r--r--lib/skin_parser/tag_table.c2
-rw-r--r--lib/skin_parser/tag_table.h1
-rw-r--r--uisimulator/common/fmradio.c26
8 files changed, 72 insertions, 13 deletions
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c
index 78db4eb371..47de4638d8 100644
--- a/apps/gui/skin_engine/skin_display.c
+++ b/apps/gui/skin_engine/skin_display.c
@@ -162,9 +162,22 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
162#if CONFIG_TUNER 162#if CONFIG_TUNER
163 else if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF)) 163 else if (in_radio_screen() || (get_radio_status() != FMRADIO_OFF))
164 { 164 {
165 int min = fm_region_data[global_settings.fm_region].freq_min; 165#ifdef HAVE_RADIO_RSSI
166 end = radio_current_frequency() - min; 166 if (pb->type == SKIN_TOKEN_TUNER_RSSI_BAR)
167 length = fm_region_data[global_settings.fm_region].freq_max - min; 167 {
168 int val = tuner_get(RADIO_RSSI);
169 int min = tuner_get(RADIO_RSSI_MIN);
170 int max = tuner_get(RADIO_RSSI_MAX);
171 end = val - min;
172 length = max - min;
173 }
174 else
175#endif
176 {
177 int min = fm_region_data[global_settings.fm_region].freq_min;
178 end = radio_current_frequency() - min;
179 length = fm_region_data[global_settings.fm_region].freq_max - min;
180 }
168 } 181 }
169#endif 182#endif
170 else if (id3 && id3->length) 183 else if (id3 && id3->length)
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index c94ef4e5b5..818edfbd07 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -742,6 +742,8 @@ static int parse_progressbar_tag(struct skin_element* element,
742 token->type = SKIN_TOKEN_VOLUMEBAR; 742 token->type = SKIN_TOKEN_VOLUMEBAR;
743 else if (token->type == SKIN_TOKEN_BATTERY_PERCENT) 743 else if (token->type == SKIN_TOKEN_BATTERY_PERCENT)
744 token->type = SKIN_TOKEN_BATTERY_PERCENTBAR; 744 token->type = SKIN_TOKEN_BATTERY_PERCENTBAR;
745 else if (token->type == SKIN_TOKEN_TUNER_RSSI)
746 token->type = SKIN_TOKEN_TUNER_RSSI_BAR;
745 pb->type = token->type; 747 pb->type = token->type;
746 748
747 return 0; 749 return 0;
@@ -1408,6 +1410,9 @@ static int skin_element_callback(struct skin_element* element, void* data)
1408 case SKIN_TOKEN_VOLUME: 1410 case SKIN_TOKEN_VOLUME:
1409 case SKIN_TOKEN_BATTERY_PERCENT: 1411 case SKIN_TOKEN_BATTERY_PERCENT:
1410 case SKIN_TOKEN_PLAYER_PROGRESSBAR: 1412 case SKIN_TOKEN_PLAYER_PROGRESSBAR:
1413#ifdef HAVE_RADIO_RSSI
1414 case SKIN_TOKEN_TUNER_RSSI:
1415#endif
1411 function = parse_progressbar_tag; 1416 function = parse_progressbar_tag;
1412 break; 1417 break;
1413 case SKIN_TOKEN_SUBLINE_TIMEOUT: 1418 case SKIN_TOKEN_SUBLINE_TIMEOUT:
diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c
index a9e6319317..68a5433eb1 100644
--- a/apps/gui/skin_engine/skin_render.c
+++ b/apps/gui/skin_engine/skin_render.c
@@ -143,6 +143,7 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info,
143 case SKIN_TOKEN_BATTERY_PERCENTBAR: 143 case SKIN_TOKEN_BATTERY_PERCENTBAR:
144#ifdef HAVE_LCD_BITMAP 144#ifdef HAVE_LCD_BITMAP
145 case SKIN_TOKEN_PROGRESSBAR: 145 case SKIN_TOKEN_PROGRESSBAR:
146 case SKIN_TOKEN_TUNER_RSSI_BAR:
146 { 147 {
147 struct progressbar *bar = (struct progressbar*)token->value.data; 148 struct progressbar *bar = (struct progressbar*)token->value.data;
148 if (do_refresh) 149 if (do_refresh)
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c
index efe67a186e..c2ee7bf426 100644
--- a/apps/gui/skin_engine/skin_tokens.c
+++ b/apps/gui/skin_engine/skin_tokens.c
@@ -478,6 +478,20 @@ const char *get_radio_token(struct wps_token *token, int preset_offset,
478#ifdef HAVE_RADIO_RSSI 478#ifdef HAVE_RADIO_RSSI
479 case SKIN_TOKEN_TUNER_RSSI: 479 case SKIN_TOKEN_TUNER_RSSI:
480 snprintf(buf, buf_size, "%d",tuner_get(RADIO_RSSI)); 480 snprintf(buf, buf_size, "%d",tuner_get(RADIO_RSSI));
481 if (intval)
482 {
483 int val = tuner_get(RADIO_RSSI);
484 int min = tuner_get(RADIO_RSSI_MIN);
485 int max = tuner_get(RADIO_RSSI_MAX);
486 if (limit == TOKEN_VALUE_ONLY)
487 {
488 *intval = val;
489 }
490 else
491 {
492 *intval = 1+(limit-1)*(val-min)/(max-1-min);
493 }
494 }
481 return buf; 495 return buf;
482 case SKIN_TOKEN_TUNER_RSSI_MIN: 496 case SKIN_TOKEN_TUNER_RSSI_MIN:
483 snprintf(buf, buf_size, "%d",tuner_get(RADIO_RSSI_MIN)); 497 snprintf(buf, buf_size, "%d",tuner_get(RADIO_RSSI_MIN));
diff --git a/firmware/export/tuner.h b/firmware/export/tuner.h
index c8bea86112..db6ee15844 100644
--- a/firmware/export/tuner.h
+++ b/firmware/export/tuner.h
@@ -94,14 +94,6 @@ extern const struct fm_region_data fm_region_data[TUNER_NUM_REGIONS];
94 94
95#if CONFIG_TUNER 95#if CONFIG_TUNER
96 96
97#if (CONFIG_PLATFORM & PLATFORM_HOSTED)
98int tuner_set(int setting, int value);
99int tuner_get(int setting);
100#ifdef HAVE_RDS_CAP
101char* tuner_get_rds_info(int setting);
102#endif
103#else
104
105#ifdef CONFIG_TUNER_MULTI 97#ifdef CONFIG_TUNER_MULTI
106extern int tuner_detect_type(void); 98extern int tuner_detect_type(void);
107extern int (*tuner_set)(int setting, int value); 99extern int (*tuner_set)(int setting, int value);
@@ -146,7 +138,14 @@ extern int (*tuner_get)(int setting);
146#include "ipod_remote_tuner.h" 138#include "ipod_remote_tuner.h"
147#endif 139#endif
148 140
149#endif /* PLATFORM_HOSTED */ 141#ifdef SIMULATOR
142#undef tuner_set
143int tuner_set(int setting, int value);
144#undef tuner_get
145int tuner_get(int setting);
146#endif
147
148
150 149
151/* Additional messages that get enumerated after tuner driver headers */ 150/* Additional messages that get enumerated after tuner driver headers */
152 151
diff --git a/lib/skin_parser/tag_table.c b/lib/skin_parser/tag_table.c
index b579ee2aaa..197963f2ac 100644
--- a/lib/skin_parser/tag_table.c
+++ b/lib/skin_parser/tag_table.c
@@ -153,7 +153,7 @@ static const struct tag_info legal_tags[] =
153 { SKIN_TOKEN_TUNER_MINFREQ, "ta", "", SKIN_REFRESH_STATIC }, 153 { SKIN_TOKEN_TUNER_MINFREQ, "ta", "", SKIN_REFRESH_STATIC },
154 { SKIN_TOKEN_TUNER_MAXFREQ, "tb", "", SKIN_REFRESH_STATIC }, 154 { SKIN_TOKEN_TUNER_MAXFREQ, "tb", "", SKIN_REFRESH_STATIC },
155 { SKIN_TOKEN_TUNER_CURFREQ, "tf", "", SKIN_REFRESH_DYNAMIC }, 155 { SKIN_TOKEN_TUNER_CURFREQ, "tf", "", SKIN_REFRESH_DYNAMIC },
156 { SKIN_TOKEN_TUNER_RSSI, "tr", "", SKIN_REFRESH_DYNAMIC }, 156 { SKIN_TOKEN_TUNER_RSSI, "tr", BAR_PARAMS, SKIN_REFRESH_DYNAMIC },
157 { SKIN_TOKEN_TUNER_RSSI_MIN, "tl", "", SKIN_REFRESH_STATIC }, 157 { SKIN_TOKEN_TUNER_RSSI_MIN, "tl", "", SKIN_REFRESH_STATIC },
158 { SKIN_TOKEN_TUNER_RSSI_MAX, "th", "", SKIN_REFRESH_STATIC }, 158 { SKIN_TOKEN_TUNER_RSSI_MAX, "th", "", SKIN_REFRESH_STATIC },
159 { SKIN_TOKEN_PRESET_ID, "Ti", "", SKIN_REFRESH_STATIC }, 159 { SKIN_TOKEN_PRESET_ID, "Ti", "", SKIN_REFRESH_STATIC },
diff --git a/lib/skin_parser/tag_table.h b/lib/skin_parser/tag_table.h
index ad72dab3d3..a39939d225 100644
--- a/lib/skin_parser/tag_table.h
+++ b/lib/skin_parser/tag_table.h
@@ -252,6 +252,7 @@ enum skin_token_type {
252 SKIN_TOKEN_TUNER_RSSI, 252 SKIN_TOKEN_TUNER_RSSI,
253 SKIN_TOKEN_TUNER_RSSI_MIN, 253 SKIN_TOKEN_TUNER_RSSI_MIN,
254 SKIN_TOKEN_TUNER_RSSI_MAX, 254 SKIN_TOKEN_TUNER_RSSI_MAX,
255 SKIN_TOKEN_TUNER_RSSI_BAR,
255 SKIN_TOKEN_PRESET_ID, /* "id" of this preset.. really the array element number */ 256 SKIN_TOKEN_PRESET_ID, /* "id" of this preset.. really the array element number */
256 SKIN_TOKEN_PRESET_NAME, 257 SKIN_TOKEN_PRESET_NAME,
257 SKIN_TOKEN_PRESET_FREQ, 258 SKIN_TOKEN_PRESET_FREQ,
diff --git a/uisimulator/common/fmradio.c b/uisimulator/common/fmradio.c
index cef9abf94e..6f6b0f914f 100644
--- a/uisimulator/common/fmradio.c
+++ b/uisimulator/common/fmradio.c
@@ -67,6 +67,9 @@ int tuner_set(int setting, int value)
67int tuner_get(int setting) 67int tuner_get(int setting)
68{ 68{
69 int val = 0; 69 int val = 0;
70#ifdef HAVE_RADIO_RSSI
71 static int rssi = 0, rssidiff = 2;
72#endif
70 73
71 switch(setting) 74 switch(setting)
72 { 75 {
@@ -83,6 +86,29 @@ int tuner_get(int setting)
83 if(frequency == 99500000) 86 if(frequency == 99500000)
84 val = mono?0:1; 87 val = mono?0:1;
85 break; 88 break;
89
90#ifdef HAVE_RADIO_RSSI
91 case RADIO_RSSI_MIN:
92 val = 5;
93 break;
94 case RADIO_RSSI_MAX:
95 val = 75;
96 break;
97 case RADIO_RSSI:
98 rssi += rssidiff;
99 if (rssi >= 75)
100 {
101 rssi = 75;
102 rssidiff = -2;
103 }
104 else if (rssi < 5)
105 {
106 rssi = 5;
107 rssidiff = 2;
108 }
109 val = rssi;
110 break;
111#endif
86 112
87 case RADIO_ALL: /* debug query */ 113 case RADIO_ALL: /* debug query */
88 break; 114 break;