Home Forums Eye Tracking Devices Tobii Eye Tracker 5 on Linux Reply To: Tobii Eye Tracker 5 on Linux

#21810
Adam Brunnmeier
Participant

Talon is closed source but works well. The talon API looks like this:


class TobiiEC(USBDevice, Tracker):
    vendor: str
    devs: Dict[ffi.CData, TobiiEC]
    topic_to_enum: Any
    enum_to_topic: Any
    geom: Geom
    streams: Set[int]
    stream_types: Dict[int, Dict]
    name: Any
    model: Any
    bus: Any
    addr: Any
    handle: Any
    serial: str
    connecting: bool
    def __init__(self, dev: ffi.CData, name: str, vid: int, pid: int, bus: int, addr: int) -> None: ...
    def topics(self) -> Sequence[str]: ...
    version: Any
    xconfig: Any
    def connect(self) -> None: ...
    def check_error(self) -> None: ...
    def register_first(self, topic: str) -> None: ...
    def unregister_last(self, topic: str) -> None: ...
    def cmd(self, cmd: int, *args: Any) -> Any: ...
    def enumerate_streams(self) -> None: ...
    def label_stream(self, cmd: int, b: Dict) -> Dict: ...
    def display_setup(self, width: float, height: float, offx: float) -> None: ...
    def display_setup_diag(self, diag: float, aspect: float, offx: float) -> None: ...
    def on_stream(self, typ: int, cmd: int, ebuf: ffi.CData, ts: float) -> None: ...
    def close(self, shutdown: bool = ...) -> None: ...
    def detached(self) -> None: ...

class EyeFrame:
    name: str
    validity: int
    detected: int
    pupil: float
    gaze: Point2d
    gaze3d: Point3d
    rel: Point3d
    pos: Point3d
    def __init__(self, b: Dict, eye: str) -> None: ...
    def __bool__(self): ...

class GazeFrame:
    left: EyeFrame
    right: EyeFrame
    tracker: TobiiEC
    gaze: Optional[Point2d]
    ts: float
    num: int
    def __init__(self, b: Dict, num: int): ...
    def __iter__(self) -> Iterator[EyeFrame]: ...
    def __bool__(self): ...

class PresenceFrame:
    tracker: TobiiEC
    present: bool
    ts: float
    num: int
    def __init__(self, b: Dict, num: int) -> None: ...
    def __bool__(self): ...

class TobiiHeadModel:
    accel: PointFilter
    history: list[GazeFrame]
    last_ts: float
    def __init__(self) -> None: ...
    def __call__(self, frame: GazeFrame) -> Optional[Point6d]: ...

class TobiiECWrapper(TobiiEC):
    present: bool
    frame: int
    head_model: Any
    def __init__(self, *args, **kwargs) -> None: ...
    def topics(self) -> Sequence[str]: ...
    def dispatch(self, topic: str, *args): ...

There is an implementation of controlling the mouse with another closed source talon plugin: https://github.com/knausj85/knausj_talon/blob/master/code/mouse.py