示例#1
0
/*
	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;
}