Basic API interface
And here I start the long-awaited topic on the basic interface / set-of-functions that should be available for developers once a device is installed in a system.
Before we propose our own or comment already proposed (by Adrian) solutions, lets observe several existing APIs. If someone thinks I violate any rights or expose commercial secrets by publishing this document, let me know.
It's me again keep posting my usual warnings ;)
These API where very often not designed with a special application in mind. Much of the interface of LC, EyeLink, SMI is there because the eye tracker was able to support these functions or it required some functions to operate.
By defining a standard I would not search for the least common denominator. Look from the application side and decide what data the manufacturer has to support to make the user happy. It then the job of the hardware manufacturer to meet your standards.
Let me pretend to be a hardcore researcher. I am doing gaze contingency experiments, I am doing reading studies, I am implementing customized stimuli for cognitive, neurologic, behavioral experiments. What do I want from the perfect API?
I am not talking about specific functions and API calls at this point. I am talking about funcionallity.
- infrastructure functionality (open,close,version, device etc)
- subject calibration and feedback about calibration quality
- online feedback about tracking quality, ideally a graphical feedback
- real time raw data ( binouclar gaze, pupil diameter, head speed etc. )
Now I am a market researcher or usablity tester. I am implemeting and analyzing scan pathes, heat maps, I am comparing the area of interest sequence of several subjects. What functionallity do I want from the perfect API?
- infrastructure functionality (open,close,version, device etc)
- subject calibration and feedback about calibration quality
- online feedback about tracking quality, ideally a graphical feedback
- online eye events like fixations, saccades, blinks
Last but not least I am a programmer of a gaze interaction software. The functionallity that would make me happy is.
(Remember back the times when you have written your eye games, without knowing much about the eye tracking technology, what kind of API would have make your life easy and enjoyable?)
- infrastructure functionality (open,close,version, device etc)
- subject calibration and feedback about calibration quality
- online feedback about tracking quality, ideally a graphical feedback
- online GUI element activation, attention shift on the user interface, eye gestures GUI element selection
The goal is now to make the API that versatile so that the gaze interaction guy doesn't have to worry about researchers stuff and visa versa. There is functionallity that all users want to have in common. Design the API as if it would be ideal and let the manufacturers do their homework and provide all the functionallity to fit into the API.
The question now is. Is the user list complete? Do you have other application fields in mind? Is the functionallity per user group complete?
Then we can start thinking about how the functions could look like and how the seperation in functionallity could be implemented to the API easy to use for everyone.
Lars Hildebrandt
VP Development

About ETU-Driver.
ETU-Driver uses so called "API conversion" modules, each knows how to communication with a particular device and each exposes same set of function. There are 10 main functions:
- create/destroy (load and unload resources, such as SDK libraries),
- connect/disconnect (make the device ready for calibration)
- calibrate/stopCalibration/correctDrift (calibration and re-calibration routines)
- start/stop
- showOptions (show the dialog to adjust the device connection, calibration and tracking options)
There are additional 5 functions also:
- getName (return the name of the module, which reflect the type of device it serves for)
- get/setDeviceState (retrieves some basic info about the device)
- passValue (obsolete)
- setOnSynkEvent (not implemented)
For client applications ETU-Driver exposes some of these functions (calibration-, tracking- and options- related), and lots of other auxiliary function, of which the most important areaddExtraEvent(logging custom events) andcaptureImage(captures the screen shot and save into JPG file). ETU-Driver notifies client about recording start/stop, finished calibration, new data, and some other events. Last data is always available via propertiesLastSample,LastFixation,LastBlink. The easiest way to change the input device and other options is to callshowRecordingOptionsmethod and make necessary adjustments, but it possible to alter them in code via ETU-Driver properties (Index,Recordingoptions,RecordingSetupData). Device-related options are stored in a specific file nameged by ETU-Driver, but other options are stored in a file that is set viaOptionsFileproperty.Active,Calibrated,Readyproperty indicate the state of a device.
The was the short overview of the ETU-Driver interface, more detailed info (although not quite much) is available in its manual (there is also API-Converter SDK manual )
Sure, the interface is a bit clumsy... Functions and properties of various types are mixed altogether, making it hard to use for developers. But it was the first try, and in those times I was very raw with COM technology.