How to get touchscreen working

I have an 'All In One' Panel-PC computer in Stainless IP66 enclosure with 14" touchscreen. The touchscreen is not supported in /sys/dev/usb/usbdevs.
Not the Vendor or PID's
Dialogue Inc. PenMount-USB

So I added the VID and PID and recompiling kernel. With E3827 and two cores it will be a while.

My question is:> Do I need to add these anywhere else? Like wmt driver or similar?

I tried loading webcamd for additional support and it did nothing. So I figured I would try adding PID to usbdevs.

Code:
# webcamd
Available device(s):
webcamd [-d ugen0.1] -N Intel-EHCI-root-HUB -S unknown -M 0
webcamd [-d ugen0.2] -N vendor-0x8087-product-0x07e6 -S unknown -M 0
webcamd [-d ugen0.3] -N vendor-0x05e3-product-0x0610 -S unknown -M 0
webcamd [-d ugen0.4] -N DIALOGUE-INC-PenMount-USB -S unknown -M 0
webcamd [-d ugen0.5] -N vendor-0x099a-USB-Keyboard -S unknown -M 0
Show webcamd usage:
webcamd -h

# webcamd -d ugen0.4
webcamd 93974 - - Attached to ugen0.4[0]
webcamd 93974 - - webcamd: Cannot find USB device
Code:
# usbconfig -d ugen0.4 dump_device_desc
ugen0.4: <DIALOGUE INC PenMount USB> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (500mA)

  bLength = 0x0012
  bDescriptorType = 0x0001
  bcdUSB = 0x0110
  bDeviceClass = 0x0000  <Probed by interface class>
  bDeviceSubClass = 0x0000
  bDeviceProtocol = 0x0000
  bMaxPacketSize0 = 0x0040
  idVendor = 0x14e1
  idProduct = 0x6000
  bcdDevice = 0xa4b4
  iManufacturer = 0x0001  <DIALOGUE INC>
  iProduct = 0x0002  <PenMount USB>
  iSerialNumber = 0x0000  <no string>
  bNumConfigurations = 0x0001
 
After compiling nothing changed with libinput list-devices. Same with xinput list.

I need to investigate other USB source files starting with HID. I don't know how this should attach.
I was hoping wmt or uep touch drivers for USB would magically attach.

I also have 3 eGalax touchscreen devices that do not have PID's in FreeBSD. I don't know if adding them would help.
 
Code:
# usbconfig -d ugen0.4 dump_device_desc
ugen0.4: <DIALOGUE INC PenMount USB> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (500mA)

  bLength = 0x0012
  bDescriptorType = 0x0001
  bcdUSB = 0x0110
  bDeviceClass = 0x0000  <Probed by interface class>
  bDeviceSubClass = 0x0000
  bDeviceProtocol = 0x0000
  bMaxPacketSize0 = 0x0040
  idVendor = 0x14e1
  idProduct = 0x6000
  bcdDevice = 0xa4b4
  iManufacturer = 0x0001  <DIALOGUE INC>
  iProduct = 0x0002  <PenMount USB>
  iSerialNumber = 0x0000  <no string>
  bNumConfigurations = 0x0001
This looks like touch screen controller I tested some time ago. At the moment I had already some experience with webcamd powered touchscreens, but this one did not work that way. Somehow I found dev/hid/hms.c could be relevant for this one and when asked, I got one hint - put following into /boot/load.conf file:
hw.usb.usbhid.enable=1
usbhid_load="YES"

I think it worked well with this settings, but I can't verify it anymore, this is just from my archive.
 
Thanks that did give me something to work with:
Code:
hms0: <DIALOGUE INC PenMount USB Tablet> on hidbus0
hms0: 2 buttons and [XY] coordinates ID=0

And now I have an additional event in /dev/input:

libinput list-devices
[snip]
Code:
Device:           DIALOGUE INC PenMount USB Tablet
Kernel:           /dev/input/event4
Group:            5
Seat:             seat0, default
Capabilities:     pointer
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: n/a
Calibration:      identity matrix
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

I have never heard of the hms driver.

 
Yes indeed it 'worked' without a conf file but poorly.

I have found prototypes in /usr/local/share/libinput/ and /usr/local/share/X11/xorg.conf.d/40-libinput.conf that are helpful.

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

