LINUX.ORG.RU

Калибровка тачскрина [MSSL1680]

 ,


0

1

Здравствуйте. Есть недопланшет IOTA 2120, с установленным archlinux. Для включения поддержки тачскрина собран пакет mssl1680-firmware. Тач определяется и работает (реагирует на нажатия), вот только откалибровать его не получается. Тачскрин ведет себя некорректно, на нажатия реагирует совершенно в противоположной стороне от прикосновения пальца.

Прочитав арч-вики (раздел Touch area) получилось: xinput set-prop "silead_ts" --type=float "Coordinate Transformation Matrix" 1 0 0 0 1 0 0 0 1, но ничего не изменилось, на нажатия, реакция так же неправильная.

xinput_calibrator выдает значения для записи в xorg.conf.d, но они так же не работают (возможно из-за внесенных мной изменений в xinput)

Пробовал калибровку через ts_calibrate, но что делать с /etc/pointercal я к сожалению не понял. Интересный факт, что после сборки пакета xf86-input-tslib, lightdm не хочет запускаться, по этому данный пакет был удален из системы.

Немного информации:

xrandr:

Screen 0: minimum 8 x 8, current 1920 x 1200, maximum 32767 x 32767
DSI1 connected primary 1920x1200+0+0 right X and Y axis (normal left inverted right x axis y axis) 135mm x 216mm
   1200x1920     60.00*+
   1024x768      60.00  
   600x960       60.00  
   800x600       60.32    56.25  
   640x480       59.94  
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

xinput --list:

⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ HAILUCK CO.,LTD USB KEYBOARD            	id=10	[slave  pointer  (2)]
⎜   ↳ silead_ts                               	id=11	[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)]
    ↳ Video Bus                               	id=7	[slave  keyboard (3)]
    ↳ Power Button                            	id=8	[slave  keyboard (3)]
    ↳ HAILUCK CO.,LTD USB KEYBOARD            	id=9	[slave  keyboard (3)]
    ↳ Intel HID events                        	id=12	[slave  keyboard (3)]
    ↳ gpio-keys                               	id=13	[slave  keyboard (3)]
    ↳ HAILUCK CO.,LTD USB KEYBOARD            	id=14	[slave  keyboard (3)]

xinput --list-props 11

Device 'silead_ts':
	Device Enabled (140):	1
	Coordinate Transformation Matrix (142):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Calibration Matrix (295):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Calibration Matrix Default (296):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Send Events Modes Available (260):	1, 0
	libinput Send Events Mode Enabled (261):	0, 0
	libinput Send Events Mode Enabled Default (262):	0, 0
	Device Node (263):	"/dev/input/event9"
	Device Product ID (264):	0, 0

dmesg | grep silead_ts

[    2.843691] silead_ts i2c-MSSL1680:00: Silead chip ID: 0x80360000
[    4.320975] input: silead_ts as /devices/pci0000:00/808622C1:05/i2c-5/i2c-MSSL1680:00/input/input9

lsmod | grep silead

silead                 16384  0

С самого утра пытаюсь исправить эту проблему, идеи уже закончились, прошу помощи у вас...

P.S Это мой первый опыт работы с тачскрином на linux, по этому не судите строго. Спасибо.

Тачскрин ведет себя некорректно, на нажатия реагирует совершенно в противоположной стороне от прикосновения пальца.
xinput set-prop «silead_ts» --type=float «Coordinate Transformation Matrix» 1 0 0 0 1 0 0 0 1, но ничего не изменилось, на нажатия, реакция так же неправильная.

Попробуй другие варианты поворотов — https://gist.github.com/mildmojo/48e9025070a2ba40795c

arson ★★★★★
()
Ответ на: комментарий от arson

Пробовал, результат тот же...

P.S хотя -1 0 1 0 -1 1 0 0 1, лучше всех себя показывает (в альбомной ориентации), но пользоваться все равно невозможно.

