Thursday, 16 June 2016

Properly setting up a 5" HDMI touchscreen for Kodi on Raspbian

Wow. This was a royal pita. I wanted to build this wake-up-light-alarm-clock-media-thingy for my girlfriend. Well, I got my hands on a RPi Zero and needed an LCD display. I found this nice-looking "WaveShare 4" IPS display" on Ebay and spent days trying to get it to work properly. You want a hint? DONT DO IT! BUY A HDMI SCREEN! Refresh rate sucks, Kodi is not working with hardware-acceleration, Framebuffer copying never worked. Short: It sucked!

So. Next chapter: Bought a 5" HDMI screen here. It has an HDMI input and connects to the RPi GPIO pins for power and touch functionality... and works ALMOST out of the box on a fresh Raspbian install (from 5/2016). Nice!

Set up screen resolution and touchscreen

 

 Edit /boot/config.txt:

hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
hdmi_cvt 800 480 60 6 0 0 0


dtparam=spi=on
dtoverlay=ads7846,penirq=25,speed=10000,penirq_pull=2,xohms=150


This gets the display and the touchscreen up and running. You can test if the touchscreen does anything using:

cat /dev/input/mouse0
or
cat /dev/input/event0
 

Setting up the touchscreen for X

 

This should give you weird output whenever you touch the screen. Fine.
Now you want to calibrate it. To do that install the calibration utility:

sudo apt-get install xinput_calibrator

Then start the GUI. You should now have an entry "Calibrate touchscreen" in your menu. Start it and tap the points. When finished the screen should be calibrated.
Or, to do the calibration from the command line, run:

xinput-calibrator

You can also do this from SSH, if you don't have a keyboard attached:

DISPLAY=:0 xinput_calibrator

Tap the points and when finished, the tool will output some calibration information:

Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "114 3982 226 3883"
        Option  "SwapAxes"      "0"
EndSection


Paste the calibration info into "/usr/share/X11/xorg.conf.d/99-calibration.conf".

Setting up the touchscreen for Kodi

 

Now you have a calibrated X input device, so the Desktop works nicely, but Kodi still does not. When starting it from X, there is a cursor, but the calibration is way off. When starting it standalone, there is not even touch input...
Fix this by installing tslib and evtest:

sudo apt-get install evtest tslib libts-bin 
 
Additionally you will need Then calibrate the touchscreen using:

TSLIB_TSDEVICE=/dev/input/event0 ts_calibrate

Touch the 5 crosses and you're done. You can test the calibration using:

TSLIB_TSDEVICE=/dev/input/event0 ts_test

You might also need to add the "kodi" user to the "input" user group:

sudo usermod -a -G input kodi

If you have Kodi version >= 17 ("Krypton") you cannow set up scale factors for the display so the cursor is properly displayed.

Setting display scale factors in Kodi >= v17

 

Test if Kodi can use touch input now. Start Kodi and touch the upper left corner of the screen. You will see a cursor and can move it, but only in 1/5th of the screen. The problem is that the coordinates /dev/input/event0 sends are touch device coordinates (in the range you see in the calibration values above), but Kodi expects pixel screen coordinates (0-800,0-480). Kodi starts to support touchscreen calibration out-of-the-box as of v17 aka "Krypton".
Edit the file advancedsettings.xml in your users userdata folder, e.g. /home/kodi/.kodi/userdata or ~/.kodi/userdata. If it does not exist, create it and add the following entries:

<advancedsettings>
    <touchscreen>
        <x_offset>-32</x_offset> <!-- cursor pixel x offset
        <y_offset>-35</y_offset> <!-- cursor pixel y offset
        <x_stretch_factor>0.209</x_stretch_factor> <!-- stretch factor
        <y_stretch_factor>0.131</y_stretch_factor> <!-- stretch factor
    </touchscreen>
</advancedsettings>


Good start values can be calculated by dividing the screen resolution by the X11 calibration values above (e.g. for x: 800/3982=~0.2 and 480/3883=~0.124). Note that you have to restart Kodi after editing the values to see any changes.

Installing a touchscreen calibration fix

 

When you have an older Kodi version and can not use advancedsettings.xml, there are also ways to properly calibrate your screen. Read here about using a tslib fork and ts_uinput_touch for this.

Fixing the double-click issue


