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); }
/* 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 { } }
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"); } }