P.P.S кстати наткнулся на интересный скрипт, вот только нерабочий :( Возможно существуют аналоги, которые гугл скрыл от меня:?

flappyright
() автор топика

Что-то у меня все же получилось.

Если переименовать /usr/share/X11/xorg.conf.d/10-udev.conf в /usr/share/X11/xorg.conf.d/45-udev.conf, то после перезагрузки получаем это:

xinput --list-props silead_ts

Device 'silead_ts':
	Device Enabled (140):	1
	Coordinate Transformation Matrix (142):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	Device Accel Profile (268):	0
	Device Accel Constant Deceleration (269):	1.000000
	Device Accel Adaptive Deceleration (270):	1.000000
	Device Accel Velocity Scaling (271):	10.000000
	Device Product ID (260):	0, 0
	Device Node (261):	"/dev/input/event9"
	Evdev Axis Inversion (272):	0, 0
	Evdev Axis Calibration (273):	1244, 163, 807, 1236
	Evdev Axes Swap (274):	1
	Axis Labels (275):	"Abs MT Position X" (293), "Abs MT Position Y" (294), "None" (0), "None" (0)
	Button Labels (276):	"Button Unknown" (263), "Button Unknown" (263), "Button Unknown" (263), "Button Wheel Up" (146), "Button Wheel Down" (147)
	Evdev Scrolling Distance (277):	0, 0, 0
	Evdev Middle Button Emulation (278):	0
	Evdev Middle Button Timeout (279):	50
	Evdev Middle Button Button (280):	2
	Evdev Third Button Emulation (281):	0
	Evdev Third Button Emulation Timeout (282):	1000
	Evdev Third Button Emulation Button (283):	3
	Evdev Third Button Emulation Threshold (284):	20
	Evdev Wheel Emulation (285):	0
	Evdev Wheel Emulation Axes (286):	0, 0, 4, 5
	Evdev Wheel Emulation Inertia (287):	10
	Evdev Wheel Emulation Timeout (288):	200
	Evdev Wheel Emulation Button (289):	4
	Evdev Drag Lock Buttons (290):	0

После чего можно с помощью xinput_calibrator, запустить калибровку через xinput_calibrator --output-type xinput (до этого была ошибка - ERROR: XorgPrint Calibrator does not support the supplied)

Получить после калибровки:

xinput set-int-prop "silead_ts" "Evdev Axis Calibration" 32 1244 164 805 1238
применить, и радоваться тому, что при повторном запуске xinput_calibrator курсор реагирует как положено, курсор появляется точно под касанием пальцем. Но работает это только в xinput_calibrator, тоесть DE как и прежде ведет себя неадекватно.

P.S калибровку провожу в нормальной ориентации (xrandr -o normal), с дефолтным

Coordinate Transformation Matrix (142):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000

Что я делаю не так?

flappyright
() автор топика

Забыл добавить, что в системе присутствует файл конфигурации /usr/share/X11/xorg.conf.d/99-calibration.conf:

Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "silead_ts"
        Option "SwapAxes" "on"
        Option  "Calibration" "1247 165 805 1238"
EndSection
который позволяет радоваться точным касаниям в xinput_calibrator даже после перезагрузки.

Значения в Calibration разные, только потому, что пока писал пост, сделал «перекалибровку».

flappyright
() автор топика
Ответ на: комментарий от RussianNeuroMancer

Спасибо! Все почти получилось, твоя прошивка с пдашки, сделала чудо. Вот только как размеры то узнать? fwtool -w $1 -h $2 ? Сейчас -w 1140 -h 1665, касание точное, но верхняя половина экрана не работает. Пробовал «методом тыка» подобрать значения, ничего не получилось.

xrandr:

Screen 0: minimum 8 x 8, current 1920 x 1200, maximum 32767 x 32767
DSI1 connected primary 1920x1200+0+0 left (normal left inverted right x axis y axis) 135mm x 216mm
   1200x1920     60.00*+
   1024x768      60.00  
   1024x576      59.90    59.82  
   600x960       60.00  
   960x540       59.63    59.82  
   800x600       60.32    56.25  
   864x486       59.92    59.57  
   640x480       59.94  
   720x405       59.51    58.99  
   640x360       59.84    59.32 

И нормально что тач ведет себя корректно, только при fwtool -f xflip,yflip,swap?

flappyright
() автор топика
Ответ на: комментарий от flappyright

твоя прошивка с пдашки, сделала чудо

В этом месте у вас ошибка. Прошивка с других устройств - бесполезны. Гарантированно. Сначала выковыриваете прошивку из виндового драйвера Silead конкретно под ваш тачскрин. Потом с 4.8 подбираете размеры как по ссылке. (Модуль ядра можно выгружать / загружать указывая параметры.)

Вот только как размеры то узнать?

Только подбирать, никак иначе. Старайтесь подобрать настолько точно, насколько возможно, потому что патч с размерами вам придётся отправлять в ядро.

И нормально что тач ведет себя корректно, только при fwtool -f xflip,yflip,swap?

Крайне вероятно что причина в том, что используется не родная прошивка тачскрина, но помимо этого бывает и так, что оси инвертированы.

RussianNeuroMancer ★★★★★
()
Последнее исправление: RussianNeuroMancer (всего исправлений: 1)
Ответ на: комментарий от RussianNeuroMancer

В этом месте у вас ошибка. Прошивка с других устройств - бесполезны. Гарантированно. Сначала выковыриваете прошивку из виндового драйвера Silead конкретно под ваш тачскрин.

Я понял, сейчас сборку скачаю, буду пробовать. Спасибо.

Потом с 4.8 подбираете размеры как по ссылке.

4.8 это ядро, верно? Мне обязательно понижать версию, или могу остаться на 4.15.2? Сейчас для работы тачскрина, хватает генерации прошивки через fwtool и модуля gslx680-acpi.

Только подбирать, никак иначе. Старайтесь подобрать настолько точно, насколько возможно, потому что патч с размерами вам придётся отправлять в ядро.

Патч нужен только для поддержки данного тачскрина в твоем ядре? В рабочей системе можно обойтись без него? Ответ «можно обойтись без него» не означает, что при удачных раскладах, я не напишу патч и не поделюсь параметрами с сообществом)

P.S Отдельное спасибо за звук на es8316!

flappyright
() автор топика
Ответ на: комментарий от flappyright

Дело не в понижении версии, а в наличии опций модуля ядра позволяющих подбирать параметры таскрина при загрузке модуля ядра silead. В выложенной мною там (ссылка в шапке) сборке 4.8 (конеретный номер сборки в сообщении) эти опции добавлены, но если хотите - вы можете добавить их в 4.15.2 (патчи есть в теме). gslx680-acpi заброшен разработчиком и больше не будет развиваться, поэтому разбираться имеет смысл только с новым драйвером silead, который сейчас входит в ядро. Патч модуля ядра silead под модель планшета нужен чтобы модуль ядра определил модель планшета при загрузке и применил корректные параметры (пример патча на конкретный планшет есть в каталоге со сборкой 4.15). Без написания патча подобранные параметры не применятся драйвером при загрузке.

RussianNeuroMancer ★★★★★
()
Ответ на: комментарий от RussianNeuroMancer

Благодарю за столь исчерпывающий ответ!

Я уж позволю себе подытожить всю полученную информацию, что бы убедится до конца ли я все понял правильно.

  • Первым делом выкидываем gslx680-acpi и возвращаемся обратно к mssl1680-firmware, что бы использовать актуальный драйвер.
  • Затем применяем патчи, что бы иметь возможность корректировать параметры тачскрина при загрузке модуля ядра.
  • Дальше, вытягиваем виндовый драйвер и конвертируем его с помощью fwtool с указанием ширины, высоты и инверсии. Полученный результат кладем в /lib/firmware/silead/mssl1680.fw, так как именно эту прошивку будет подгружать модуль silead.
  • Если на данном этапе, работа тачскрина удовлетворительная, требуеться написать патч, что бы при загрузке системы подобранные параметры применились драйвером.

Все верно?

flappyright
() автор топика
Ответ на: комментарий от flappyright

Первым делом выкидываем gslx680-acpi и возвращаемся обратно к mssl1680-firmware, что бы использовать актуальный драйвер.

Достаточно убрать gslx680-acpi, в dmesg должен появится драйвер silead. В mssl1680-firmware для вашего устройства прошивки нет, а значит он бесполезен.

Затем применяем патчи, что бы иметь возможность корректировать параметры тачскрина при загрузке модуля ядра.

Да, так. В теме на 4pda, если понадобится, есть патчи для инвертирования осей.

Дальше, вытягиваем виндовый драйвер и конвертируем его с помощью fwtool с указанием ширины, высоты и инверсии.

Нет, только вытягиваем. fwtool только для gslx680-acpi, а его мы убираем, поэтому необходимость в fwtool полностью отпадает.

Полученный результат кладем в /lib/firmware/silead/mssl1680.fw, так как именно эту прошивку будет подгружать модуль silead.

Это верно.

Если на данном этапе, работа тачскрина удовлетворительная, требуеться написать патч, что бы при загрузке системы подобранные параметры применились драйвером.

Это тоже верно. Помимо этого файл прошивки нужно будет залить в репозиторий прошивок, чтобы другим пользователям не пришлось ковыряться с HEX-редактором.

После внимательного прочтения текста на этой странице многие вопросы отпадут.

RussianNeuroMancer ★★★★★
()
3 января 2019 г.

Здравствуйте. Такой вопросик, немного не по теме, у вас не осталось случайно резервной копии виндовс, установленной на нем изначально? А то снес по быстрому и теперь имею кучу проблем с драйверами.

designml
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.