This is example 10. This example demonstrates the following:

  1. Starting a recording

  2. Stopping a recording

This example is based on example 6. With additional calls for starting and stopping a recording.

Source code

Source file: example10.c

processInput()

The following single character commands are implemented here:
q: quit
o: open/close device
u: show/hide control window
x: toggle show gui on setup mode
X: toggle show gui on data mode
i: enter idle mode
s: enter setup mode
z: enter data mode
r: start/stop recording
m: toggle show mode-change events

When you press r then eyevec_start_recording() or 'eyevec_stop_recording()` will be called depending on the current eye-tracker mode.

static int processInput(EyeVec* eyevec, ClientData* clientdata, int ch)
{
    .
    .
    .
    else if (ch == 'r') {
        EyeVecTrackerMode trackermode = clientdata->trackermode; (1)
        if (trackermode == EYEVEC_TRACKER_MODE_RECORDING) { (1)
            err = eyevec_stop_recording(eyevec); (2)
            printError("eyevec_stop_recording()", err);
        }
        else  if (trackermode == EYEVEC_TRACKER_MODE_DATA) {
            err = eyevec_start_recording(eyevec); (3)
            printError("eyevec_start_recording()", err);
        }
    }
    .
    .
    .
}
1 Get current eye-tracker mode and check if currently recording.
2 Stop ongoing recording.
3 Start recording.

Running

After a succesful build run the program:

  1. Press x to call eyevec_set_show_gui_on_setup_mode(). This sets the show-gui-on-setup-mode flag to make the user-interface show on setup mode enter. If however you prefer to keep the user-interface visible at all times while testing press u to call eyevec_show_control_window(). If you don’t want to call eyevec_show_control_window() explicity but do want the user-interface to show when in data mode, press X to call eyevec_set_show_gui_on_data_mode(). This sets the show-gui-on-data-mode flag to make the user-interface show on data mode enter.

  2. Press o to call eyevec_open(). Eye-tracker should go from off mode to idle mode.

  3. Press s to call eyevec_enter_setup_mode(). Eye-tracker should go from idle mode to setup mode and the user-interface should appear. Now perform a baseline measurement and calibration in the user-interface.

  4. In the user-interface press Esc or click Proceed make the eye-tracker go from setup mode to data mode (calling eyevec_enter_data_mode() would also work). The user-interface should disappear (unless you pressed u or X in step 1).

  5. Press r to call eyevec_start_recording(). Eye-tracker should go from data mode to recording mode.

  6. Press r to call eyevec_stop_recording(). Eye-tracker should go from recording mode to data mode.

  7. Press q to quit.

Output might look like this (empty lines added for clarity):

eyevec_create_thread(): OK
eyevec_initialize(): OK
Type q to quit, ? for help.

[x]
eyevec_set_show_gui_on_setup_mode(true): OK

[o]
onModeChange:
    eventtime:                  1750599913360258
    oldmode:                    TRACKER_MODE_OFF
    newmode:                    TRACKER_MODE_IDLE
eyevec_open(): OK

[s]
onModeChange:
    eventtime:                  1750599915107289
    oldmode:                    TRACKER_MODE_IDLE
    newmode:                    TRACKER_MODE_SETUP
eyevec_enter_setup_mode(): OK

onModeChange:
    eventtime:                  1750599926899312
    oldmode:                    TRACKER_MODE_SETUP_BASELINE
    newmode:                    TRACKER_MODE_SETUP

onModeChange:
    eventtime:                  1750599951457075
    oldmode:                    TRACKER_MODE_SETUP_CALIBRATION
    newmode:                    TRACKER_MODE_SETUP

onModeChange:
    eventtime:                  1750599958745368
    oldmode:                    TRACKER_MODE_SETUP
    newmode:                    TRACKER_MODE_DATA

[r]
onModeChange:
    eventtime:                  1750599962420359
    oldmode:                    TRACKER_MODE_DATA
    newmode:                    TRACKER_MODE_RECORDING
eyevec_start_recording(): OK

[r]
eyevec_stop_recording(): OK
onModeChange:
    eventtime:                  1750599969300468
    oldmode:                    TRACKER_MODE_RECORDING
    newmode:                    TRACKER_MODE_DATA

[q]
eyevec_cleanup(): OK
eyevec_destroy_thread(): OK

Since we did not open an eye-tracking data output file and also are not processing online eye-tracking events or eye samples, the recorded data will simply be discarded. How to handle online eye samples and fixation events etc. will be shown in separate example pages.