Is the wildcard astrick supposed to be there? I put in actual event number.

The ArchWiki is really the best documentation. Tapping setting is needed.

/usr/local/etc/X11/xorg.conf.d/40-touch.conf
Code:
Section "InputClass"
        Identifier "libinput touchscreen catchall"
        MatchIsTouchscreen "on"
        MatchDevicePath "/dev/input/event4"
        Driver "libinput"
        Option "Tapping" "on"
        Option "NaturalScrolling" "true"
        Option "ScrollMethod" "edge"
EndSection
 
What does it mean - poorly? I do not remember any problems after adding those two lines into /boot/loader.conf file...
 
You can see some movement onscreen of the cursor but it does not act right.

I may have to do some calibrating. Some reason I am not sure the right driver is attached.
I noticed talk of evdev for the driver.
 
I had to disable the ums(4) driver for this to work properly. Now I no longer need webcamd for touchscreen.

/boot/loader.conf
Code:
hw.usb.usbhid.enable=1
usbhid_load="YES"
hint.ums.0.disabled="1"
 
Last edited:
Even eGalax devices seem to work when ums is disabled.

Code:
hmt0: <eGalax Inc. eGalaxTouch EXC7200-76E4v1.000 TouchScreen> on hidbus1
hmt0: Multitouch touchscreen with 0 external buttons
hmt0: 2 contacts with [RC] properties. Report range [0:0] - [32767:32767]
hms0: <eGalax Inc. eGalaxTouch EXC7200-76E4v1.000 Tablet> on hidbus1
hms0: 2 buttons and [XY] coordinates ID=1
hconf0: <eGalax Inc. eGalaxTouch EXC7200-76E4v1.000 Configuration> on hidbus1
 
Even eGalax devices seem to work when ums is disabled.

Code:
hmt0: <eGalax Inc. eGalaxTouch EXC7200-76E4v1.000 TouchScreen> on hidbus1
hmt0: Multitouch touchscreen with 0 external buttons
hmt0: 2 contacts with [RC] properties. Report range [0:0] - [32767:32767]
hms0: <eGalax Inc. eGalaxTouch EXC7200-76E4v1.000 Tablet> on hidbus1
hms0: 2 buttons and [XY] coordinates ID=1
hconf0: <eGalax Inc. eGalaxTouch EXC7200-76E4v1.000 Configuration> on hidbus1
Interesting... I'd like to verify it on another eGalax device, but I need first get one to test. Doing tests on production devices would be unwise :)
Just out of curiosity, could you attach here output of 'usbconfig -v -d <x.y>' for you eGalax device?
 
I have 5 different ones. Here is the one I got working last night without webcamd.
Aaeon APC-1104

usbconfig -d ugen0.4 dump_device_desc
Code:
ugen0.4: <eGalax Inc. eGalaxTouch EXC7200-76E4v1.000> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)

  bLength = 0x0012
  bDescriptorType = 0x0001
  bcdUSB = 0x0110
  bDeviceClass = 0x0000  <Probed by interface class>
  bDeviceSubClass = 0x0000
  bDeviceProtocol = 0x0000
  bMaxPacketSize0 = 0x0040
  idVendor = 0x0eef
  idProduct = 0x7200
  bcdDevice = 0x1000
  iManufacturer = 0x0001  <eGalax Inc.>
  iProduct = 0x0002  <eGalaxTouch EXC7200-76E4v1.000          >
  iSerialNumber = 0x0000  <no string>
  bNumConfigurations = 0x0001

No libinput config file used. Just worked.
 
Like I mentioned I have at least 5 touchscreens with eGalax.

What I wonder about is /sys/dev/usb/usbdevs only lists two PID's for eGalax and four of mine were not listed.
Including the Aaeon above with PID=0x7200.

So apparently listing in usbdevs listing is not necessary. I do not understand it. Maybe devmatch plays a part.
 
I have 5 different ones. Here is the one I got working last night without webcamd.
Aaeon APC-1104
Some time ago I tested APPC1950T, and it used hmt/hms as well, if I still remember it correctly... but it was just a quick test, and was not used in real setup.
 
Works on IEI AFL3-07 that needed webcamd.

