# How to get a Handler to a Device  .... elo touchscreen

## dwernle

if i do a 

cat /proc/bus/input/devices

i get my inputdevices, the problem is that i have no idea how to use this one

```

I: Bus=0003 Vendor=04e7 Product=0007 Version=0102

N: Name="Elo TouchSystems, Inc. Elo TouchSystems IntelliTouch 2500U"

P: Phys=usb-0000:00:1d.1-1/input0

H: Handlers=

..:

```

does anyone know how to get this touchscreen running

----------

## sharmay

Hi,

I have same touch screen but I am also not able to make it work. Did you had any luck ?

Thanks

----------

## dwernle

No, elo doesn't think they need working drivers for 2.6 and for 2.4 they are  :Sad:  ..... so if you have more than enough money you can give them the box and they will try to compile a driver for you, but their prices are a horror -> i will never buy a elo for a customer of us as touchscreens from other vendors work without greater problems.

----------

## Maedhros

Moved from Installing Gentoo.

----------

## dol-sen

I don't know if you've seen, but there are more touchscreen drivers in the kernel now.   As of 2.6.12 there is some new elo drivers in the kernel.  I have not tried them yet, but it is suppose to handle all the elo protocols.

----------

## garion911

I have no idea how old your touch screen is, but I had a fairly old ELO USB touchscreen (no clue on the model..).. I have since gotten rid of it (the LCD on it died a beautiful plasma effect death..)

What I recall from getting it to work was that I had to compile in the event interface and USB event support... Then there was a rather obscure X driver you had to compile that worked off the /dev/input/event or something like that...

I --may-- be able to dig up the code for that driver from some old HD's I have laying around if needbe.. But maybe this is enough clues to get ya going..

Please keep in mind that its been over two years since I last setup that LCD, so my memory may be fuzzy...

----------

## garion911

Some more trips down memory lane tell me that yours is the same model as mine was.. 

Some more notes: You do not need a specific kernel driver.. I got mine working with the basic stuff in 2.6 (fairly sure I was using 2.6 at the time, but definitly pre-UDEV)..

THere's a elographics_drv.o file in your xorg setup.... You need to make a device in your xorg.conf (I think I was using XFree at the time, not sure) similar to this:

```

  Section Inputdevice

    Identifier touchscreen1

    Driver elographics

    Option Device /dev/ttyS0

    Option AlwaysCore

    Option screenno 0

    Option MinimumXPosition 600

    Option MaximumXPosition 3600

    Option MinimumYPosition 600

    Option MaximumYPosition 3600

    Option UntouchDelay 3

    Option ReportDelay 1

  EndSection

```

Only using the event stuff I said in my previous message..

----------

## dol-sen

No, it is not the same as yours.  The 2 I got have the former standard serial interface.  I have been able to get it sort-of working using the xorg/xfree86 driver.  The only problem is the map size between the touchscreen and the display screen.  I have to treat the touchscreen like it is a small touch mosepad and restrict touches to about 1/5th the screen size in the lower left corner.

That was after callibrating with the dos utilities.  I have not tried the linux callibrating utility I found in one of the linux_public.zip files I found (not sure where I found that one).

----------

## evilben

Did you ever get the serial version to work?

Thanks

Ben

----------

## dol-sen

I dever had time to work on it some more, Sorry  :Sad:  I still have them, but things got very busy with our small business and my full time day job.

I got your private messages.  Some thing to consider about the older touchscreens are that they are not very bright and have as a result more of a green color due to the touchscreen.  I even took one of them apart to check and clean all surfaces, but that was not the problem.  LCD monitors from the past few years have much brighter displays.  I took the touchscreen and placed it in front of my 17 in. LCD monitor and it was much better than the old one.  I'll work on it some more when I get some time.  It may be a month or two though.  BTW I got both for $50, including 1 monitor power supply, no power supplies for the touchscreens.  I made an adapter cable to use the computer's power supply.

----------

## evilben

This is a CRT I'm looking at: http://cgi.ebay.com/Elo-17-Touchscreen-CRT-ET1725C-7SWD-0_W0QQitemZ8746936241QQcategoryZ3695QQssPageNameZWDVWQQrdZ1QQcmdZViewItem

