-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheyejs.cpp
101 lines (71 loc) · 2.1 KB
/
eyejs.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
* This is an example that demonstrates how to connect to the EyeX Engine and subscribe to the lightly filtered gaze data stream.
*
* Copyright 2013-2014 Tobii Technology AB. All rights reserved.
*/
#include "stdafx.h"
#include "eyex.h"
#include "eyex/EyeX.h"
#include <iostream>
#include "ws.h"
#include "eyejs.h"
#include <boost/thread.hpp>
const int PORT = 5619;
const char * EYEJS_GAZE_MSG_FMT =
"{"
"\"type\": \"gaze\","
"\"avg\": {\"x\": %.1f, \"y\": %.1f},"
"\"left\": {\"x\": %.1f, \"y\": %.1f},"
"\"right\": {\"x\": %.1f, \"y\": %.1f},"
"\"available\": {\"left\": %s, \"right\": %s, \"both\": %s}"
"}";
BroadcastServer wss;
EYEJS_GAZE_MSG msg;
void EyeJSMsgToJSON(EYEJS_GAZE_MSG msg, char* s) {
sprintf(s, EYEJS_GAZE_MSG_FMT,
msg.avg.x,
msg.avg.y,
msg.left.x,
msg.left.y,
msg.right.x,
msg.right.y,
msg.available.left ? "true" : "false",
msg.available.right ? "true" : "false",
msg.available.both ? "true" : "false");
}
void GazeDataEventHandler(TX_GAZEPOINTDATAEVENTPARAMS eventParams) {
msg.timestamp = eventParams.Timestamp;
msg.avg.x = eventParams.X;
msg.avg.y = eventParams.Y;
char t[1000];
EyeJSMsgToJSON(msg, t);
wss.send(t);
}
void PositionDataEventHandler(TX_EYEPOSITIONDATAEVENTPARAMS eventParams) {
msg.available.right = !(eventParams.RightEyeXNormalized == 0.0 && eventParams.RightEyeYNormalized == 0.0 && eventParams.RightEyeZNormalized == 0.0);
msg.available.left = !(eventParams.LeftEyeXNormalized == 0.0 && eventParams.LeftEyeYNormalized == 0.0 && eventParams.LeftEyeZNormalized == 0.0);
msg.available.both = msg.available.right && msg.available.left;
}
void eyeXWorker() {
eyex_connect();
}
void wsWorker() {
wss.run(PORT);
}
int _tmain(int argc, char* argv[]) {
msg.avg.x = 0;
msg.avg.y = 0;
msg.left.x = 0;
msg.left.y = 0;
msg.right.x = 0;
msg.right.y = 0;
msg.available.left = true;
msg.available.right = true;
msg.available.both = true;
boost::thread eyeXThread(eyeXWorker);
boost::thread wsThread(wsWorker);
// wait for everything to be done... so forever.
eyeXThread.join();
wsThread.join();
return 0;
}