API Type
One of the first tasks in eye-tracking API specification is the specification of API type. Various technologies could be applied for API implementation, thus we need to find the best suitable. Lets first observe what API types were created by some manufacturers.
As I know COM is only Microsoft technology that could be used in Microsoft Windows. Similar platform independent client-server technology is CORBA. Also to the same group often is assigned Java Remote Method Invocation (Java RMI) technology. But seems that nowadays they are obsolete. In textbooks about Microsoft .NET often is written that .NET remoting has advantages against COM. And exist MONO project, which is proposing .NET methods implementations for other platforms.
I want accent diversity of eye trackers hardware.
If we consider other input devices (for example mouse), here really is hardware component of the same class and a driver, which allows for applications communicate with input device. If PnP device is attached to computer bus, it translates device identifier. By the identifier OS defines to which class device belongs and driver for device is launched (or is asked to insert disk with driver if it is absent).
In case of videooculographical eye tracking systems the attached to computer bus device is camera. By its identifier a camera driver is launched. An eye tracker is a system of hardware and software components. So we must have in mind that real driver for hardware is camera driver, which is used by image processing software. Image processing software using calibration data calculates point of gaze coordinates and transfer them to applications or to some intermediate software component as COM server.
Perhaps already exist a few systems where gaze data is produced by hardware. For example it can be EOG systems. I believe that in nearest future will be created hardware VOG systems ( in principle image analysis software will run on smaller scale computer without user interfaces).
Other case, when gaze data are produced in other computer and transfered by LAN to the computer, where applications run.
An architecture of API must take into account all this diversity of eye trackers, because data way to ETUDE Manager is different.
Think of the Tobii T60/T120 systems, their hardware has already a computer without user interface integrated into the LCD-Display, so what is plugged into the end user system is only the ethernet connection. The data is accessed via low and/or high level apis reading the tcp stream.
So with such a system there is no option to be automatically registered via PnP, because the only connection is via TCP.
But I think it would be a "nice to have" to be eyetracking hardware treated like any other default group of devices (monitors, mice). So that the manufacturer itself could implement a PnP installation as basic eyetracker (as Oleg said e.g in \ETUDE\Devices\ and additionally as a mouse).
Adrian
oleg wrote:
So far, I vote for COM as well. To minimize efforts transferring the API into Linux/MAC, I would suggest first implementing low-level library using plain C/C++, so that it would be completely cross-platform solution.
oleg wrote:
- “Driver + COM library” should be developed by hardware manufacturer and should be ALWAYS shipped with the device. It implements all basic ETUDE interfaces.
I am not getting all the points. If the lowest interface to the manufacturers modules is the Driver + COM library. How will that be platform independent? If you standardize the COM interface no hardware manufacturer will provide another non-windows interface. Because there are virtually no customers for non-windows eye tracking applications. If you force manufacturers to provide a platform independent common interface and implementation they will probably join the initiative very intractable.
You should think about if you want platform independency and whats the price (in time and complexity) for this would be. Again define your main users groups and applications, do some research what they expect from an API and prioritize features.
Lars Hildebrandt
VP development
www.alea-technologies.de
Hi Oleg,
good summary. It's a start of a discussion.
Could you please explain a "many-to-many connections" scenario? I am lacking fantasy to find use case where N eye tracking devices are operated at the same time on one computer. I can imaging use cases with one eye tracker and N clients, but the many to many connection seems cumbersome.
Lars Hildebrandt
VP Development
www.alea-technologies.de
Hi Oleg,
this example is odd. Of course it's probably a useful study. There will be plenty of more example of experiments where you have additional stimulus and subject data. It would be always useful for that specific case if an API would do the job of an analysis software that is in charge of data synchronization. You have a very specific problem. The synchronization of two eye trackers. I would not try to solve that problem with a general purpose API. The next researcher will ask, I want to use a additional brain interface in my experiment, can I get synchronized data from that API as well? You can pack much more stuff in the API. If you ask 10 more researches you will get 10 more different wishes what the API should do.
But by doing this you increase complexity and no Visual Basic developer of an OnScreenKeyboard will ever consider to look at the API and implement eye tracker support for his application.
My suggestion is, make the API as easy as possible. Fortunately modern eye trackers became that easy in the usage that application developers don't have to be engineers anymore to operate an eye tracker. Make the API as easy to program, so that enthusiastic hobby programmers don't struggle with the next barrier. Remember, those commercial AAC application developers are often just a one men show. They only have two days time to add a feature like direct eye tracker support to the application.
Lars Hildebrandt
VP Development
www.alea-technologies.de



The general architecture of API is shown below.
The blocks “High-level API (COM)” and “Dispatcher” are optional. A client application either calls functions from low-level DLL, or use methods of the COM objects created from high-level API (COM library). Developers that connect to a device via low-level libraries only know that API DLL location and version is somewhat they should care about and it causes various problems when deploying their solutions to their customers. High-level API is usually free of this sort of problems.
The low-level API is the necessary component of all eye-tracking SDKs. The most popular type of connection between low-level API and hardware driver (or dispatcher) is the TCP/IP connection (via WSOCK32/WS2_32). I am aware of only one low-level API (out of 5) that uses direct file reading/writing (via “COM” port), rather than this method.
At least one API uses dispatcher that allows multiple connections from multiple clients. It is implemented as Windows service. I am not sure that other APIs, without explicit dispatcher, allow multiple connections. Having multiple connections to the save device is the necessity, as there could be more than one application (process) that uses eye-tracking data at the time.
P.S. If someone knows about other types of eye-tracking APIs, or I not correct in my descriptions, make us aware :)