so the quality shouldn't be as much of an issue. I think I'm going to go ahead and try it out--do you remember reading this?:

http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/XFree86-Touch-Screen-HOWTO.html

I read on the elo sight that they're supposed to be precalibrated...yeah right...but anyway, there's always eBay if it doesn't work out.

Thanks!

Ben

----------

## tbart

Hi there!

I've got some old elo serial touchschreen, too. it's an Accutouch P/N 856093-000 (discontinued, replacement: E77225-000), i can't see the controller itself and don't want to open the TFT atm; is there a way to read out information about the controller via the interface?)

EDIT: Seems to be an AccuTouch 2210 controller, as there do not seem to be other serial controllers for Accutouch panels. Could it be that there is a non-elo controller with an elo touchpanel?

when dumping with od -h -w10, the "typical" 5455 is NOT always at the beginning, seems like i do not have a 10byte protocol or some bytes get lost? i read somewhere that also other protocols exist with less bytes per packet

It sorta works in X with the elographics driver without anything special in the kernel. but

1) the pointer's movement is only somehow related to my finger's movement (very weird movements; it's not calibrated yet, but moving down not always moves the cursor somewhere down)

2) it stops to work after some minutes, no serial data gets received anymore (even raw dumping from /dev/ttyS1 does not give my anything)

i have to unplug the monitor (which includes the touchscreen+controller) to get data again...

seems like a faulty controller, what do you think?

or is it the wrong driver?

How shall the in-kernel driver work? should it provide an event interface? where can one find documentation? did anyone try elo's uniform serial driver? or UPDD?

http://www.touch-base.com/main.asp?item=20

(btw, this one seems one interesting bit of SW to unify these different drivers/architectures/etc)

regarding elo not having drivers for 2.6:

http://www.elotouch.com/support/dnld.asp#linux

they at least say it's for 2.6, too and provide instructions for compiling it for 2.6. It's even open source! (both the Unified Serial Driver and the public driver)

can anyone please point me into the right direction?

tia!

th

----------

## tbart

ok solved!

works now. this should even answer the initial question...

take elos own, this works flawlessly.

http://www.elotouch.com/files/unrestricted_drivers/Unified_Serial_v2.zip

just follow the instructions.

plz test this procedure so others know it works (or not!)

1) build driver your own; uncomment the KER define in main.c

2) 

```
cp makefile-2.6 Makefile
```

3) I had to modify the Makefile; include directory was missing; this is how it had to look on my machine

```

obj-m := elok_s.o

elok_s-objs := main.o

KDIR := /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

CFLAGS := $(CFLAGS) -I/usr/include

default:

        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

```

4) 

```
make
```

5) 

```
cp elok_s.ko /lib/modules/`uname -r`/kernel/drivers/input/touchscreen/
```

6) 

```
chmod u+x eloser && cp eloser /usr/bin
```

is /usr/bin a good place for the loser (sorry i always read e-loser, sounds somewhat hip ;->; should be elo-ser i guess)

7) put this rather ugly initscript into your /etc/init.d as elo and

```
chmod u+x /etc/init.d/elo
```

it.

There are still missing the right eend things i don't really understand..

```

#!/sbin/runscript

# Copyright 1999-2006 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

depend() {

        # I guess so... coldplug should provide boot-time attached USB-serial converters, hotplug those attached later

        # is this right?

        need localmount coldplug hotplug

}

start() {

        ebegin "Loading elo module and creating /dev nodes"

        # Avoid being interrupted by child or keyboard

        if [ ! -f /lib/modules/`uname -r`/kernel/drivers/input/touchscreen/elok_s.ko ]

        then

                eerror "Please compile and copy over the kernel module first"

                return 1

        fi

        if [ ! -f /usr/bin/eloser ]

        then

                eerror "Please chmod u+x and copy over eloser first"

                return 1

        fi

        trap "echo" SIGINT SIGSEGV SIGQUIT SIGTERM

        set +e

        # this the loadelo script; i put it right in here... this all seems rather ugly to me..

        # however always generating the dev files might be good idea for udev people who

        # do not save a dev tarball

        # what the heck does it do?

        module="elok_s"

        mode="664"

        elorspfifo="elo/rsp_fifo"

        elocmdfifo="elo/cmd_fifo"

        elodata="input/elo_ser"

        rm -f /dev/${elodata}

        rm -f /dev/${elocmdfifo}

        rm -f /dev/${elorspfifo}

        test -d /dev/elo || mkdir /dev/elo

        /sbin/modprobe $module

        mkfifo /dev/$elorspfifo

        mkfifo /dev/$elocmdfifo

        major=`grep $elodata /proc/devices | awk "{print \\$1}"`

        if [ $major ]

        then

                mknod /dev/$elodata c $major 0

                chmod $mode /dev/${elodata}

                chmod $mode /dev/${elocmdfifo}

                chmod $mode /dev/${eloconfig}

        fi

        # how do you put configuration somewhere into /etc and source it here?

        /usr/bin/eloser ttyUSB0

        eend $?

}

stop() {

        ebegin "Unloading elo module"

        # I can't think of anything else that's sensible here...

        # removing all the /dev entries seems rather senseless as the start function

        # has to do it anyway... right?

        /sbin/modprobe -r elok_s

        eend $?

}

restart() {

        svc_stop

        svc_start

}

```

