Improved thresholding logic in the STMPE11 driver; NxWM: Oops minimizing wrong application

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4737 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2012-05-14 21:57:38 +00:00
parent 981846cb54
commit 239781e193
7 changed files with 64 additions and 9 deletions

View File

@ -2760,3 +2760,10 @@
window to revert to the previous window. Not good behavior.
* sched/sched_mergepending.c: Add task switching instrumentation. There is a case
here where instrumentation was missing. Contributed by Petri Tanskanen.
CONFIG_STMPE11_THRESHX, CONFIG_STMPE11_THRESHX, and drivers/stmpe11_tsc.c: Add some
threasholding controls to all slow down processing of touchscreen samples.
This is a problem with NX in multi-user mode: touchscreen data gets sent
via a message and when the message queue gets full the sender blocks and
touch events are lost. Basic data overrun. The badly effects touchscreen
human factors.

View File

@ -4730,6 +4730,15 @@ build
<code>CONFIG_STMPE11_REGDEBUG</code>:
Enabled very low register-level debug output. Requires <code>CONFIG_DEBUG</code>.
</li>
<li>
<code>CONFIG_STMPE11_THRESHX</code> and <code>CONFIG_STMPE11_THRESHY</code>:
STMPE11 touchscreen data comes in a a very high rate. New touch positions
will only be reported when the X or Y data changes by these thresholds.
This trades reduces data rate for some loss in dragging accuracy. The
STMPE11 is configure for 12-bit values so the raw ranges are 0-4095. So
for example, if your display is 320x240, then THRESHX=13 and THRESHY=17
would correspond to one pixel. Default: 12
</li>
</ul>
<h3>Analog Devices</h3>

View File

@ -814,6 +814,13 @@ defconfig -- This is a configuration file similar to the Linux
Disable driver temperature sensor functionality.
CONFIG_STMPE11_REGDEBUG
Enabled very low register-level debug output. Requires CONFIG_DEBUG.
CONFIG_STMPE11_THRESHX and CONFIG_STMPE11_THRESHY
STMPE11 touchscreen data comes in a a very high rate. New touch positions
will only be reported when the X or Y data changes by these thresholds.
This trades reduces data rate for some loss in dragging accuracy. The
STMPE11 is configure for 12-bit values so the raw ranges are 0-4095. So
for example, if your display is 320x240, then THRESHX=13 and THRESHY=17
would correspond to one pixel. Default: 12
Analog Devices

View File

@ -990,6 +990,13 @@ CONFIG_INPUT_TSC2007=n
# Disable driver temperature sensor functionality.
# CONFIG_STMPE11_REGDBUG
# Enabled very low register-level debug output. Requires CONFIG_DEBUG.
# CONFIG_STMPE11_THRESHX and CONFIG_STMPE11_THRESHY
# STMPE11 touchscreen data comes in a a very high rate. New touch positions
# will only be reported when the X or Y data changes by these thresholds.
# This trades reduces data rate for some loss in dragging accuracy. The
# STMPE11 is configure for 12-bit values so the raw ranges are 0-4095. So
# for example, if your display is 320x240, then THRESHX=13 and THRESHY=17
# would correspond to one pixel. Default: 12
#
CONFIG_INPUT_STMPE11=n
CONFIG_STMPE11_SPI=n
@ -1005,7 +1012,8 @@ CONFIG_STMPE11_GPIOINT_DISABLE=y
CONFIG_STMPE11_SWAPXY=y
CONFIG_STMPE11_TEMP_DISABLE=y
CONFIG_STMPE11_REGDEBUG=n
CONFIG_STMPE11_THRESHX=26
CONFIG_STMPE11_THRESHY=34
#
# USB Device Configuration
#

View File

@ -990,6 +990,13 @@ CONFIG_INPUT_TSC2007=n
# Disable driver temperature sensor functionality.
# CONFIG_STMPE11_REGDBUG
# Enabled very low register-level debug output. Requires CONFIG_DEBUG.
# CONFIG_STMPE11_THRESHX and CONFIG_STMPE11_THRESHY
# STMPE11 touchscreen data comes in a a very high rate. New touch positions
# will only be reported when the X or Y data changes by these thresholds.
# This trades reduces data rate for some loss in dragging accuracy. The
# STMPE11 is configure for 12-bit values so the raw ranges are 0-4095. So
# for example, if your display is 320x240, then THRESHX=13 and THRESHY=17
# would correspond to one pixel. Default: 12
#
CONFIG_INPUT_STMPE11=n
CONFIG_STMPE11_SPI=n
@ -1005,6 +1012,8 @@ CONFIG_STMPE11_GPIOINT_DISABLE=y
CONFIG_STMPE11_SWAPXY=n
CONFIG_STMPE11_TEMP_DISABLE=y
CONFIG_STMPE11_REGDEBUG=n
CONFIG_STMPE11_THRESHX=26
CONFIG_STMPE11_THRESHY=34
#
# USB Device Configuration

View File

@ -986,19 +986,17 @@ void stmpe11_tscworker(FAR struct stmpe11_dev_s *priv, uint8_t intsta)
goto ignored;
}
/* Perform a thresholding operation so that the results will be more stable */
/* Perform a thresholding operation so that the results will be more stable.
* If the difference from the last sample is small, then ignore the event.
* REVISIT: Should a large change in pressure also generate a event?
*/
xdiff = x > priv->threshx ? (x - priv->threshx) : (priv->threshx - x);
ydiff = y > priv->threshy ? (y - priv->threshy) : (priv->threshy - y);
/* If the difference from the last sample is small, then ignore the event.
* REVISIT: Should a large change in pressure also generate a event?
*/
if (xdiff + ydiff < 6)
if (xdiff < CONFIG_STMPE11_THRESHX && ydiff < CONFIG_STMPE11_THRESHY)
{
/* Little or no change in position ... don't report anything.
*/
/* Little or no change in either direction ... don't report anything. */
goto ignored;
}

View File

@ -86,6 +86,13 @@
* Disable driver temperature sensor functionality.
* CONFIG_STMPE11_REGDEBUG
* Enabled very low register-level debug output. Requires CONFIG_DEBUG.
* CONFIG_STMPE11_THRESHX and CONFIG_STMPE11_THRESHY
* STMPE11 touchscreen data comes in a a very high rate. New touch positions
* will only be reported when the X or Y data changes by these thresholds.
* This trades reduces data rate for some loss in dragging accuracy. The
* STMPE11 is configure for 12-bit values so the raw ranges are 0-4095. So
* for example, if your display is 320x240, then THRESHX=13 and THRESHY=17
* would correspond to one pixel. Default: 12
*/
/* The STMPE811 interfaces with the target CPU via a I2C or SPI interface. The pin IN_1
@ -127,6 +134,16 @@
# error "Work queue support required. CONFIG_SCHED_WORKQUEUE must be selected."
#endif
/* Thresholds */
#ifndef CONFIG_STMPE11_THRESHX
# define CONFIG_STMPE11_THRESHX 12
#endif
#ifndef CONFIG_STMPE11_THRESHY
# define CONFIG_STMPE11_THRESHY 12
#endif
/* Debug output */
#ifndef CONFIG_DEBUG