From 6c33c51a4ca9907d23e3154d956fd6781122f492 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Stenberg?= Date: Sun, 19 Sep 2004 21:58:37 +0000 Subject: [PATCH] Redesigned the button handling. The code now uses symbolic function defines instead of checking for specific buttons. This makes it easier to add support for new devices with different button layouts. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5091 a1c6a512-1295-4272-9138-f99709370657 --- apps/bookmark.c | 69 ++- apps/credits.c | 2 +- apps/debug_menu.c | 460 ++++++++++---------- apps/main.c | 2 +- apps/main_menu.c | 15 +- apps/menu.c | 77 ++-- apps/menu.h | 26 ++ apps/misc.c | 5 +- apps/onplay.c | 71 ++-- apps/player/keyboard.c | 17 +- apps/playlist.c | 18 +- apps/playlist_viewer.c | 67 +-- apps/plugins/calendar.c | 2 + apps/recorder/keyboard.c | 13 +- apps/recorder/radio.c | 13 + apps/recorder/recording.c | 10 +- apps/screens.c | 157 ++++++- apps/screens.h | 3 +- apps/settings.c | 69 +-- apps/settings.h | 25 ++ apps/settings_menu.c | 34 +- apps/sleeptimer.c | 92 ++-- apps/sound_menu.c | 31 +- apps/tree.c | 115 +++-- apps/tree.h | 42 ++ apps/wps.c | 653 +++++++++-------------------- apps/wps.h | 1 - firmware/drivers/button.c | 11 +- firmware/drivers/serial.c | 2 +- firmware/export/button.h | 33 +- firmware/usb.c | 2 +- uisimulator/common/lcd-playersim.c | 2 +- uisimulator/win32/Makefile | 3 + uisimulator/win32/button.c | 31 +- uisimulator/x11/Makefile | 7 +- uisimulator/x11/button-x11.c | 32 +- 36 files changed, 1049 insertions(+), 1163 deletions(-) diff --git a/apps/bookmark.c b/apps/bookmark.c index ed85ff6222..9488e52d3d 100644 --- a/apps/bookmark.c +++ b/apps/bookmark.c @@ -256,33 +256,25 @@ bool bookmark_autobookmark(void) { /* Wait for a key to be pushed */ key = button_get(true); - switch (key) + if (key & BUTTON_REL) { - case BUTTON_DOWN | BUTTON_REL: - case BUTTON_ON | BUTTON_REL: -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_OFF | BUTTON_REL: - case BUTTON_RIGHT | BUTTON_REL: - case BUTTON_UP | BUTTON_REL: +#ifdef BUTTON_PLAY + if (key & BUTTON_PLAY) +#else + if (key & BUTTON_RIGHT) #endif - case BUTTON_LEFT | BUTTON_REL: - done = true; - break; - - case BUTTON_PLAY | BUTTON_REL: + { if (global_settings.autocreatebookmark == BOOKMARK_RECENT_ONLY_ASK) write_bookmark(false); else write_bookmark(true); - done = true; - break; - - default: - if(default_event_handler(key) == SYS_USB_CONNECTED) - return false; - break; + } + done = true; } + + if (default_event_handler(key) == SYS_USB_CONNECTED) + return false; } return true; } @@ -520,7 +512,11 @@ bool bookmark_autoload(const char* file) case BUTTON_DOWN: return bookmark_load(global_bookmark_file_name, false); #endif +#ifdef BUTTON_PLAY case BUTTON_PLAY: +#else + case BUTTON_RIGHT: +#endif return bookmark_load(global_bookmark_file_name, true); default: @@ -668,7 +664,10 @@ static char* select_bookmark(const char* bookmark_file_name) key = button_get(true); switch(key) { - case BUTTON_PLAY: + case SETTINGS_OK: +#ifdef SETTINGS_OK2 + case SETTINGS_OK2: +#endif /* User wants to use this bookmark */ #ifdef HAVE_LCD_BITMAP if (global_settings.statusbar) @@ -678,7 +677,11 @@ static char* select_bookmark(const char* bookmark_file_name) #endif return bookmark; +#if defined(BUTTON_ON) && defined(BUTTON_PLAY) case BUTTON_ON | BUTTON_PLAY: +#elif defined(BUTTON_MENU) && defined(BUTTON_RIGHT) + case BUTTON_MENU | BUTTON_RIGHT: +#endif /* User wants to delete this bookmark */ delete_bookmark(bookmark_file_name, bookmark_id); bookmark_id_prev=-1; @@ -687,36 +690,20 @@ static char* select_bookmark(const char* bookmark_file_name) while (button_get(false)); /* clear button queue */ break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: + case SETTINGS_DEC: bookmark_id--; break; - case BUTTON_DOWN: + case SETTINGS_INC: bookmark_id++; break; - case BUTTON_LEFT: - case BUTTON_OFF: -#ifdef HAVE_LCD_BITMAP - if (global_settings.statusbar) - lcd_setmargins(0, STATUSBAR_HEIGHT); - else - lcd_setmargins(0, 0); + case SETTINGS_CANCEL: +#ifdef SETTINGS_CANCEL2 + case SETTINGS_CANCEL2: #endif return NULL; -#else - case BUTTON_LEFT: - bookmark_id--; - break; - case BUTTON_RIGHT: - bookmark_id++; - break; - - case BUTTON_STOP: - return NULL; -#endif default: if(default_event_handler(key) == SYS_USB_CONNECTED) return NULL; diff --git a/apps/credits.c b/apps/credits.c index d8cda66677..492426ef8d 100644 --- a/apps/credits.c +++ b/apps/credits.c @@ -54,7 +54,7 @@ void roll_credits(void) } /* abort on keypress */ - if (button_get_w_tmo(DISPLAY_TIME)) + if (button_get_w_tmo(DISPLAY_TIME) & BUTTON_REL) return; } return; diff --git a/apps/debug_menu.c b/apps/debug_menu.c index 12ba0c5fbe..7ef531f4df 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -93,10 +93,7 @@ bool dbg_os(void) switch(button) { -#ifdef BUTTON_OFF - case BUTTON_OFF: -#endif - case BUTTON_LEFT: + case SETTINGS_CANCEL: return false; } } @@ -127,16 +124,16 @@ bool dbg_os(void) switch(button) { - case BUTTON_STOP: + case SETTINGS_CANCEL: return false; - case BUTTON_LEFT: + case SETTINGS_DEC: currval--; if(currval < 0) currval = num_threads-1; break; - case BUTTON_RIGHT: + case SETTINGS_INC: currval++; if(currval > num_threads-1) currval = 0; @@ -161,7 +158,7 @@ bool dbg_mpeg_thread(void) button = button_get_w_tmo(HZ/5); switch(button) { - case BUTTON_OFF | BUTTON_REL: + case SETTINGS_CANCEL: return false; } @@ -375,7 +372,7 @@ bool dbg_hw_info(void) while(1) { button = button_get(true); - if(button == (BUTTON_OFF | BUTTON_REL)) + if(button == SETTINGS_CANCEL) return false; } @@ -460,16 +457,16 @@ bool dbg_hw_info(void) switch(button) { - case BUTTON_STOP: + case SETTINGS_CANCEL: return false; - case BUTTON_LEFT: + case SETTINGS_DEC: currval--; if(currval < 0) currval = 5; break; - case BUTTON_RIGHT: + case SETTINGS_INC: currval++; if(currval > 5) currval = 0; @@ -507,26 +504,17 @@ bool dbg_partitions(void) switch(button) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_OFF: -#else - case BUTTON_STOP: -#endif + case SETTINGS_OK: + case SETTINGS_CANCEL: return false; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: -#endif - case BUTTON_LEFT: + case SETTINGS_DEC: partition--; if (partition < 0) partition = 3; break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: -#endif - case BUTTON_RIGHT: + case SETTINGS_INC: partition++; if (partition > 3) partition = 0; @@ -595,7 +583,7 @@ bool dbg_ports(void) switch(button) { - case BUTTON_OFF | BUTTON_REL: + case SETTINGS_CANCEL: return false; } } @@ -675,16 +663,16 @@ bool dbg_ports(void) switch(button) { - case BUTTON_STOP | BUTTON_REL: + case SETTINGS_CANCEL: return false; - case BUTTON_LEFT: + case SETTINGS_DEC: currval--; if(currval < 0) currval = 10; break; - case BUTTON_RIGHT: + case SETTINGS_INC: currval++; if(currval > 10) currval = 0; @@ -727,20 +715,25 @@ bool dbg_rtc(void) switch(button) { - case BUTTON_DOWN: - if (addr < 63-16) { addr += 16; } - break; - case BUTTON_UP: - if (addr) { addr -= 16; } - break; - case BUTTON_F2: - /* clear the user RAM space */ - for (c = 0; c <= 43; c++) - rtc_write(0x14 + c, 0); - break; - case BUTTON_OFF | BUTTON_REL: - case BUTTON_LEFT | BUTTON_REL: - return false; + case SETTINGS_INC: + if (addr < 63-16) { addr += 16; } + break; + + case SETTINGS_DEC: + if (addr) { addr -= 16; } + break; + +#ifdef BUTTON_F2 + case BUTTON_F2: + /* clear the user RAM space */ + for (c = 0; c <= 43; c++) + rtc_write(0x14 + c, 0); + break; +#endif + + case SETTINGS_OK: + case SETTINGS_CANCEL: + return false; } } return false; @@ -781,26 +774,17 @@ bool dbg_mas(void) switch(button_get_w_tmo(HZ/16)) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: -#else - case BUTTON_RIGHT: -#endif - addr = (addr + NUMROWS) & 0xFF; /* register addrs are 8 bit */ - break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: -#else - case BUTTON_LEFT: -#endif - addr = (addr - NUMROWS) & 0xFF; /* register addrs are 8 bit */ - break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_LEFT: -#else - case BUTTON_DOWN: -#endif - return false; + case SETTINGS_INC: + addr = (addr + NUMROWS) & 0xFF; /* register addrs are 8 bit */ + break; + + case SETTINGS_DEC: + addr = (addr - NUMROWS) & 0xFF; /* register addrs are 8 bit */ + break; + + case SETTINGS_OK: + case SETTINGS_CANCEL: + return false; } } return false; @@ -830,15 +814,16 @@ bool dbg_mas_codec(void) switch(button_get_w_tmo(HZ/16)) { - case BUTTON_DOWN: - addr += 4; - break; - case BUTTON_UP: - if (addr) { addr -= 4; } - break; - case BUTTON_LEFT | BUTTON_REL: - case BUTTON_OFF | BUTTON_REL: - return false; + case SETTINGS_INC: + addr += 4; + break; + case SETTINGS_DEC: + if (addr) { addr -= 4; } + break; + + case SETTINGS_OK: + case SETTINGS_CANCEL: + return false; } } return false; @@ -994,18 +979,18 @@ bool view_battery(void) switch(button_get_w_tmo(HZ/2)) { - case BUTTON_UP: + case SETTINGS_DEC: if (view) view--; break; - case BUTTON_DOWN: + case SETTINGS_INC: if (view < 3) view++; break; - case BUTTON_LEFT | BUTTON_REL: - case BUTTON_OFF | BUTTON_REL: + case SETTINGS_OK: + case SETTINGS_CANCEL: return false; } } @@ -1031,158 +1016,159 @@ bool dbg_mas_info(void) { switch(currval) { - case 0: - mas_readmem(MAS_BANK_D1, 0xff7, &val, 1); - lcd_puts(0, 0, "Design Code"); - snprintf(buf, 32, "%05x ", val); - break; - case 1: - lcd_puts(0, 0, "DC/DC mode "); - snprintf(buf, 32, "8e: %05x ", mas_readreg(0x8e) & 0xfffff); - break; - case 2: - lcd_puts(0, 0, "Mute/Bypass"); - snprintf(buf, 32, "aa: %05x ", mas_readreg(0xaa) & 0xfffff); - break; - case 3: - lcd_puts(0, 0, "PIOData "); - snprintf(buf, 32, "ed: %05x ", mas_readreg(0xed) & 0xfffff); - break; - case 4: - lcd_puts(0, 0, "Startup Cfg"); - snprintf(buf, 32, "e6: %05x ", mas_readreg(0xe6) & 0xfffff); - break; - case 5: - lcd_puts(0, 0, "KPrescale "); - snprintf(buf, 32, "e7: %05x ", mas_readreg(0xe7) & 0xfffff); - break; - case 6: - lcd_puts(0, 0, "KBass "); - snprintf(buf, 32, "6b: %05x ", mas_readreg(0x6b) & 0xfffff); - break; - case 7: - lcd_puts(0, 0, "KTreble "); - snprintf(buf, 32, "6f: %05x ", mas_readreg(0x6f) & 0xfffff); - break; - case 8: - mas_readmem(MAS_BANK_D0, 0x300, &val, 1); - lcd_puts(0, 0, "Frame Count"); - snprintf(buf, 32, "0/300: %04x", val & 0xffff); - break; - case 9: - mas_readmem(MAS_BANK_D0, 0x301, &val, 1); - lcd_puts(0, 0, "Status1 "); - snprintf(buf, 32, "0/301: %04x", val & 0xffff); - break; - case 10: - mas_readmem(MAS_BANK_D0, 0x302, &val, 1); - lcd_puts(0, 0, "Status2 "); - snprintf(buf, 32, "0/302: %04x", val & 0xffff); - break; - case 11: - mas_readmem(MAS_BANK_D0, 0x303, &val, 1); - lcd_puts(0, 0, "CRC Count "); - snprintf(buf, 32, "0/303: %04x", val & 0xffff); - break; - case 12: - mas_readmem(MAS_BANK_D0, 0x36d, &val, 1); - lcd_puts(0, 0, "PLLOffset48"); - snprintf(buf, 32, "0/36d %05x", val & 0xfffff); - break; - case 13: - mas_readmem(MAS_BANK_D0, 0x32d, &val, 1); - lcd_puts(0, 0, "PLLOffset48"); - snprintf(buf, 32, "0/32d %05x", val & 0xfffff); - break; - case 14: - mas_readmem(MAS_BANK_D0, 0x36e, &val, 1); - lcd_puts(0, 0, "PLLOffset44"); - snprintf(buf, 32, "0/36e %05x", val & 0xfffff); - break; - case 15: - mas_readmem(MAS_BANK_D0, 0x32e, &val, 1); - lcd_puts(0, 0, "PLLOffset44"); - snprintf(buf, 32, "0/32e %05x", val & 0xfffff); - break; - case 16: - mas_readmem(MAS_BANK_D0, 0x36f, &val, 1); - lcd_puts(0, 0, "OutputConf "); - snprintf(buf, 32, "0/36f %05x", val & 0xfffff); - break; - case 17: - mas_readmem(MAS_BANK_D0, 0x32f, &val, 1); - lcd_puts(0, 0, "OutputConf "); - snprintf(buf, 32, "0/32f %05x", val & 0xfffff); - break; - case 18: - mas_readmem(MAS_BANK_D1, 0x7f8, &val, 1); - lcd_puts(0, 0, "LL Gain "); - snprintf(buf, 32, "1/7f8 %05x", val & 0xfffff); - break; - case 19: - mas_readmem(MAS_BANK_D1, 0x7f9, &val, 1); - lcd_puts(0, 0, "LR Gain "); - snprintf(buf, 32, "1/7f9 %05x", val & 0xfffff); - break; - case 20: - mas_readmem(MAS_BANK_D1, 0x7fa, &val, 1); - lcd_puts(0, 0, "RL Gain "); - snprintf(buf, 32, "1/7fa %05x", val & 0xfffff); - break; - case 21: - mas_readmem(MAS_BANK_D1, 0x7fb, &val, 1); - lcd_puts(0, 0, "RR Gain "); - snprintf(buf, 32, "1/7fb %05x", val & 0xfffff); - break; - case 22: - lcd_puts(0, 0, "L Trailbits"); - snprintf(buf, 32, "c5: %05x ", mas_readreg(0xc5) & 0xfffff); - break; - case 23: - lcd_puts(0, 0, "R Trailbits"); - snprintf(buf, 32, "c6: %05x ", mas_readreg(0xc6) & 0xfffff); - break; + case 0: + mas_readmem(MAS_BANK_D1, 0xff7, &val, 1); + lcd_puts(0, 0, "Design Code"); + snprintf(buf, 32, "%05x ", val); + break; + case 1: + lcd_puts(0, 0, "DC/DC mode "); + snprintf(buf, 32, "8e: %05x ", mas_readreg(0x8e) & 0xfffff); + break; + case 2: + lcd_puts(0, 0, "Mute/Bypass"); + snprintf(buf, 32, "aa: %05x ", mas_readreg(0xaa) & 0xfffff); + break; + case 3: + lcd_puts(0, 0, "PIOData "); + snprintf(buf, 32, "ed: %05x ", mas_readreg(0xed) & 0xfffff); + break; + case 4: + lcd_puts(0, 0, "Startup Cfg"); + snprintf(buf, 32, "e6: %05x ", mas_readreg(0xe6) & 0xfffff); + break; + case 5: + lcd_puts(0, 0, "KPrescale "); + snprintf(buf, 32, "e7: %05x ", mas_readreg(0xe7) & 0xfffff); + break; + case 6: + lcd_puts(0, 0, "KBass "); + snprintf(buf, 32, "6b: %05x ", mas_readreg(0x6b) & 0xfffff); + break; + case 7: + lcd_puts(0, 0, "KTreble "); + snprintf(buf, 32, "6f: %05x ", mas_readreg(0x6f) & 0xfffff); + break; + case 8: + mas_readmem(MAS_BANK_D0, 0x300, &val, 1); + lcd_puts(0, 0, "Frame Count"); + snprintf(buf, 32, "0/300: %04x", val & 0xffff); + break; + case 9: + mas_readmem(MAS_BANK_D0, 0x301, &val, 1); + lcd_puts(0, 0, "Status1 "); + snprintf(buf, 32, "0/301: %04x", val & 0xffff); + break; + case 10: + mas_readmem(MAS_BANK_D0, 0x302, &val, 1); + lcd_puts(0, 0, "Status2 "); + snprintf(buf, 32, "0/302: %04x", val & 0xffff); + break; + case 11: + mas_readmem(MAS_BANK_D0, 0x303, &val, 1); + lcd_puts(0, 0, "CRC Count "); + snprintf(buf, 32, "0/303: %04x", val & 0xffff); + break; + case 12: + mas_readmem(MAS_BANK_D0, 0x36d, &val, 1); + lcd_puts(0, 0, "PLLOffset48"); + snprintf(buf, 32, "0/36d %05x", val & 0xfffff); + break; + case 13: + mas_readmem(MAS_BANK_D0, 0x32d, &val, 1); + lcd_puts(0, 0, "PLLOffset48"); + snprintf(buf, 32, "0/32d %05x", val & 0xfffff); + break; + case 14: + mas_readmem(MAS_BANK_D0, 0x36e, &val, 1); + lcd_puts(0, 0, "PLLOffset44"); + snprintf(buf, 32, "0/36e %05x", val & 0xfffff); + break; + case 15: + mas_readmem(MAS_BANK_D0, 0x32e, &val, 1); + lcd_puts(0, 0, "PLLOffset44"); + snprintf(buf, 32, "0/32e %05x", val & 0xfffff); + break; + case 16: + mas_readmem(MAS_BANK_D0, 0x36f, &val, 1); + lcd_puts(0, 0, "OutputConf "); + snprintf(buf, 32, "0/36f %05x", val & 0xfffff); + break; + case 17: + mas_readmem(MAS_BANK_D0, 0x32f, &val, 1); + lcd_puts(0, 0, "OutputConf "); + snprintf(buf, 32, "0/32f %05x", val & 0xfffff); + break; + case 18: + mas_readmem(MAS_BANK_D1, 0x7f8, &val, 1); + lcd_puts(0, 0, "LL Gain "); + snprintf(buf, 32, "1/7f8 %05x", val & 0xfffff); + break; + case 19: + mas_readmem(MAS_BANK_D1, 0x7f9, &val, 1); + lcd_puts(0, 0, "LR Gain "); + snprintf(buf, 32, "1/7f9 %05x", val & 0xfffff); + break; + case 20: + mas_readmem(MAS_BANK_D1, 0x7fa, &val, 1); + lcd_puts(0, 0, "RL Gain "); + snprintf(buf, 32, "1/7fa %05x", val & 0xfffff); + break; + case 21: + mas_readmem(MAS_BANK_D1, 0x7fb, &val, 1); + lcd_puts(0, 0, "RR Gain "); + snprintf(buf, 32, "1/7fb %05x", val & 0xfffff); + break; + case 22: + lcd_puts(0, 0, "L Trailbits"); + snprintf(buf, 32, "c5: %05x ", mas_readreg(0xc5) & 0xfffff); + break; + case 23: + lcd_puts(0, 0, "R Trailbits"); + snprintf(buf, 32, "c6: %05x ", mas_readreg(0xc6) & 0xfffff); + break; } lcd_puts(0, 1, buf); button = button_get_w_tmo(HZ/5); switch(button) { - case BUTTON_STOP: - return false; + case SETTINGS_CANCEL: + return false; - case BUTTON_LEFT: - currval--; - if(currval < 0) - currval = 23; - break; + case SETTINGS_DEC: + currval--; + if(currval < 0) + currval = 23; + break; - case BUTTON_RIGHT: - currval++; - if(currval > 23) - currval = 0; - break; - case BUTTON_PLAY: - pll_toggle = !pll_toggle; - if(pll_toggle) - { - /* 14.31818 MHz crystal */ - pll48 = 0x5d9d0; - pll44 = 0xfffceceb; - config = 0; - } - else - { - /* 14.725 MHz crystal */ - pll48 = 0x2d0de; - pll44 = 0xfffa2319; - config = 0; - } - mas_writemem(MAS_BANK_D0, 0x32d, &pll48, 1); - mas_writemem(MAS_BANK_D0, 0x32e, &pll44, 1); - mas_writemem(MAS_BANK_D0, 0x32f, &config, 1); - mas_run(0x475); - break; + case SETTINGS_INC: + currval++; + if(currval > 23) + currval = 0; + break; + + case SETTINGS_OK: + pll_toggle = !pll_toggle; + if(pll_toggle) + { + /* 14.31818 MHz crystal */ + pll48 = 0x5d9d0; + pll44 = 0xfffceceb; + config = 0; + } + else + { + /* 14.725 MHz crystal */ + pll48 = 0x2d0de; + pll44 = 0xfffa2319; + config = 0; + } + mas_writemem(MAS_BANK_D0, 0x32d, &pll48, 1); + mas_writemem(MAS_BANK_D0, 0x32e, &pll44, 1); + mas_writemem(MAS_BANK_D0, 0x32f, &config, 1); + mas_run(0x475); + break; } } return false; @@ -1233,23 +1219,19 @@ static bool view_runtime(void) /* Wait for a key to be pushed */ key = button_get_w_tmo(HZ); switch(key) { -#if defined(HAVE_PLAYER_KEYPAD) || defined(HAVE_NEO_KEYPAD) || defined(HAVE_ONDIO_KEYPAD) - case BUTTON_STOP | BUTTON_REL: -#elif HAVE_RECORDER_KEYPAD - case BUTTON_OFF | BUTTON_REL: -#endif + case SETTINGS_CANCEL: done = true; break; - case BUTTON_LEFT: - case BUTTON_RIGHT: + case SETTINGS_INC: + case SETTINGS_DEC: if (state == 1) state = 2; else state = 1; break; - - case BUTTON_PLAY: + + case SETTINGS_OK: lcd_clear_display(); lcd_puts(0,0,"Clear time?"); lcd_puts(0,1,"PLAY = Yes"); @@ -1258,7 +1240,7 @@ static bool view_runtime(void) key = button_get_w_tmo(HZ*10); if ( key & BUTTON_REL ) continue; - if ( key == BUTTON_PLAY ) { + if ( key == SETTINGS_OK ) { if ( state == 1 ) global_settings.runtime = 0; else @@ -1412,25 +1394,21 @@ static bool dbg_disk_info(void) /* Wait for a key to be pushed */ key = button_get_w_tmo(HZ*5); switch(key) { -#if defined(HAVE_PLAYER_KEYPAD) || defined(HAVE_NEO_KEYPAD) || defined(HAVE_ONDIO_KEYPAD) - case BUTTON_STOP | BUTTON_REL: -#else - case BUTTON_OFF | BUTTON_REL: -#endif + case SETTINGS_CANCEL: done = true; break; - case BUTTON_LEFT: + case SETTINGS_DEC: if (--page < 0) page = max_page; break; - case BUTTON_RIGHT: + case SETTINGS_INC: if (++page > max_page) page = 0; break; - case BUTTON_PLAY: + case SETTINGS_OK: if (page == 3) { mpeg_stop(); /* stop playback, to avoid disk access */ lcd_clear_display(); @@ -1498,11 +1476,7 @@ bool dbg_fm_radio(void) switch(button) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_OFF: -#else - case BUTTON_STOP: -#endif + case SETTINGS_CANCEL: return false; } } diff --git a/apps/main.c b/apps/main.c index 54d3955f4d..70dc9e2fed 100644 --- a/apps/main.c +++ b/apps/main.c @@ -169,7 +169,7 @@ void init(void) lcd_puts(0, 1, str); lcd_puts(0, 3, "Press ON to debug"); lcd_update(); - while(button_get(true) != BUTTON_ON); + while(!(button_get(true) & BUTTON_REL)); dbg_ports(); #endif panicf("ata: %d", rc); diff --git a/apps/main_menu.c b/apps/main_menu.c index 1d2978e65e..da3d8ad5c1 100644 --- a/apps/main_menu.c +++ b/apps/main_menu.c @@ -231,24 +231,19 @@ bool show_info(void) /* Wait for a key to be pushed */ key = button_get_w_tmo(HZ*5); switch(key) { -#if defined(HAVE_PLAYER_KEYPAD) || defined(HAVE_NEO_KEYPAD) || defined(HAVE_ONDIO_KEYPAD) - case BUTTON_STOP | BUTTON_REL: -#else - case BUTTON_LEFT | BUTTON_REL: - case BUTTON_OFF | BUTTON_REL: -#endif + case SETTINGS_OK: + case SETTINGS_CANCEL: done = true; break; -#if defined(HAVE_RECORDER_KEYPAD) || defined(HAVE_ONDIO_KEYPAD) - case BUTTON_LEFT: - case BUTTON_RIGHT: + case SETTINGS_INC: + case SETTINGS_DEC: if (state == 1) state = 2; else state = 1; break; -#endif + default: if(default_event_handler(key) == SYS_USB_CONNECTED) return true; diff --git a/apps/menu.c b/apps/menu.c index fccc88479b..e999c5f774 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -288,11 +288,17 @@ int menu_show(int m) } menu_lines = height / fh; +#else + int menu_lines = MENU_LINES; #endif /* Put the cursor on the first line and draw the menu */ put_cursor(m, menus[m].cursor); + /* wait until all keys are released */ + while (button_get(false) != BUTTON_NONE) + yield(); + while (!exit) { key = button_get_w_tmo(HZ/2); @@ -308,25 +314,15 @@ int menu_show(int m) key = menus[m].callback(key, m); switch( key ) { - -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: - case BUTTON_UP | BUTTON_REPEAT: -#else - case BUTTON_LEFT: - case BUTTON_LEFT | BUTTON_REPEAT: -#endif + case MENU_PREV: + case MENU_PREV | BUTTON_REPEAT: if (menus[m].cursor) { /* move up */ put_cursor(m, menus[m].cursor-1); } else { /* move to bottom */ -#ifdef HAVE_RECORDER_KEYPAD menus[m].top = menus[m].itemcount-(menu_lines+1); -#else - menus[m].top = menus[m].itemcount-3; -#endif if (menus[m].top < 0) menus[m].top = 0; menus[m].cursor = menus[m].itemcount-1; @@ -334,13 +330,8 @@ int menu_show(int m) } break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: - case BUTTON_DOWN | BUTTON_REPEAT: -#else - case BUTTON_RIGHT: - case BUTTON_RIGHT | BUTTON_REPEAT: -#endif + case MENU_NEXT: + case MENU_NEXT | BUTTON_REPEAT: if (menus[m].cursor < menus[m].itemcount-1) { /* move down */ put_cursor(m, menus[m].cursor+1); @@ -353,22 +344,23 @@ int menu_show(int m) } break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_RIGHT: + case MENU_ENTER: +#ifdef MENU_ENTER2 + case MENU_ENTER2: #endif - case BUTTON_PLAY: /* Erase current display state */ lcd_clear_display(); return menus[m].cursor; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_LEFT: - case BUTTON_F1: - case BUTTON_OFF | BUTTON_REPEAT: -#else - case BUTTON_STOP: - case BUTTON_MENU: - case BUTTON_STOP | BUTTON_REPEAT: + case MENU_EXIT: + case MENU_EXIT | BUTTON_REPEAT: +#ifdef MENU_EXIT2 + case MENU_EXIT2: + case MENU_EXIT2 | BUTTON_REPEAT: +#endif +#ifdef MENU_EXIT3 + case MENU_EXIT3: + case MENU_EXIT3 | BUTTON_REPEAT: #endif lcd_stop_scroll(); exit = true; @@ -388,18 +380,21 @@ int menu_show(int m) bool menu_run(int m) { - bool stop=false; - while (!stop) { - int result=menu_show(m); - if (result == MENU_SELECTED_EXIT) - return false; - else if (result == MENU_ATTACHED_USB) - return true; - if (menus[m].items[menus[m].cursor].function()) { - return true; + while (1) { + switch (menu_show(m)) + { + case MENU_SELECTED_EXIT: + return false; + + case MENU_ATTACHED_USB: + return true; + + default: + if (menus[m].items[menus[m].cursor].function()) + return true; + } } - } - return false; + return false; } /* diff --git a/apps/menu.h b/apps/menu.h index 12d934fc18..99ef3443ba 100644 --- a/apps/menu.h +++ b/apps/menu.h @@ -22,6 +22,32 @@ #include +/* button definitions */ +#ifdef HAVE_RECORDER_KEYPAD +#define MENU_NEXT BUTTON_DOWN +#define MENU_PREV BUTTON_UP +#define MENU_EXIT (BUTTON_LEFT | BUTTON_REL) +#define MENU_EXIT2 (BUTTON_OFF | BUTTON_REL) +#define MENU_EXIT3 (BUTTON_F1 | BUTTON_REL) +#define MENU_ENTER (BUTTON_RIGHT | BUTTON_REL) +#define MENU_ENTER2 (BUTTON_PLAY | BUTTON_REL) + +#elif defined HAVE_PLAYER_KEYPAD +#define MENU_NEXT BUTTON_RIGHT +#define MENU_PREV BUTTON_LEFT +#define MENU_EXIT (BUTTON_STOP | BUTTON_REL) +#define MENU_EXIT2 (BUTTON_MENU | BUTTON_REL) +#define MENU_ENTER (BUTTON_PLAY | BUTTON_REL) + +#elif defined HAVE_ONDIO_KEYPAD +#define MENU_NEXT BUTTON_DOWN +#define MENU_PREV BUTTON_UP +#define MENU_EXIT (BUTTON_LEFT | BUTTON_REL) +#define MENU_EXIT2 (BUTTON_MENU | BUTTON_REL) +#define MENU_ENTER (BUTTON_RIGHT | BUTTON_REL) + +#endif + struct menu_item { unsigned char *desc; /* string or ID */ bool (*function) (void); /* return true if USB was connected */ diff --git a/apps/misc.c b/apps/misc.c index fc84386d56..ced0668ae6 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -16,6 +16,7 @@ * KIND, either express or implied. * ****************************************************************************/ +#include #include #include "lang.h" #include "string.h" @@ -206,7 +207,9 @@ bool settings_parseline(char* line, char** name, char** value) bool clean_shutdown(void) { -#ifndef SIMULATOR +#ifdef SIMULATOR + exit(0); +#else if(!charger_inserted()) { lcd_clear_display(); diff --git a/apps/onplay.c b/apps/onplay.c index 5ef595a774..41e8d2d192 100644 --- a/apps/onplay.c +++ b/apps/onplay.c @@ -116,21 +116,22 @@ static bool add_to_playlist(int position, bool queue) while (!exit) { int btn = button_get(true); switch (btn) { - case BUTTON_PLAY: - recurse = true; - exit = true; - break; - default: - /* ignore button releases */ - if (!(btn & BUTTON_REL)) + case SETTINGS_OK: + recurse = true; exit = true; - break; + break; + + default: + /* ignore button releases */ + if (!(btn & BUTTON_REL)) + exit = true; + break; } } } playlist_insert_directory(NULL, selected_file, position, queue, - recurse); + recurse); } else if ((selected_file_attr & TREE_ATTR_MASK) == TREE_ATTR_M3U) playlist_insert_playlist(NULL, selected_file, position, queue); @@ -303,34 +304,34 @@ static bool delete_handler(bool is_dir) while (!exit) { int btn = button_get(true); switch (btn) { - case BUTTON_PLAY: - if (is_dir) - { - char pathname[MAX_PATH]; /* space to go deep */ - strncpy(pathname, selected_file, sizeof pathname); - res = remove_dir(pathname, sizeof(pathname)); - } - else - { - res = remove(selected_file); - } + case SETTINGS_OK: + if (is_dir) + { + char pathname[MAX_PATH]; /* space to go deep */ + strncpy(pathname, selected_file, sizeof pathname); + res = remove_dir(pathname, sizeof(pathname)); + } + else + { + res = remove(selected_file); + } - if (!res) { - onplay_result = ONPLAY_RELOAD_DIR; - lcd_clear_display(); - lcd_puts(0,0,str(LANG_DELETED)); - lcd_puts_scroll(0,1,selected_file); - lcd_update(); - sleep(HZ); - exit = true; - } - break; + if (!res) { + onplay_result = ONPLAY_RELOAD_DIR; + lcd_clear_display(); + lcd_puts(0,0,str(LANG_DELETED)); + lcd_puts_scroll(0,1,selected_file); + lcd_update(); + sleep(HZ); + exit = true; + } + break; - default: - /* ignore button releases */ - if (!(btn & BUTTON_REL)) - exit = true; - break; + default: + /* ignore button releases */ + if (!(btn & BUTTON_REL)) + exit = true; + break; } } return false; diff --git a/apps/player/keyboard.c b/apps/player/keyboard.c index 495102b29a..7752ce3ff7 100644 --- a/apps/player/keyboard.c +++ b/apps/player/keyboard.c @@ -181,14 +181,15 @@ int kbd_input(char* text, int buflen) case MENU_LINE_INPUT: switch (button_pressed) { - case BUTTON_UP: - case BUTTON_UP | BUTTON_REPEAT: + case BUTTON_PLAY: + case BUTTON_PLAY | BUTTON_REPEAT: if (cursor_pos0) cursor_pos--; button_pressed=BUTTON_NONE; @@ -199,13 +200,13 @@ int kbd_input(char* text, int buflen) case MENU_LINE_NEWCHARS: switch (button_pressed) { - case BUTTON_UP: - case BUTTON_UP | BUTTON_REPEAT: + case BUTTON_PLAY: + case BUTTON_PLAY | BUTTON_REPEAT: x=(x+1+linelen)%linelen; button_pressed=BUTTON_NONE; break; - case BUTTON_DOWN: - case BUTTON_DOWN | BUTTON_REPEAT: + case BUTTON_STOP: + case BUTTON_STOP | BUTTON_REPEAT: x=(x-1+linelen)%linelen; button_pressed=BUTTON_NONE; break; diff --git a/apps/playlist.c b/apps/playlist.c index 5725c4be85..ecdb45c104 100644 --- a/apps/playlist.c +++ b/apps/playlist.c @@ -564,11 +564,7 @@ static int add_directory_to_playlist(struct playlist_info* playlist, for (i=0; i 0) { /* user abort */ -#if defined(HAVE_PLAYER_KEYPAD) || defined(HAVE_NEO_KEYPAD) || defined(HAVE_ONDIO_KEYPAD) - if (button_get(false) == BUTTON_STOP) -#else - if (button_get(false) == BUTTON_OFF) -#endif + if (button_get(false) == SETTINGS_CANCEL) break; if (temp_buf[0] != '#' && temp_buf[0] != '\0') @@ -2384,11 +2376,7 @@ int playlist_save(struct playlist_info* playlist, char *filename) int seek; /* user abort */ -#if defined(HAVE_PLAYER_KEYPAD) || defined(HAVE_NEO_KEYPAD) || defined(HAVE_ONDIO_KEYPAD) - if (button_get(false) == BUTTON_STOP) -#else - if (button_get(false) == BUTTON_OFF) -#endif + if (button_get(false) == SETTINGS_CANCEL) break; control_file = playlist->indices[index] & PLAYLIST_INSERT_TYPE_MASK; diff --git a/apps/playlist_viewer.c b/apps/playlist_viewer.c index f093efd172..4268a28c86 100644 --- a/apps/playlist_viewer.c +++ b/apps/playlist_viewer.c @@ -130,7 +130,7 @@ static void update_display_line(int line, bool scroll); static void scroll_display(int lines); static void update_first_index(void); static bool update_playlist(bool force); -#ifdef BUTTON_ON +#ifdef TREE_SHIFT static int onplay_menu(int index); #endif static bool viewer_menu(void); @@ -672,7 +672,7 @@ static bool update_playlist(bool force) return true; } -#ifdef BUTTON_ON +#ifdef TREE_SHIFT /* Menu of playlist commands. Invoked via ON+PLAY on main viewer screen. Returns -1 if USB attached, 0 if no playlist change, and 1 if playlist changed. */ @@ -902,67 +902,37 @@ bool playlist_viewer_ex(char* filename) switch (button) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_OFF: - case BUTTON_LEFT: -#else - case BUTTON_STOP: -#endif + case TREE_EXIT: exit = true; break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: - case BUTTON_UP | BUTTON_REPEAT: -#else - case BUTTON_LEFT: - case BUTTON_LEFT | BUTTON_REPEAT: -#endif + case TREE_PREV: + case TREE_PREV | BUTTON_REPEAT: scroll_display(-1); update = true; break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: - case BUTTON_DOWN | BUTTON_REPEAT: -#else - case BUTTON_RIGHT: - case BUTTON_RIGHT | BUTTON_REPEAT: -#endif + case TREE_NEXT: + case TREE_NEXT | BUTTON_REPEAT: scroll_display(1); update = true; break; -#ifdef BUTTON_ON -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_ON | BUTTON_UP: - case BUTTON_ON | BUTTON_UP | BUTTON_REPEAT: -#else - case BUTTON_ON | BUTTON_LEFT: - case BUTTON_ON | BUTTON_LEFT | BUTTON_REPEAT: -#endif + case TREE_SHIFT | TREE_PREV: + case TREE_SHIFT | TREE_PREV | BUTTON_REPEAT: /* Pageup */ scroll_display(-viewer.num_display_lines); update = true; break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_ON | BUTTON_DOWN: - case BUTTON_ON | BUTTON_DOWN | BUTTON_REPEAT: -#else - case BUTTON_ON | BUTTON_RIGHT: - case BUTTON_ON | BUTTON_RIGHT | BUTTON_REPEAT: -#endif + case TREE_SHIFT | TREE_NEXT: + case TREE_SHIFT | TREE_NEXT | BUTTON_REPEAT: /* Pagedown */ scroll_display(viewer.num_display_lines); update = true; break; -#endif /* BUTTON_ON */ - -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_RIGHT: -#endif - case BUTTON_PLAY: + + case TREE_RUN: if (viewer.move_track >= 0) { /* Move track */ @@ -1003,8 +973,7 @@ bool playlist_viewer_ex(char* filename) update = true; break; -#ifdef BUTTON_ON - case BUTTON_ON | BUTTON_PLAY: + case TREE_SHIFT | TREE_RUN: { /* ON+PLAY menu */ int ret; @@ -1030,12 +999,8 @@ bool playlist_viewer_ex(char* filename) update = true; break; } -#endif /* BUTTON_ON */ -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_F1: -#else - case BUTTON_MENU: -#endif + + case TREE_MENU: if (viewer_menu()) { ret = true; diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c index f3ee8d82db..b501115618 100644 --- a/apps/plugins/calendar.c +++ b/apps/plugins/calendar.c @@ -71,6 +71,8 @@ static void calendar_init(struct today *today, struct shown *shown) int w,h; #ifdef HAVE_RTC struct tm *tm; +#else + (void)today; #endif rb->lcd_getstringsize("A",&w,&h); if ( ((w * 14) > LCD_WIDTH) || ((h * 7) > LCD_HEIGHT) ) diff --git a/apps/recorder/keyboard.c b/apps/recorder/keyboard.c index 1c9ba7bed4..c1bd25e0aa 100644 --- a/apps/recorder/keyboard.c +++ b/apps/recorder/keyboard.c @@ -33,6 +33,7 @@ #define KEYBOARD_LINES 4 #define KEYBOARD_PAGES 3 +#ifdef HAVE_RECORDER_KEYPAD static void kbd_setupkeys(const char* line[KEYBOARD_LINES], int page) { switch (page) { @@ -58,6 +59,7 @@ static void kbd_setupkeys(const char* line[KEYBOARD_LINES], int page) break; } } +#endif /* helper function to spell a char if voice UI is enabled */ void kbd_spellchar(char c) @@ -75,6 +77,12 @@ void kbd_spellchar(char c) int kbd_input(char* text, int buflen) { +#ifndef HAVE_RECORDER_KEYPAD + (void)text; + (void)buflen; + splash(HZ*2, true, "Keyboard not implemented yet"); + return 0; +#else bool done = false; int page = 0; @@ -240,7 +248,6 @@ int kbd_input(char* text, int buflen) kbd_spellchar(line[y][x]); break; -#if (BUTTON_UP != BUTTON_PLAY) /* FixMe, this is just to make the Ondio compile */ case BUTTON_UP: case BUTTON_UP | BUTTON_REPEAT: if (y) @@ -249,7 +256,7 @@ int kbd_input(char* text, int buflen) y = KEYBOARD_LINES - 1; kbd_spellchar(line[y][x]); break; -#endif + case BUTTON_F3: case BUTTON_F3 | BUTTON_REPEAT: /* backspace */ @@ -326,5 +333,7 @@ int kbd_input(char* text, int buflen) } } lcd_setfont(FONT_UI); + return 0; +#endif /* ONDIO */ } diff --git a/apps/recorder/radio.c b/apps/recorder/radio.c index 6b056dfe31..c163cc4552 100644 --- a/apps/recorder/radio.c +++ b/apps/recorder/radio.c @@ -167,6 +167,10 @@ static void remember_frequency(void) bool radio_screen(void) { +#ifndef HAVE_RECORDER_KEYPAD + splash(HZ*2, true, "Radio not supported yet"); + return false; +#else char buf[MAX_PATH]; bool done = false; int button; @@ -554,6 +558,7 @@ bool radio_screen(void) } #endif return have_recorded; +#endif /* ONDIO */ } void radio_save_presets(void) @@ -663,12 +668,14 @@ static bool radio_add_preset(void) static int handle_radio_presets_menu_cb(int key, int m) { (void)m; +#ifdef HAVE_RECORDER_KEYPAD switch(key) { case BUTTON_F3: key = BUTTON_LEFT; /* Fake an exit */ break; } +#endif return key; } @@ -725,6 +732,11 @@ bool handle_radio_presets_menu(void) int handle_radio_presets_cb(int key, int m) { +#ifdef HAVE_ONDIO_KEYPAD + (void)key; + (void)m; + return BUTTON_NONE; +#else bool ret; switch(key) @@ -750,6 +762,7 @@ int handle_radio_presets_cb(int key, int m) break; } return key; +#endif } bool handle_radio_presets(void) diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c index 392f20d9ed..2c39c367b8 100644 --- a/apps/recorder/recording.c +++ b/apps/recorder/recording.c @@ -166,6 +166,10 @@ int rec_create_directory(void) bool recording_screen(void) { +#ifndef HAVE_RECORDING_KEYPAD + splash(HZ*2, true, "Recording not supported yet"); + return false; +#else int button; bool done = false; char buf[32]; @@ -280,13 +284,12 @@ bool recording_screen(void) } break; -#if (BUTTON_UP != BUTTON_PLAY) /* FixMe, this is just to make the Ondio compile */ case BUTTON_UP: cursor--; adjust_cursor(); update_countdown = 1; /* Update immediately */ break; -#endif + case BUTTON_DOWN: cursor++; adjust_cursor(); @@ -619,8 +622,10 @@ bool recording_screen(void) reload_directory(); return been_in_usb_mode; +#endif } +#ifdef HAVE_RECORDER_KEYPAD bool f2_rec_screen(void) { bool exit = false; @@ -813,3 +818,4 @@ bool f3_rec_screen(void) return false; } +#endif diff --git a/apps/screens.c b/apps/screens.c index ebb7981bd1..b0d95e0a7a 100644 --- a/apps/screens.c +++ b/apps/screens.c @@ -40,6 +40,7 @@ #include "action.h" #include "talk.h" #include "misc.h" +#include "id3.h" #ifdef HAVE_LCD_BITMAP #define BMPHEIGHT_usb_logo 32 @@ -240,7 +241,7 @@ int charging_screen(void) { int button; int rc = 0; -#ifdef HAVE_RECORDER_KEYPAD +#ifdef BUTTON_OFF const int offbutton = BUTTON_OFF; #else const int offbutton = BUTTON_STOP; @@ -263,7 +264,11 @@ int charging_screen(void) status_draw(false); charging_display_info(true); button = button_get_w_tmo(HZ/3); +#ifdef BUTTON_ON if (button == (BUTTON_ON | BUTTON_REL)) +#else + if (button == (BUTTON_RIGHT | BUTTON_REL)) +#endif rc = 3; else if (button == offbutton) rc = 2; @@ -286,7 +291,7 @@ int charging_screen(void) 0 if no key was pressed 1 if a key was pressed (or if ON was held down long enough to repeat) 2 if USB was connected */ -int on_screen(void) +int pitch_screen(void) { int button; static int pitch = 1000; @@ -1082,15 +1087,19 @@ bool set_time_screen(const char* string, struct tm *tm) *valptr = min; say_time(cursorpos, tm); break; + +#ifdef BUTTON_ON case BUTTON_ON: +#elif defined BUTTON_MENU + case BUTTON_MENU: +#endif done = true; break; -#if (BUTTON_ON != BUTTON_OFF) /* FixMe, this is just to make the Ondio compile */ + case BUTTON_OFF: done = true; tm->tm_year = -1; break; -#endif default: if (default_event_handler(button) == SYS_USB_CONNECTED) @@ -1140,3 +1149,143 @@ bool shutdown_screen(void) return false; } #endif + +bool browse_id3(void) +{ + struct mp3entry* id3 = mpeg_current_track(); + int button; + int menu_pos = 0; + int menu_max = 8; + bool exit = false; + char scroll_text[MAX_PATH]; + + if (!(mpeg_status() & MPEG_STATUS_PLAY)) + return false; + + while (!exit) + { + lcd_clear_display(); + + switch (menu_pos) + { + case 0: + lcd_puts(0, 0, str(LANG_ID3_TITLE)); + lcd_puts_scroll(0, 1, id3->title ? id3->title : + (char*)str(LANG_ID3_NO_TITLE)); + break; + + case 1: + lcd_puts(0, 0, str(LANG_ID3_ARTIST)); + lcd_puts_scroll(0, 1, + id3->artist ? id3->artist : + (char*)str(LANG_ID3_NO_ARTIST)); + break; + + case 2: + lcd_puts(0, 0, str(LANG_ID3_ALBUM)); + lcd_puts_scroll(0, 1, id3->album ? id3->album : + (char*)str(LANG_ID3_NO_ALBUM)); + break; + + case 3: + lcd_puts(0, 0, str(LANG_ID3_TRACKNUM)); + + if (id3->tracknum) { + snprintf(scroll_text,sizeof(scroll_text), "%d", + id3->tracknum); + lcd_puts_scroll(0, 1, scroll_text); + } + else + lcd_puts_scroll(0, 1, str(LANG_ID3_NO_TRACKNUM)); + break; + + case 4: + lcd_puts(0, 0, str(LANG_ID3_GENRE)); + lcd_puts_scroll(0, 1, + id3_get_genre(id3) ? + id3_get_genre(id3) : + (char*)str(LANG_ID3_NO_INFO)); + break; + + case 5: + lcd_puts(0, 0, str(LANG_ID3_YEAR)); + if (id3->year) { + snprintf(scroll_text,sizeof(scroll_text), "%d", + id3->year); + lcd_puts_scroll(0, 1, scroll_text); + } + else + lcd_puts_scroll(0, 1, str(LANG_ID3_NO_INFO)); + break; + + case 6: + lcd_puts(0, 0, str(LANG_ID3_LENGHT)); + snprintf(scroll_text,sizeof(scroll_text), "%d:%02d", + id3->length / 60000, + id3->length % 60000 / 1000 ); + lcd_puts(0, 1, scroll_text); + break; + + case 7: + lcd_puts(0, 0, str(LANG_ID3_PLAYLIST)); + snprintf(scroll_text,sizeof(scroll_text), "%d/%d", + playlist_get_display_index(), playlist_amount()); + lcd_puts_scroll(0, 1, scroll_text); + break; + + + case 8: + lcd_puts(0, 0, str(LANG_ID3_BITRATE)); + snprintf(scroll_text,sizeof(scroll_text), "%d kbps", + id3->bitrate); + lcd_puts(0, 1, scroll_text); + break; + + case 9: + lcd_puts(0, 0, str(LANG_ID3_FRECUENCY)); + snprintf(scroll_text,sizeof(scroll_text), "%d Hz", + id3->frequency); + lcd_puts(0, 1, scroll_text); + break; + + case 10: + lcd_puts(0, 0, str(LANG_ID3_PATH)); + lcd_puts_scroll(0, 1, id3->path); + break; + } + lcd_update(); + + button = button_get(true); + + switch(button) + { + case SETTINGS_DEC: + if (menu_pos > 0) + menu_pos--; + else + menu_pos = menu_max; + break; + + case SETTINGS_INC: + if (menu_pos < menu_max) + menu_pos++; + else + menu_pos = 0; + break; + + case SETTINGS_CANCEL: + lcd_stop_scroll(); + /* eat release event */ + button_get(true); + exit = true; + break; + + default: + if(default_event_handler(button) == SYS_USB_CONNECTED) + return true; + break; + } + } + return false; +} + diff --git a/apps/screens.h b/apps/screens.h index a119a9b853..9f15ff3228 100644 --- a/apps/screens.h +++ b/apps/screens.h @@ -27,7 +27,7 @@ int charging_screen(void); void charging_splash(void); #ifdef HAVE_RECORDER_KEYPAD -int on_screen(void); +int pitch_screen(void); bool quick_screen(const int, const int); #endif @@ -42,6 +42,7 @@ bool set_time_screen(const char* string, struct tm *tm); #endif bool shutdown_screen(void); +bool browse_id3(void); #endif diff --git a/apps/settings.c b/apps/settings.c index ccb7703ab2..708a38b678 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -70,6 +70,7 @@ struct user_settings global_settings; const char rec_base_directory[] = REC_BASE_DIR; + #define CONFIG_BLOCK_VERSION 16 #define CONFIG_BLOCK_SIZE 512 #define RTC_BLOCK_SIZE 44 @@ -1319,40 +1320,26 @@ bool set_int(const char* string, button = button_get_w_tmo(HZ/2); switch(button) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: - case BUTTON_UP | BUTTON_REPEAT: -#else - case BUTTON_RIGHT: - case BUTTON_RIGHT | BUTTON_REPEAT: -#endif + case SETTINGS_INC: + case SETTINGS_INC | BUTTON_REPEAT: *variable += step; break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: - case BUTTON_DOWN | BUTTON_REPEAT: -#else - case BUTTON_LEFT: - case BUTTON_LEFT | BUTTON_REPEAT: -#endif + case SETTINGS_DEC: + case SETTINGS_DEC | BUTTON_REPEAT: *variable -= step; break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_LEFT: - case BUTTON_PLAY: -#else - case BUTTON_PLAY: + case SETTINGS_OK: +#ifdef SETTINGS_OK2 + case SETTINGS_OK2: #endif done = true; break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_OFF: -#else - case BUTTON_STOP: - case BUTTON_MENU: + case SETTINGS_CANCEL: +#ifdef SETTINGS_CANCEL2 + case SETTINGS_CANCEL2: #endif if (*variable != org_value) { *variable=org_value; @@ -1431,13 +1418,8 @@ bool set_option(const char* string, void* variable, enum optiontype type, button = button_get_w_tmo(HZ/2); switch (button) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: - case BUTTON_UP | BUTTON_REPEAT: -#else - case BUTTON_RIGHT: - case BUTTON_RIGHT | BUTTON_REPEAT: -#endif + case SETTINGS_INC: + case SETTINGS_INC | BUTTON_REPEAT: if (type == INT) { if ( *intvar < (numoptions-1) ) (*intvar)++; @@ -1448,13 +1430,8 @@ bool set_option(const char* string, void* variable, enum optiontype type, *boolvar = !*boolvar; break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: - case BUTTON_DOWN | BUTTON_REPEAT: -#else - case BUTTON_LEFT: - case BUTTON_LEFT | BUTTON_REPEAT: -#endif + case SETTINGS_DEC: + case SETTINGS_DEC | BUTTON_REPEAT: if (type == INT) { if ( *intvar > 0 ) (*intvar)--; @@ -1465,20 +1442,16 @@ bool set_option(const char* string, void* variable, enum optiontype type, *boolvar = !*boolvar; break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_LEFT: - case BUTTON_PLAY: -#else - case BUTTON_PLAY: + case SETTINGS_OK: +#ifdef SETTINGS_OK2 + case SETTINGS_OK2: #endif done = true; break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_OFF: -#else - case BUTTON_STOP: - case BUTTON_MENU: + case SETTINGS_CANCEL: +#ifdef SETTINGS_CANCEL2 + case SETTINGS_CANCEL2: #endif if (((type==INT) && (*intvar != oldval)) || ((type==BOOL) && (*boolvar != (bool)oldval))) { diff --git a/apps/settings.h b/apps/settings.h index 331e8dc904..0af466c5f7 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -33,6 +33,31 @@ #define MAX_FILENAME 20 +/* button definitions */ +#ifdef HAVE_RECORDER_KEYPAD +#define SETTINGS_INC BUTTON_UP +#define SETTINGS_DEC BUTTON_DOWN +#define SETTINGS_OK (BUTTON_PLAY|BUTTON_REL) +#define SETTINGS_OK2 (BUTTON_LEFT|BUTTON_REL) +#define SETTINGS_CANCEL (BUTTON_OFF|BUTTON_REL) +#define SETTINGS_CANCEL2 (BUTTON_F1|BUTTON_REL) + +#elif defined HAVE_PLAYER_KEYPAD +#define SETTINGS_INC BUTTON_RIGHT +#define SETTINGS_DEC BUTTON_LEFT +#define SETTINGS_OK (BUTTON_PLAY|BUTTON_REL) +#define SETTINGS_CANCEL (BUTTON_STOP|BUTTON_REL) +#define SETTINGS_CANCEL2 (BUTTON_MENU|BUTTON_REL) + +#elif defined HAVE_ONDIO_KEYPAD +#define SETTINGS_INC BUTTON_UP +#define SETTINGS_DEC BUTTON_DOWN +#define SETTINGS_OK (BUTTON_RIGHT|BUTTON_REL) +#define SETTINGS_OK2 (BUTTON_LEFT|BUTTON_REL) +#define SETTINGS_CANCEL (BUTTON_MENU|BUTTON_REL) + +#endif + /* data structures */ #define RESUME_OFF 0 diff --git a/apps/settings_menu.c b/apps/settings_menu.c index 4d2e2f9a44..9e95fe9d9a 100644 --- a/apps/settings_menu.c +++ b/apps/settings_menu.c @@ -1066,27 +1066,23 @@ static bool reset_settings(void) while(!done) { button = button_get(true); switch(button) { - case BUTTON_PLAY: - settings_reset(); - settings_apply(); - lcd_clear_display(); - lcd_puts(0,1,str(LANG_RESET_DONE_CLEAR)); - done = true; - break; + case SETTINGS_OK: + settings_reset(); + settings_apply(); + lcd_clear_display(); + lcd_puts(0,1,str(LANG_RESET_DONE_CLEAR)); + done = true; + break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_OFF: -#else - case BUTTON_STOP: -#endif - lcd_clear_display(); - lcd_puts(0,1,str(LANG_RESET_DONE_CANCEL)); - done = true; - break; + case SETTINGS_CANCEL: + lcd_clear_display(); + lcd_puts(0,1,str(LANG_RESET_DONE_CANCEL)); + done = true; + break; - default: - if(default_event_handler(button) == SYS_USB_CONNECTED) - return true; + default: + if(default_event_handler(button) == SYS_USB_CONNECTED) + return true; } } diff --git a/apps/sleeptimer.c b/apps/sleeptimer.c index 4fc7515ac0..55599bf7b3 100644 --- a/apps/sleeptimer.c +++ b/apps/sleeptimer.c @@ -69,68 +69,50 @@ bool sleeptimer_screen(void) button = button_get_w_tmo(HZ); switch(button) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_LEFT: - case BUTTON_PLAY: -#else - case BUTTON_PLAY: -#endif - done = true; - break; + case SETTINGS_OK: + done = true; + break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_OFF: -#else - case BUTTON_STOP: - case BUTTON_MENU: -#endif - if (changed) { - lcd_stop_scroll(); - lcd_puts(0, 0, str(LANG_MENU_SETTING_CANCEL)); - lcd_update(); - set_sleep_timer(org_timer); - sleep(HZ/2); - } - done = true; - break; + case SETTINGS_CANCEL: + if (changed) { + lcd_stop_scroll(); + lcd_puts(0, 0, str(LANG_MENU_SETTING_CANCEL)); + lcd_update(); + set_sleep_timer(org_timer); + sleep(HZ/2); + } + done = true; + break; -#if defined(HAVE_PLAYER_KEYPAD) || defined(HAVE_NEO_KEYPAD) || defined(HAVE_ONDIO_KEYPAD) - case BUTTON_RIGHT: -#else - case BUTTON_UP: -#endif - oldtime = (get_sleep_timer()+59) / 60; - if(oldtime < THRESHOLD) - amount = SMALL_STEP_SIZE; - else - amount = LARGE_STEP_SIZE; + case SETTINGS_INC: + oldtime = (get_sleep_timer()+59) / 60; + if(oldtime < THRESHOLD) + amount = SMALL_STEP_SIZE; + else + amount = LARGE_STEP_SIZE; - newtime = oldtime * 60 + amount; - if(newtime > MAX_TIME) - newtime = MAX_TIME; + newtime = oldtime * 60 + amount; + if(newtime > MAX_TIME) + newtime = MAX_TIME; - changed = sayit = true; - set_sleep_timer(newtime); - break; + changed = sayit = true; + set_sleep_timer(newtime); + break; -#if defined(HAVE_PLAYER_KEYPAD) || defined(HAVE_ONDIO_KEYPAD) - case BUTTON_LEFT: -#else - case BUTTON_DOWN: -#endif - oldtime = (get_sleep_timer()+59) / 60; - if(oldtime <= THRESHOLD) - amount = SMALL_STEP_SIZE; - else - amount = LARGE_STEP_SIZE; + case SETTINGS_DEC: + oldtime = (get_sleep_timer()+59) / 60; + if(oldtime <= THRESHOLD) + amount = SMALL_STEP_SIZE; + else + amount = LARGE_STEP_SIZE; - newtime = oldtime*60 - amount; - if(newtime < 0) - newtime = 0; + newtime = oldtime*60 - amount; + if(newtime < 0) + newtime = 0; - changed = sayit = true; - set_sleep_timer(newtime); - break; + changed = sayit = true; + set_sleep_timer(newtime); + break; } seconds = get_sleep_timer(); diff --git a/apps/sound_menu.c b/apps/sound_menu.c index a037c94084..fdb2043171 100644 --- a/apps/sound_menu.c +++ b/apps/sound_menu.c @@ -103,38 +103,29 @@ bool set_sound(const char* string, changed = false; button = button_get_w_tmo(HZ/2); switch( button ) { -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: - case BUTTON_UP | BUTTON_REPEAT: -#else - case BUTTON_RIGHT: - case BUTTON_RIGHT | BUTTON_REPEAT: -#endif + case SETTINGS_INC: + case SETTINGS_INC | BUTTON_REPEAT: (*variable)+=steps; if(*variable > max ) *variable = max; changed = true; break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: - case BUTTON_DOWN | BUTTON_REPEAT: -#else - case BUTTON_LEFT: - case BUTTON_LEFT | BUTTON_REPEAT: -#endif + case SETTINGS_DEC: + case SETTINGS_DEC | BUTTON_REPEAT: (*variable)-=steps; if(*variable < min ) *variable = min; changed = true; break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_LEFT: -#else - case BUTTON_STOP: - case BUTTON_MENU: - case BUTTON_PLAY: + case SETTINGS_OK: + case SETTINGS_CANCEL: +#ifdef SETTINGS_OK2 + case SETTINGS_OK2: +#endif +#ifdef SETTINGS_CANCEL2 + case SETTINGS_CANCEL2: #endif done = true; break; diff --git a/apps/tree.c b/apps/tree.c index 90d7010d03..a83346b8d2 100644 --- a/apps/tree.c +++ b/apps/tree.c @@ -194,20 +194,6 @@ void tree_get_filetypes(const struct filetype** types, int* count) #endif /* HAVE_LCD_BITMAP */ -#ifdef HAVE_RECORDER_KEYPAD -#define TREE_NEXT BUTTON_DOWN -#define TREE_PREV BUTTON_UP -#define TREE_EXIT BUTTON_LEFT -#define TREE_ENTER BUTTON_RIGHT -#define TREE_MENU BUTTON_F1 -#else -#define TREE_NEXT BUTTON_RIGHT -#define TREE_PREV BUTTON_LEFT -#define TREE_EXIT BUTTON_STOP -#define TREE_ENTER BUTTON_PLAY -#define TREE_MENU BUTTON_MENU -#endif /* HAVE_RECORDER_KEYPAD */ - /* talkbox hovering delay, to avoid immediate disk activity */ #define HOVER_DELAY (HZ/2) @@ -641,9 +627,9 @@ static bool ask_resume(bool ask_once) while (!stop) { button = button_get(true); switch (button) { - case BUTTON_PLAY: -#ifdef BUTTON_RC_PLAY - case BUTTON_RC_PLAY: + case TREE_RUN: +#ifdef TREE_RC_RUN + case TREE_RC_RUN: #endif return true; @@ -771,9 +757,10 @@ void set_current_file(char *path) } } -#ifdef BUTTON_ON -static bool handle_on(int *ds, int *dc, int numentries, int tree_max_on_screen, - const int *dirfilter) +#ifdef TREE_SHIFT +static bool handle_shift(int *ds, int *dc, int numentries, + int tree_max_on_screen, + const int *dirfilter) { bool exit = false; bool used = false; @@ -790,12 +777,12 @@ static bool handle_on(int *ds, int *dc, int numentries, int tree_max_on_screen, while (!exit) { switch (button_get(true)) { case TREE_PREV: -#ifdef BUTTON_RC_LEFT - case BUTTON_RC_LEFT: +#ifdef TREE_RC_PREV + case TREE_RC_PREV: #endif -#ifdef BUTTON_ON - case BUTTON_ON | TREE_PREV: - case BUTTON_ON | TREE_PREV | BUTTON_REPEAT: +#ifdef TREE_SHIFT + case TREE_SHIFT | TREE_PREV: + case TREE_SHIFT | TREE_PREV | BUTTON_REPEAT: #endif used = true; if ( dirstart ) { @@ -808,12 +795,12 @@ static bool handle_on(int *ds, int *dc, int numentries, int tree_max_on_screen, break; case TREE_NEXT: -#ifdef BUTTON_RC_RIGHT - case BUTTON_RC_RIGHT: +#ifdef TREE_RC_NEXT + case TREE_RC_NEXT: #endif -#ifdef BUTTON_ON - case BUTTON_ON | TREE_NEXT: - case BUTTON_ON | TREE_NEXT | BUTTON_REPEAT: +#ifdef TREE_SHIFT + case TREE_SHIFT | TREE_NEXT: + case TREE_SHIFT | TREE_NEXT | BUTTON_REPEAT: #endif used = true; if ( dirstart < numentries - tree_max_on_screen ) { @@ -827,12 +814,12 @@ static bool handle_on(int *ds, int *dc, int numentries, int tree_max_on_screen, break; - case BUTTON_PLAY: -#ifdef BUTTON_RC_PLAY - case BUTTON_RC_PLAY: + case TREE_RUN: +#ifdef TREE_RC_PLAY + case TREE_RC_RUN: #endif -#ifdef BUTTON_ON - case BUTTON_ON | BUTTON_PLAY: +#ifdef TREE_SHIFT + case TREE_SHIFT | TREE_RUN: #endif { int onplay_result; @@ -866,10 +853,10 @@ static bool handle_on(int *ds, int *dc, int numentries, int tree_max_on_screen, exit = true; break; } -#ifdef BUTTON_ON - case BUTTON_ON | BUTTON_REL: - case BUTTON_ON | TREE_PREV | BUTTON_REL: - case BUTTON_ON | TREE_NEXT | BUTTON_REL: +#ifdef TREE_SHIFT + case TREE_SHIFT | BUTTON_REL: + case TREE_SHIFT | TREE_PREV | BUTTON_REL: + case TREE_SHIFT | TREE_NEXT | BUTTON_REL: exit = true; break; #endif @@ -969,7 +956,7 @@ static bool dirbrowse(const char *root, const int *dirfilter) while (!stop) { button = button_get(true); switch (button) { - case BUTTON_PLAY: + case TREE_RUN: rolo_load("/" BOOTFILE); stop = true; break; @@ -988,11 +975,9 @@ static bool dirbrowse(const char *root, const int *dirfilter) switch ( button ) { case TREE_EXIT: -#ifdef BUTTON_RC_STOP - case BUTTON_RC_STOP: -#endif -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_LEFT | BUTTON_REPEAT: + case TREE_EXIT | BUTTON_REPEAT: +#ifdef TREE_RC_EXIT + case TREE_RC_EXIT: #endif i=strlen(currdir); if (i>1) { @@ -1027,8 +1012,8 @@ static bool dirbrowse(const char *root, const int *dirfilter) } break; -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_OFF: +#ifdef TREE_OFF + case TREE_OFF: /* Stop the music if it is playing, else show the shutdown screen */ if(mpeg_status()) @@ -1042,27 +1027,23 @@ static bool dirbrowse(const char *root, const int *dirfilter) restore = true; } break; -#endif -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_OFF | BUTTON_REPEAT: -#else - case BUTTON_STOP | BUTTON_REPEAT: -#endif + case TREE_OFF | BUTTON_REPEAT: if (charger_inserted()) { charging_splash(); restore = true; } break; +#endif case TREE_ENTER: case TREE_ENTER | BUTTON_REPEAT: -#ifdef BUTTON_RC_PLAY - case BUTTON_RC_PLAY: +#if defined TREE_RC_ENTER && (TREE_RC_ENTER != TREE_RC_RUN) + case TREE_RC_ENTER: #endif -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_PLAY: - case BUTTON_PLAY | BUTTON_REPEAT: +#if defined TREE_RUN && (TREE_RUN != TREE_ENTER) + case TREE_RUN: + case TREE_RUN | BUTTON_REPEAT: #endif if ( !numentries ) break; @@ -1255,8 +1236,9 @@ static bool dirbrowse(const char *root, const int *dirfilter) case TREE_PREV: case TREE_PREV | BUTTON_REPEAT: -#ifdef BUTTON_RC_LEFT - case BUTTON_RC_LEFT: +#ifdef TREE_RC_PREV + case TREE_RC_PREV: + case TREE_RC_PREV | BUTTON_REPEAT: #endif if(filesindir) { if(dircursor) { @@ -1295,8 +1277,9 @@ static bool dirbrowse(const char *root, const int *dirfilter) case TREE_NEXT: case TREE_NEXT | BUTTON_REPEAT: -#ifdef BUTTON_RC_RIGHT - case BUTTON_RC_RIGHT: +#ifdef TREE_RC_NEXT + case TREE_RC_NEXT: + case TREE_RC_NEXT | BUTTON_REPEAT: #endif if(filesindir) { @@ -1340,11 +1323,11 @@ static bool dirbrowse(const char *root, const int *dirfilter) } break; -#ifdef BUTTON_ON /* I bet the folks without ON-button want this to +#ifdef TREE_SHIFT /* I bet the folks without ON-button want this to work on a different button */ - case BUTTON_ON: - if (handle_on(&dirstart, &dircursor, numentries, - tree_max_on_screen, dirfilter)) + case TREE_SHIFT: + if (handle_shift(&dirstart, &dircursor, numentries, + tree_max_on_screen, dirfilter)) { /* start scroll */ restore = true; diff --git a/apps/tree.h b/apps/tree.h index dd08ca9392..eb4f0cd00c 100644 --- a/apps/tree.h +++ b/apps/tree.h @@ -21,6 +21,48 @@ #include +#ifdef HAVE_RECORDER_KEYPAD +#define TREE_NEXT BUTTON_DOWN +#define TREE_PREV BUTTON_UP +#define TREE_EXIT BUTTON_LEFT +#define TREE_ENTER BUTTON_RIGHT +#define TREE_RUN BUTTON_PLAY +#define TREE_MENU (BUTTON_F1 | BUTTON_REL) +#define TREE_SHIFT BUTTON_ON +#define TREE_OFF BUTTON_OFF + +#define TREE_RC_NEXT BUTTON_RC_RIGHT +#define TREE_RC_REV BUTTON_RC_LEFT +#define TREE_RC_EXIT BUTTON_RC_STOP +#define TREE_RC_ENTER BUTTON_RC_PLAY +#define TREE_RC_RUN BUTTON_RC_PLAY + +#elif defined HAVE_PLAYER_KEYPAD +#define TREE_NEXT BUTTON_RIGHT +#define TREE_PREV BUTTON_LEFT +#define TREE_EXIT BUTTON_STOP +#define TREE_ENTER BUTTON_PLAY +#define TREE_RUN BUTTON_PLAY +#define TREE_MENU (BUTTON_MENU | BUTTON_REL) +#define TREE_SHIFT BUTTON_ON + +#define TREE_RC_NEXT BUTTON_RC_RIGHT +#define TREE_RC_REV BUTTON_RC_LEFT +#define TREE_RC_EXIT BUTTON_RC_STOP +#define TREE_RC_ENTER BUTTON_RC_PLAY +#define TREE_RC_RUN BUTTON_RC_PLAY + +#elif defined HAVE_ONDIO_KEYPAD +#define TREE_NEXT BUTTON_DOWN +#define TREE_PREV BUTTON_UP +#define TREE_EXIT BUTTON_LEFT +#define TREE_ENTER BUTTON_RIGHT +#define TREE_RUN BUTTON_RIGHT +#define TREE_MENU (BUTTON_MENU | BUTTON_REPEAT) +#define TREE_SHIFT BUTTON_MENU + +#endif + struct entry { short attr; /* FAT attributes + file type flags */ unsigned long time_write; /* Last write time */ diff --git a/apps/wps.c b/apps/wps.c index 92b4e008b8..49d7d3db36 100644 --- a/apps/wps.c +++ b/apps/wps.c @@ -61,63 +61,86 @@ static struct mp3entry* id3 = NULL; static struct mp3entry* nid3 = NULL; static char current_track_path[MAX_PATH+1]; -#if defined(HAVE_PLAYER_KEYPAD) || defined(HAVE_NEO_KEYPAD) || defined(HAVE_ONDIO_KEYPAD) -void player_change_volume(int button) +/* button definitions */ +#ifdef HAVE_RECORDER_KEYPAD +#define WPS_NEXT (BUTTON_RIGHT | BUTTON_REL) +#define WPS_PREV (BUTTON_LEFT | BUTTON_REL) +#define WPS_FFWD (BUTTON_RIGHT | BUTTON_REPEAT) +#define WPS_REW (BUTTON_LEFT | BUTTON_REPEAT) +#define WPS_INCVOL BUTTON_UP +#define WPS_DECVOL BUTTON_DOWN +#define WPS_PAUSE BUTTON_PLAY +#define WPS_MENU (BUTTON_F1 | BUTTON_REL) +#define WPS_MENU_PRE BUTTON_F1 +#define WPS_BROWSE (BUTTON_ON | BUTTON_REL) +#define WPS_EXIT BUTTON_OFF +#define WPS_KEYLOCK (BUTTON_F1 | BUTTON_DOWN) +#define WPS_ID3 (BUTTON_F1 | BUTTON_ON) + +#define WPS_RC_NEXT BUTTON_RC_RIGHT +#define WPS_RC_PREV BUTTON_RC_LEFT +#define WPS_RC_PAUSE BUTTON_RC_PLAY +#define WPS_RC_INCVOL BUTTON_RC_VOL_UP +#define WPS_RC_DECVOL BUTTON_RC_VOL_DOWN +#define WPS_RC_EXIT BUTTON_RC_STOP + +#elif defined HAVE_PLAYER_KEYPAD +#define WPS_NEXT BUTTON_RIGHT +#define WPS_PREV BUTTON_LEFT +#define WPS_FFWD (BUTTON_RIGHT | BUTTON_REPEAT) +#define WPS_REW (BUTTON_LEFT | BUTTON_REPEAT) +#define WPS_INCVOL (BUTTON_MENU | BUTTON_RIGHT) +#define WPS_DECVOL (BUTTON_MENU | BUTTON_LEFT) +#define WPS_PAUSE BUTTON_PLAY +#define WPS_MENU (BUTTON_MENU | BUTTON_REL) +#define WPS_MENU_PRE BUTTON_MENU +#define WPS_BROWSE (BUTTON_ON | BUTTON_REL) +#define WPS_EXIT BUTTON_STOP +#define WPS_KEYLOCK (BUTTON_MENU | BUTTON_STOP) +#define WPS_ID3 (BUTTON_MENU | BUTTON_ON) + +#define WPS_RC_NEXT BUTTON_RC_RIGHT +#define WPS_RC_PREV BUTTON_RC_LEFT +#define WPS_RC_PAUSE BUTTON_RC_PLAY +#define WPS_RC_INCVOL BUTTON_RC_VOL_UP +#define WPS_RC_DECVOL BUTTON_RC_VOL_DOWN +#define WPS_RC_EXIT BUTTON_RC_STOP + +#elif defined HAVE_ONDIO_KEYPAD +#define WPS_NEXT (BUTTON_RIGHT | BUTTON_REL) +#define WPS_PREV (BUTTON_LEFT | BUTTON_REL) +#define WPS_FFWD (BUTTON_RIGHT | BUTTON_REPEAT) +#define WPS_REW (BUTTON_LEFT | BUTTON_REPEAT) +#define WPS_INCVOL BUTTON_UP +#define WPS_DECVOL BUTTON_DOWN +#define WPS_PAUSE BUTTON_OFF +#define WPS_MENU (BUTTON_MENU | BUTTON_REPEAT) +#define WPS_BROWSE (BUTTON_MENU | BUTTON_REL) +#define WPS_KEYLOCK (BUTTON_MENU | BUTTON_DOWN) + +#endif + +/* set volume + return true if screen restore is needed + return false otherwise +*/ +static bool setvol(void) { - bool exit = false; - char buffer[32]; - - lcd_stop_scroll(); - while (!exit) - { - switch (button) - { - case BUTTON_MENU | BUTTON_RIGHT: - case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT: - global_settings.volume++; - if(global_settings.volume > mpeg_sound_max(SOUND_VOLUME)) - global_settings.volume = mpeg_sound_max(SOUND_VOLUME); - mpeg_sound_set(SOUND_VOLUME, global_settings.volume); - wps_refresh(id3, nid3, 0, WPS_REFRESH_NON_STATIC); - settings_save(); - break; - - case BUTTON_MENU | BUTTON_LEFT: - case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT: - global_settings.volume--; - if(global_settings.volume < mpeg_sound_min(SOUND_VOLUME)) - global_settings.volume = mpeg_sound_min(SOUND_VOLUME); - mpeg_sound_set(SOUND_VOLUME, global_settings.volume); - wps_refresh(id3, nid3, 0, WPS_REFRESH_NON_STATIC); - settings_save(); - break; - - case BUTTON_MENU | BUTTON_REL: - case BUTTON_MENU | BUTTON_LEFT | BUTTON_REL: - case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REL: - exit = true; - break; - } - - snprintf(buffer,sizeof(buffer),"Vol: %d %% ", - mpeg_val2phys(SOUND_VOLUME, global_settings.volume)); - + if (global_settings.volume < mpeg_sound_min(SOUND_VOLUME)) + global_settings.volume = mpeg_sound_min(SOUND_VOLUME); + mpeg_sound_set(SOUND_VOLUME, global_settings.volume); + status_draw(false); + wps_refresh(id3, nid3, 0, WPS_REFRESH_NON_STATIC); + settings_save(); #ifdef HAVE_LCD_CHARCELLS - lcd_puts(0, 0, buffer); -#else - lcd_puts(2, 3, buffer); - lcd_update(); + splash(0, false, "Vol: %d %% ", + mpeg_val2phys(SOUND_VOLUME, global_settings.volume)); + return true; #endif - status_draw(false); - - if (!exit) - button = button_get(true); - } - wps_refresh(id3, nid3, 0, WPS_REFRESH_ALL); + return false; } -#endif -void display_keylock_text(bool locked) +static void display_keylock_text(bool locked) { char* s; lcd_stop_scroll(); @@ -135,176 +158,6 @@ void display_keylock_text(bool locked) splash(HZ, true, s); } -void display_mute_text(bool muted) -{ - char *s; - lcd_stop_scroll(); -#ifdef HAVE_LCD_CHARCELLS - if (muted) - s = str(LANG_MUTE_ON_PLAYER); - else - s = str(LANG_MUTE_OFF_PLAYER); -#else - if (muted) - s = str(LANG_MUTE_ON_RECORDER); - else - s = str(LANG_MUTE_OFF_RECORDER); -#endif - splash(HZ, true, s); -} - -bool browse_id3(void) -{ - int button; - int menu_pos = 0; - int menu_max = 8; - bool exit = false; - char scroll_text[MAX_PATH]; - - if (!(mpeg_status() & MPEG_STATUS_PLAY)) - return false; - - while (!exit) - { - lcd_clear_display(); - - switch (menu_pos) - { - case 0: - lcd_puts(0, 0, str(LANG_ID3_TITLE)); - lcd_puts_scroll(0, 1, id3->title ? id3->title : - (char*)str(LANG_ID3_NO_TITLE)); - break; - - case 1: - lcd_puts(0, 0, str(LANG_ID3_ARTIST)); - lcd_puts_scroll(0, 1, - id3->artist ? id3->artist : - (char*)str(LANG_ID3_NO_ARTIST)); - break; - - case 2: - lcd_puts(0, 0, str(LANG_ID3_ALBUM)); - lcd_puts_scroll(0, 1, id3->album ? id3->album : - (char*)str(LANG_ID3_NO_ALBUM)); - break; - - case 3: - lcd_puts(0, 0, str(LANG_ID3_TRACKNUM)); - - if (id3->tracknum) { - snprintf(scroll_text,sizeof(scroll_text), "%d", - id3->tracknum); - lcd_puts_scroll(0, 1, scroll_text); - } - else - lcd_puts_scroll(0, 1, str(LANG_ID3_NO_TRACKNUM)); - break; - - case 4: - lcd_puts(0, 0, str(LANG_ID3_GENRE)); - lcd_puts_scroll(0, 1, - id3_get_genre(id3) ? - id3_get_genre(id3) : - (char*)str(LANG_ID3_NO_INFO)); - break; - - case 5: - lcd_puts(0, 0, str(LANG_ID3_YEAR)); - if (id3->year) { - snprintf(scroll_text,sizeof(scroll_text), "%d", - id3->year); - lcd_puts_scroll(0, 1, scroll_text); - } - else - lcd_puts_scroll(0, 1, str(LANG_ID3_NO_INFO)); - break; - - case 6: - lcd_puts(0, 0, str(LANG_ID3_LENGHT)); - snprintf(scroll_text,sizeof(scroll_text), "%d:%02d", - id3->length / 60000, - id3->length % 60000 / 1000 ); - lcd_puts(0, 1, scroll_text); - break; - - case 7: - lcd_puts(0, 0, str(LANG_ID3_PLAYLIST)); - snprintf(scroll_text,sizeof(scroll_text), "%d/%d", - playlist_get_display_index(), playlist_amount()); - lcd_puts_scroll(0, 1, scroll_text); - break; - - - case 8: - lcd_puts(0, 0, str(LANG_ID3_BITRATE)); - snprintf(scroll_text,sizeof(scroll_text), "%d kbps", - id3->bitrate); - lcd_puts(0, 1, scroll_text); - break; - - case 9: - lcd_puts(0, 0, str(LANG_ID3_FRECUENCY)); - snprintf(scroll_text,sizeof(scroll_text), "%d Hz", - id3->frequency); - lcd_puts(0, 1, scroll_text); - break; - - case 10: - lcd_puts(0, 0, str(LANG_ID3_PATH)); - lcd_puts_scroll(0, 1, id3->path); - break; - } - lcd_update(); - - button = button_get(true); - - switch(button) - { - case BUTTON_LEFT: -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: -#endif - if (menu_pos > 0) - menu_pos--; - else - menu_pos = menu_max; - break; - - case BUTTON_RIGHT: -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: -#endif - if (menu_pos < menu_max) - menu_pos++; - else - menu_pos = 0; - break; - - case BUTTON_REPEAT: - break; - -#ifdef BUTTON_STOP - case BUTTON_STOP: -#else - case BUTTON_OFF: -#endif - case BUTTON_PLAY: - lcd_stop_scroll(); - /* eat release event */ - button_get(true); - exit = true; - break; - - default: - if(default_event_handler(button) == SYS_USB_CONNECTED) - return true; - break; - } - } - return false; -} - static bool ffwd_rew(int button) { static const int ff_rew_steps[] = { @@ -324,8 +177,8 @@ static bool ffwd_rew(int button) while (!exit) { switch ( button ) { - case BUTTON_LEFT | BUTTON_REPEAT: - case BUTTON_RIGHT | BUTTON_REPEAT: + case WPS_FFWD: + case WPS_REW: if (ff_rewind) { if (direction == 1) @@ -367,7 +220,7 @@ static bool ffwd_rew(int button) #ifdef HAVE_PLAYER_KEYPAD lcd_stop_scroll(); #endif - direction = (button & BUTTON_RIGHT) ? 1 : -1; + direction = (button & WPS_FFWD) ? 1 : -1; if (direction > 0) status_set_ffmode(STATUS_FASTFORWARD); @@ -405,8 +258,8 @@ static bool ffwd_rew(int button) break; - case BUTTON_LEFT | BUTTON_REL: - case BUTTON_RIGHT | BUTTON_REL: + case WPS_PREV: + case WPS_NEXT: mpeg_ff_rewind(id3->elapsed+ff_rewind_count); ff_rewind_count = 0; ff_rewind = false; @@ -483,133 +336,6 @@ static bool update(void) return retcode; } -static bool menu(void) -{ - static bool muted = false; - bool exit = false; - int last_button = 0; - -#ifdef HAVE_LCD_CHARCELLS - status_set_param(true); - status_draw(false); -#endif - - while (!exit) { - int button = button_get(true); - - /* these are never locked */ - switch (button) - { - /* key lock */ -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_F1 | BUTTON_DOWN: -#else - case BUTTON_MENU | BUTTON_STOP: -#endif - keys_locked = !keys_locked; - display_keylock_text(keys_locked); - exit = true; - while (button_get(false)); /* clear button queue */ - break; - - default: - if(default_event_handler(button) == SYS_USB_CONNECTED) { - keys_locked = false; - return true; - } - break; - } - - if (keys_locked) { - display_keylock_text(true); - break; - } - - switch ( button ) { - /* go into menu */ -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_F1 | BUTTON_REL: -#else - case BUTTON_MENU | BUTTON_REL: -#endif - exit = true; - if ( !last_button && !keys_locked ) { - lcd_stop_scroll(); - - if (main_menu()) - return true; -#ifdef HAVE_LCD_BITMAP - if(global_settings.statusbar) - lcd_setmargins(0, STATUSBAR_HEIGHT); - else - lcd_setmargins(0, 0); -#endif - } - break; - - /* mute */ -#ifdef BUTTON_MENU - case BUTTON_MENU | BUTTON_PLAY: -#else - case BUTTON_F1 | BUTTON_PLAY: -#endif - if ( muted ) - mpeg_sound_set(SOUND_VOLUME, global_settings.volume); - else - mpeg_sound_set(SOUND_VOLUME, 0); - muted = !muted; -#ifdef HAVE_LCD_CHARCELLS - status_set_param(false); -#endif - display_mute_text(muted); - break; - -#ifdef BUTTON_MENU - /* change volume */ - case BUTTON_MENU | BUTTON_LEFT: - case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT: - case BUTTON_MENU | BUTTON_RIGHT: - case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT: - player_change_volume(button); - exit = true; - break; - - /* show id3 tags */ -#ifdef BUTTON_ON - case BUTTON_MENU | BUTTON_ON: -#ifdef HAVE_LCD_CHARCELLS - status_set_param(true); - status_set_audio(true); -#endif -#endif -#else - case BUTTON_F1 | BUTTON_ON: -#endif - lcd_clear_display(); - lcd_puts(0, 0, str(LANG_ID3_INFO)); - lcd_puts(0, 1, str(LANG_ID3_SCREEN)); - lcd_update(); - sleep(HZ); - - if(browse_id3()) - return true; -#ifdef HAVE_PLAYER_KEYPAD - status_set_param(false); - status_set_audio(true); -#endif - exit = true; - break; - } - last_button = button; - } - -#ifdef HAVE_LCD_CHARCELLS - status_set_param(false); -#endif - - return false; -} - static void fade(bool fade_in) { if (fade_in) { @@ -647,12 +373,20 @@ static void fade(bool fade_in) } +static void waitfor_nokey(void) +{ + /* wait until all keys are released */ + while (button_get(false) != BUTTON_NONE) + yield(); +} + /* demonstrates showing different formats from playtune */ int wps_show(void) { int button = 0, lastbutton = 0; bool ignore_keyup = true; bool restore = false; + long restoretimer = 0; /* timer to delay screen redraw temporarily */ bool exit = false; bool update_track = false; @@ -763,26 +497,22 @@ int wps_show(void) if (button >= 0 && button & BUTTON_REL ) continue; } - + +#ifdef WPS_KEYLOCK /* ignore non-remote buttons when keys are locked */ if (keys_locked && ! ((button < 0) || -#ifdef HAVE_RECORDER_KEYPAD - (button & BUTTON_F1) || -#else - (button & BUTTON_MENU) || -#endif - (button == BUTTON_NONE) -#ifdef BUTTON_REMOTE - || (button & BUTTON_REMOTE) -#endif - )) + (button == BUTTON_NONE) || + ((button & WPS_KEYLOCK) == WPS_KEYLOCK) || + (button & BUTTON_REMOTE) + )) { - while (button_get(false)); /* clear button queue */ - display_keylock_text(true); + if (!(button & BUTTON_REL)) + display_keylock_text(true); restore = true; - continue; + button = BUTTON_NONE; } +#endif /* Exit if mpeg has stopped playing. This can happen if using the sleep timer with the charger plugged or if starting a recording @@ -792,49 +522,25 @@ int wps_show(void) switch(button) { -#ifdef BUTTON_ON - case BUTTON_ON: -#ifdef HAVE_RECORDER_KEYPAD - switch (on_screen()) { - case 2: - /* usb connected? */ - return SYS_USB_CONNECTED; - - case 1: - /* was on_screen used? */ - restore = true; - - /* pause may have been turned off by pitch screen */ - if (paused && !(mpeg_status() & MPEG_STATUS_PAUSE)) { - paused = false; - } - break; - - case 0: - /* otherwise, exit to browser */ -#else + case WPS_BROWSE: #ifdef HAVE_LCD_CHARCELLS - status_set_record(false); - status_set_audio(false); + status_set_record(false); + status_set_audio(false); #endif -#endif - lcd_stop_scroll(); + lcd_stop_scroll(); - /* set dir browser to current playing song */ - if (global_settings.browse_current && - current_track_path[0] != '\0') - set_current_file(current_track_path); - - return 0; -#ifdef HAVE_RECORDER_KEYPAD - } + /* set dir browser to current playing song */ + if (global_settings.browse_current && + current_track_path[0] != '\0') + set_current_file(current_track_path); + + return 0; break; -#endif -#endif /* BUTTON_ON */ + /* play/pause */ - case BUTTON_PLAY: -#ifdef BUTTON_RC_PLAY - case BUTTON_RC_PLAY: + case WPS_PAUSE: +#ifdef WPS_RC_PAUSE + case WPS_RC_PAUSE: #endif if ( paused ) { @@ -861,53 +567,50 @@ int wps_show(void) break; /* volume up */ -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_UP: - case BUTTON_UP | BUTTON_REPEAT: -#endif -#ifdef BUTTON_RC_VOL_UP - case BUTTON_RC_VOL_UP: + case WPS_INCVOL: + case WPS_INCVOL | BUTTON_REPEAT: +#ifdef WPS_RC_INCVOL + case WPS_RC_INCVOL: #endif global_settings.volume++; - if(global_settings.volume > mpeg_sound_max(SOUND_VOLUME)) - global_settings.volume = mpeg_sound_max(SOUND_VOLUME); - mpeg_sound_set(SOUND_VOLUME, global_settings.volume); - status_draw(false); - settings_save(); + if (setvol()) { + restore = true; + restoretimer = current_tick + HZ; + } break; /* volume down */ -#ifdef HAVE_RECORDER_KEYPAD - case BUTTON_DOWN: - case BUTTON_DOWN | BUTTON_REPEAT: -#endif -#ifdef BUTTON_RC_VOL_DOWN - case BUTTON_RC_VOL_DOWN: + case WPS_DECVOL: + case WPS_DECVOL | BUTTON_REPEAT: +#ifdef WPS_RC_DECVOL + case WPS_RC_DECVOL: #endif global_settings.volume--; - if(global_settings.volume < mpeg_sound_min(SOUND_VOLUME)) - global_settings.volume = mpeg_sound_min(SOUND_VOLUME); - mpeg_sound_set(SOUND_VOLUME, global_settings.volume); - status_draw(false); - settings_save(); + if (setvol()) { + restore = true; + restoretimer = current_tick + HZ; + } break; /* fast forward / rewind */ - case BUTTON_LEFT | BUTTON_REPEAT: - case BUTTON_RIGHT | BUTTON_REPEAT: + case WPS_FFWD: + case WPS_REW: +#ifdef WPS_RC_FFWD + case WPS_RC_FFWD: + case WPS_RC_RWD: +#endif ffwd_rew(button); break; /* prev / restart */ -#ifdef BUTTON_RC_LEFT - case BUTTON_RC_LEFT: +#ifdef WPS_RC_PREV + case WPS_RC_PREV: #endif - case BUTTON_LEFT | BUTTON_REL: -#ifdef HAVE_RECORDER_KEYPAD - if ((button == (BUTTON_LEFT | BUTTON_REL)) && - (lastbutton != BUTTON_LEFT )) + case WPS_PREV: + /* ignore release event after rewind */ + if (lastbutton & BUTTON_REPEAT) break; -#endif + if (!id3 || (id3->elapsed < 3*1000)) { mpeg_prev(); } @@ -923,31 +626,45 @@ int wps_show(void) break; /* next */ -#ifdef BUTTON_RC_RIGHT - case BUTTON_RC_RIGHT: +#ifdef WPS_RC_NEXT + case WPS_RC_NEXT: #endif - case BUTTON_RIGHT | BUTTON_REL: + case WPS_NEXT: #ifdef HAVE_RECORDER_KEYPAD - if ((button == (BUTTON_RIGHT | BUTTON_REL)) && - (lastbutton != BUTTON_RIGHT)) - break; + if (lastbutton & BUTTON_REPEAT) + break; #endif mpeg_next(); break; /* menu key functions */ -#ifdef BUTTON_MENU - case BUTTON_MENU: -#else - case BUTTON_F1: + case WPS_MENU: +#ifdef WPS_MENU_PRE + if (lastbutton != WPS_MENU_PRE) + break; #endif - if (menu()) - return SYS_USB_CONNECTED; + lcd_stop_scroll(); - update_track = true; + if (main_menu()) + return true; +#ifdef HAVE_LCD_BITMAP + if (global_settings.statusbar) + lcd_setmargins(0, STATUSBAR_HEIGHT); + else + lcd_setmargins(0, 0); +#endif restore = true; break; + /* key lock */ + case WPS_KEYLOCK: + case WPS_KEYLOCK | BUTTON_REPEAT: + keys_locked = !keys_locked; + display_keylock_text(keys_locked); + restore = true; + waitfor_nokey(); + break; + #ifdef HAVE_RECORDER_KEYPAD /* play settings */ case BUTTON_F2: @@ -962,22 +679,32 @@ int wps_show(void) return SYS_USB_CONNECTED; restore = true; break; + + /* pitch screen */ + case BUTTON_ON | BUTTON_REPEAT: + if (2 == pitch_screen()) + return SYS_USB_CONNECTED; + restore = true; + break; #endif /* stop and exit wps */ -#ifdef BUTTON_OFF - case BUTTON_OFF | BUTTON_REL: -#else - case BUTTON_STOP | BUTTON_REL: - if ( lastbutton != BUTTON_STOP ) - break; -#endif -#ifdef BUTTON_RC_STOP - case BUTTON_RC_STOP: +#ifdef WPS_EXIT + case WPS_EXIT: +#ifdef WPS_RC_EXIT + case WPS_RC_EXIT: #endif exit = true; break; +#endif +#ifdef WPS_ID3 + case WPS_ID3: + browse_id3(); + restore = true; + break; +#endif + case BUTTON_NONE: /* Timeout */ update_track = true; break; @@ -1029,8 +756,12 @@ int wps_show(void) if ( button ) ata_spin(); - if (restore) { + if (restore && + ((restoretimer == 0) || + (restoretimer < current_tick))) + { restore = false; + restoretimer = 0; if (wps_display(id3, nid3)) { /* set dir browser to current playing song */ @@ -1044,7 +775,7 @@ int wps_show(void) if (id3) wps_refresh(id3, nid3, 0, WPS_REFRESH_NON_STATIC); } - if(button != BUTTON_NONE) + if (button != BUTTON_NONE) lastbutton = button; } return 0; /* unreachable - just to reduce compiler warnings */ diff --git a/apps/wps.h b/apps/wps.h index 3680515951..c6cec3fdce 100644 --- a/apps/wps.h +++ b/apps/wps.h @@ -27,7 +27,6 @@ extern bool wps_time_countup; int wps_show(void); bool refresh_wps(bool refresh_scroll); void handle_usb(void); -bool browse_id3(void); #ifdef HAVE_RECORDER_KEYPAD bool f2_screen(void); diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c index f934052746..25cdd3d96b 100644 --- a/firmware/drivers/button.c +++ b/firmware/drivers/button.c @@ -267,7 +267,6 @@ void button_set_flip(bool flip) } } - /* * Get button pressed from hardware */ @@ -376,12 +375,12 @@ static int button_read(void) if(adc_read(2) < 0x180) btn |= BUTTON_RIGHT; if(adc_read(3) < 0x180) - btn |= BUTTON_PLAY | BUTTON_UP; + btn |= BUTTON_PLAY; if ( !(porta & 0x20) ) btn |= BUTTON_ON; if ( !(porta & 0x800) ) - btn |= BUTTON_STOP | BUTTON_DOWN; + btn |= BUTTON_STOP; return btn; } @@ -488,7 +487,7 @@ static int button_read(void) if(adc_read(ADC_BUTTON_OPTION) > 0x200) /* active high */ btn |= BUTTON_MENU; if(adc_read(ADC_BUTTON_ONOFF) < 0x120) /* active low */ - btn |= BUTTON_ON; + btn |= BUTTON_OFF; /* Check the 4 direction keys, hard-coded analog limits for now */ if (data >= 0x2EF) @@ -496,9 +495,9 @@ static int button_read(void) else if (data >= 0x246) btn |= BUTTON_RIGHT; else if (data >= 0x19D) - btn |= BUTTON_PLAY | BUTTON_UP; + btn |= BUTTON_UP; else if (data >= 0x0A1) - btn |= BUTTON_STOP | BUTTON_DOWN; + btn |= BUTTON_DOWN; return btn; } diff --git a/firmware/drivers/serial.c b/firmware/drivers/serial.c index 11dadc6f19..e1e0eb82e9 100644 --- a/firmware/drivers/serial.c +++ b/firmware/drivers/serial.c @@ -85,7 +85,7 @@ int remote_control_rx(void) } else { -#ifndef HAVE_NEO_KEYPAD /* This needs to be fixed for Neo */ +#if !defined(HAVE_NEO_KEYPAD) && !defined(HAVE_ONDIO_KEYPAD) switch (btn) { case STOP: diff --git a/firmware/export/button.h b/firmware/export/button.h index 7f4998f48d..7ec484440f 100644 --- a/firmware/export/button.h +++ b/firmware/export/button.h @@ -37,7 +37,7 @@ void button_set_flip(bool flip); /* turn 180 degrees */ #define BUTTON_NONE 0x0000 #ifdef HAVE_NEO_KEYPAD - +/* neo button codes */ #define BUTTON_UP 0x0080 #define BUTTON_DOWN 0x0010 #define BUTTON_LEFT 0x0001 @@ -80,9 +80,6 @@ void button_set_flip(bool flip); /* turn 180 degrees */ #else /* Shared button codes */ -#define BUTTON_ON 0x0001 -#define BUTTON_UP 0x0010 -#define BUTTON_DOWN 0x0020 #define BUTTON_LEFT 0x0040 #define BUTTON_RIGHT 0x0080 @@ -94,38 +91,42 @@ void button_set_flip(bool flip); /* turn 180 degrees */ /* remote control buttons */ #define BUTTON_RC_VOL_UP (0x0008 | BUTTON_REMOTE) #define BUTTON_RC_VOL_DOWN (0x0800 | BUTTON_REMOTE) -#define BUTTON_RC_PLAY (BUTTON_UP | BUTTON_REMOTE) -#define BUTTON_RC_STOP (BUTTON_DOWN | BUTTON_REMOTE) #define BUTTON_RC_LEFT (BUTTON_LEFT | BUTTON_REMOTE) #define BUTTON_RC_RIGHT (BUTTON_RIGHT| BUTTON_REMOTE) #ifdef HAVE_RECORDER_KEYPAD /* Recorder specific button codes */ +#define BUTTON_ON 0x0001 #define BUTTON_OFF 0x0002 #define BUTTON_PLAY 0x0004 +#define BUTTON_UP 0x0010 +#define BUTTON_DOWN 0x0020 #define BUTTON_F1 0x0100 #define BUTTON_F2 0x0200 #define BUTTON_F3 0x0400 +#define BUTTON_RC_PLAY (BUTTON_PLAY | BUTTON_REMOTE) +#define BUTTON_RC_STOP (BUTTON_OFF | BUTTON_REMOTE) + #elif defined(HAVE_PLAYER_KEYPAD) /* Jukebox 6000 and Studio specific button codes */ +#define BUTTON_ON 0x0001 #define BUTTON_MENU 0x0002 -#define BUTTON_PLAY BUTTON_UP -#define BUTTON_STOP BUTTON_DOWN +#define BUTTON_PLAY 0x0010 +#define BUTTON_STOP 0x0020 + +#define BUTTON_RC_PLAY (BUTTON_PLAY | BUTTON_REMOTE) +#define BUTTON_RC_STOP (BUTTON_STOP | BUTTON_REMOTE) #elif defined HAVE_ONDIO_KEYPAD /* Ondio specific button codes */ -#define BUTTON_MENU 0x0002 -#define BUTTON_PLAY BUTTON_UP -#define BUTTON_STOP BUTTON_DOWN -/* ON is also interpreted as OFF, let's see if that helps a bit */ -#define BUTTON_OFF BUTTON_ON -#define BUTTON_F1 0x0100 /* unreacheable */ -#define BUTTON_F2 0x0200 /* unreacheable */ -#define BUTTON_F3 0x0400 /* unreacheable */ +#define BUTTON_OFF 0x0002 +#define BUTTON_UP 0x0010 +#define BUTTON_DOWN 0x0020 +#define BUTTON_MENU 0x0100 #endif /* HAVE_RECORDER/PLAYER/ONDIO_KEYPAD */ diff --git a/firmware/usb.c b/firmware/usb.c index 566f9c43d2..6c14b75f19 100644 --- a/firmware/usb.c +++ b/firmware/usb.c @@ -135,7 +135,7 @@ static void usb_slave_mode(bool on) lcd_puts(0, 0, str); lcd_puts(0, 1, "Press ON to debug"); lcd_update(); - while(button_get(true) != BUTTON_ON) {}; + while(!(button_get(true) & BUTTON_REL)) {}; dbg_ports(); panicf("ata: %d",rc); } diff --git a/uisimulator/common/lcd-playersim.c b/uisimulator/common/lcd-playersim.c index 3f3453b9a1..5c8ca92f32 100644 --- a/uisimulator/common/lcd-playersim.c +++ b/uisimulator/common/lcd-playersim.c @@ -102,7 +102,7 @@ void lcd_print_char(int x, int y) static char bitmap_content[11*8][2*8]; if (double_height == 2 && y == 1) - return; /* Second row can't be printed in double height. ??*/ + return; /* only one row available if text is double height */ for (col=0; col<5; col++) { unsigned char fontbitmap=(*font_player)[ch][col]; diff --git a/uisimulator/win32/Makefile b/uisimulator/win32/Makefile index d105076f85..22ce4d65d1 100644 --- a/uisimulator/win32/Makefile +++ b/uisimulator/win32/Makefile @@ -23,6 +23,7 @@ PLAYDIR = $(APPDIR)/player PLUGINDIR = $(APPDIR)/plugins SIMCOMMON = ../common +ISONDIO := $(findstring ONDIO, $(TARGET)) ISPLAYER := $(findstring PLAYER, $(TARGET)) ifeq ($(ISPLAYER), PLAYER) MACHINEDIR = $(PLAYDIR) @@ -124,8 +125,10 @@ SRCS = button.c lcd-win32.c panic-win32.c thread-win32.c \ OBJS := $(OBJDIR)/lang.o $(SRCS:%.c=$(OBJDIR)/%.o) $(OBJDIR)/uisw32-res.o +ifneq ($(ISONDIO),ONDIO) ROCKS := $(patsubst $(PLUGINDIR)/%.c,$(OBJDIR)/%.rock,$(wildcard $(PLUGINDIR)/*.c)) PLUGINLIBOBJS := $(patsubst $(PLUGINDIR)/lib/%.c,$(OBJDIR)/%.o,$(wildcard $(PLUGINDIR)/lib/*.c)) +endif all: $(TOOLSDIR)/convbdf $(EXEFILE) $(ROCKS) diff --git a/uisimulator/win32/button.c b/uisimulator/win32/button.c index 0af6ff40a6..5d56456f6e 100644 --- a/uisimulator/win32/button.c +++ b/uisimulator/win32/button.c @@ -59,22 +59,38 @@ void button_event(int key, bool pressed) case VK_RIGHT: new_btn = BUTTON_RIGHT; break; + case VK_NUMPAD8: case VK_UP: +#ifdef BUTTON_UP new_btn = BUTTON_UP; +#elif defined BUTTON_PLAY + new_btn = BUTTON_PLAY; +#endif break; + case VK_NUMPAD2: case VK_DOWN: +#ifdef BUTTON_DOWN new_btn = BUTTON_DOWN; +#elif defined BUTTON_STOP + new_btn = BUTTON_STOP; +#endif break; + +#ifdef BUTTON_ON case VK_ADD: new_btn = BUTTON_ON; break; +#endif -#ifdef HAVE_RECORDER_KEYPAD +#ifdef BUTTON_OFF case VK_RETURN: new_btn = BUTTON_OFF; break; +#endif + +#ifdef BUTTON_F1 case VK_DIVIDE: case VK_F1: new_btn = BUTTON_F1; @@ -87,11 +103,16 @@ void button_event(int key, bool pressed) case VK_F3: new_btn = BUTTON_F3; break; +#endif + +#ifdef BUTTON_PLAY case VK_NUMPAD5: case VK_SPACE: new_btn = BUTTON_PLAY; break; +#endif +#ifdef HAVE_LCD_BITMAP case VK_NUMPAD0: case VK_F5: if(pressed) @@ -100,8 +121,14 @@ void button_event(int key, bool pressed) return; } break; -#else +#endif + +#ifdef BUTTON_MENU +#ifdef HAVE_PLAYER_KEYPAD case VK_RETURN: +#elif defined HAVE_ONDIO_KEYPAD + case VK_INSERT: +#endif new_btn = BUTTON_MENU; break; #endif diff --git a/uisimulator/x11/Makefile b/uisimulator/x11/Makefile index 785e590623..2bc2cba267 100644 --- a/uisimulator/x11/Makefile +++ b/uisimulator/x11/Makefile @@ -23,6 +23,7 @@ PLAYDIR = $(APPDIR)/player PLUGINDIR = $(APPDIR)/plugins SIMCOMMON = ../common +ISONDIO := $(findstring ONDIO, $(TARGET)) ISPLAYER := $(findstring PLAYER, $(TARGET)) ifeq ($(ISPLAYER), PLAYER) MACHINEDIR = $(PLAYDIR) @@ -142,8 +143,10 @@ SRCS = screenhack.c uibasic.c resources.c visual.c lcd-x11.c \ OBJS := $(OBJDIR)/lang.o $(SRCS:%.c=$(OBJDIR)/%.o) +ifneq ($(ISONDIO),ONDIO) ROCKS := $(patsubst $(PLUGINDIR)/%.c,$(OBJDIR)/%.rock,$(wildcard $(PLUGINDIR)/*.c)) PLUGINLIBOBJS := $(patsubst $(PLUGINDIR)/lib/%.c,$(OBJDIR)/%.o,$(wildcard $(PLUGINDIR)/lib/*.c)) +endif all: $(TOOLSDIR)/convbdf $(EXEFILE) $(ROCKS) @@ -249,11 +252,11 @@ $(OBJDIR)/%.o: %.c $(CC) $(CFLAGS) -c $< -o $@ ifeq ($(UNAME),CYGWIN) -$(EXEFILE): $(OBJS) $(OBJDIR)/libplugin.a +$(EXEFILE): $(OBJS) @echo LD $@ @$(CC) -g -o $(EXEFILE) $(OBJS) $(LIBDIRS) $(LDFLAGS) $(LIBS) else -$(EXEFILE): $(OBJS) $(OBJDIR)/libplugin.a +$(EXEFILE): $(OBJS) @echo LD $@ @$(CC) -g -o $(EXEFILE) $(LIBDIRS) $(LDFLAGS) $(OBJS) $(LIBS) endif diff --git a/uisimulator/x11/button-x11.c b/uisimulator/x11/button-x11.c index 951bf730c5..534568b658 100644 --- a/uisimulator/x11/button-x11.c +++ b/uisimulator/x11/button-x11.c @@ -75,35 +75,49 @@ static int get_raw_button (void) case XK_KP_Up: case XK_Up: case XK_KP_8: +#ifdef BUTTON_UP k = BUTTON_UP; +#elif defined BUTTON_PLAY + k = BUTTON_PLAY; +#endif break; case XK_KP_Down: case XK_Down: case XK_KP_2: +#ifdef BUTTON_DOWN k = BUTTON_DOWN; +#elif defined BUTTON_STOP + k = BUTTON_STOP; +#endif break; -#ifdef HAVE_RECORDER_KEYPAD +#ifdef BUTTON_PLAY case XK_KP_Space: case XK_KP_5: case XK_KP_Begin: case XK_space: k = BUTTON_PLAY; break; +#endif +#ifdef BUTTON_OFF case XK_KP_Enter: case XK_A: case XK_a: k = BUTTON_OFF; break; +#endif +#ifdef BUTTON_ON case XK_KP_Add: case XK_Q: case XK_q: k = BUTTON_ON; break; +#endif +#ifdef BUTTON_F1 case XK_KP_Divide: case XK_1: k = BUTTON_F1; @@ -118,7 +132,9 @@ static int get_raw_button (void) case XK_3: k = BUTTON_F3; break; +#endif +#ifdef HAVE_LCD_BITMAP case XK_5: if(!release) { @@ -126,16 +142,16 @@ static int get_raw_button (void) return 0; } break; +#endif -#else - case XK_KP_Add: - case XK_Q: - case XK_q: - k = BUTTON_ON; - break; - +#ifdef BUTTON_MENU +#ifdef HAVE_PLAYER_KEYPAD case XK_KP_Enter: case XK_Return: +#elif defined HAVE_ONDIO_KEYPAD + case XK_KP_Insert: + case XK_Control_R: +#endif k = BUTTON_MENU; break; #endif