8)

```
rc-update add elo default
```

9) edit your /etc/X11/xorg.conf

```

Section "ServerLayout"

        Identifier     "X.org Configured"

        Screen      0  "Screen0" 0 0

        InputDevice    "Mouse0" "CorePointer"

        InputDevice    "Keyboard0" "CoreKeyboard"

        InputDevice    "elo1"

EndSection

Section "InputDevice"

        Identifier "elo1"

        Driver "elo"

        Option "Device" "/dev/input/elo_ser"

        Option "AlwaysCore"

EndSection

```

10) that should do the trick!

now i'd need some specialists...

1) why the heck does the elographics driver of (modular or not) xorg-x11 not work?

and how could we improve it so that we do not need a startup script and all this interesting /dev fifos a.s.o?

i guess eloser only somehow attaches the /dev/input thing to the pipes, could the open source driver included in xorg do the same thing? why can this driver work for me and elographics not? my hardware must be ok, and there is just this one serial controller. did ne1 ever have success with elographics?

2) please correct/improve my initscript

3) could ne1 do an ebuild?!

if you have got questions, ask. i should be able to answer them.

could dwernle possibly rename the topic to something more general, i.e. the grand elo support thread?

btw i think the usb people could possible reuse parts of my script if elo did the usb drivers somewhat similar... did not look at it.

i would be glad if we could get this running cleanly as touchscreen support seems really bad atm.

any info about how the driver shipped with the kernel sources should work? is this the same as the thing you compile?

we need more info, compiled at one place, so please help out if you can.

thank you all!

PS: we could do a wiki thing when this is ready and add useful applications once this runs (osd keyboard for login will be the next thing i need)

th

----------

## oracleguy

I was able to get my serial based elo touchscreen to mostly work without too much trouble with the 2.6.16 kernel.

I compiled the elo touchscreen serial support into the kernel. Then when I installed Xorg 7.0 I added the elographics flag into the INPUT_DEVICES in the make.conf

Then when I configured X, I set it up similar to garion911 in the xorg.conf file. And the touchscreen worked right away. The problem I am having though is getting the thing calibrated. I had it working on an older Gentoo system but that one died. The calibration program that is included with the elo linux drivers seems to have been written for XFree86 and I think it was only after many tries and the grace of god I got it to give me the calibration information. I can get the calibration program to run but it doesn't respond when I press the target icons. The monitors in that I can touch it and it will move and click the mouse but the calibration is off.

----------

## tbart

this is interesting...

1) you do not need the in-kernel support if you use the X11 module (at least i think so... could you verify this?)

you need something called inputattach to get an event interface for the in-kernel driver or module. at least you do not get a device or even a dmesg message when loading the module...

2) i don't understand why the X11 module does not work for me when apparently the hardware is ok (b/c it works fine with elo's drivers ... btw: the calibration tool elova packaged with their driver needs to interface with their driver and their eloser program so you won't be lucky using it for calibrating the X11 driver... elo says you can get the calibration data you need to enter into your xorg.conf by booting a DOS disk and using some calibration tool; see http://www.elotouch.com/Support/linux.asp)

X11's driver somewhat works for some time but the movement of my finger and that of the cursor do not really correlate.. after 1 minute or so it stops working... this is weird.

