[Solved] Kalibracja ekranu dotykowego

Witamy!
Post Reply
Janko82
Ronin
Ronin
Posts: 3
Joined: 30 Nov 2015, 14:20
Distribution: Debian
Location: Polska

[Solved] Kalibracja ekranu dotykowego

Post#1 by Janko82 » 01 Dec 2015, 09:11

Witam.
Mam problem z uruchomieniem ekranu dotykowego w MSI AIO.
Po uruchomieniu kreatora konfiguracji z płyty startowej Porteus 3.5 wykonuję wszystkie kroki aż do kalibracji ekranu dotykowego.
Kalibracja przebiega prawidłowo, wszystkie 4 punkty są wykrywane idealnie.
Po przeprowadzeniu kalibracji, ekran działa prawidłowo - np. można bez problemu przeglądać stronę www.
Kreator konfiguracji podczas tworzenia pliku 'cfg' pokazuje parametry kalibracyjne ekranu dotykowego.
Niestety w tym miejscu pojawia się problem.
W pierwszym parametrze komendy touchscreen_calibration, którą jest jak się domyślam nazwa sterownika, pojawia się znak kontrolny o kodzie ASCII 04 (EOT).
Muszę dodać w tym miejscu, że przygotowałem dla MSI AIO ISO z opcją konfiguracji zdalnej, oraz uruchamianiem poprzez PXE.
W związku z tym konfigurację dla tego AIO mam umieszczoną na serwerze www, z którego poprzez PXE ładuję także cały system Porteus Kiosk.
W komputerze (serwerze), w którym jest plik z konfiguracją dla AIO wczytałem oryginalny plik cfg (mc -> import file) utworzony przez kreatora (zapisałem go na pamięci usb) - nie mogłem więc dokonać w żaden sposób zmiany zawartości.
(fragment dotyczący ekranu dotykowego)

Code: Select all

touchscreen_calibration="IDEACOx IDC 6681" "Evdev Axis Calibration" 32 -121 32695 150 32403
(W oryginalnym pliku w miejscu 'x' jest znak ASCII 04, widoczny jako mały kwadrat wypełniony ciągiem cyfr 00 04 - niestety tutaj go nie widać - skrypt BBCode zamienia go na spację)
Taki zapis nie daje żadnego efektu.
Inne parametry konfiguracyjne działają, więc nie mam podstaw sądzić, że nie działa mechanizm wczytywania konfiguracji dla danego komputera.
W związku z tym sprawdziłem jak widoczne jest to urządzenie od strony systemu (cat /proc/bus/input/):
(fragment dotyczący ekranu dotykowego)

Code: Select all

I: Bus=0003 Vendor=1cb6 Product=6681 Version=0110
N: Name="IDEACO  IDC 6681"
P: Phys=usb-0000:00:13.0-2/input0
S: Sysfs=/devices/pci0000:00/0000:00:13.0/usb5/5-2/5-2:1.0/0003:1CB6:6681.0004/input/input7
U: Uniq=
H: Handlers=mouse0 event5
B: PROP=0
B: EV=1b
B: KEY=401 0 30000 0 0 0 0 0 0 0 0
B: ABS=1000003
B: MSC=10

I: Bus=0003 Vendor=1cb6 Product=6681 Version=0110
N: Name="IDEACO  IDC 6681"
P: Phys=usb-0000:00:13.0-2/input1
S: Sysfs=/devices/pci0000:00/0000:00:13.0/usb5/5-2/5-2:1.1/0003:1CB6:6681.0005/input/input8
U: Uniq=
H: Handlers=mouse1 event6
B: PROP=0
B: EV=1b
B: KEY=30000 0 0 0 0 0 0 0 0
B: ABS=3
B: MSC=10

W polu 'Name' pomiędzy literami 'O' oraz 'I', są widoczne dwie spacje - niestety poprawienie parametru touchscreen_calibration na dwie spacje nie rozwiązuje problemu - ekran działa ale nadal jest nieskalibrowany.

Code: Select all

touchscreen_calibration="IDEACO  IDC 6681" "Evdev Axis Calibration" 32 -121 32695 150 32403
Niestety - taki zapis także nie działa.

Podobny problem jest opisany w tym wątku https://forums.opensuse.org/showthread. ... -character

