00001 /*!@file Psycho/EyeTrackerEyeLink.H Abstraction for an EyeLink eye tracker */ 00002 00003 // //////////////////////////////////////////////////////////////////// // 00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2000-2005 // 00005 // by the University of Southern California (USC) and the iLab at USC. // 00006 // See http://iLab.usc.edu for information about this project. // 00007 // //////////////////////////////////////////////////////////////////// // 00008 // Major portions of the iLab Neuromorphic Vision Toolkit are protected // 00009 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency // 00010 // in Visual Environments, and Applications'' by Christof Koch and // 00011 // Laurent Itti, California Institute of Technology, 2001 (patent // 00012 // pending; application number 09/912,225 filed July 23, 2001; see // 00013 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status). // 00014 // //////////////////////////////////////////////////////////////////// // 00015 // This file is part of the iLab Neuromorphic Vision C++ Toolkit. // 00016 // // 00017 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can // 00018 // redistribute it and/or modify it under the terms of the GNU General // 00019 // Public License as published by the Free Software Foundation; either // 00020 // version 2 of the License, or (at your option) any later version. // 00021 // // 00022 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope // 00023 // that it will be useful, but WITHOUT ANY WARRANTY; without even the // 00024 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // 00025 // PURPOSE. See the GNU General Public License for more details. // 00026 // // 00027 // You should have received a copy of the GNU General Public License // 00028 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write // 00029 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, // 00030 // Boston, MA 02111-1307 USA. // 00031 // //////////////////////////////////////////////////////////////////// // 00032 // 00033 // Primary maintainer for this file: Laurent Itti <itti@usc.edu> 00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Psycho/EyeTrackerEyeLink.H $ 00035 // $Id: EyeTrackerEyeLink.H 14176 2010-10-28 04:28:19Z ilink $ 00036 // 00037 00038 #ifndef PSYCHO_EYETRACKEREYELINK_H_DEFINED 00039 #define PSYCHO_EYETRACKEREYELINK_H_DEFINED 00040 00041 #include "Psycho/EyeTracker.H" 00042 #include "Component/ModelParam.H" 00043 00044 //! Interface to an EyeLink-II eye-tracker 00045 /*! This requires the EyeLink development kit for Linux, available 00046 only from SR-Research to select registered users. NOTE: If you 00047 encounter an error message like "Cannot open connection, check 00048 TCP/IP settings", this may be due to the way the eyelink library 00049 figures out your host's IP address, which is through resolving your 00050 hostname (nasty!). Since typically you will have two ethernet cards 00051 in your box, one connected to the EyeLink tracker (100.1.1.1) via a 00052 crossover cable, you need your hostname to be associated with your 00053 IP on that network (e.g., your IP will typically be 100.1.1.2). 00054 Check your /etc/nsswich.conf and /etc/hosts to make sure this is the 00055 case. */ 00056 class EyeTrackerEyeLink : public EyeTracker 00057 { 00058 public: 00059 //! Constructor 00060 EyeTrackerEyeLink(OptionManager& mgr, 00061 const std::string& descrName = "Eye Tracker EyeLink", 00062 const std::string& tagName = "EyeTrackerEyeLink"); 00063 //! Destructor 00064 virtual ~EyeTrackerEyeLink(); 00065 00066 //! Calibrate the tracker, full calibration 00067 /*! Here we do a 9-point calibration. */ 00068 virtual void calibrate(nub::soft_ref<PsychoDisplay> d); 00069 00070 virtual void calibrate2(nub::soft_ref<PsychoDisplay> d); 00071 00072 virtual void setBackgroundColor(nub::soft_ref<PsychoDisplay> d); 00073 00074 //! Calibrate the tracker, quick re-calibration 00075 /*! Since there is no quick calibration for ISCAN, this is like a 00076 full calibration. */ 00077 virtual void recalibrate(nub::soft_ref<PsychoDisplay> d, int repeats); 00078 00079 //! Open SDL from eyelink library 00080 virtual void openSDL(); 00081 00082 //! Close SDL from eyelink library 00083 virtual void closeSDL(); 00084 00085 //! Is the subject fixating? 00086 /*! TODO: implement this functionality*/ 00087 virtual bool isFixating(); 00088 00089 //! Is the subject in a saccade? 00090 /*! TODO: implement this functionality*/ 00091 virtual bool isSaccade(); 00092 00093 //! Get current eye position 00094 virtual Point2D<int> getEyePos() const; 00095 00096 //! Get current fixation position (eliminates blink, saccades, etc.) 00097 virtual Point2D<int> getFixationPos() const; 00098 00099 //! mannual drift correction 00100 virtual void manualDriftCorrection(Point2D<double> eyepos, Point2D<double> targetpos); 00101 00102 //!Get the calibration set 00103 virtual CalibrationTransform::Data getCalibrationSet(nub::soft_ref<PsychoDisplay> d) const; 00104 00105 protected: 00106 OModelParam<std::string> itsEDFfname; 00107 OModelParam<Dims> itsDims; //!< SDL screen resolution 00108 00109 //! Start the tracker 00110 virtual void startTracking(); 00111 00112 //! Stop the tracker 00113 virtual void stopTracking(); 00114 00115 virtual void start1(); //!< get started 00116 virtual void stop1(); //!< get stopped 00117 }; 00118 00119 00120 // ###################################################################### 00121 /* So things look consistent in everyone's emacs... */ 00122 /* Local Variables: */ 00123 /* mode: c++ */ 00124 /* indent-tabs-mode: nil */ 00125 /* End: */ 00126 00127 #endif // PSYCHO_EYETRACKEREYELINK_H_DEFINED