/* finds listener application sends it the experiment name and our display resolution returns 0 if OK, -1 if error */ int check_for_listener(void) { INT16 i, n; char message[100]; ELINKNODE node; /* this will hold application name and address */ eyelink_poll_remotes(); /* poll network for any EyeLink applications */ pump_delay(500); /* give applications time to respond */ n = eyelink_poll_responses(); /* how many responses? */ for(i=1;i<=n;i++) /* responses 1 to n are from other applications */ { if(eyelink_get_node(i, &node) < 0) return -1; /*/ error: no such data */ if(!_stricmp(node.name, "comm_listener")) { /* Found COMM_LISTENER: now tell it we're ready */ memcpy(listener_address, node.addr, sizeof(ELINKADDR)); eyelink_node_send(listener_address, "NAME comm_simple", 40); /* wait for "OK" reply */ if(get_node_response(message, 1000) <= 0) return -1; if(_stricmp(message, "OK")) return -1; /* wrong response? */ return 0; /* all communication checks out. */ } } return -1; /* no listener node found */ }
bool Eyelink::initialize(){ boost::mutex::scoped_lock lock(EyelinkDriverLock); if (Eyelink_Initialized) { merror(M_IODEVICE_MESSAGE_DOMAIN,"Eyelink was previously initialized! Trying again, but this is dangerous!!"); } Eyelink_Initialized = false; // Initializes the link //mprintf(M_IODEVICE_MESSAGE_DOMAIN, "Trying to find Eyelink System at %s",tracker_ip); if (set_eyelink_address( &tracker_ip[0] ) ) merror(M_IODEVICE_MESSAGE_DOMAIN,"Failed to set Tracker to address %s", tracker_ip.c_str()); if(open_eyelink_connection(0)) merror(M_IODEVICE_MESSAGE_DOMAIN,"Failed to connect to Tracker at %s", tracker_ip.c_str()); else { ELINKNODE node; // generate data file name time_t now = time(NULL); struct tm* t = gmtime(&now); sprintf(data_file_name, "%02d%06d.edf",(t->tm_year-100),t->tm_yday*1440 + t->tm_hour*60 + t->tm_min); //YYMMMMMM : YY=Years since 2k, MMMMMM=Minutes in current year if ( open_data_file( data_file_name ) ) { mwarning(M_IODEVICE_MESSAGE_DOMAIN,"Eyelink datafile setting failed (%s)",data_file_name); } else { mprintf(M_IODEVICE_MESSAGE_DOMAIN,"Eyelink logs to local file %s",data_file_name); } // Tell the tracker what data to include in samples if (OK_RESULT != eyecmd_printf("link_sample_data = LEFT,RIGHT,GAZE,HREF,PUPIL,AREA")) { mwarning(M_IODEVICE_MESSAGE_DOMAIN, "Eyelink did not respond to link_sample_data command; sample data may be incomplete"); } // tell the tracker who we are eyelink_set_name((char*)("MWorks_over_Socket")); // verify the name if( eyelink_get_node(0,&node) != OK_RESULT ) merror(M_IODEVICE_MESSAGE_DOMAIN,"Error, EyeLink doesn't respond"); else eyemsg_printf((char*)("%s connected"), node.name); // Enable link data reception eyelink_reset_data(1); } // Eyelink should now be in "TCP-Link Open" mode if(eyelink_is_connected()) { tracker_version = eyelink_get_tracker_version(version_info); mprintf(M_IODEVICE_MESSAGE_DOMAIN, "Eyelink %d System Version %s connected via Socket",tracker_version,version_info); Eyelink_Initialized = true; stopped = true; } else { merror(M_IODEVICE_MESSAGE_DOMAIN,"Error, Eyelink Connection could not be established"); } return Eyelink_Initialized; }