Testowałem to na dwóch różnych urządzeniach AIO od MSI - na obu wystąpił ten sam problem.
Plik cfg jest w czystym ASCII (wg zaleceń), w mcedit nieszczęsny znak widoczny jest jako CTRL+D (^D), podgląd pliku w HEX pokazuje wartość 04 na tej pozycji.
Skończyły mi się pomysły, jednak wiem, że to działa - kreator w jakiś sposób przekazuje właściwe parametry do systemu.

Pytanie:
co wpisać w pierwszym parametrze touchscreen_calibration po literze O w celu prawidłowego uruchomienia ekranu dotykowego w MSI AIO ?
Last edited by Janko82 on 03 Dec 2015, 15:35, edited 1 time in total.

User avatar
fanthom
Site Admin
Site Admin
Posts: 4547
Joined: 28 Dec 2010, 02:42
Distribution: Porteus Kiosk
Location: Poland, currently - Cork, IE
Contact:

Re: Kalibracja ekranu dotykowego

Post#2 by fanthom » 01 Dec 2015, 09:53

Podejzewam ze parsowanie zdalnej konfiguracji dla niestandardowych znakow nie przebiega prawidlowo.
Czy dodanie custom modulu jest jakas opcja?

Jesli tak to prosze usunac parametr 'touchscreen_calibration=' z konfigu i utworzyc dodatkowy modul ktory bedzie zawieral skrypt umieszczony w folderze /etc/rc.d/local_gui.d/:

Code: Select all

#!/bin/sh
xinput set-int-prop "IDEACOx IDC 6681" "Evdev Axis Calibration" 32 -121 32695 150 32403'
Powinno dzialac.

BTW: Prosze zaktualizowac system do wersji 3.6.0.

Wiecej info na temat customizacji jest tutaj:
http://porteus-kiosk.org/kiosk-customization.html
Please add [Solved] to your thread title if the solution was found.

Janko82
Ronin
Ronin
Posts: 3
Joined: 30 Nov 2015, 14:20
Distribution: Debian
Location: Polska

Re: Kalibracja ekranu dotykowego

Post#3 by Janko82 » 01 Dec 2015, 12:03

Dziękuje za szybką odpowiedź.
Oczywiście nie ma żadnego problemu z mojej strony ze stworzeniem nowego modułu.
Pytanie mam tylko takie: jaki znak powinien być zamiast 'x' ? Bo jak się domyślam, znak z przykładu pochodzi z mojego posta.
W miejscu znaku 'x' oryginalnie jest znak o kodzie ASCII 04 i taki znak mam wstawić w tym skrypcie ?
Inaczej mówiąc - mam zachować 100% zgodność poprzez zaimportowanie stringu z pliku cfg utworzonego przez kreatora ?

User avatar
fanthom
Site Admin
Site Admin
Posts: 4547
Joined: 28 Dec 2010, 02:42
Distribution: Porteus Kiosk
Location: Poland, currently - Cork, IE
Contact:

Re: Kalibracja ekranu dotykowego

Post#4 by fanthom » 01 Dec 2015, 15:10

Nie znam dokladnej odpowiedzi na to pytanie. Prosze probowac. Najlepiej gdyby mogl sie pan zalogowac przez ssh i skopiowac nazwe kontrolera bezposrednio z wyniku komendy 'cat /proc/bus/input/devices'.
Please add [Solved] to your thread title if the solution was found.

Janko82
Ronin
Ronin
Posts: 3
Joined: 30 Nov 2015, 14:20
Distribution: Debian
Location: Polska

Re: Kalibracja ekranu dotykowego

Post#5 by Janko82 » 03 Dec 2015, 15:34

Rozwiązałem problem.
Postanowiłem opisać całe rozwiązanie w jednej odpowiedzi - może komuś się przyda przy kalibracji innego ekranu dotykowego.

