diff --git a/ChangeLog b/ChangeLog index 1311332177..79e746f6bb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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. + \ No newline at end of file diff --git a/Documentation/NuttxPortingGuide.html b/Documentation/NuttxPortingGuide.html index 4ded08f0fb..15019ad102 100644 --- a/Documentation/NuttxPortingGuide.html +++ b/Documentation/NuttxPortingGuide.html @@ -4730,6 +4730,15 @@ build 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

    diff --git a/configs/README.txt b/configs/README.txt index 15ff30e114..fc85e89e12 100644 --- a/configs/README.txt +++ b/configs/README.txt @@ -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 diff --git a/configs/stm3240g-eval/nsh/defconfig b/configs/stm3240g-eval/nsh/defconfig index a0131c9932..0d298f520d 100644 --- a/configs/stm3240g-eval/nsh/defconfig +++ b/configs/stm3240g-eval/nsh/defconfig @@ -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 # diff --git a/configs/stm3240g-eval/nxwm/defconfig b/configs/stm3240g-eval/nxwm/defconfig index 3242948f30..ca7b242ce0 100644 --- a/configs/stm3240g-eval/nxwm/defconfig +++ b/configs/stm3240g-eval/nxwm/defconfig @@ -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 diff --git a/drivers/input/stmpe11_tsc.c b/drivers/input/stmpe11_tsc.c index 70eb11259f..afe27ac899 100644 --- a/drivers/input/stmpe11_tsc.c +++ b/drivers/input/stmpe11_tsc.c @@ -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; } diff --git a/include/nuttx/input/stmpe11.h b/include/nuttx/input/stmpe11.h index 5ecc53af10..2436437e6f 100644 --- a/include/nuttx/input/stmpe11.h +++ b/include/nuttx/input/stmpe11.h @@ -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