Code:
hmt0: <eGalax Inc. eGalaxTouch EXC3132-2123-06.00.00 TouchScreen> on hidbus0
hmt0: Multitouch touchscreen with 0 external buttons
hmt0: 2 contacts with [] properties. Report range [0:0] - [4095:4095]
hconf0: <eGalax Inc. eGalaxTouch EXC3132-2123-06.00.00 Configuration> on hidbus0
hms0: <eGalax Inc. eGalaxTouch EXC3132-2123-06.00.00 Tablet> on hidbus0
hms0: 2 buttons and [XY] coordinates ID=1
 
One more that did not need special settings.
This one is Advantech GSC-7151W. Webpage unknown. Maybe OEM Cannon model. 15" Widescreen with Skylake socketed. G3900TE

Code:
uhid0 on uhub0
uhid0: <Atmel Atmel maXTouch Digitizer, class 0/0, rev 2.00/20.32, addr 3> on usbus0
wmt0 on uhub0
wmt0: <Atmel Atmel maXTouch Digitizer, class 0/0, rev 2.00/20.32, addr 3> on usbus0
wmt0: Multitouch touchscreen with 0 external buttons
wmt0: 10 contacts and []. Report range [0:0] - [4095:4095]

The same Atmel chipset found in the Swedish JLT6012 Rugged PanelPC that worked fine for me OOB. The first touchscreen that did on FreeBSD.

Nice user friendly touchscreen AIO with power button and usb socket on front. Not a rugged PC but plastic. Easy to access inside and upgrade wifi card.
My only beef is power. It needs minimum 16VDC and specs call for 24VDC. I like 12VDC. It is pretty standard these days.
 
Now back to the the Dialog Penmount driver is not working right from my original post and driver fix. Now using hms(4) driver.
Thanks dino1 as now at the last minute E38xx Atoms working better on 13-5-RELLEASE. Soon to be EOL'ed.

PPC-7000 Brand Unknown. Stainless Chassis IP66 with screw in connectors for usb and network. Dialog Penmount driver.
The problem seems to be when I touch screen lower left the cursor is upper right quadrant. That is for example. It is same all over. Reversed.
Lower Right touch the cursor icon is upper left position. Equal from center.

I could try the calibrator provided but I bet a 40-libinput.conf file setting could "flip" this problem around....
 
I thought I had found the proper settings for this problem but they do not help.

/usr/local/etc/X11/xorg.conf.d/40-touch.conf
Code:
Section "InputClass"
        Identifier "libinput touchscreen catchall"
        Driver "libinput"
        MatchDevicePath "/dev/input/event*"
        MatchIsTouchscreen "on"
        Option "Tapping" "on"
        Option "NaturalScrolling" "true"
        Option "InvertX" "true"
        Option "InvertY" "true"
EndSection
InvertX and InvertY is what I need to do.

I am also studying my next move. The Matrix.
libinput debug-tablet
Code:
Device 'DIALOGUE INC PenMount USB Tablet':
    Device Enabled (174):    1
    Coordinate Transformation Matrix (175):    1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Natural Scrolling Enabled (289):    0
    libinput Natural Scrolling Enabled Default (290):    0
    libinput Rotation Angle (300):    0.000000
    libinput Rotation Angle Default (301):    0.000000
    libinput Calibration Matrix (336):    1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Calibration Matrix Default (337):    1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Left Handed Enabled (313):    0
    libinput Left Handed Enabled Default (314):    0
    libinput Send Events Modes Available (315):    1, 0
    libinput Send Events Mode Enabled (316):    0, 0
    libinput Send Events Mode Enabled Default (317):    0, 0
    Device Node (318):    "/dev/input/event4"
    Device Product ID (319):    5345, 24576
    libinput Drag Lock Buttons (320):    <no items>
    libinput Horizontal Scroll Enabled (321):    1
    libinput High Resolution Wheel Scroll Enabled (324):    1
 
Well it took some work to turn the xinput_configurator patch into a port but I got it. For some reason the source patches ended up in the main directory.
So I created a ports /files directory and moved the patches and extra-patches there where they belong.. Then it built right but I had problems finding manual during make install.
I ended up just running it from the /work/src directory. It worked.

Thanks dino1 I have another working touchscreen.

./xinput_configurator spit out the proper Matrix after pressing 4 crosshairs and gave me a configuration file setting.