Kluczowe w tym przypadku okazały się dwie sprawy:
1. Pierwszym i głównym problem, dla którego założyłem wątek było przekazanie właściwej nazwy urządzenia jako parametru dla polecenia konfiguracyjnego "touchscreen_calibration".
touchscreen_calibration="IDEACOx IDC 6681" "Evdev Axis Calibration" 32 -121 32695 150 32403
Przypomnę tylko, że w moim przypadku w nazwie urządzenia (modułu ekranu dotykowego) jest znak kontrolny ASCII o kodzie 04 (EOT). W powyższym przykładzie jest on symulowany literą 'x'.
Powodowało to niemożliwość uruchomienia ekranu dotykowego (jak się domyślam) z powodu błędu porównania dwóch stringów - jeden był pobierany z pliku cfg, drugi z tablicy urządzeń.
Problem dotyczy urządzenia MSI AIO (18"/ATOM 1,6 GHz).

Rozwiązanie znalazłem po analizie parametrów polecenia "xinput".
Okazało się, że nie musi to być parametr przekazany jako string, ale (na szczęście dla mnie) może też nią być wartość numeryczna określająca numer urządzenia w systemie (id).
Numery urządzeń są wyświetlane po wykonaniu komendy:
xinput --list
W moim przypadku lista wygląda tak:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ IDEACO IDC 6681 id=9 [slave pointer (2)]
⎜ ↳ IDEACO IDC 6681 id=10 [slave pointer (2)]
⎜ ↳ PixArt USB Optical Mouse id=13 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Power Button id=7 [slave keyboard (3)]
↳ ᄅSymbol Technologies, Inc, 2002 Symbol Bar Code Scanner id=8 [slave keyboard (3)]
↳ USB Keyboard id=11 [slave keyboard (3)]
↳ USB Keyboard id=12 [slave keyboard (3)]
↳ BisonCam, NB Pro id=14 [slave keyboard (3)]
↳ MSI WMI hotkeys id=15 [slave keyboard (3)]
Spróbowałem w związku z powyższym zamienić zapis parametru "IDEACO IDC 6681" na liczbę 9 - okazało się, że o ile samo polecenie przyjmowało wartość numeryczną zamiast stringa - ekran nadal nie działał.

2. Jak widać powyżej, widnieją dwa urządzenia opisane jako "IDEACO IDC 6681" o id 9 oraz 10. Błędnie założyłem, że oba urządzenia "są tym samym".
Dopiero analiza pliku debugowania pozwoliła mi stwierdzić błąd.
Istotne informacje są widoczne w liniach:
[ 24.426] (II) XINPUT: Adding extended input device "IDEACO IDC 6681" (type: TABLET, id 9)
...
[ 24.481] (II) XINPUT: Adding extended input device "IDEACO IDC 6681" (type: TOUCHSCREEN, id 10)
Jak widać z powyższego zapisu, właściwym urządzeniem jest to o id 10. Wpisanie tej wartości jako parametru dla "touchscreen_calibration" rozwiązało problem.
Ostateczna linia określająca parametry wygląda tak:
touchscreen_calibration=10 "Evdev Axis Calibration" 32 -121 32695 150 32403
Na koniec:
- informacje potrzebne do określenia właściwego id ekranu dotykowego można uzyskać uruchamiając polecenie z sekcji DEBUGGING OPTIONS -> Kiosk Debug Mode -> Short log (ostatnia opcja kreatora z płyty instalacyjnej Porteus Kiosk),
- mój komputer uruchamia się poprzez PXE z opcją CENTRAL MANAGEMENT, co daje mi możliwość edycji pliku z konfiguracją dla konkretnego kiosku (a więc parametrów dla "touchscreen_calibration") w dowolnym momencie.
- w przypadku tworzenia ISO trzeba ręcznie zmienić/wpisać id urządzenia zamiast jego nazwy PRZED utworzeniem ISO - jest taki moment przed zapisem ISO, w którym można edytować polecenia, jednak nie jestem pewien, czy takie postępowanie przyniesie skutek - nie tworzę ISO od momentu uruchamiania kiosku przez PXE. Proszę o weryfikację tego punktu.

User avatar
fanthom
Site Admin
Site Admin
Posts: 4547
Joined: 28 Dec 2010, 02:42
Distribution: Porteus Kiosk
Location: Poland, currently - Cork, IE
Contact:

Re: [Solved] Kalibracja ekranu dotykowego

Post#6 by fanthom » 03 Dec 2015, 16:19

Super - dziekuje za podanie dokladnego opisu rozwiazania.
- w przypadku tworzenia ISO trzeba ręcznie zmienić/wpisać id urządzenia zamiast jego nazwy PRZED utworzeniem ISO - jest taki moment przed zapisem ISO, w którym można edytować polecenia, jednak nie jestem pewien, czy takie postępowanie przyniesie skutek - nie tworzę ISO od momentu uruchamiania kiosku przez PXE. Proszę o weryfikację tego punktu.
Zgadza sie. Wystarczy wyedytowac konfig recznie:
http://porteus-kiosk.org/screens/wizard/config.png
I mozna instalowac ISO.

Pozdrawiam.
Please add [Solved] to your thread title if the solution was found.

Post Reply