summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2008-05-29 21:27:44 +0000
committerMichael Sevakis <jethead71@rockbox.org>2008-05-29 21:27:44 +0000
commitc541e046325f97307f34b2e51ca7994126dd1969 (patch)
treee7144cb6cd2478669b79dd197d464cbc6752bdb7
parentf76122f0e7a3b82962dbe005d58a643c835013d0 (diff)
downloadrockbox-c541e046325f97307f34b2e51ca7994126dd1969.zip
rockbox-c541e046325f97307f34b2e51ca7994126dd1969.tar.gz
rockbox-c541e046325f97307f34b2e51ca7994126dd1969.tar.bz2
rockbox-c541e046325f97307f34b2e51ca7994126dd1969.tar.xz
Gigabeat F/X:
Allow chaning of touchpad sensitivity in the System settings menu. Some units are dodgey at "Normal" senitivity and some at "High". "High" can make some units difficult to navigate and may even require a settings reset so try it and don't use "High" again if it doesn't work out :-). Defaults to "Normal" which behaves like older builds. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17656 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/lang/english.lang34
-rw-r--r--apps/menus/settings_menu.c7
-rw-r--r--apps/settings.c4
-rw-r--r--apps/settings.h3
-rw-r--r--apps/settings_list.c5
-rw-r--r--firmware/export/config-gigabeat.h2
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/button-meg-fx.c51
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/button-target.h1
8 files changed, 96 insertions, 11 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 2e3adc2..757fa58 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -11716,3 +11716,37 @@
recording: "Stop Recording And Shutdown"
</voice>
</phrase>
+<phrase>
+ id: LANG_TOUCHPAD_SENSITIVITY
+ desc: touchpad sensitivity setting
+ user:
+ <source>
+ *: none
+ gigabeatf: "Touchpad Sensitivity"
+ </source>
+ <dest>
+ *: none
+ gigabeatf: "Touchpad Sensitivity"
+ </dest>
+ <voice>
+ *: none
+ gigabeatf: "Touchpad Sensitivity"
+ </voice>
+</phrase>
+<phrase>
+ id: LANG_HIGH
+ desc: in settings_menu
+ user:
+ <source>
+ *: none
+ gigabeatf: "High"
+ </source>
+ <dest>
+ *: none
+ gigabeatf: "High"
+ </dest>
+ <voice>
+ *: none
+ gigabeatf: "High"
+ </voice>
+</phrase>
diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c
index 0dbea54..05cfd23 100644
--- a/apps/menus/settings_menu.c
+++ b/apps/menus/settings_menu.c
@@ -361,6 +361,10 @@ MENUITEM_SETTING(buttonlight_timeout, &global_settings.buttonlight_timeout, NULL
MENUITEM_SETTING(buttonlight_brightness, &global_settings.buttonlight_brightness, NULL);
#endif
+#ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
+MENUITEM_SETTING(touchpad_sensitivity, &global_settings.touchpad_sensitivity, NULL);
+#endif
+
MAKE_MENU(system_menu, ID2P(LANG_SYSTEM),
0, Icon_System_menu,
@@ -400,6 +404,9 @@ MAKE_MENU(system_menu, ID2P(LANG_SYSTEM),
#if CONFIG_CODEC == SWCODEC
&keyclick_menu,
#endif
+#ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
+ &touchpad_sensitivity,
+#endif
);
/* SYSTEM MENU */
diff --git a/apps/settings.c b/apps/settings.c
index 1a857ea..340adba 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -929,6 +929,10 @@ void settings_apply(bool read_disk)
#endif
#endif /* HAVE_BACKLIGHT */
+#ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
+ touchpad_set_sensitivity(global_settings.touchpad_sensitivity);
+#endif
+
/* This should stay last */
#if defined(HAVE_RECORDING) && CONFIG_CODEC == SWCODEC
enc_global_settings_apply();
diff --git a/apps/settings.h b/apps/settings.h
index 320e2b0..a7772a6 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -740,6 +740,9 @@ struct user_settings
unsigned char playlist_catalog_dir[MAX_FILENAME+1];
bool study_mode; /* study mode enabled */
int study_hop_step; /* hop step in study mode, in seconds */
+#ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
+ int touchpad_sensitivity;
+#endif
};
/** global variables **/
diff --git a/apps/settings_list.c b/apps/settings_list.c
index 8576c5b..48e3758 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -1321,6 +1321,11 @@ const struct settings_list settings[] = {
#endif /* CONFIG_CODEC == SWCODEC */
FILENAME_SETTING(0, playlist_catalog_dir, "playlist catalog directory",
PLAYLIST_CATALOG_DEFAULT_DIR, NULL, NULL, MAX_FILENAME+1),
+#ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
+ CHOICE_SETTING(0, touchpad_sensitivity, LANG_TOUCHPAD_SENSITIVITY, 0,
+ "touchpad sensitivity", "normal,high", touchpad_set_sensitivity, 2,
+ ID2P(LANG_NORMAL), ID2P(LANG_HIGH)),
+#endif
};
const int nb_settings = sizeof(settings)/sizeof(*settings);
diff --git a/firmware/export/config-gigabeat.h b/firmware/export/config-gigabeat.h
index 03cedd0..cf64baa 100644
--- a/firmware/export/config-gigabeat.h
+++ b/firmware/export/config-gigabeat.h
@@ -48,6 +48,8 @@
/* We don't use a setting but a fixed delay after the backlight has
* turned off */
#define LCD_SLEEP_TIMEOUT (5*HZ)
+
+#define HAVE_TOUCHPAD_SENSITIVITY_SETTING
#endif /* BOOTLOADER */
#define CONFIG_KEYPAD GIGABEAT_PAD
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/button-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/button-meg-fx.c
index 9f6d54d..c43d188 100644
--- a/firmware/target/arm/s3c2440/gigabeat-fx/button-meg-fx.c
+++ b/firmware/target/arm/s3c2440/gigabeat-fx/button-meg-fx.c
@@ -30,6 +30,20 @@
static bool headphones_detect;
static bool hold_button = false;
+#define TOUCHPAD_SENS_NORMAL ((1 << 12) | /* right++ */ \
+ (1 << 7) | /* left++ */ \
+ (1 << 6) | /* down++*/ \
+ (1 << 0) | /* up++ */ \
+ (1 << 3)) /* center */
+
+#define TOUCHPAD_SENS_HIGH (((1 << 12) | (1 << 11)) | /* right++, right+ */ \
+ ((1 << 8) | (1 << 7)) | /* left+, left++ */ \
+ ((1 << 6) | (1 << 5)) | /* down++, down+ */ \
+ ((1 << 1) | (1 << 0)) | /* up+, up++ */ \
+ (1 << 3)) /* Center */
+
+static int touchpad_mask = TOUCHPAD_SENS_NORMAL;
+
static int const remote_buttons[] =
{
BUTTON_NONE, /* Headphones connected - remote disconnected */
@@ -123,30 +137,31 @@ int button_read_device(void)
}
/* the touchpad - only watch the lines we actually read */
- touchpad = GPJDAT & (((1 << 12) | (1 << 11)) | /* right++, right+ */
- ((1 << 8) | (1 << 7)) | /* left+, left++ */
- ((1 << 6) | (1 << 5)) | /* down++, down+ */
- ((1 << 1) | (1 << 0)) | /* up+, up++ */
- (1 << 3)); /* center */
+ touchpad = GPJDAT & touchpad_mask;
+
if (touchpad)
{
if (touchpad & (1 << 3))
{
btn |= BUTTON_SELECT;
- /* Desensitize middle (+) detectors one level */
- touchpad &= ~((1 << 11) | (1 << 8) | (1 << 5) | (1 << 1));
+ /* Desensitize all but outer detectors and still allow a combo if
+ * that's really intended. */
+ touchpad &= TOUCHPAD_SENS_NORMAL;
}
- if (touchpad & ((1 << 1) | (1 << 0)))
+ /* Simply include all lines in checks since "touchpad" has been
+ * masked to desired sensitivity already - allows any mask to be
+ * used without changing this code. */
+ if (touchpad & ((1 << 2) | (1 << 1) | (1 << 0)))
btn |= BUTTON_UP;
- if (touchpad & ((1 << 12) | (1 << 11)))
+ if (touchpad & ((1 << 12) | (1 << 11) | (1 << 10)))
btn |= BUTTON_RIGHT;
- if (touchpad & ((1 << 6) | (1 << 5)))
+ if (touchpad & ((1 << 6) | (1 << 5) | (1 << 4)))
btn |= BUTTON_DOWN;
- if (touchpad & ((1 << 8) | (1 << 7)))
+ if (touchpad & ((1 << 9) | (1 << 8) | (1 << 7)))
btn |= BUTTON_LEFT;
buttonlight_on();
@@ -155,6 +170,20 @@ int button_read_device(void)
return btn;
}
+void touchpad_set_sensitivity(int level)
+{
+ static const int masks[] =
+ {
+ TOUCHPAD_SENS_NORMAL,
+ TOUCHPAD_SENS_HIGH
+ };
+
+ if ((unsigned)level >= ARRAYLEN(masks))
+ level = 0;
+
+ touchpad_mask = masks[level];
+}
+
bool headphones_inserted(void)
{
return headphones_detect;
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/button-target.h b/firmware/target/arm/s3c2440/gigabeat-fx/button-target.h
index 7a39212..a5876aa 100644
--- a/firmware/target/arm/s3c2440/gigabeat-fx/button-target.h
+++ b/firmware/target/arm/s3c2440/gigabeat-fx/button-target.h
@@ -27,6 +27,7 @@
bool button_hold(void);
void button_init_device(void);
int button_read_device(void);
+void touchpad_set_sensitivity(int level);
/* Toshiba Gigabeat specific button codes */