diff options
| -rw-r--r-- | apps/lang/english.lang | 34 | ||||
| -rw-r--r-- | apps/menus/settings_menu.c | 7 | ||||
| -rw-r--r-- | apps/settings.c | 4 | ||||
| -rw-r--r-- | apps/settings.h | 3 | ||||
| -rw-r--r-- | apps/settings_list.c | 5 | ||||
| -rw-r--r-- | firmware/export/config-gigabeat.h | 2 | ||||
| -rw-r--r-- | firmware/target/arm/s3c2440/gigabeat-fx/button-meg-fx.c | 51 | ||||
| -rw-r--r-- | firmware/target/arm/s3c2440/gigabeat-fx/button-target.h | 1 |
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 */ |