justingardner / mgl

A suite of mex/m files for displaying psychophysics stimuli
http://justingardner.net/mgl
Other
18 stars 22 forks source link

"flushMode = 1" leads to crash in Eyelink EDF transfer #98

Open hyunwoogu opened 5 months ago

hyunwoogu commented 5 months ago

System information

MGL(Master branch), macOS 14.2, MATLAB R2023b, Eyelink1000


Code to reproduce the issue

function myscreen = minimal
myscreen = initScreen();
task{1}.seglen = [1];
[task{1} myscreen] = initTask(task{1},myscreen,@stimStartSegmentCallback,@stimDrawStimulusCallback);
myscreen = eyeCalibDisp(myscreen);

% Main display loop
phaseNum = 1;
while (phaseNum <= length(task)) && ~myscreen.userHitEsc
  % update the task
  [task myscreen phaseNum] = updateTask(task,myscreen,phaseNum);
  myscreen = tickScreen(myscreen,task);
end
myscreen = endTask(myscreen,task);

function [task myscreen] = stimStartSegmentCallback(task, myscreen)
myscreen.flushMode = 1;

function [task myscreen] = stimDrawStimulusCallback(task, myscreen)

The above code normally works with the EyeLink calibration routines, except that when the experiment ends (endTask), the EDF file is not saved, with the following error message that breaks MGL.

(saveStimData) Changed output file to 240415_stim01
Saving ~/data/240415_stim01...done.
Failed to transfer file 24041501.edf.  transfer aborted .(mglPrivateEyelinkEDFGetFile) eyelink_core:Failed to transfer file 24041501.edf.  transfer aborted .
Unexpected unknown exception from MEX file..

Error in mglEyelinkCallbackSaveData (line 30)
mglPrivateEyelinkEDFGetFile(sprintf('%s.edf', myscreen.eyetracker.datafilename));

Error in saveStimData (line 161)
    [task, myscreen] = feval(myscreen.eyetracker.callback.saveEyeData,task,myscreen);

Error in endTask (line 29)
myscreen = saveStimData(myscreen,task);

Error in search (line 86)
myscreen = endTask(myscreen,task);

30  mglPrivateEyelinkEDFGetFile(sprintf('%s.edf', myscreen.eyetracker.datafilename));

Attempts to address the issue

It seems that the myscreen.flushMode = 1 interacts with the eyelink routine. When I changed it to myscreen.flushMode = 0, the EDF transfer works fine and it saves the file in the experiment computer disk.