Calibration Sample
clear;
Tobii = EyeTrackingOperations();
eyetracker_address = 'tet-tcp://10.46.32.50';
try
    eyetracker = Tobii.get_eyetracker(eyetracker_address);
catch ME
    if (strcmp(ME.identifier,'EyeTrackerGet:error204'))
        fprintf('Unable to connect eye tracker.\n');
        return
    end
end
calib = ScreenBasedCalibration(eyetracker);
try
    calib.enter_calibration_mode()
catch ME
    if (strcmp(ME.identifier,'EnterCalibrationMode:error210'))
        fprintf('The previous calibration was not completed!\n');
        calib.leave_calibration_mode()
        fprintf('Calibration is restarted\n');
        calib.enter_calibration_mode()
    else
        fprintf('%s\n', ME.identifier);
        return
    end
end
points_to_collect = [[0.1,0.1];[0.1,0.9];[0.5,0.5];[0.9,0.1];[0.9,0.9]];
for i=1:size(points_to_collect,1)
    collect_result = calib.collect_data(points_to_collect(i,:));
    fprintf('Point [%.2f,%.2f] Collect Result: %d\n',points_to_collect(i,:),collect_result.value);
end
calibration_result = calib.compute_and_apply();
fprintf('Calibration Status: %d\n',calibration_result.Status.value.value);
points_to_collect = [[0.1,0.1];[0.1,0.9];[0.5,0.5];[0.9,0.1];[0.9,0.9]];
points_to_recalibrate = [[0.1,0.1];[0.1,0.9]];
for i=1:size(points_to_recalibrate,1)
    calib.discard_data(points_to_recalibrate(i,:));
    collect_result = calib.collect_data(points_to_recalibrate(i,:));
    fprintf('Point [%.2f,%.2f] Collect Result: %d\n',points_to_recalibrate(i,:),collect_result.value);
end
calibration_result = calib.compute_and_apply();
fprintf('Calibration Status: %d\n',calibration_result.Status.value.value);
if calibration_result.Status == CalibrationStatus.Success
    points = calibration_result.CalibrationPoints;
    number_points = size(points,2);
    for i=1:number_points
        plot(points(i).PositionOnDisplayArea(1),points(i).PositionOnDisplayArea(2),'ok','LineWidth',10);
        mapping_size = size(points(i).RightEye,2);
        set(gca, 'YDir', 'reverse');
        axis([-0.2 1.2 -0.2 1.2])
        hold on;
        for j=1:mapping_size
            if points(i).LeftEye(j).Validity == CalibrationEyeValidity.ValidAndUsed
                plot(points(i).LeftEye(j).PositionOnDisplayArea(1), points(i).LeftEye(j).PositionOnDisplayArea(2),'-xr','LineWidth',3);
            end
            if points(i).RightEye(j).Validity == CalibrationEyeValidity.ValidAndUsed
                plot(points(i).RightEye(j).PositionOnDisplayArea(1),points(i).RightEye(j).PositionOnDisplayArea(2),'xb','LineWidth',3);
            end
        end
    end
end
calib.leave_calibration_mode()