From 267ac4b79b4533043731141115acf45e8018ba38 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Tue, 11 Jan 2011 23:48:29 +0000 Subject: SA9200: Adjust touchpad sensitivities so that actual contact with the player is needed to cause button presses and hopefully those settings will work nicely. Add a parameter read function to the MEP driver for debugging and RE purposes; enable compilation of it if you want to use it. Make a note in power-sa9200.c about button inits. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29032 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/philips/sa9200/button-sa9200.c | 46 +++++++++++++++++++++- firmware/target/arm/philips/sa9200/power-sa9200.c | 2 + 2 files changed, 46 insertions(+), 2 deletions(-) (limited to 'firmware/target/arm') diff --git a/firmware/target/arm/philips/sa9200/button-sa9200.c b/firmware/target/arm/philips/sa9200/button-sa9200.c index e3d569f422..1e92325c73 100644 --- a/firmware/target/arm/philips/sa9200/button-sa9200.c +++ b/firmware/target/arm/philips/sa9200/button-sa9200.c @@ -32,10 +32,52 @@ static int int_btn = BUTTON_NONE; #ifndef BOOTLOADER static bool hold_button_old = false; +/* Capacitive buttons - lowest setting is still very sensitive */ +static const signed char button_sensitivity = -8; /* -8 to 7 */ + +/* Strip - decent amount of contact needed */ +static const signed char strip_sensitivity = 0; /* -8 to 7 */ +static const unsigned char strip_pressure = 25; /* 0 to 255 */ + void button_init_device(void) { /* The touchpad is powered on and initialized in power-sa9200.c since it needs to be ready for both buttons and button lights. */ + + /* perform button-specific inits here */ + + /* Besides $00, only common parameters $20 and $21 are supported */ + + /* Report modes: + * [15:12] cap btn sens : xxxx, + * [11: 8] pos sen sens : xxxx, + * [ 7: 6] rate: 10 (40 rps), + * [ 5] no filter: 0, + * [ 4] reserved: 0, + * [ 3] en scr: 0, + * [ 2] en btns: 1, + * [ 1] en rel: 0, + * [ 0] en abs: 1 */ + touchpad_set_parameter(0, 0x20, + ((button_sensitivity & 0xf) << 12) | + ((strip_sensitivity & 0xf) << 8) | + (0x2 << 6) | + (0x1 << 2) | + (0x1 << 0)); + + /* Enhanced operating configuration: + * [15: 9] reserved : 0000000 + * [ 8] Min abs reporting : 0 + * [ 7] reserved : 0 + * [ 6] not all cap btns : 1 + * [ 5] single cap btn : 0 + * [ 4] en 50ms debounce : 1 + * [ 3] motion reporting : 0 + * [ 2] clip z if no finger : 0 + * [ 1] disable decel : 0 + * [ 0] enable dribble : 0 */ + touchpad_set_parameter(0, 0x21, + (0x1 << 6) | (0x1 << 4)); } /* @@ -43,7 +85,7 @@ void button_init_device(void) */ void button_int(void) { - char data[4]; + unsigned char data[4]; int val; int_btn = BUTTON_NONE; @@ -59,7 +101,7 @@ void button_int(void) if (data[1] & 0x8) int_btn |= BUTTON_LEFT; if (data[2] & 0x1) int_btn |= BUTTON_MENU; } - else if (val == MEP_ABSOLUTE_HEADER) + else if (val == MEP_ABSOLUTE_HEADER && data[3] >= strip_pressure) { /* Absolute packet - the finger is on the vertical strip. Position ranges from 1-4095, with 1 at the bottom. */ diff --git a/firmware/target/arm/philips/sa9200/power-sa9200.c b/firmware/target/arm/philips/sa9200/power-sa9200.c index 1570954fcc..b6a3929e8b 100644 --- a/firmware/target/arm/philips/sa9200/power-sa9200.c +++ b/firmware/target/arm/philips/sa9200/power-sa9200.c @@ -66,6 +66,8 @@ void power_init(void) { logf("touchpad not ready"); } + + /* Setups specifically for buttons are handled in button-sa9200.c */ #endif } -- cgit v1.2.3