summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/plugin.c1
-rw-r--r--apps/plugin.h7
-rw-r--r--apps/plugins/vu_meter.c216
3 files changed, 86 insertions, 138 deletions
diff --git a/apps/plugin.c b/apps/plugin.c
index 79ecae9a1f..fda46ceb05 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -497,6 +497,7 @@ static const struct plugin_api rockbox_api = {
497#endif 497#endif
498 threads, 498 threads,
499 create_numbered_filename, 499 create_numbered_filename,
500 set_bool_options,
500}; 501};
501 502
502int plugin_load(const char* plugin, void* parameter) 503int plugin_load(const char* plugin, void* parameter)
diff --git a/apps/plugin.h b/apps/plugin.h
index 606db6ebd6..cc5acb0270 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -114,7 +114,7 @@
114#define PLUGIN_MAGIC 0x526F634B /* RocK */ 114#define PLUGIN_MAGIC 0x526F634B /* RocK */
115 115
116/* increase this every time the api struct changes */ 116/* increase this every time the api struct changes */
117#define PLUGIN_API_VERSION 58 117#define PLUGIN_API_VERSION 59
118 118
119/* update this to latest version if a change to the api struct breaks 119/* update this to latest version if a change to the api struct breaks
120 backwards compatibility (and please take the opportunity to sort in any 120 backwards compatibility (and please take the opportunity to sort in any
@@ -616,6 +616,11 @@ struct plugin_api {
616 char *(*create_numbered_filename)(char *buffer, const char *path, 616 char *(*create_numbered_filename)(char *buffer, const char *path,
617 const char *prefix, const char *suffix, 617 const char *prefix, const char *suffix,
618 int numberlen IF_CNFN_NUM_(, int *num)); 618 int numberlen IF_CNFN_NUM_(, int *num));
619
620 bool (*set_bool_options)(const char* string, bool* variable,
621 const char* yes_str, int yes_voice,
622 const char* no_str, int no_voice,
623 void (*function)(bool));
619}; 624};
620 625
621/* plugin header */ 626/* plugin header */
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
index ae378b07de..64ad8f22b4 100644
--- a/apps/plugins/vu_meter.c
+++ b/apps/plugins/vu_meter.c
@@ -28,8 +28,6 @@ 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 31#define VUMETER_UP BUTTON_UP
34#define VUMETER_DOWN BUTTON_DOWN 32#define VUMETER_DOWN BUTTON_DOWN
35 33
@@ -39,8 +37,6 @@ PLUGIN_HEADER
39#define VUMETER_MENU BUTTON_F1 37#define VUMETER_MENU BUTTON_F1
40#define VUMETER_MENU_EXIT BUTTON_F1 38#define VUMETER_MENU_EXIT BUTTON_F1
41#define VUMETER_MENU_EXIT2 BUTTON_OFF 39#define VUMETER_MENU_EXIT2 BUTTON_OFF
42#define VUMETER_LEFT BUTTON_LEFT
43#define VUMETER_RIGHT BUTTON_RIGHT
44#define VUMETER_UP BUTTON_UP 40#define VUMETER_UP BUTTON_UP
45#define VUMETER_DOWN BUTTON_DOWN 41#define VUMETER_DOWN BUTTON_DOWN
46 42
@@ -52,8 +48,6 @@ PLUGIN_HEADER
52#define VUMETER_MENU (BUTTON_MENU | BUTTON_REPEAT) 48#define VUMETER_MENU (BUTTON_MENU | BUTTON_REPEAT)
53#define VUMETER_MENU_EXIT BUTTON_MENU 49#define VUMETER_MENU_EXIT BUTTON_MENU
54#define VUMETER_MENU_EXIT2 BUTTON_OFF 50#define VUMETER_MENU_EXIT2 BUTTON_OFF
55#define VUMETER_LEFT BUTTON_LEFT
56#define VUMETER_RIGHT BUTTON_RIGHT
57#define VUMETER_UP BUTTON_UP 51#define VUMETER_UP BUTTON_UP
58#define VUMETER_DOWN BUTTON_DOWN 52#define VUMETER_DOWN BUTTON_DOWN
59 53
@@ -62,10 +56,9 @@ PLUGIN_HEADER
62#define VUMETER_QUIT BUTTON_OFF 56#define VUMETER_QUIT BUTTON_OFF
63#define VUMETER_HELP BUTTON_ON 57#define VUMETER_HELP BUTTON_ON
64#define VUMETER_MENU BUTTON_SELECT 58#define VUMETER_MENU BUTTON_SELECT
59#define VUMETER_MENU2 BUTTON_MODE
65#define VUMETER_MENU_EXIT BUTTON_SELECT 60#define VUMETER_MENU_EXIT BUTTON_SELECT
66#define VUMETER_MENU_EXIT2 BUTTON_OFF 61#define VUMETER_MENU_EXIT2 BUTTON_OFF
67#define VUMETER_LEFT BUTTON_LEFT
68#define VUMETER_RIGHT BUTTON_RIGHT
69#define VUMETER_UP BUTTON_UP 62#define VUMETER_UP BUTTON_UP
70#define VUMETER_DOWN BUTTON_DOWN 63#define VUMETER_DOWN BUTTON_DOWN
71 64
@@ -78,8 +71,6 @@ PLUGIN_HEADER
78#define VUMETER_MENU BUTTON_SELECT 71#define VUMETER_MENU BUTTON_SELECT
79#define VUMETER_MENU_EXIT BUTTON_SELECT 72#define VUMETER_MENU_EXIT BUTTON_SELECT
80#define VUMETER_MENU_EXIT2 BUTTON_MENU 73#define VUMETER_MENU_EXIT2 BUTTON_MENU
81#define VUMETER_LEFT BUTTON_LEFT
82#define VUMETER_RIGHT BUTTON_RIGHT
83#define VUMETER_UP BUTTON_SCROLL_FWD 74#define VUMETER_UP BUTTON_SCROLL_FWD
84#define VUMETER_DOWN BUTTON_SCROLL_BACK 75#define VUMETER_DOWN BUTTON_SCROLL_BACK
85 76
@@ -89,8 +80,6 @@ PLUGIN_HEADER
89#define VUMETER_MENU BUTTON_MENU 80#define VUMETER_MENU BUTTON_MENU
90#define VUMETER_MENU_EXIT BUTTON_MENU 81#define VUMETER_MENU_EXIT BUTTON_MENU
91#define VUMETER_MENU_EXIT2 BUTTON_POWER 82#define VUMETER_MENU_EXIT2 BUTTON_POWER
92#define VUMETER_LEFT BUTTON_LEFT
93#define VUMETER_RIGHT BUTTON_RIGHT
94#define VUMETER_UP BUTTON_UP 83#define VUMETER_UP BUTTON_UP
95#define VUMETER_DOWN BUTTON_DOWN 84#define VUMETER_DOWN BUTTON_DOWN
96 85
@@ -100,8 +89,6 @@ PLUGIN_HEADER
100#define VUMETER_MENU BUTTON_SELECT 89#define VUMETER_MENU BUTTON_SELECT
101#define VUMETER_MENU_EXIT BUTTON_SELECT 90#define VUMETER_MENU_EXIT BUTTON_SELECT
102#define VUMETER_MENU_EXIT2 BUTTON_POWER 91#define VUMETER_MENU_EXIT2 BUTTON_POWER
103#define VUMETER_LEFT BUTTON_LEFT
104#define VUMETER_RIGHT BUTTON_RIGHT
105#define VUMETER_UP BUTTON_SCROLL_DOWN 92#define VUMETER_UP BUTTON_SCROLL_DOWN
106#define VUMETER_DOWN BUTTON_SCROLL_UP 93#define VUMETER_DOWN BUTTON_SCROLL_UP
107 94
@@ -111,8 +98,6 @@ PLUGIN_HEADER
111#define VUMETER_MENU BUTTON_SELECT 98#define VUMETER_MENU BUTTON_SELECT
112#define VUMETER_MENU_EXIT BUTTON_SELECT 99#define VUMETER_MENU_EXIT BUTTON_SELECT
113#define VUMETER_MENU_EXIT2 BUTTON_POWER 100#define VUMETER_MENU_EXIT2 BUTTON_POWER
114#define VUMETER_LEFT BUTTON_LEFT
115#define VUMETER_RIGHT BUTTON_RIGHT
116#define VUMETER_UP BUTTON_UP 101#define VUMETER_UP BUTTON_UP
117#define VUMETER_DOWN BUTTON_DOWN 102#define VUMETER_DOWN BUTTON_DOWN
118 103
@@ -122,8 +107,6 @@ PLUGIN_HEADER
122#define VUMETER_MENU BUTTON_REW 107#define VUMETER_MENU BUTTON_REW
123#define VUMETER_MENU_EXIT BUTTON_REW 108#define VUMETER_MENU_EXIT BUTTON_REW
124#define VUMETER_MENU_EXIT2 BUTTON_POWER 109#define VUMETER_MENU_EXIT2 BUTTON_POWER
125#define VUMETER_LEFT BUTTON_LEFT
126#define VUMETER_RIGHT BUTTON_RIGHT
127#define VUMETER_UP BUTTON_SCROLL_UP 110#define VUMETER_UP BUTTON_SCROLL_UP
128#define VUMETER_DOWN BUTTON_SCROLL_DOWN 111#define VUMETER_DOWN BUTTON_SCROLL_DOWN
129 112
@@ -171,8 +154,8 @@ const int digital_lead = (LCD_WIDTH - (((int)(LCD_WIDTH / 11))*11) ) / 2;
171 154
172const int digital_block_height = (LCD_HEIGHT - 54) / 2 ; 155const int digital_block_height = (LCD_HEIGHT - 54) / 2 ;
173 156
174#define ANALOG 1 /* The two meter types */ 157#define ANALOG 0 /* The two meter types */
175#define DIGITAL 2 158#define DIGITAL 1
176 159
177int left_needle_top_y; 160int left_needle_top_y;
178int left_needle_top_x; 161int left_needle_top_x;
@@ -360,135 +343,88 @@ void change_volume(int delta) {
360 } 343 }
361} 344}
362 345
363void change_settings(void) 346static bool vu_meter_menu(void)
364{ 347{
365 int selected_setting=0; 348 int selection;
366 bool quit=false; 349 bool menu_quit = false;
367 while(!quit) 350 bool exit = false;
368 { 351
369 rb->lcd_clear_display(); 352 MENUITEM_STRINGLIST(menu,"VU Meter Menu",NULL,"Meter Type","Scale",
370 353 "Minimeters","Decay Speed","Quit");
371 rb->lcd_putsxy(33, 0, "Settings"); 354
372 355 static const struct opt_items meter_type_option[2] = {
373 rb->lcd_putsxy(0, 8, "Meter type:"); 356 { "Analog", -1 },
374 if(settings.meter_type==ANALOG) 357 { "Digital", -1 },
375 rb->lcd_putsxy(67, 8, "Analog"); 358 };
376 else 359
377 rb->lcd_putsxy(67, 8, "Digital"); 360 static const struct opt_items decay_speed_option[7] = {
378 361 { "No Decay", -1 },
379 if(settings.meter_type==ANALOG) { 362 { "Very Fast", -1 },
380 rb->lcd_putsxy(0, 16, "Scale:"); 363 { "Fast", -1 },
381 if(settings.analog_use_db_scale) 364 { "Medium", -1 },
382 rb->lcd_putsxy(36, 16, "dBfs"); 365 { "Medium-Slow", -1 },
383 else 366 { "Slow", -1 },
384 rb->lcd_putsxy(36, 16, "Linear"); 367 { "Very Slow", -1 },
385 368 };
386 rb->lcd_putsxy(0, 24, "Minimeters:"); 369
387 if(settings.analog_minimeters) 370 while (!menu_quit) {
388 rb->lcd_putsxy(65, 24, "On"); 371 switch(rb->do_menu(&menu, &selection))
389 else
390 rb->lcd_putsxy(65, 24, "Off");
391
392 rb->lcd_putsxy(0, 32, "Decay Speed:");
393 switch(settings.analog_decay) {
394 case 0: rb->lcd_putsxy(10, 40, "No Decay"); break;
395 case 1: rb->lcd_putsxy(10, 40, "Very Fast"); break;
396 case 2: rb->lcd_putsxy(10, 40, "Fast"); break;
397 case 3: rb->lcd_putsxy(10, 40, "Medium"); break;
398 case 4: rb->lcd_putsxy(10, 40, "Medium-Slow"); break;
399 case 5: rb->lcd_putsxy(10, 40, "Slow"); break;
400 case 6: rb->lcd_putsxy(10, 40, "Very Slow"); break;
401 }
402 }
403 else {
404 rb->lcd_putsxy(0, 16, "Scale:");
405 if(settings.digital_use_db_scale)
406 rb->lcd_putsxy(36, 16, "dBfs");
407 else
408 rb->lcd_putsxy(36, 16, "Linear");
409
410 rb->lcd_putsxy(0, 24, "Minimeters:");
411 if(settings.digital_minimeters)
412 rb->lcd_putsxy(65, 24, "On");
413 else
414 rb->lcd_putsxy(65, 24, "Off");
415
416 rb->lcd_putsxy(0, 32, "Decay Speed:");
417 switch(settings.digital_decay) {
418 case 0: rb->lcd_putsxy(10, 40, "No Decay"); break;
419 case 1: rb->lcd_putsxy(10, 40, "Very Fast"); break;
420 case 2: rb->lcd_putsxy(10, 40, "Fast"); break;
421 case 3: rb->lcd_putsxy(10, 40, "Medium"); break;
422 case 4: rb->lcd_putsxy(10, 40, "Medium-Slow"); break;
423 case 5: rb->lcd_putsxy(10, 40, "Slow"); break;
424 case 6: rb->lcd_putsxy(10, 40, "Very Slow"); break;
425 }
426 }
427
428 rb->lcd_set_drawmode(DRMODE_COMPLEMENT);
429 rb->lcd_fillrect(0, selected_setting*8+8,111,8);
430 rb->lcd_set_drawmode(DRMODE_SOLID);
431 rb->lcd_update();
432
433 switch(rb->button_get_w_tmo(1))
434 { 372 {
435 case VUMETER_MENU_EXIT: 373 case 0:
436 case VUMETER_MENU_EXIT2: 374 rb->set_option("Meter Type", &settings.meter_type, INT,
437 quit = true; 375 meter_type_option, 2, NULL);
438 break; 376 break;
439 377
440 case VUMETER_LEFT: 378 case 1:
441 if(selected_setting==0) 379 if(settings.meter_type==ANALOG)
442 settings.meter_type == DIGITAL ? settings.meter_type = ANALOG : settings.meter_type++; 380 {
443 if(settings.meter_type==ANALOG) { 381 rb->set_bool_options("Scale", &settings.analog_use_db_scale,
444 if(selected_setting==1) 382 "dBfs", -1, "Linear", -1, NULL);
445 settings.analog_use_db_scale = !settings.analog_use_db_scale;
446 if(selected_setting==2)
447 settings.analog_minimeters = !settings.analog_minimeters;
448 if(selected_setting==3)
449 settings.analog_decay == 0 ? settings.analog_decay = 6 : settings.analog_decay--;
450 } 383 }
451 else { 384 else
452 if(selected_setting==1) 385 {
453 settings.digital_use_db_scale = !settings.digital_use_db_scale; 386 rb->set_bool_options("Scale", &settings.digital_use_db_scale,
454 if(selected_setting==2) 387 "dBfs", -1, "Linear", -1, NULL);
455 settings.digital_minimeters = !settings.digital_minimeters;
456 if(selected_setting==3)
457 settings.digital_decay == 0 ? settings.digital_decay = 6 : settings.digital_decay--;
458 } 388 }
459 break; 389 break;
460 390
461 case VUMETER_RIGHT: 391 case 2:
462 if(selected_setting==0) 392 if(settings.meter_type==ANALOG)
463 settings.meter_type == DIGITAL ? settings.meter_type = ANALOG : settings.meter_type++; 393 {
464 if(settings.meter_type==ANALOG) { 394 rb->set_bool("Enable Minimeters",
465 if(selected_setting==1) 395 &settings.analog_minimeters);
466 settings.analog_use_db_scale = !settings.analog_use_db_scale;
467 if(selected_setting==2)
468 settings.analog_minimeters = !settings.analog_minimeters;
469 if(selected_setting==3)
470 settings.analog_decay == 6 ? settings.analog_decay = 0 : settings.analog_decay++;
471 } 396 }
472 else { 397 else
473 if(selected_setting==1) 398 {
474 settings.digital_use_db_scale = !settings.digital_use_db_scale; 399 rb->set_bool("Enable Minimeters",
475 if(selected_setting==2) 400 &settings.digital_minimeters);
476 settings.digital_minimeters = !settings.digital_minimeters;
477 if(selected_setting==3)
478 settings.digital_decay == 6 ? settings.digital_decay = 0 : settings.digital_decay++;
479 } 401 }
480 break; 402 break;
481 403
482 case VUMETER_UP: 404 case 3:
483 case VUMETER_UP|BUTTON_REPEAT: 405 if(settings.meter_type==ANALOG)
484 selected_setting == 3 ? selected_setting=0 : selected_setting++; 406 {
407 rb->set_option("Decay Speed", &settings.analog_decay, INT,
408 decay_speed_option, 7, NULL);
409 }
410 else
411 {
412 rb->set_option("Decay Speed", &settings.digital_decay, INT,
413 decay_speed_option, 7, NULL);
414 }
485 break; 415 break;
486 416
487 case VUMETER_DOWN: 417 case 4:
488 case VUMETER_DOWN|BUTTON_REPEAT: 418 exit = true;
489 selected_setting == 0 ? selected_setting=3 : selected_setting--; 419 /* fall through to exit the menu */
420 default:
421 menu_quit = true;
422 break;
490 } 423 }
491 } 424 }
425 /* the menu uses the userfont, set it back to sysfont */
426 rb->lcd_setfont(FONT_SYSFIXED);
427 return exit;
492} 428}
493 429
494void draw_analog_minimeters(void) { 430void draw_analog_minimeters(void) {
@@ -708,11 +644,17 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) {
708 break; 644 break;
709 645
710 case VUMETER_MENU: 646 case VUMETER_MENU:
647
648#ifdef VUMETER_MENU2
649 case VUMETER_MENU2:
650#endif
651
711#ifdef VUMETER_MENU_PRE 652#ifdef VUMETER_MENU_PRE
712 if (lastbutton != VUMETER_MENU_PRE) 653 if (lastbutton != VUMETER_MENU_PRE)
713 break; 654 break;
714#endif 655#endif
715 change_settings(); 656 if(vu_meter_menu())
657 return PLUGIN_OK;
716 break; 658 break;
717 659
718 case VUMETER_UP: 660 case VUMETER_UP: