BeagleBoneBlackでタッチパネル

BBBにタッチパネルをつけて遊んでみる。購入したのは、これ。

 

 ラズパイ用だけど、HDMI入力で、タッチの制御はUSBで、マルチタッチ。

付属品もケーブル、タッチペン、ACアダプタと豊富。

 

BBBの方は、最新のdebianイメージを使用。

Debian 9.5 2018-10-07 4GB SD LXQT

chromiumを使いたかったからGUI版で。

 

1. USBでの認識

タッチパネルを接続する前は、/dev/input下に対応するファイルができていないが、接続するとデバイスファイルが作成される。

 

接続前

debian@beaglebone:~$ ls /dev/input/
event0

接続後

debian@beaglebone:~$ ls /dev/input/
by-id by-path event0 event1 

 

dmesgで確認すると、TSTP製?らしい。

debian@beaglebone:~$ dmesg | tail
[ 106.428436] remoteproc remoteproc2: 4a338000.pru is available
[ 106.428587] pru-rproc 4a338000.pru: PRU rproc node /ocp/pruss_soc_bus@4a326004/pruss@0/pru@38000 probed successfully
[ 107.998418] usb 1-1.4: new full-speed USB device number 3 using musb-hdrc
[ 108.108822] usb 1-1.4: New USB device found, idVendor=0416, idProduct=c168
[ 108.108846] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 108.108855] usb 1-1.4: Product: MTouch
[ 108.108863] usb 1-1.4: Manufacturer: TSTP
[ 108.137395] hid-generic 0003:0416:C168.0002: hiddev0,hidraw0: USB HID v1.11 Device [TSTP MTouch] on usb-musb-hdrc.1-1.4/input1
[ 109.555257] input: TSTP MTouch as /devices/platform/ocp/47400000.usb/47401c00.usb/musb-hdrc.1/usb1/1-1/1-1.4/1-1.4:1.0/0003:0416:C168.0001/input/input1
[ 109.556543] hid-multitouch 0003:0416:C168.0001: input,hidraw1: USB HID v1.11 Device [TSTP MTouch] on usb-musb-hdrc.1-1.4/input0
debian@beaglebone:~$

 

この状態で、evtestコマンドでイベントを取得すると、タッチに反応して、座標がパラパラ表示される。

debian@beaglebone:~$ sudo evtest /dev/input/event1
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x416 product 0xc168 version 0x111
Input device name: "TSTP MTouch"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 330 (BTN_TOUCH)
Event type 3 (EV_ABS)
Event code 0 (ABS_X)
Value 1492
Min 0
Max 2048
Resolution 6
Event code 1 (ABS_Y)
Value 786
Min 0
Max 1200
Resolution 5
Event code 47 (ABS_MT_SLOT)
Value 0
Min 0
Max 9
Event code 53 (ABS_MT_POSITION_X)
Value 0
Min 0
Max 2048
Resolution 6
Event code 54 (ABS_MT_POSITION_Y)
Value 0
Min 0
Max 1200
Resolution 5
Event code 57 (ABS_MT_TRACKING_ID)
Value 0
Min 0
Max 65535
Properties:
Property type 1 (INPUT_PROP_DIRECT)
Testing ... (interrupt to exit)

 Event: time 1559055796.779302, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1
Event: time 1559055796.779302, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 898
Event: time 1559055796.779302, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 616
Event: time 1559055796.779302, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1559055796.779302, type 3 (EV_ABS), code 0 (ABS_X), value 898
Event: time 1559055796.779302, type 3 (EV_ABS), code 1 (ABS_Y), value 616
Event: time 1559055796.779302, -------------- SYN_REPORT ------------
Event: time 1559055796.834278, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 1
Event: time 1559055796.834278, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 2
Event: time 1559055796.834278, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 1508
Event: time 1559055796.834278, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 390
Event: time 1559055796.834278, -------------- SYN_REPORT ------------
Event: time 1559055796.949172, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 0
Event: time 1559055796.949172, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1559055796.949172, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 1
Event: time 1559055796.949172, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1559055796.949172, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1559055796.949172, -------------- SYN_REPORT ------------
Event: time 1559055797.439261, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 0
Event: time 1559055797.439261, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 3
Event: time 1559055797.439261, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 986
Event: time 1559055797.439261, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 682
Event: time 1559055797.439261, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1559055797.439261, type 3 (EV_ABS), code 0 (ABS_X), value 986
Event: time 1559055797.439261, type 3 (EV_ABS), code 1 (ABS_Y), value 682
Event: time 1559055797.439261, -------------- SYN_REPORT ------------
Event: time 1559055797.549158, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1559055797.549158, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1559055797.549158, -------------- SYN_REPORT ------------

 

ドライバについては、特にインストールしていないが、標準のもので、hid_multitouchがモジュールとしてロードされており、これが使用されている。

 

2. Chromiumの起動

接続した時点で、Xが表示されているので、メニューからChromiumを起動する。

Chromium上では、マルチタッチが有効になっており、ピンチインでズームインができる。

また、javascriptでtouchstartイベントを取得もできる。

ここ(touch, click, pointerの実装 - タッチイベントとマウスイベント | CodeGrid)のサンプルページにアクセスしてみると、イベントの詳細がわかる。

 

touchstart

touchstart

 

Chromiumがタッチで動作可能な理由は、すでに, libinputというライブラリがインストール済みのため。この設定は、/usr/share/X11/xorg.conf.dの中に40-libinput.confがあり、ここに記述される。現状は以下の通り。

debian@beaglebone:/usr/share/X11/xorg.conf.d$ cat 40-libinput.conf
# Match on all types of devices but tablet devices and joysticks
Section "InputClass"
Identifier "libinput pointer catchall"
MatchIsPointer "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection

Section "InputClass"
Identifier "libinput keyboard catchall"
MatchIsKeyboard "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection

Section "InputClass"
Identifier "libinput touchpad catchall"
MatchIsTouchpad "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection

Section "InputClass"
Identifier "libinput touchscreen catchall"
MatchIsTouchscreen "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection

Section "InputClass"
Identifier "libinput tablet catchall"
MatchIsTablet "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
EndSection

 

 それにしても、Xの描画が遅い。。。