-ifndef display_rotate
- display_rotate := 0
-endif
-
-ifeq "${display_rotate}" "0"
- display_touch_calibration := 200 3950 250 4000
-else ifeq "${display_rotate}" "2"
- display_touch_calibration := 3950 200 4000 250
-endif
+PACKAGES += xserver-xorg-input-evdev xinput xinput-calibrator
define RPICONFIG +=
hdmi_cvt=800 480 60 6 0 0 0
hdmi_drive=1
dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
-display_rotate=${display_rotate}
endef
+export display_ws5inch_cfg display_ws5inch_rotation
+
define display_ws5inch_cfg :=
Section "InputClass"
Identifier "evdev touchscreen catchall"
MatchIsTouchscreen "on"
- Option "Calibration" "${display_touch_calibration}"
+ Option "Calibration" "200 3950 250 4000"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
EndSection
endef
-export display_ws5inch_cfg
+define display_ws5inch_rotation :=
+# Keep touch matrix rotated in accordance with screen rotation
+while sleep 3; do
+ oldrotate="$${rotate}"
+ rotate="$$(xrandr |grep primary)"
+ rotate="$${rotate#*+0+0 }"
+ rotate="$${rotate% (*}"
-PACKAGES += xserver-xorg-input-evdev xinput xinput-calibrator
+ [ "$${oldrotate}" = "$${rotate}" ] || case $$rotate in
+ left) xinput set-prop 'ADS7846 Touchscreen' 'Coordinate Transformation Matrix' 0 -1 1 1 0 0 0 0 1;;
+ right) xinput set-prop 'ADS7846 Touchscreen' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1;;
+ inverted) xinput set-prop 'ADS7846 Touchscreen' 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1;;
+ *) xinput set-prop 'ADS7846 Touchscreen' 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1;;
+ esac
+done &
+endef
.PHONY: _display_ws5inch
_config: _display_ws5inch
_display_ws5inch: ${CFGROOT} _copy _mount
+ # Rough touch calibration
mkdir -p "$${CFGROOT}/usr/share/X11/xorg.conf.d/"
printf '%s\n' "$${display_ws5inch_cfg}" >"$${CFGROOT}/usr/share/X11/xorg.conf.d/45-evdev.conf"
+ # Resolution / Rotation stuff
mkdir -p "$${CFGROOT}/etc/X11/Xsession.d/"
printf 'xrandr --size 800x480\n' >"$${CFGROOT}/etc/X11/Xsession.d/10display_resolution"
+ printf '%s\n' "$$display_ws5inch_rotation" >"$${CFGROOT}/etc/X11/Xsession.d/20touch_rotation"
# Correct DPI scaling, although application support is mediocre
mkdir -p "$${CFGROOT}/etc/X11/Xresources/"
printf 'Xft.dpi: 180\n' >"$${CFGROOT}/etc/X11/Xresources/dpi_resolution"