elo's driver however isn't that good either because it causes segmentation faults, memory leaks, kernel oopses and powerdown issues (originating in the problems to unload the modules and stop the service..)

possibly my initscript is faulty, i don't know...

regarding the keeping of calibration data with elo's driver, I also found something:

http://www.elotouch.com/support/webtech/linux_elo_cal.asp

suggestions are welcome!

th

----------

## ozzy

https://forums.gentoo.org/viewtopic-t-319224-highlight-elo+xorg+conf.html

Hope this helps. Contact me on ozzy@etf.bg.ac.yu if U have any questions  :Smile: 

----------

## Trevoke

tbart, a correction on step 1:

a) uncomment #define KER in main.c

b) comment #include <ctype.h> in elocontrol.h

c) line 53 and 55 need to be changed from:

MODULE_PARM(debug, "i"); to 

module_param(debug, int, 0);

Similar change for line 55.

That's all for now, will let you know how I get on with the rest.

----------

## ovoskeuiks

You can calibrate the MinX/Y MaxX/Y using the debug from the elographics driver

Set the debug level to 5 using:

Option "debuglevel" "5"

Restart X

Open a terminal and get a 'live' feed of the Xorg log using

tail -f /var/log/Xorg.0.log

Touch a corner of your touch screen and you should see something like following:

Entering ReadInput

Entering xf86EloGetPacket with checksum == 170 and buffer_p == 0

buffer_p is 0, Trying to read 10 bytes from link

Read 10 bytes

 0x55-->0xFF  0x54-->0x53  0x84-->0xD7  0x35-->0xC  0x0-->0xC  0xB1-->0xBD  0xA-->0xC7  0xFF-->0xC6  0x0-->0xC6 Expecting checksum 198, got 198

EloConvert Before Fix: Screen(0) - x(-1222544213), y(0)

EloConvert: Screen(0) - v0(53), v1(2737)

EloConvert: Screen(0) - x(-311), y(683)

EloConvert During Fix: Screen(0) - x(-311), y(683)

EloConvert After Fix: Screen(0) - x(-311), y(683)

EloConvert: Screen(0) - v0(53), v1(2737)

EloConvert: Screen(0) - x(-311), y(683)

TouchScreen: x(53), y(2737), Release

The v0 and v1 are the raw X and Y values from the touchscreen, simply find the minimum and maximum X and Y values and put them into your xorg.conf file here is my InputDevice section for reference:

Section "InputDevice"

	Identifier	"touchscreen"

	Driver		"elographics"

	Option		"Device"	"/dev/ttyUSB0"

	Option		"BaudRate"	"9600"

	Option		"StopBits"	"1"

	Option		"DataBits"	"8"

	Option		"Parity"	"None"

	Option		"Vmin"	"10"

	Option		"Vtime"	"1"

	Option		"FlowControl"	"None"

	Option		"DeviceName"	"touchscreen"

	Option		"MinX"	"53"

	Option		"MinY"	"52"

	Option		"MaxX"	"4882"

	Option		"MaxY"	"2737"

	Option		"ReportingMode"	"Raw"

	Option		"SendCoreEvents"	"On"

	Option		"debuglevel"	"5"

	Option		"ReportDelay" "1"

	Option		"UntouchDelay" "3"

EndSection

----------

## tbart

Oh my, I really come back to this thread after these years!

To sum it up, the kernel way of doing stuff is this. No need for proprietary drivers or extra xorg input drivers. Yay!

1) enable the following kernel options

```
CONFIG_SERIO_SERPORT (or you'll get line discipline errors with inputattach)

CONFIG_TOUCHSCREEN_ELO
```

(and other stuff you need for the serial port, probably some USB-serial adapter drivers)

2) 

```
emerge games-util/joystick x11-apps/xinput_calibrator
```

3) 

```
inputattach -elo /dev/ttyUSB0 --daemon
```

 (adapt to your serial port and Elo protocol)

4) 

```
xinput_calibrator  &> /etc/X11/xorg.conf.d/99-calibration.conf && vi /etc/X11/xorg.conf.d/99-calibration.conf
```

5) Put inputattach into some udev rule if you have a USB adapter to trigger it or create a simple initscript

Done!

----------

