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
This commit is contained in:
Jonathan Gordon 2011-11-16 10:25:43 +00:00
parent b7508a766d
commit be716c0be8
20 changed files with 481 additions and 2 deletions

View file

@ -270,3 +270,7 @@ recording_digital
#if MEMORYSIZE <= 2
lowmem
#endif
#if defined(HAVE_HARDWARE_CLICK)
hardware_click
#endif

View file

@ -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>

View file

@ -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");

View file

@ -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

View file

@ -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
}
}
}

View file

@ -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];
};

View file

@ -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),