Esempio n. 1
0
void TX_CALLCONVENTION ofxTobiiEyeX::HandleEvent(TX_CONSTHANDLE hAsyncData, TX_USERPARAM param)
{
	TX_HANDLE hEvent = TX_EMPTY_HANDLE;
	TX_HANDLE hBehavior = TX_EMPTY_HANDLE;

	txGetAsyncDataContent(hAsyncData, &hEvent);
	
	if (txGetEventBehavior(hEvent, &hBehavior, TX_BEHAVIORTYPE_GAZEPOINTDATA) == TX_RESULT_OK)
	{
		if (txGetGazePointDataEventParams(hBehavior, &smGazePointDataEventParams) != TX_RESULT_OK)
		{
			ofLogError(smAddonName, "Failed to interpret gaze data event packet.");
		}
	}
	
	if (txGetEventBehavior(hEvent, &hBehavior, TX_BEHAVIORTYPE_EYEPOSITIONDATA) == TX_RESULT_OK)
	{
		if (txGetEyePositionDataEventParams(hBehavior, &smEyePositionEventParams) != TX_RESULT_OK)
		{
			ofLogError(smAddonName, "Failed to interpret eye position event packet.");
		}
	}

	if (txGetEventBehavior(hEvent, &hBehavior, TX_BEHAVIORTYPE_FIXATIONDATA) == TX_RESULT_OK)
	{
		if (txGetFixationDataEventParams(hBehavior, &smFixationEventParams) != TX_RESULT_OK)
		{
			ofLogError(smAddonName, "Failed to interpret fixation event packet.");
		}
	}

	txReleaseObject(&hBehavior);
	txReleaseObject(&hEvent);
}
Esempio n. 2
0
/*
void EyeXGaze::OnGazeDataEvent(TX_HANDLE hGazeDataBehavior)
{
	// gaze point data를 저장하기위한 구조체
	TX_GAZEPOINTDATAEVENTPARAMS eventParams;

	
	typedef struct {
    TX_GAZEPOINTDATAMODE GazePointDataMode;
    TX_REAL Timestamp;
    TX_REAL X;       
    TX_REAL Y;
} TX_GAZEPOINTDATAEVENTPARAMS;
	

	if (txGetGazePointDataEventParams(hGazeDataBehavior, &eventParams) == TX_RESULT_OK)
	{
		//출력
		GazeEye_X = eventParams.X;
		GazeEye_Y = eventParams.Y;
		InvalidateRect(_hWnd, nullptr, false);
	}
	else
	{
		// 에러출력
	}
}
*/
void EyeXGaze::OnFixationDataEvent(TX_HANDLE hFixationDataBehavior)
{
	TX_FIXATIONDATAEVENTPARAMS eventParams;
	TX_FIXATIONDATAEVENTTYPE eventType;
	char* eventDescription;

	if (txGetFixationDataEventParams(hFixationDataBehavior, &eventParams) == TX_RESULT_OK) {
		eventType = eventParams.EventType;

		eventDescription = (eventType == TX_FIXATIONDATAEVENTTYPE_DATA) ? "Data"
			: ((eventType == TX_FIXATIONDATAEVENTTYPE_END) ? "End"
				: "Begin");
		
		if (fps == 5)
		{
			
			if (FixEye_X == 0 && FixEye_Y == 0)
			{
				FixEye_X = eventParams.X;
				FixEye_Y = eventParams.Y;
				fps = 0;
			}
			else
			{
				if (eventParams.X < FixEye_X - ErrorD || eventParams.X > FixEye_X + ErrorD || eventParams.Y < FixEye_Y - ErrorD || eventParams.Y > FixEye_Y + ErrorD)
				{
					FixEye_X = eventParams.X;
					FixEye_Y = eventParams.Y;
					fps = 0;
				}
				else
					fps = 0;
			}
			
			//for (int i = 0; i < 5; i++)
			//{
			//FixEye_X = eventParams.X;
			//FixEye_Y = eventParams.Y;
			//fps = 0;
				SetCursorPos(FixEye_X, FixEye_Y);

			//}

		
			
		}
		else
			fps++;
	}
	else {
		
	}
}
Esempio n. 3
0
void Tobii::OnFixationDataEvent(TX_HANDLE hGazeDataBehavior)
{

	TX_FIXATIONDATAEVENTPARAMS eventParams;
	if (txGetFixationDataEventParams(hGazeDataBehavior, &eventParams) == TX_RESULT_OK && BothEyesOpen()) {
		gazeLoc.x = eventParams.X;
		gazeLoc.y  = eventParams.Y;


	}
	else {
		printf("Failed to interpret eye position data event packet.\n");
	}
}
/*
 * Handles an event from the fixation data stream.
 */
void OnFixationDataEvent(TX_HANDLE hFixationDataBehavior)
{
	float data[6] =   { 0, 0, 0, 0, 0, 0 };
	int iResult;

	TX_FIXATIONDATAEVENTPARAMS eventParams;
	TX_FIXATIONDATAEVENTTYPE eventType;
	char* eventDescription;

	if (txGetFixationDataEventParams(hFixationDataBehavior, &eventParams) == TX_RESULT_OK) {
		/* Every time there is an event, send a package*/
		//TCP	Preparing data package = #bytes, BehaviorType, Fixation_EventType, X, Y, Timestamp
		
		data[0] = 20; // Number of following bytes (5 values * 4 bytes / value)
		data[1] = eventParams.Timestamp; // Seconds since the System Boot Time
		data[2] = 7;  // Behavior Type, 7 for Fixation

		eventType = eventParams.EventType;
		if (eventType == TX_FIXATIONDATAEVENTTYPE_DATA)   { data[3] = 3; }
		if (eventType == TX_FIXATIONDATAEVENTTYPE_END)    { data[3] = 2; }
		if (eventType == TX_FIXATIONDATAEVENTTYPE_BEGIN)  { data[3] = 1; }
			
		data[4] = eventParams.X;
		data[5] = eventParams.Y;

		eventDescription = (eventType == TX_FIXATIONDATAEVENTTYPE_DATA) ? "Data"
			: ((eventType == TX_FIXATIONDATAEVENTTYPE_END) ? "End"
				: "Begin");
		printf("Fixation %s: (%.1f, %.1f) time %.0f ms\n", eventDescription, eventParams.X, eventParams.Y, eventParams.Timestamp);

		if (streaming)
		{
			for (int a = 0; a < 6; a++) //Up tp a < number of elements
			{
				SendFloatClientSocket(clientSocket, data[a]);
			}
		}
	} 
	else 
	{
		printf("Failed to interpret fixation data event packet.\n");
	}
}