From be716c0be80e3f64a81a3f19b683db40489f47a1 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Wed, 16 Nov 2011 10:25:43 +0000 Subject: Finally commit FS#5111 - piezo clicker for ipods! Origional implementation by Robert Keevil with contributions from Frederik Vestre, Stoyan Stratev, Craig Elliott, Michael Sparmann, Thomas Schott, Rosso Maltese, and syncs from a bunch of other people! git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30995 a1c6a512-1295-4272-9138-f99709370657 --- apps/features.txt | 4 ++++ apps/lang/english.lang | 34 ++++++++++++++++++++++++++++++++++ apps/main.c | 8 ++++++++ apps/menus/settings_menu.c | 6 ++++++ apps/misc.c | 26 ++++++++++++++++++++++++-- apps/settings.h | 7 +++++++ apps/settings_list.c | 11 +++++++++++ 7 files changed, 94 insertions(+), 2 deletions(-) (limited to 'apps') diff --git a/apps/features.txt b/apps/features.txt index 44ef3ddf95..35f7bb50e0 100644 --- a/apps/features.txt +++ b/apps/features.txt @@ -270,3 +270,7 @@ recording_digital #if MEMORYSIZE <= 2 lowmem #endif + +#if defined(HAVE_HARDWARE_CLICK) +hardware_click +#endif diff --git a/apps/lang/english.lang b/apps/lang/english.lang index de541af1f5..a228a78f7f 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -12917,3 +12917,37 @@ *: "Shortcuts" + + id: LANG_KEYCLICK_SOFTWARE + desc: in keyclick settings menu + user: core + + *: none + hardware_click: "Headphone Keyclick" + + + *: none + hardware_click: "Headphone Keyclick" + + + *: none + hardware_click: "Headphone Keyclick" + + + + id: LANG_KEYCLICK_HARDWARE + desc: in keyclick settings menu + user: core + + *: none + hardware_click: "Speaker Keyclick" + + + *: none + hardware_click: "Speaker Keyclick" + + + *: none + hardware_click: "Speaker Keyclick" + + diff --git a/apps/main.c b/apps/main.c index 38de780c8d..9d83c62965 100644 --- a/apps/main.c +++ b/apps/main.c @@ -118,6 +118,10 @@ #include "m5636.h" #endif +#ifdef HAVE_HARDWARE_CLICK +#include "piezo.h" +#endif + #if (CONFIG_PLATFORM & PLATFORM_NATIVE) #define MAIN_NORETURN_ATTR NORETURN_ATTR #else @@ -507,6 +511,10 @@ static void init(void) radio_init(); #endif +#ifdef HAVE_HARDWARE_CLICK + piezo_init(); +#endif + /* Keep the order of this 3 (viewportmanager handles statusbars) * Must be done before any code uses the multi-screen API */ CHART(">gui_syncstatusbar_init"); diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c index 02f68aa4ab..079e86616d 100644 --- a/apps/menus/settings_menu.c +++ b/apps/menus/settings_menu.c @@ -229,9 +229,15 @@ MAKE_MENU(limits_menu, ID2P(LANG_LIMITS_MENU), 0, Icon_NOICON, #if CONFIG_CODEC == SWCODEC MENUITEM_SETTING(keyclick, &global_settings.keyclick, NULL); MENUITEM_SETTING(keyclick_repeats, &global_settings.keyclick_repeats, NULL); +#ifdef HAVE_HARDWARE_CLICK +MENUITEM_SETTING(keyclick_hardware, &global_settings.keyclick_hardware, NULL); +MAKE_MENU(keyclick_menu, ID2P(LANG_KEYCLICK), 0, Icon_NOICON, + &keyclick, &keyclick_hardware, &keyclick_repeats); +#else MAKE_MENU(keyclick_menu, ID2P(LANG_KEYCLICK), 0, Icon_NOICON, &keyclick, &keyclick_repeats); #endif +#endif #if CONFIG_CODEC == MAS3507D diff --git a/apps/misc.c b/apps/misc.c index 0608595d21..04a6d05c91 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -94,6 +94,10 @@ #endif #endif +#ifdef HAVE_HARDWARE_CLICK +#include "piezo.h" +#endif + /* units used with output_dyn_value */ const unsigned char * const byte_units[] = { @@ -873,14 +877,32 @@ void system_sound_play(enum system_sound sound) void keyclick_click(int button) { /* Settings filters */ - if (global_settings.keyclick && - (global_settings.keyclick_repeats || !(button & BUTTON_REPEAT))) + if ( +#ifdef HAVE_HARDWARE_CLICK + (global_settings.keyclick || global_settings.keyclick_hardware) +#else + global_settings.keyclick +#endif + && (global_settings.keyclick_repeats || !(button & BUTTON_REPEAT))) { /* Button filters */ if (button != BUTTON_NONE && !(button & BUTTON_REL) && !(button & (SYS_EVENT|BUTTON_MULTIMEDIA)) ) { +#ifdef HAVE_HARDWARE_CLICK + if (global_settings.keyclick) + { + system_sound_play(SOUND_KEYCLICK); + } + if (global_settings.keyclick_hardware) + { +#if !defined(SIMULATOR) + piezo_button_beep(false, false); +#endif + } +#else system_sound_play(SOUND_KEYCLICK); +#endif } } } diff --git a/apps/settings.h b/apps/settings.h index 92ffaf9019..06eba76e3c 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -835,6 +835,13 @@ struct user_settings #endif } hw_eq_bands[AUDIOHW_EQ_BAND_NUM]; #endif /* AUDIOHW_HAVE_EQ */ + +#ifdef HAVE_HARDWARE_CLICK +#if CONFIG_CODEC == SWCODEC + bool keyclick_hardware; /* hardware piezo keyclick */ +#endif +#endif + char start_directory[MAX_PATHNAME+1]; }; diff --git a/apps/settings_list.c b/apps/settings_list.c index e739f406cb..9232811ada 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -1757,12 +1757,23 @@ const struct settings_list settings[] = { #endif /* HAVE_WHEEL_ACCELERATION */ #if CONFIG_CODEC == SWCODEC /* keyclick */ +#ifdef HAVE_HARDWARE_CLICK + CHOICE_SETTING(0, keyclick, LANG_KEYCLICK_SOFTWARE, 0, + "keyclick", "off,weak,moderate,strong", NULL, 4, + ID2P(LANG_OFF), ID2P(LANG_WEAK), ID2P(LANG_MODERATE), + ID2P(LANG_STRONG)), + OFFON_SETTING(0, keyclick_repeats, LANG_KEYCLICK_REPEATS, false, + "keyclick repeats", NULL), + OFFON_SETTING(0, keyclick_hardware, LANG_KEYCLICK_HARDWARE, false, + "hardware keyclick", NULL), +#else CHOICE_SETTING(0, keyclick, LANG_KEYCLICK, 0, "keyclick", "off,weak,moderate,strong", NULL, 4, ID2P(LANG_OFF), ID2P(LANG_WEAK), ID2P(LANG_MODERATE), ID2P(LANG_STRONG)), OFFON_SETTING(0, keyclick_repeats, LANG_KEYCLICK_REPEATS, false, "keyclick repeats", NULL), +#endif #endif /* CONFIG_CODEC == SWCODEC */ TEXT_SETTING(0, playlist_catalog_dir, "playlist catalog directory", PLAYLIST_CATALOG_DEFAULT_DIR, NULL, NULL), -- cgit v1.2.3