diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugin.c | 8 | ||||
-rw-r--r-- | apps/plugin.h | 22 | ||||
-rw-r--r-- | apps/plugins/vu_meter.c | 108 |
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 | ||
412 | int plugin_load(const char* plugin, void* parameter) | 416 | int 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 */ |
109 | enum plugin_status { | 110 | enum 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 | ||
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 | ||