diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c index e938af873e..e00afe19b6 100644 --- a/apps/plugins/calendar.c +++ b/apps/plugins/calendar.c @@ -24,6 +24,7 @@ #if defined(HAVE_LCD_BITMAP) && (CONFIG_RTC != 0) #include +#include "lib/playback_control.h" PLUGIN_HEADER @@ -620,7 +621,8 @@ static bool edit_memo(int change, struct shown *shown) MENUITEM_STRINGLIST(edit_menu, "Edit menu", edit_menu_cb, "Remove", "Edit", "New Weekly", "New Monthly", - "New Yearly", "New One off"); + "New Yearly", "New One off", + "Playback Control"); while (!exit) { @@ -652,6 +654,10 @@ static bool edit_memo(int change, struct shown *shown) add_memo(shown,3); return false; + case 6: /* playback control */ + playback_control(NULL); + break; + case GO_TO_PREVIOUS: return false; diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c index 28b1d95df3..337e2cc5b0 100644 --- a/apps/plugins/chessclock.c +++ b/apps/plugins/chessclock.c @@ -19,6 +19,7 @@ * ****************************************************************************/ #include "plugin.h" +#include "lib/playback_control.h" PLUGIN_HEADER @@ -327,13 +328,13 @@ enum plugin_status plugin_start(const void* parameter) int i; bool done; int nr; - + (void)parameter; settings.nr_timers = 1; settings.total_time = 10; settings.round_time = 10; - + /* now go ahead and have fun! */ rb->splash(HZ, "Chess Clock"); @@ -380,7 +381,7 @@ enum plugin_status plugin_start(const void* parameter) timer_holder[i].used_time=0; timer_holder[i].hidden=false; } - + pause=true; /* We start paused */ nr=0; @@ -431,7 +432,7 @@ enum plugin_status plugin_start(const void* parameter) static void show_pause_mode(bool enabled) { static const char pause_icon[] = {0x00,0x7f,0x7f,0x00,0x7f,0x7f,0x00}; - + if (enabled) rb->lcd_mono_bitmap((unsigned char *)pause_icon, 52, 0, 7, 8); else @@ -524,13 +525,14 @@ static int run_timer(int nr) { MENUITEM_STRINGLIST(menu, "Menu", NULL, "Delete player", "Restart round", - "Set round time", "Set total time"); + "Set round time", "Set total time", + "Playback Control"); int val, res; switch(rb->do_menu(&menu, NULL, NULL, false)) { case 0: - /* delete player */ + /* delete player */ timer_holder[nr].hidden=true; retval = CHCL_NEXT; done=true; @@ -544,8 +546,7 @@ static int run_timer(int nr) /* set round time */ val=(max_ticks-ticks)/HZ; res=chessclock_set_int("Round time", - &val, - 10, 0, MAX_TIME, + &val, 10, 0, MAX_TIME, FLAGS_SET_INT_SECONDS); if (res==CHCL_USB) { retval = CHCL_USB; @@ -569,6 +570,9 @@ static int run_timer(int nr) timer_holder[nr].total_time=val; } break; + case 4: + playback_control(NULL); + break; case MENU_ATTACHED_USB: retval = CHCL_USB; done=true; diff --git a/apps/plugins/dice.c b/apps/plugins/dice.c index 5ef5d5099d..ddbc0cc60e 100644 --- a/apps/plugins/dice.c +++ b/apps/plugins/dice.c @@ -22,6 +22,7 @@ #include "plugin.h" #include "lib/pluginlib_actions.h" #include "lib/configfile.h" +#include "lib/playback_control.h" #define MAX_DICES 12 #define INITIAL_NB_DICES 1 @@ -79,7 +80,7 @@ enum plugin_status plugin_start(const void* parameter) { dice_init(&dice); rb->srand(*rb->current_tick); - + configfile_load(CFG_FILE, config, 2, 0); dice.nb_sides = nb_sides_values[sides_index]; if(!dice_menu(&dice)) @@ -171,8 +172,10 @@ bool dice_menu(struct dices * dice) { int selection; bool menu_quit = false, result = false; - MENUITEM_STRINGLIST(menu,"Dice Menu",NULL,"Roll Dice","Number of Dice", - "Number of Sides","Quit"); + MENUITEM_STRINGLIST(menu, "Dice Menu", NULL, + "Roll Dice", + "Number of Dice", "Number of Sides", + "Playback Control", "Quit"); while (!menu_quit) { @@ -194,11 +197,15 @@ bool dice_menu(struct dices * dice) { dice->nb_sides=nb_sides_values[sides_index]; break; + case 3: + playback_control(NULL); + break; + default: menu_quit = true; result = false; break; - } + } } return result; } diff --git a/apps/plugins/keybox.c b/apps/plugins/keybox.c index 73fd138f09..448050938f 100644 --- a/apps/plugins/keybox.c +++ b/apps/plugins/keybox.c @@ -19,6 +19,7 @@ * ****************************************************************************/ #include "plugin.h" +#include "lib/playback_control.h" #include "lib/md5.h" PLUGIN_HEADER @@ -29,7 +30,6 @@ PLUGIN_HEADER /* The header begins with the unencrypted salt (4 bytes) padded with 4 bytes of zeroes. After that comes the encrypted hash of the master password (16 bytes) */ - #define HEADER_LEN 24 @@ -106,9 +106,10 @@ static void decrypt(uint32_t* v, uint32_t* k) static int context_item_cb(int action, const struct menu_item_ex *this_item) { + int i = (intptr_t)this_item; if (action == ACTION_REQUEST_MENUITEM && pw_list.num_entries == 0 - && ((intptr_t)this_item) != 0) + && (i != 0 && i != 5)) { return ACTION_EXIT_MENUITEM; } @@ -117,8 +118,9 @@ static int context_item_cb(int action, const struct menu_item_ex *this_item) MENUITEM_STRINGLIST(context_m, "Context menu", context_item_cb, "Add entry", - "Edit title", "Edit user name", "Edit password", - "Delete entry") + "Edit title", "Edit user name", "Edit password", + "Delete entry", + "Playback Control"); static char * kb_list_cb(int selected_item, void *data, char *buffer, size_t buffer_len) @@ -133,7 +135,7 @@ static char * kb_list_cb(int selected_item, void *data, } if (!entry) return NULL; - + rb->snprintf(buffer, buffer_len, "%s", entry->title); return buffer; @@ -161,7 +163,7 @@ static void delete_entry(int selected_item) entry2 = entry->next; if (!entry2) return; - + entry->next = entry2->next; entry2->used = false; @@ -289,6 +291,9 @@ static void context_menu(int selected_item) case 4: delete_entry(selected_item); return; + case 5: + playback_control(NULL); + return; default: exit = true; break; @@ -610,8 +615,9 @@ static int main_menu(void) int selection, result, ret; bool exit = false; - MENUITEM_STRINGLIST(menu,"Keybox", NULL, "Enter Keybox", - "Reset Keybox", "Exit"); + MENUITEM_STRINGLIST(menu, "Keybox", NULL, + "Enter Keybox", "Reset Keybox", + "Playback Control", "Exit"); do { result = rb->do_menu(&menu, &selection, NULL, false); @@ -625,6 +631,9 @@ static int main_menu(void) reset(); break; case 2: + playback_control(NULL); + break; + case 3: exit = true; break; } diff --git a/apps/plugins/mazezam.c b/apps/plugins/mazezam.c index a19c8a027e..ad5e5437af 100644 --- a/apps/plugins/mazezam.c +++ b/apps/plugins/mazezam.c @@ -224,7 +224,7 @@ static enum { STATE_FAILED, /* The player wants to retry the level */ STATE_GAME_MENU, /* The player wan't to access the in-game menu */ - + STATE_IN_LEVEL, } state; @@ -519,7 +519,7 @@ static void draw_level( short xOff = (LCD_WIDTH - (size*li->width))/2; short yOff = (LCD_HEIGHT - (size*li->height))/2; short i; - + rb->lcd_clear_display(); draw_walls(size,xOff,yOff,li->width, li->height, li->entrance, li->exit); @@ -658,7 +658,7 @@ static void in_game_menu(void) MAZEZAM_TEXT_RETRY_LEVEL, MAZEZAM_TEXT_AUDIO_PLAYBACK, MAZEZAM_TEXT_QUIT); - + /* Don't show the status bar */ switch(rb->do_menu(&menu, &start_selection, NULL, false)){ case 1: /* retry */ @@ -888,6 +888,7 @@ static void main_menu(void) MENUITEM_STRINGLIST(menu,MAZEZAM_TEXT_MAIN_MENU,main_menu_cb, MAZEZAM_TEXT_CONTINUE, MAZEZAM_TEXT_PLAY_NEW_GAME, + MAZEZAM_TEXT_AUDIO_PLAYBACK, MAZEZAM_TEXT_QUIT); while (state >= STATE_IN_APPLICATION) { @@ -906,6 +907,10 @@ static void main_menu(void) game_loop(&r_data); break; + case 2: /* Audio playback */ + playback_control(NULL); + break; + case MENU_ATTACHED_USB: state = STATE_USB_CONNECTED; break; @@ -935,7 +940,7 @@ enum plugin_status plugin_start(const void* parameter) store_lcd_settings(); state = STATE_MAIN_MENU; - main_menu(); + main_menu(); switch (state) { case STATE_USB_CONNECTED: diff --git a/apps/plugins/pacbox/pacbox.c b/apps/plugins/pacbox/pacbox.c index e7b92c38cf..0e3343252f 100644 --- a/apps/plugins/pacbox/pacbox.c +++ b/apps/plugins/pacbox/pacbox.c @@ -29,6 +29,7 @@ #include "pacbox.h" #include "pacbox_lcd.h" #include "lib/configfile.h" +#include "lib/playback_control.h" PLUGIN_HEADER PLUGIN_IRAM_DECLARE @@ -78,9 +79,9 @@ static bool loadFile( const char * name, unsigned char * buf, int len ) if( fd < 0 ) { return false; } - + int n = rb->read( fd, buf, len); - + rb->close( fd ); if( n != len ) { @@ -174,7 +175,8 @@ static bool pacbox_menu(void) MENUITEM_STRINGLIST(menu, "Pacbox Menu", NULL, "Difficulty", "Pacmen Per Game", "Bonus Life", - "Ghost Names", "Display FPS", "Restart", "Quit"); + "Ghost Names", "Display FPS", + "Playback Control", "Restart", "Quit"); rb->button_clear_queue(); @@ -220,10 +222,13 @@ static bool pacbox_menu(void) } break; case 4: /* Show FPS */ - rb->set_option("Display FPS",&settings.showfps,INT, + rb->set_option("Display FPS",&settings.showfps,INT, noyes, 2, NULL); break; - case 5: /* Restart */ + case 5: /* playback control */ + playback_control(NULL); + break; + case 6: /* Restart */ need_restart=true; menu_quit=1; break; @@ -323,7 +328,7 @@ static int gameProc( void ) yield_counter = 0; rb->yield (); } - + /* The following functions render the Pacman screen from the contents of the video and color ram. We first update the background, and then draw the Sprites on top. @@ -343,10 +348,10 @@ static int gameProc( void ) rb->lcd_update(); - /* Keep the framerate at Pacman's 60fps */ + /* Keep the framerate at Pacman's 60fps */ end_time = start_time + (video_frames*HZ)/FPS; while (TIME_BEFORE(*rb->current_tick,end_time)) { - rb->sleep(1); + rb->sleep(1); } } } diff --git a/apps/plugins/rockpaint.c b/apps/plugins/rockpaint.c index 5388aceed5..458f6b552a 100644 --- a/apps/plugins/rockpaint.c +++ b/apps/plugins/rockpaint.c @@ -31,6 +31,7 @@ #include "plugin.h" #include "lib/pluginlib_bmp.h" #include "lib/rgb_hsv.h" +#include "lib/playback_control.h" PLUGIN_HEADER @@ -533,6 +534,7 @@ enum { MAIN_MENU_NEW, MAIN_MENU_LOAD, MAIN_MENU_SAVE, MAIN_MENU_BRUSH_SIZE, MAIN_MENU_BRUSH_SPEED, MAIN_MENU_COLOR, MAIN_MENU_GRID_SIZE, + MAIN_MENU_PLAYBACK_CONTROL, MAIN_MENU_EXIT, }; enum { @@ -551,7 +553,8 @@ enum { MENUITEM_STRINGLIST(main_menu, "RockPaint", NULL, "Resume", "New", "Load", "Save", "Brush Size", "Brush Speed", - "Choose Color", "Grid Size", "Exit"); + "Choose Color", "Grid Size", + "Playback Control", "Exit"); MENUITEM_STRINGLIST(size_menu, "Choose Size", NULL, "1x", "2x","4x", "8x"); MENUITEM_STRINGLIST(speed_menu, "Choose Speed", NULL, @@ -2527,6 +2530,10 @@ static void goto_menu(void) gridsize = gridsize_list[multi]; break; + case MAIN_MENU_PLAYBACK_CONTROL: + playback_control( NULL ); + break; + case MAIN_MENU_EXIT: restore_screen(); quit=true; diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c index 739fce9a3e..8cba920840 100644 --- a/apps/plugins/snake.c +++ b/apps/plugins/snake.c @@ -34,6 +34,7 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left; #include "plugin.h" #ifdef HAVE_LCD_BITMAP +#include "lib/playback_control.h" PLUGIN_HEADER @@ -393,7 +394,7 @@ void game (void) { rb->sleep(HZ/level); button=rb->button_get(false); - + #ifdef HAS_BUTTON_HOLD if (rb->button_hold()) button = SNAKE_PLAYPAUSE; @@ -445,23 +446,28 @@ void game_init(void) { apple=false; snakelength=4; score=0; - board[11][7]=1; - - MENUITEM_STRINGLIST(menu,"Snake Menu",NULL,"Start New Game","Starting Level", - "Quit"); - + board[11][7]=1; + + MENUITEM_STRINGLIST(menu, "Snake Menu", NULL, + "Start New Game", "Starting Level", + "Playback Control", "Quit"); + while (!menu_quit) { switch(rb->do_menu(&menu, &selection, NULL, false)) { case 0: menu_quit = true; /* start playing */ break; - + case 1: rb->set_int("Starting Level", "", UNIT_INT, &level, NULL, 1, 1, 9, NULL ); break; - + + case 2: + playback_control(NULL); + break; + default: dead=1; /* quit program */ menu_quit = true; diff --git a/apps/plugins/star.c b/apps/plugins/star.c index 1a27f51f54..118a18227c 100644 --- a/apps/plugins/star.c +++ b/apps/plugins/star.c @@ -21,6 +21,7 @@ #include "plugin.h" #ifdef HAVE_LCD_BITMAP #include "lib/display_text.h" +#include "lib/playback_control.h" PLUGIN_HEADER @@ -424,8 +425,6 @@ static char board[STAR_HEIGHT][STAR_WIDTH]; #define STAR 3 #define BALL 4 -#define MENU_START 0 - /* char font size */ static int char_width = -1; static int char_height = -1; @@ -1051,18 +1050,21 @@ static int star_menu(void) { int selection, level=1; bool menu_quit = false; - /* get the size of char */ - rb->lcd_getstringsize("a", &char_width, &char_height); - MENUITEM_STRINGLIST(menu,"Star Menu",NULL,"Start Game","Choose Level", - "Help", "Quit"); + MENUITEM_STRINGLIST(menu, "Star Menu", NULL, + "Start Game","Choose Level", + "Help", "Playback Control", "Quit"); while(!menu_quit) { switch(rb->do_menu(&menu, &selection, NULL, false)) { case 0: - menu_quit = true; + /* use system font and get the size of char */ + rb->lcd_setfont(FONT_SYSFIXED); + rb->lcd_getstringsize("a", &char_width, &char_height); + star_run_game(level-1); + rb->lcd_setfont(FONT_UI); break; case 1: rb->set_int("Level", "", UNIT_INT, &level, @@ -1072,19 +1074,17 @@ static int star_menu(void) if(star_help()) usb_detected = true; break; - default: + case 3: + playback_control(NULL); + break; + case 4: menu_quit = true; break; } + if(usb_detected) + return PLUGIN_USB_CONNECTED; } - if (selection == MENU_START) - { - rb->lcd_setfont(FONT_SYSFIXED); - rb->lcd_getstringsize("a", &char_width, &char_height); - level--; - star_run_game(level); - } return PLUGIN_OK; }