diff options
author | Dan Everton <dan@iocaine.org> | 2006-03-05 19:34:54 +0000 |
---|---|---|
committer | Dan Everton <dan@iocaine.org> | 2006-03-05 19:34:54 +0000 |
commit | d108849812280eb69b5a00bd1f79193237b2e51a (patch) | |
tree | d6210424ace3a29aca8a75f27a87b5df0be6fcff /apps/plugins | |
parent | 780e8dd0ef9b4325b35c0b680447488455d4e44f (diff) | |
download | rockbox-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/plugins')
-rw-r--r-- | apps/plugins/vu_meter.c | 108 |
1 files changed, 89 insertions, 19 deletions
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 | ||
22 | PLUGIN_HEADER | 22 | PLUGIN_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 | ||
43 | const struct plugin_api* rb; | 97 | const 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 | ||
336 | void analog_meter(void) { | 390 | void 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 | ||
384 | void digital_meter(void) { | 446 | void 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 | ||