summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2011-11-16 10:25:43 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2011-11-16 10:25:43 +0000
commitbe716c0be80e3f64a81a3f19b683db40489f47a1 (patch)
treebc461ad1de8b5fda6c3c14d0cfd737bdc69ddc83 /apps
parentb7508a766df991539bec5e10fd7739001c1fdb99 (diff)
downloadrockbox-be716c0be80e3f64a81a3f19b683db40489f47a1.zip
rockbox-be716c0be80e3f64a81a3f19b683db40489f47a1.tar.gz
rockbox-be716c0be80e3f64a81a3f19b683db40489f47a1.tar.bz2
rockbox-be716c0be80e3f64a81a3f19b683db40489f47a1.tar.xz
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
Diffstat (limited to 'apps')
-rw-r--r--apps/features.txt4
-rw-r--r--apps/lang/english.lang34
-rw-r--r--apps/main.c8
-rw-r--r--apps/menus/settings_menu.c6
-rw-r--r--apps/misc.c26
-rw-r--r--apps/settings.h7
-rw-r--r--apps/settings_list.c11
7 files changed, 94 insertions, 2 deletions
diff --git a/apps/features.txt b/apps/features.txt
index 44ef3dd..35f7bb5 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 de541af..a228a78 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -12917,3 +12917,37 @@
*: "Shortcuts"
</voice>
</phrase>
+<phrase>
+ id: LANG_KEYCLICK_SOFTWARE
+ desc: in keyclick settings menu
+ user: core
+ <source>
+ *: none
+ hardware_click: "Headphone Keyclick"
+ </source>
+ <dest>
+ *: none
+ hardware_click: "Headphone Keyclick"
+ </dest>
+ <voice>
+ *: none
+ hardware_click: "Headphone Keyclick"
+ </voice>
+</phrase>
+<phrase>
+ id: LANG_KEYCLICK_HARDWARE
+ desc: in keyclick settings menu
+ user: core
+ <source>
+ *: none
+ hardware_click: "Speaker Keyclick"
+ </source>
+ <dest>
+ *: none
+ hardware_click: "Speaker Keyclick"
+ </dest>
+ <voice>
+ *: none
+ hardware_click: "Speaker Keyclick"
+ </voice>
+</phrase>
diff --git a/apps/main.c b/apps/main.c
index 38de780..9d83c62 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 02f68aa..079e866 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 0608595..04a6d05 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 92ffaf9..06eba76 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 e739f40..9232811 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),