A remaining problem is that Kodi wants a double-click to activate a function. This is not good as we want to activate functions with a single click or tap. We can change this by editing the file /usr/share/kodi/system/keymaps/mouse.xml. Change the entries in the mouse section to:

<mouse>
  <leftclick>leftclick</leftclick>
  <rightclick>rightclick</rightclick>
  <middleclick>middleclick</middleclick>
  <doubleclick id="0">noop</doubleclick>
  <longclick id="0">contextmenu</longclick>
  <wheeldown>wheeldown</wheeldown>
  <wheelup>wheelup</wheelup>
  <mousedrag>mousedrag</mousedrag>
  <mousedragend>leftclick</mousedragend>
  <mousemove>noop</mousemove>
</mouse>



P.S. Find out how to hide the cursor here.
P.P.S. You can also add backlight control to the screen...

12 comments:

Hawk Electronic said...

how Calculate values ​​of advancedsettings ?

Bim said...

You can only try them out. Note that you have to restart Kodi, because values are only read when Kodi starts. The values I gave are start values for my screen, so ymmv...

patrice.vallade Vallade said...

Hello. Is it possible to transpose the various handling operations to a 7-inch touchscreen (egalax driversBus 002 Device 014: ID 0eef:0001 D-WAV Scientific Co., Ltd eGalax TouchScreen)
? Thank you.

Bim said...

Looks like an USB display or USB touch screen?! Sorry, but I have no idea...

tfw said...

Hello - very good description. I don't know what i'm doing wrong, but starting Kodi no matter if standalone or from X leads to not the slightest trace of a Cursor. The only thing that happens is that if i use a mouse the cursor appears - and on touching the cursor disappears. So the Touchscreen is at least doing something, but nothing of any value - do you have any clue what's wrong. Every hint is very appreciated
Thanx

Bim said...

It probably depends on your OS, your Kodi version and what skin you are using, so I can't say what's wrong. Try turning on the debug log and see what you cant find in there. Btw. Kodi hides the mouse when you don't mode it, so that behaviour is normal...

Nikos Sodomistis said...
This comment has been removed by the author.
Nikos Sodomistis said...

first of all i do this steps.
http://www.waveshare.com/wiki/5inch_HDMI_LCD
later i do the step above and at the code this "TSLIB_TSDEVICE=/dev/input/event0 ts_calibrate" i use this "sudo TSLIB_TSDEVICE=/dev/input/event2 ts_calibrate" only like this chanse at the code i can calibrate the screen.
my problem is home/kodi/ the file is empty, i install the kodi with this command "sudo apt-get install kodi" and i dont found the advancedsettings.xml so i try to creat one at the fille kodi when before is empty with this command "sudo nano /home/kodi/advancedsettings.xml" and paste the above this is right?? but nothing with touch at the kodi is tha same like at the start if i push the left upper corner the cursor can move it, but only in 1/5th of the screen. this is the video i made the kodi at the raspian.
https://www.youtube.com/watch?v=crw9U42HFkQ
what i do wrong and dont work the touchscreenat the kodi? can anyone help me please?

Bim said...

Which Kodi version do you have? Is you X calibrated (the user interface of your regulöar desktop you start with "startx")? Try to find advancedsettings.xml using "sudo find / -name advancedsettings.xml". It should be in "~/.kodi/userdata/" Note that this file only works with Kodi >= v17.

Nikos Sodomistis said...

hello my friend my kodi is 15.2 how to upgrade??(at the terminal if i wrote "sudo apt0get upgrade" he upgrade the kodi?? or only raspbian? i find the advancedsettings.xml and paste the values. whare to see if start with "startx" i have the same tft.

Nikos Sodomistis said...

i want touch creen because i use this for my car and i try some athore guige to fix this.
http://www.markamc.co.uk/raspberry-pi-2-osmc-egalax-touchscreen/
sorry for this post i dont do for advertising i want to see my problem all is work fine and at the kodi but if i restart the calibrator is gone i try the seetings for calibrate to dont lose after restart but nothing :(

Bim said...

Man, I don't understand a word you're saying... Sorry.
That guide you're following seems to use an older version of OSMC or Kodi. It is a modified Raspbian Jessie. Try a recent version of OSMC, or try to install the Kodi 17 beta on OSMC: http://forum.kodi.tv/showthread.php?tid=265306

Post a Comment