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:
parent
981846cb54
commit
239781e193
|
@ -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.
|
||||
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
#
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue