summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorDan Everton <dan@iocaine.org>2006-03-05 19:34:54 +0000
committerDan Everton <dan@iocaine.org>2006-03-05 19:34:54 +0000
commitd108849812280eb69b5a00bd1f79193237b2e51a (patch)
treed6210424ace3a29aca8a75f27a87b5df0be6fcff /apps
parent780e8dd0ef9b4325b35c0b680447488455d4e44f (diff)
downloadrockbox-d108849812280eb69b5a00bd1f79193237b2e51a.tar.gz
rockbox-d108849812280eb69b5a00bd1f79193237b2e51a.zip
Get VU Meter plugin working on SWCODEC targets. Still needs to be scaled to fit better on larger displays. Also requires bumping the plugin API versions.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8915 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/plugin.c8
-rw-r--r--apps/plugin.h22
-rw-r--r--apps/plugins/vu_meter.c108
3 files changed, 108 insertions, 30 deletions
diff --git a/apps/plugin.c b/apps/plugin.c
index 4f6b6e91d7..c26d06dd07 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -52,6 +52,7 @@
52#include "splash.h" 52#include "splash.h"
53#if (CONFIG_CODEC == SWCODEC) 53#if (CONFIG_CODEC == SWCODEC)
54#include "pcm_playback.h" 54#include "pcm_playback.h"
55#include "dsp.h"
55#endif 56#endif
56 57
57#ifdef HAVE_CHARGING 58#ifdef HAVE_CHARGING
@@ -310,9 +311,8 @@ static const struct plugin_api rockbox_api = {
310#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC) 311#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
311 mpeg_get_last_header, 312 mpeg_get_last_header,
312#endif 313#endif
313#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) 314
314 sound_set_pitch, 315 sound_set_pitch,
315#endif
316 316
317#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC) 317#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
318 /* MAS communication */ 318 /* MAS communication */
@@ -407,6 +407,10 @@ static const struct plugin_api rockbox_api = {
407 sim_lcd_ex_init, 407 sim_lcd_ex_init,
408 sim_lcd_ex_update_rect, 408 sim_lcd_ex_update_rect,
409#endif 409#endif
410
411#if (CONFIG_CODEC == SWCODEC)
412 pcm_calculate_peaks,
413#endif
410}; 414};
411 415
412int plugin_load(const char* plugin, void* parameter) 416int plugin_load(const char* plugin, void* parameter)
diff --git a/apps/plugin.h b/apps/plugin.h
index aa4db39d0b..c0ae6c69d1 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -52,6 +52,7 @@
52#include "misc.h" 52#include "misc.h"
53#if (HWCODEC == SWCODEC) 53#if (HWCODEC == SWCODEC)
54#include "pcm_playback.h" 54#include "pcm_playback.h"
55#include "dsp.h"
55#endif 56#endif
56#include "settings.h" 57#include "settings.h"
57#include "timer.h" 58#include "timer.h"
@@ -98,12 +99,12 @@
98#define PLUGIN_MAGIC 0x526F634B /* RocK */ 99#define PLUGIN_MAGIC 0x526F634B /* RocK */
99 100
100/* increase this every time the api struct changes */ 101/* increase this every time the api struct changes */
101#define PLUGIN_API_VERSION 9 102#define PLUGIN_API_VERSION 10
102 103
103/* update this to latest version if a change to the api struct breaks 104/* update this to latest version if a change to the api struct breaks
104 backwards compatibility (and please take the opportunity to sort in any 105 backwards compatibility (and please take the opportunity to sort in any
105 new function which are "waiting" at the end of the function table) */ 106 new function which are "waiting" at the end of the function table) */
106#define PLUGIN_MIN_API_VERSION 7 107#define PLUGIN_MIN_API_VERSION 8
107 108
108/* plugin return codes */ 109/* plugin return codes */
109enum plugin_status { 110enum plugin_status {
@@ -167,7 +168,7 @@ struct plugin_api {
167 void (*lcd_bitmap_transparent_part)(const fb_data *src, 168 void (*lcd_bitmap_transparent_part)(const fb_data *src,
168 int src_x, int src_y, int stride, 169 int src_x, int src_y, int stride,
169 int x, int y, int width, int height); 170 int x, int y, int width, int height);
170 void (*lcd_bitmap_transparent)(const fb_data *src, int x, int y, 171 void (*lcd_bitmap_transparent)(const fb_data *src, int x, int y,
171 int width, int height); 172 int width, int height);
172#endif 173#endif
173 void (*lcd_putsxy)(int x, int y, const unsigned char *string); 174 void (*lcd_putsxy)(int x, int y, const unsigned char *string);
@@ -364,9 +365,8 @@ struct plugin_api {
364#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC) 365#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
365 unsigned long (*mpeg_get_last_header)(void); 366 unsigned long (*mpeg_get_last_header)(void);
366#endif 367#endif
367#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) 368
368 void (*sound_set_pitch)(int pitch); 369 void (*sound_set_pitch)(int pitch);
369#endif
370 370
371 /* MAS communication */ 371 /* MAS communication */
372#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC) 372#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
@@ -418,7 +418,7 @@ struct plugin_api {
418 bool (*charger_inserted)(void); 418 bool (*charger_inserted)(void);
419# ifdef HAVE_CHARGE_STATE 419# ifdef HAVE_CHARGE_STATE
420 bool (*charging_state)(void); 420 bool (*charging_state)(void);
421# endif 421# endif
422#endif 422#endif
423#ifdef HAVE_USB_POWER 423#ifdef HAVE_USB_POWER
424 bool (*usb_powered)(void); 424 bool (*usb_powered)(void);
@@ -465,15 +465,19 @@ struct plugin_api {
465#endif 465#endif
466 int (*show_logo)(void); 466 int (*show_logo)(void);
467 467
468 /* new stuff at the end, sort into place next time
469 the API gets incompatible */
470
471 struct tree_context* (*tree_get_context)(void); 468 struct tree_context* (*tree_get_context)(void);
472#if defined(SIMULATOR) && defined(HAVE_LCD_BITMAP) && LCD_DEPTH < 8 469#if defined(SIMULATOR) && defined(HAVE_LCD_BITMAP) && LCD_DEPTH < 8
473 void (*sim_lcd_ex_init)(int shades, unsigned long (*getpixel)(int, int)); 470 void (*sim_lcd_ex_init)(int shades, unsigned long (*getpixel)(int, int));
474 void (*sim_lcd_ex_update_rect)(int x, int y, int width, int height); 471 void (*sim_lcd_ex_update_rect)(int x, int y, int width, int height);
475#endif 472#endif
476 473
474#if (CONFIG_CODEC == SWCODEC)
475 void (*pcm_calculate_peaks)(int *left, int *right);
476#endif
477
478 /* new stuff at the end, sort into place next time
479 the API gets incompatible */
480
477}; 481};
478 482
479/* plugin header */ 483/* plugin header */
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
index b486c3c94e..de0c4667bc 100644
--- a/apps/plugins/vu_meter.c
+++ b/apps/plugins/vu_meter.c
@@ -17,7 +17,7 @@
17 **************************************************************************/ 17 **************************************************************************/
18#include "plugin.h" 18#include "plugin.h"
19 19
20#if defined(HAVE_LCD_BITMAP) && (CONFIG_CODEC != SWCODEC) 20#if defined(HAVE_LCD_BITMAP)
21 21
22PLUGIN_HEADER 22PLUGIN_HEADER
23 23
@@ -28,6 +28,10 @@ PLUGIN_HEADER
28#define VUMETER_MENU BUTTON_F1 28#define VUMETER_MENU BUTTON_F1
29#define VUMETER_MENU_EXIT BUTTON_F1 29#define VUMETER_MENU_EXIT BUTTON_F1
30#define VUMETER_MENU_EXIT2 BUTTON_OFF 30#define VUMETER_MENU_EXIT2 BUTTON_OFF
31#define VUMETER_LEFT BUTTON_LEFT
32#define VUMETER_RIGHT BUTTON_RIGHT
33#define VUMETER_UP BUTTON_UP
34#define VUMETER_DOWN BUTTON_DOWN
31 35
32#elif CONFIG_KEYPAD == ONDIO_PAD 36#elif CONFIG_KEYPAD == ONDIO_PAD
33#define VUMETER_QUIT BUTTON_OFF 37#define VUMETER_QUIT BUTTON_OFF
@@ -37,12 +41,62 @@ PLUGIN_HEADER
37#define VUMETER_MENU (BUTTON_MENU | BUTTON_REPEAT) 41#define VUMETER_MENU (BUTTON_MENU | BUTTON_REPEAT)
38#define VUMETER_MENU_EXIT BUTTON_MENU 42#define VUMETER_MENU_EXIT BUTTON_MENU
39#define VUMETER_MENU_EXIT2 BUTTON_OFF 43#define VUMETER_MENU_EXIT2 BUTTON_OFF
44#define VUMETER_LEFT BUTTON_LEFT
45#define VUMETER_RIGHT BUTTON_RIGHT
46#define VUMETER_UP BUTTON_UP
47#define VUMETER_DOWN BUTTON_DOWN
48
49#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
50 (CONFIG_KEYPAD == IRIVER_H300_PAD)
51#define VUMETER_QUIT BUTTON_OFF
52#define VUMETER_HELP BUTTON_ON
53#define VUMETER_MENU BUTTON_SELECT
54#define VUMETER_MENU_EXIT BUTTON_SELECT
55#define VUMETER_MENU_EXIT2 BUTTON_OFF
56#define VUMETER_LEFT BUTTON_LEFT
57#define VUMETER_RIGHT BUTTON_RIGHT
58#define VUMETER_UP BUTTON_UP
59#define VUMETER_DOWN BUTTON_DOWN
60
61#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || \
62 (CONFIG_KEYPAD == IPOD_4G_PAD)
63#define VUMETER_QUIT BUTTON_MENU
64#define VUMETER_HELP BUTTON_PLAY
65#define VUMETER_MENU BUTTON_SELECT
66#define VUMETER_MENU_EXIT BUTTON_SELECT
67#define VUMETER_MENU_EXIT2 BUTTON_MENU
68#define VUMETER_LEFT BUTTON_LEFT
69#define VUMETER_RIGHT BUTTON_RIGHT
70#define VUMETER_UP BUTTON_SCROLL_FWD
71#define VUMETER_DOWN BUTTON_SCROLL_BACK
72
73#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
74#define VUMETER_QUIT BUTTON_POWER
75#define VUMETER_HELP BUTTON_A
76#define VUMETER_MENU BUTTON_SELECT
77#define VUMETER_MENU_EXIT BUTTON_SELECT
78#define VUMETER_MENU_EXIT2 BUTTON_POWER
79#define VUMETER_LEFT BUTTON_LEFT
80#define VUMETER_RIGHT BUTTON_RIGHT
81#define VUMETER_UP BUTTON_UP
82#define VUMETER_DOWN BUTTON_DOWN
83
84#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
85#define VUMETER_QUIT BUTTON_POWER
86#define VUMETER_HELP BUTTON_PLAY
87#define VUMETER_MENU BUTTON_SELECT
88#define VUMETER_MENU_EXIT BUTTON_SELECT
89#define VUMETER_MENU_EXIT2 BUTTON_POWER
90#define VUMETER_LEFT BUTTON_LEFT
91#define VUMETER_RIGHT BUTTON_RIGHT
92#define VUMETER_UP BUTTON_UP
93#define VUMETER_DOWN BUTTON_DOWN
40 94
41#endif 95#endif
42 96
43const struct plugin_api* rb; 97const struct plugin_api* rb;
44 98
45#ifdef SIMULATOR 99#if SIMULATOR && (CONFIG_CODEC != SWCODEC)
46#define mas_codec_readreg(x) rand()%MAX_PEAK 100#define mas_codec_readreg(x) rand()%MAX_PEAK
47#endif 101#endif
48 102
@@ -229,7 +283,7 @@ void change_settings(void)
229 quit = true; 283 quit = true;
230 break; 284 break;
231 285
232 case BUTTON_LEFT: 286 case VUMETER_LEFT:
233 if(selected_setting==0) 287 if(selected_setting==0)
234 settings.meter_type == DIGITAL ? settings.meter_type = ANALOG : settings.meter_type++; 288 settings.meter_type == DIGITAL ? settings.meter_type = ANALOG : settings.meter_type++;
235 if(settings.meter_type==ANALOG) { 289 if(settings.meter_type==ANALOG) {
@@ -250,7 +304,7 @@ void change_settings(void)
250 } 304 }
251 break; 305 break;
252 306
253 case BUTTON_RIGHT: 307 case VUMETER_RIGHT:
254 if(selected_setting==0) 308 if(selected_setting==0)
255 settings.meter_type == DIGITAL ? settings.meter_type = ANALOG : settings.meter_type++; 309 settings.meter_type == DIGITAL ? settings.meter_type = ANALOG : settings.meter_type++;
256 if(settings.meter_type==ANALOG) { 310 if(settings.meter_type==ANALOG) {
@@ -271,11 +325,11 @@ void change_settings(void)
271 } 325 }
272 break; 326 break;
273 327
274 case BUTTON_DOWN: 328 case VUMETER_UP:
275 selected_setting == 3 ? selected_setting=0 : selected_setting++; 329 selected_setting == 3 ? selected_setting=0 : selected_setting++;
276 break; 330 break;
277 331
278 case BUTTON_UP: 332 case VUMETER_DOWN:
279 selected_setting == 0 ? selected_setting=3 : selected_setting--; 333 selected_setting == 0 ? selected_setting=3 : selected_setting--;
280 } 334 }
281 } 335 }
@@ -334,14 +388,22 @@ void draw_digital_minimeters(void) {
334} 388}
335 389
336void analog_meter(void) { 390void analog_meter(void) {
391
392#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
393 int left_peak = rb->mas_codec_readreg(0xC);
394 int right_peak = rb->mas_codec_readreg(0xD);
395#elif (CONFIG_CODEC == SWCODEC)
396 int left_peak, right_peak;
397 rb->pcm_calculate_peaks(&left_peak, &right_peak);
398#endif
399
337 if(settings.analog_use_db_scale) { 400 if(settings.analog_use_db_scale) {
338 left_needle_top_x = analog_db_scale[rb->mas_codec_readreg(0xC)*56/MAX_PEAK]; 401 left_needle_top_x = analog_db_scale[left_peak * 56 / MAX_PEAK];
339 right_needle_top_x = analog_db_scale[rb->mas_codec_readreg(0xD)*56/MAX_PEAK]+56; 402 right_needle_top_x = analog_db_scale[right_peak * 56 / MAX_PEAK] + 56;
340 } 403 }
341
342 else { 404 else {
343 left_needle_top_x = rb->mas_codec_readreg(0xC) * 56 / MAX_PEAK; 405 left_needle_top_x = left_peak * 56 / MAX_PEAK;
344 right_needle_top_x = (rb->mas_codec_readreg(0xD) * 56 / MAX_PEAK)+56; 406 right_needle_top_x = right_peak * 56 / MAX_PEAK + 56;
345 } 407 }
346 408
347 /* Makes a decay on the needle */ 409 /* Makes a decay on the needle */
@@ -382,13 +444,21 @@ void analog_meter(void) {
382} 444}
383 445
384void digital_meter(void) { 446void digital_meter(void) {
447#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
448 int left_peak = rb->mas_codec_readreg(0xC);
449 int right_peak = rb->mas_codec_readreg(0xD);
450#elif (CONFIG_CODEC == SWCODEC)
451 int left_peak, right_peak;
452 rb->pcm_calculate_peaks(&left_peak, &right_peak);
453#endif
454
385 if(settings.digital_use_db_scale) { 455 if(settings.digital_use_db_scale) {
386 num_left_leds = digital_db_scale[rb->mas_codec_readreg(0xC) * 44 / MAX_PEAK]; 456 num_left_leds = digital_db_scale[left_peak * 44 / MAX_PEAK];
387 num_right_leds = digital_db_scale[rb->mas_codec_readreg(0xD) * 44 / MAX_PEAK]; 457 num_right_leds = digital_db_scale[right_peak * 44 / MAX_PEAK];
388 } 458 }
389 else { 459 else {
390 num_left_leds = rb->mas_codec_readreg(0xC) * 11 / MAX_PEAK; 460 num_left_leds = left_peak * 11 / MAX_PEAK;
391 num_right_leds = rb->mas_codec_readreg(0xD) * 11 / MAX_PEAK; 461 num_right_leds = right_peak * 11 / MAX_PEAK;
392 } 462 }
393 463
394 num_left_leds = (num_left_leds+last_num_left_leds*settings.digital_decay)/(settings.digital_decay+1); 464 num_left_leds = (num_left_leds+last_num_left_leds*settings.digital_decay)/(settings.digital_decay+1);
@@ -481,13 +551,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) {
481 change_settings(); 551 change_settings();
482 break; 552 break;
483 553
484 case BUTTON_UP: 554 case VUMETER_UP:
485 case BUTTON_UP | BUTTON_REPEAT: 555 case VUMETER_UP | BUTTON_REPEAT:
486 change_volume(1); 556 change_volume(1);
487 break; 557 break;
488 558
489 case BUTTON_DOWN: 559 case VUMETER_DOWN:
490 case BUTTON_DOWN | BUTTON_REPEAT: 560 case VUMETER_DOWN | BUTTON_REPEAT:
491 change_volume(-1); 561 change_volume(-1);
492 break; 562 break;
493 563