40-libinput.conf
Code:
Section "InputClass"
        Identifier "DIALOGUE INC PenMount USB Tablet"
        MatchProduct "DIALOGUE INC PenMount USB Tablet"
        Option "CalibrationMatrix" "-1.229524 -0.001362 1.111373 -0.023195 -1.259041 1.147755 0.000000 0.000000 1.000000"
EndSection

I would really like to get this into the ports tree and bump it to the newest version 8.0. Very useful utility.
 
I have another Advantech this one is ultra-rugged and explosion proof. OEM- PPG Made for paint shops. 15" Touchscreen AIO with N2930 Baytrail.

It has eGalax and I have it working nice with 13.5-RELEASE now.

Code:
hmt0: <eGalax Inc. eGalaxTouch EXC7200-7514v1.026 TouchScreen> on hidbus1
hmt0: Multitouch touchscreen with 0 external buttons
hmt0: 4 contacts with [RC] properties. Report range [0:0] - [32767:32767]
hms0: <eGalax Inc. eGalaxTouch EXC7200-7514v1.026 Tablet> on hidbus1
hms0: 2 buttons and [XY] coordinates ID=1
hconf0: <eGalax Inc. eGalaxTouch EXC7200-7514v1.026 Configuration> on hidbus1

This should make up all my touchscreen AIO/PPC with Baytrail. All have worked by disabling ums driver and enabling USB.HID.

Thanks Again for leading me to the answer. dino1 and especially Thanks to Mister Wulf who did the work here.
I will leave this thread open as I have touch screen monitors to test with eGalax.

usbconfig -d ugen0.3 dump_device_desc
Code:
ugen0.3: <eGalax Inc. eGalaxTouch EXC7200-7514v1.026> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)

  bLength = 0x0012
  bDescriptorType = 0x0001
  bcdUSB = 0x0110
  bDeviceClass = 0x0000  <Probed by interface class>
  bDeviceSubClass = 0x0000
  bDeviceProtocol = 0x0000
  bMaxPacketSize0 = 0x0040
  idVendor = 0x0eef
  idProduct = 0x7200
  bcdDevice = 0x1026
  iManufacturer = 0x0001  <eGalax Inc.>
  iProduct = 0x0002  <eGalaxTouch EXC7200-7514v1.026          >
  iSerialNumber = 0x0000  <no string>
  bNumConfigurations = 0x0001
 
One more working PanelPC working without webcamd needed. A 18.5" AIO with 4650U and 2.5" drive tray.
Code:
smbios.system.maker="Phoenix Contact"
smbios.system.product="Designline PPC18.5M 7000"

This one has eGalax and Phoenix Contact Button Bar support.
Code:
hmt0: <eGalax Inc. eGalaxTouch EXC2210-1320-56.00.00 TouchScreen> on hidbus1
hmt0: Multitouch touchscreen with 0 external buttons
hmt0: 10 contacts with [] properties. Report range [0:0] - [4095:4095]
hconf0: <eGalax Inc. eGalaxTouch EXC2210-1320-56.00.00 Configuration> on hidbus1
hms0: <Phoenix Contact, Inc. TouchButton App Mouse> on hidbus3
hms0: 5 buttons and [XYW] coordinates ID=1
hsctrl0: <Phoenix Contact, Inc. TouchButton App System Control> on hidbus3
hcons0: <Phoenix Contact, Inc. TouchButton App Consumer Control> on hidbus3

usbconfig -d ugen0.3 dump_device_desc
Code:
ugen0.3: <eGalaxTouch EXC2210-1320-56.00.00 D-WAV Scientific Co., Ltd> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)

  bLength = 0x0012
  bDescriptorType = 0x0001
  bcdUSB = 0x0200
  bDeviceClass = 0x0000  <Probed by interface class>
  bDeviceSubClass = 0x0000
  bDeviceProtocol = 0x0000
  bMaxPacketSize0 = 0x0040
  idVendor = 0x0eef
  idProduct = 0xb100
  bcdDevice = 0x2002
  iManufacturer = 0x0001  <eGalax Inc.>
  iProduct = 0x0002  <eGalaxTouch EXC2210-1320-56.00.00>
  iSerialNumber = 0x0000  <no string>
  bNumConfigurations = 0x0001
 
Back
Top