From 5557831b937426d18120531d0f68067ed06ff177 Mon Sep 17 00:00:00 2001 From: goodtft Date: Wed, 2 Sep 2020 09:38:17 +0100 Subject: [PATCH] add MHS4.0-C driver --- MHS40C-show | 103 ++++++++++++++++++++++++++ boot/config-nomal.txt | 7 +- etc/modprobe.d/fbtft.conf | 2 + etc/modules | 9 +++ etc/modules-original | 6 ++ system_backup.sh | 8 ++ system_restore.sh | 8 ++ usr/99-calibration.conf-mhs397-0 | 9 +++ usr/99-calibration.conf-mhs397-180 | 9 +++ usr/99-calibration.conf-mhs397-270 | 9 +++ usr/99-calibration.conf-mhs397-90 | 9 +++ usr/99-calibration.conf-mhs397-FLIP-H | 9 +++ usr/99-calibration.conf-mhs397-FLIP-V | 9 +++ usr/fbcp | Bin 0 -> 13088 bytes 14 files changed, 194 insertions(+), 3 deletions(-) create mode 100755 MHS40C-show create mode 100755 etc/modprobe.d/fbtft.conf create mode 100755 etc/modules create mode 100755 etc/modules-original create mode 100755 usr/99-calibration.conf-mhs397-0 create mode 100755 usr/99-calibration.conf-mhs397-180 create mode 100755 usr/99-calibration.conf-mhs397-270 create mode 100755 usr/99-calibration.conf-mhs397-90 create mode 100755 usr/99-calibration.conf-mhs397-FLIP-H create mode 100755 usr/99-calibration.conf-mhs397-FLIP-V create mode 100644 usr/fbcp diff --git a/MHS40C-show b/MHS40C-show new file mode 100755 index 0000000..dbcc3b7 --- /dev/null +++ b/MHS40C-show @@ -0,0 +1,103 @@ +#!/bin/bash + +sudo ./system_backup.sh + +if [ -f /etc/X11/xorg.conf.d/40-libinput.conf ]; then +sudo rm -rf /etc/X11/xorg.conf.d/40-libinput.conf +fi +if [ ! -d /etc/X11/xorg.conf.d ]; then +sudo mkdir -p /etc/X11/xorg.conf.d +fi + +root_dev=`grep -oPr "root=[^\s]*" /boot/cmdline.txt | awk -F= '{printf $NF}'` +if test "$root_dev" = "/dev/mmcblk0p7";then +sudo cp -rf ./boot/config-noobs-nomal.txt ./boot/config.txt.bak +else +sudo cp -rf ./boot/config-nomal.txt ./boot/config.txt.bak +sudo echo "hdmi_force_hotplug=1" >> ./boot/config.txt.bak +fi +sudo echo "dtparam=i2c_arm=on" >> ./boot/config.txt.bak +sudo echo "dtparam=spi=on" >> ./boot/config.txt.bak +sudo echo "enable_uart=1" >> ./boot/config.txt.bak +sudo echo "display_rotate=0" >> ./boot/config.txt.bak +sudo echo "hdmi_group=2" >> ./boot/config.txt.bak +sudo echo "hdmi_mode=1" >> ./boot/config.txt.bak +sudo echo "hdmi_mode=87" >> ./boot/config.txt.bak +sudo echo "hdmi_cvt 800 480 60 6 0 0 0" >> ./boot/config.txt.bak +sudo echo "hdmi_drive=2" >> ./boot/config.txt.bak +sudo echo "dtoverlay=ads7846,cs=1,penirq=17,penirq_pull=2,speed=1000000,keep_vref_on=1,swapxy=1,pmax=255,xohms=60,xmin=200,xmax=3900,ymin=200,ymax=3900" >> ./boot/config.txt.bak +sudo cp -rf ./boot/config.txt.bak /boot/config.txt +sudo cp -rf ./usr/99-calibration.conf-mhs397-0 /etc/X11/xorg.conf.d/99-calibration.conf +#sudo cp -rf ./usr/99-fbturbo.conf /usr/share/X11/xorg.conf.d/99-fbturbo.conf +sudo cp -rf ./usr/99-fbturbo-fbcp.conf /usr/share/X11/xorg.conf.d/99-fbturbo.conf +sudo cp -rf ./etc/rc.local /etc/rc.local +if test "$root_dev" = "/dev/mmcblk0p7";then +sudo cp ./usr/cmdline.txt-noobs /boot/cmdline.txt +else +sudo cp ./usr/cmdline.txt /boot/ +fi +#sudo cp ./usr/inittab /etc/ +#sudo cp ./boot/config-mhs397.txt /boot/config.txt +sudo cp -rf ./etc/modules /etc/modules +sudo chmod 644 /etc/modules +sudo cp -rf ./etc/modprobe.d/fbtft.conf /etc/modprobe.d/ + +sudo touch ./.have_installed +echo "hdmi:resistance:mhs397:0:800:480" > ./.have_installed + +#FBCP install +wget --spider -q -o /dev/null --tries=1 -T 10 https://github.com +if [ $? -eq 0 ]; then +#sudo cp -rf ./usr/99-fbturbo-fbcp.conf /usr/share/X11/xorg.conf.d/99-fbturbo.conf +#sudo cp -rf ./etc/rc.local /etc/rc.local +sudo apt-get install git cmake -y 2> error_output.txt +result=`cat ./error_output.txt` +echo -e "\033[31m$result\033[0m" +grep -q "^E:" ./error_output.txt && exit +sudo rm -rf rpi-fbcp +sudo git clone https://github.com/tasanakorn/rpi-fbcp +sudo mkdir ./rpi-fbcp/build +cd ./rpi-fbcp/build/ +sudo cmake .. +sudo make +sudo install fbcp /usr/local/bin/fbcp +cd - > /dev/null +else +sudo install ./usr/fbcp /usr/local/bin/fbcp +fi +#evdev install +#nodeplatform=`uname -n` +#kernel=`uname -r` +version=`uname -v` +#if test "$nodeplatform" = "raspberrypi";then +#echo "this is raspberrypi kernel" +version=${version##* } +#version=${version#*#} +echo $version +if test $version -lt 2017;then +echo "reboot" +else +echo "need to update touch configuration" +sudo dpkg -i -B ./xserver-xorg-input-evdev_1%3a2.10.6-1+b1_armhf.deb 2> error_output.txt +#sudo apt-get install xserver-xorg-input-evdev 2> error_output.txt +result=`cat ./error_output.txt` +echo -e "\033[31m$result\033[0m" +grep -q "error:" ./error_output.txt && exit +sudo cp -rf /usr/share/X11/xorg.conf.d/10-evdev.conf /usr/share/X11/xorg.conf.d/45-evdev.conf +#echo "reboot" +fi +#else +#echo "this is not raspberrypi kernel, no need to update touch configure, reboot" +#fi + +sudo sync +sudo sync +sleep 1 +if [ $# -eq 1 ]; then +sudo ./rotate.sh $1 +elif [ $# -gt 1 ]; then +echo "Too many parameters" +fi + +echo "reboot now" +sudo reboot diff --git a/boot/config-nomal.txt b/boot/config-nomal.txt index b427b4c..f8d34e5 100755 --- a/boot/config-nomal.txt +++ b/boot/config-nomal.txt @@ -47,8 +47,9 @@ #dtparam=i2s=on #dtparam=spi=on -# Uncomment this to enable the lirc-rpi module -#dtoverlay=lirc-rpi +# Uncomment this to enable infrared communication. +#dtoverlay=gpio-ir,gpio_pin=17 +#dtoverlay=gpio-ir-tx,gpio_pin=18 # Additional overlays and parameters are documented /boot/overlays/README @@ -58,7 +59,7 @@ dtparam=audio=on [pi4] # Enable DRM VC4 V3D driver on top of the dispmanx display stack #dtoverlay=vc4-fkms-v3d -#max_framebuffers=2 +max_framebuffers=2 [all] #dtoverlay=vc4-fkms-v3d diff --git a/etc/modprobe.d/fbtft.conf b/etc/modprobe.d/fbtft.conf new file mode 100755 index 0000000..5ee9365 --- /dev/null +++ b/etc/modprobe.d/fbtft.conf @@ -0,0 +1,2 @@ +options fbtft_device name=flexfb gpios=reset:25,dc:24,cs:8 speed=125000000 bgr=1 fps=60 custom=1 height=480 width=800 +options flexfb setaddrwin=0 width=800 height=480 regwidth=16 init=-1,0x29,-3 diff --git a/etc/modules b/etc/modules new file mode 100755 index 0000000..053de55 --- /dev/null +++ b/etc/modules @@ -0,0 +1,9 @@ +# /etc/modules: kernel modules to load at boot time. +# +# This file contains the names of kernel modules that should be loaded +# at boot time, one per line. Lines beginning with "#" are ignored. + +i2c-dev +spi-bcm2835 +flexfb +fbtft_device diff --git a/etc/modules-original b/etc/modules-original new file mode 100755 index 0000000..c696796 --- /dev/null +++ b/etc/modules-original @@ -0,0 +1,6 @@ +# /etc/modules: kernel modules to load at boot time. +# +# This file contains the names of kernel modules that should be loaded +# at boot time, one per line. Lines beginning with "#" are ignored. + +i2c-dev diff --git a/system_backup.sh b/system_backup.sh index 5acdab1..8317899 100755 --- a/system_backup.sh +++ b/system_backup.sh @@ -50,6 +50,14 @@ sudo cp -rf ./usr/99-fbturbo.conf-original /usr/share/X11/xorg.conf.d/99-fbturbo sudo cp -rf /etc/rc.local ./.system_backup/ sudo cp -rf ./etc/rc.local-original /etc/rc.local +sudo cp -rf /etc/modules ./.system_backup/ +sudo cp -rf ./etc/modules-original /etc/modules + +if [ -f /etc/modprobe.d/fbtft.conf ]; then +sudo cp -rf /etc/modprobe.d/fbtft.conf ./.system_backup +sudo rm -rf /etc/modprobe.d/fbtft.conf +fi + if [ -f /etc/inittab ]; then sudo cp -rf /etc/inittab ./.system_backup sudo rm -rf /etc/inittab diff --git a/system_restore.sh b/system_restore.sh index a818eec..964af86 100755 --- a/system_restore.sh +++ b/system_restore.sh @@ -33,6 +33,7 @@ fi sudo cp -rf ./.system_backup/cmdline.txt /boot/ sudo cp -rf ./.system_backup/config.txt /boot/ sudo cp -rf ./.system_backup/rc.local /etc/ +sudo cp -rf ./.system_backup/modules /etc/ if [ -f /etc/inittab ]; then sudo rm -rf /etc/inittab @@ -41,6 +42,13 @@ if [ -f ./.system_backup/inittab ]; then sudo cp -rf ./.system_backup/inittab /etc fi +if [ -f /etc/modprobe.d/fbtft.conf ]; then +sudo rm -rf /etc/modprobe.d/fbtft.conf +fi +if [ -f ./.system_backup/fbtft.conf ]; then +sudo cp -rf ./.system_backup/fbtft.conf /etc/modprobe.d +fi + type fbcp > /dev/null 2>&1 if [ $? -eq 0 ]; then sudo rm -rf /usr/local/bin/fbcp diff --git a/usr/99-calibration.conf-mhs397-0 b/usr/99-calibration.conf-mhs397-0 new file mode 100755 index 0000000..e062456 --- /dev/null +++ b/usr/99-calibration.conf-mhs397-0 @@ -0,0 +1,9 @@ +Section "InputClass" + Identifier "calibration" + MatchProduct "ADS7846 Touchscreen" + Option "Calibration" "3968 61 188 3960" + Option "SwapAxes" "1" + Option "EmulateThirdButton" "1" + Option "EmulateThirdButtonTimeout" "1000" + Option "EmulateThirdButtonMoveThreshold" "300" +EndSection diff --git a/usr/99-calibration.conf-mhs397-180 b/usr/99-calibration.conf-mhs397-180 new file mode 100755 index 0000000..511c220 --- /dev/null +++ b/usr/99-calibration.conf-mhs397-180 @@ -0,0 +1,9 @@ +Section "InputClass" + Identifier "calibration" + MatchProduct "ADS7846 Touchscreen" + Option "Calibration" "61 3968 3960 188" + Option "SwapAxes" "1" + Option "EmulateThirdButton" "1" + Option "EmulateThirdButtonTimeout" "1000" + Option "EmulateThirdButtonMoveThreshold" "300" +EndSection diff --git a/usr/99-calibration.conf-mhs397-270 b/usr/99-calibration.conf-mhs397-270 new file mode 100755 index 0000000..4306734 --- /dev/null +++ b/usr/99-calibration.conf-mhs397-270 @@ -0,0 +1,9 @@ +Section "InputClass" + Identifier "calibration" + MatchProduct "ADS7846 Touchscreen" + Option "Calibration" "3971 205 4000 80" + Option "SwapAxes" "0" + Option "EmulateThirdButton" "1" + Option "EmulateThirdButtonTimeout" "1000" + Option "EmulateThirdButtonMoveThreshold" "300" +EndSection diff --git a/usr/99-calibration.conf-mhs397-90 b/usr/99-calibration.conf-mhs397-90 new file mode 100755 index 0000000..b512bad --- /dev/null +++ b/usr/99-calibration.conf-mhs397-90 @@ -0,0 +1,9 @@ +Section "InputClass" + Identifier "calibration" + MatchProduct "ADS7846 Touchscreen" + Option "Calibration" "188 3960 61 3968" + Option "SwapAxes" "0" + Option "EmulateThirdButton" "1" + Option "EmulateThirdButtonTimeout" "1000" + Option "EmulateThirdButtonMoveThreshold" "300" +EndSection diff --git a/usr/99-calibration.conf-mhs397-FLIP-H b/usr/99-calibration.conf-mhs397-FLIP-H new file mode 100755 index 0000000..dc195e6 --- /dev/null +++ b/usr/99-calibration.conf-mhs397-FLIP-H @@ -0,0 +1,9 @@ +Section "InputClass" + Identifier "calibration" + MatchProduct "ADS7846 Touchscreen" + Option "Calibration" "94 3973 183 3927" + Option "SwapAxes" "1" + Option "EmulateThirdButton" "1" + Option "EmulateThirdButtonTimeout" "1000" + Option "EmulateThirdButtonMoveThreshold" "300" +EndSection diff --git a/usr/99-calibration.conf-mhs397-FLIP-V b/usr/99-calibration.conf-mhs397-FLIP-V new file mode 100755 index 0000000..ae087ef --- /dev/null +++ b/usr/99-calibration.conf-mhs397-FLIP-V @@ -0,0 +1,9 @@ +Section "InputClass" + Identifier "calibration" + MatchProduct "ADS7846 Touchscreen" + Option "Calibration" "3961 69 3975 209" + Option "SwapAxes" "1" + Option "EmulateThirdButton" "1" + Option "EmulateThirdButtonTimeout" "1000" + Option "EmulateThirdButtonMoveThreshold" "300" +EndSection diff --git a/usr/fbcp b/usr/fbcp new file mode 100644 index 0000000000000000000000000000000000000000..802521c2b3c3f02d85cfcbafbad55e02e1231475 GIT binary patch literal 13088 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 literal 0 HcmV?d00001