summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2018-07-10 04:12:50 +0200
committerStanislaw Halik <sthalik@misaki.pl>2018-07-10 04:12:50 +0200
commit6135655fd9cb97d61ed03c65b3130eac9d7ccc11 (patch)
treed485260d2f5c3d084953feeddfe2d34aa79f777d
parent47986eb95ab38bb2dd4d8dc05bba04c323ed280e (diff)
tracker/tobii-eyex: working (?) prototype
-rw-r--r--tracker-tobii-eyex/CMakeLists.txt6
-rw-r--r--tracker-tobii-eyex/head-tracking.cpp2
-rw-r--r--tracker-tobii-eyex/lang/nl_NL.ts7
-rw-r--r--tracker-tobii-eyex/lang/ru_RU.ts7
-rw-r--r--tracker-tobii-eyex/lang/stub.ts7
-rw-r--r--tracker-tobii-eyex/lang/zh_CN.ts7
-rw-r--r--tracker-tobii-eyex/tobii-eyex.cpp64
-rw-r--r--tracker-tobii-eyex/tobii-eyex.hpp8
-rw-r--r--tracker-tobii-eyex/tobii-settings.hpp6
9 files changed, 75 insertions, 39 deletions
diff --git a/tracker-tobii-eyex/CMakeLists.txt b/tracker-tobii-eyex/CMakeLists.txt
index eead67bf..b1dcb056 100644
--- a/tracker-tobii-eyex/CMakeLists.txt
+++ b/tracker-tobii-eyex/CMakeLists.txt
@@ -1,13 +1,13 @@
if(WIN32)
set(SDK_TOBII_EYEX "" CACHE PATH "")
if(SDK_TOBII_EYEX)
- otr_module(tracker-tobii)
+ otr_module(tracker-tobii-eyex)
set(tobii-libdir ${SDK_TOBII_EYEX}/lib/x86/)
set(tobii-dll "${tobii-libdir}/Tobii.EyeX.Client.dll")
# we only care about the .lib for MSVC++ build anyway
- target_link_libraries(opentrack-tracker-tobii "${tobii-libdir}/Tobii.EyeX.Client.lib")
+ target_link_libraries(${self} "${tobii-libdir}/Tobii.EyeX.Client.lib")
# we only ever use the C headers due to Microsoft CRT ABI incompatibility with GNU
- target_include_directories(opentrack-tracker-tobii SYSTEM PUBLIC "${SDK_TOBII_EYEX}/include/eyex")
+ target_include_directories(${self} SYSTEM PUBLIC "${SDK_TOBII_EYEX}/include/eyex")
install(FILES "${tobii-dll}" DESTINATION "${opentrack-hier-pfx}" PERMISSIONS ${opentrack-perms-exec})
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
diff --git a/tracker-tobii-eyex/head-tracking.cpp b/tracker-tobii-eyex/head-tracking.cpp
index 8973293d..77394f11 100644
--- a/tracker-tobii-eyex/head-tracking.cpp
+++ b/tracker-tobii-eyex/head-tracking.cpp
@@ -5,7 +5,7 @@
real tobii_eyex_tracker::gain(real x)
{
// simple sigmoid
- x = clamp(x * 12 - 6, -6, 6);
+ x = clamp(x * 6, -6, 6);
x = 1 / (1 + exp(-x));
x = x * 2 - 1;
return clamp(x, -1, 1);
diff --git a/tracker-tobii-eyex/lang/nl_NL.ts b/tracker-tobii-eyex/lang/nl_NL.ts
index 47076f04..c14cd970 100644
--- a/tracker-tobii-eyex/lang/nl_NL.ts
+++ b/tracker-tobii-eyex/lang/nl_NL.ts
@@ -9,6 +9,13 @@
</message>
</context>
<context>
+ <name>tobii_eyex_metadata</name>
+ <message>
+ <source>Tobii EyeX</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>tobii_eyex_tracker</name>
<message>
<source>Connection can&apos;t be established. device missing?</source>
diff --git a/tracker-tobii-eyex/lang/ru_RU.ts b/tracker-tobii-eyex/lang/ru_RU.ts
index 65ec8ca5..73e7b92b 100644
--- a/tracker-tobii-eyex/lang/ru_RU.ts
+++ b/tracker-tobii-eyex/lang/ru_RU.ts
@@ -9,6 +9,13 @@
</message>
</context>
<context>
+ <name>tobii_eyex_metadata</name>
+ <message>
+ <source>Tobii EyeX</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>tobii_eyex_tracker</name>
<message>
<source>Connection can&apos;t be established. device missing?</source>
diff --git a/tracker-tobii-eyex/lang/stub.ts b/tracker-tobii-eyex/lang/stub.ts
index 6e4c7d1a..8a16308d 100644
--- a/tracker-tobii-eyex/lang/stub.ts
+++ b/tracker-tobii-eyex/lang/stub.ts
@@ -9,6 +9,13 @@
</message>
</context>
<context>
+ <name>tobii_eyex_metadata</name>
+ <message>
+ <source>Tobii EyeX</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>tobii_eyex_tracker</name>
<message>
<source>Connection can&apos;t be established. device missing?</source>
diff --git a/tracker-tobii-eyex/lang/zh_CN.ts b/tracker-tobii-eyex/lang/zh_CN.ts
index 6e4c7d1a..8a16308d 100644
--- a/tracker-tobii-eyex/lang/zh_CN.ts
+++ b/tracker-tobii-eyex/lang/zh_CN.ts
@@ -9,6 +9,13 @@
</message>
</context>
<context>
+ <name>tobii_eyex_metadata</name>
+ <message>
+ <source>Tobii EyeX</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>tobii_eyex_tracker</name>
<message>
<source>Connection can&apos;t be established. device missing?</source>
diff --git a/tracker-tobii-eyex/tobii-eyex.cpp b/tracker-tobii-eyex/tobii-eyex.cpp
index af0d0c05..59a80258 100644
--- a/tracker-tobii-eyex/tobii-eyex.cpp
+++ b/tracker-tobii-eyex/tobii-eyex.cpp
@@ -15,13 +15,19 @@
#ifdef TOBII_EYEX_VERBOSE_PRINTF
# define dbg_verbose(msg) (qDebug() << "tobii-eyex:" << (msg))
#else
-# define dbg_verbose(msg) (QMessageLogger().noDebug() << (msg))
+# define dbg_verbose(msg) (void)0
#endif
-#ifdef TOBII_EYEX_DEBUG_PRINTF
+#ifdef TOBII_EYEX_DEBUG2_PRINTF
# define dbg_debug(msg) (qDebug() << "tobii-eyex:" << (msg))
#else
-# define dbg_debug(msg) (QMessageLogger().noDebug() << (msg))
+# define dbg_debug(msg) (void)0
+#endif
+
+#ifdef TOBII_EYEX_DEBUG1_PRINTF
+# define dbg_debug(msg) (qDebug() << "tobii-eyex:" << (msg))
+#else
+# define dbg_debug(msg) (void)0
#endif
#define dbg_notice(msg) (qDebug() << "tobii-eyex:" << (msg))
@@ -159,35 +165,31 @@ void tobii_eyex_tracker::gaze_data_handler(TX_HANDLE gaze_data_handle)
if (txGetGazePointDataEventParams(gaze_data_handle, &params) == TX_RESULT_OK)
{
+ QMutexLocker l(&global_state_mtx);
+
+ if (params.Timestamp > dev_state.last_timestamp &&
+ dev_state.display_res_x > 0 &&
+ // the API allows for events outside screen bounds to e.g. detect looking at keyboard.
+ // closer to the screen bounds, the values get less accurate.
+ // ignore events outside the screen bounds.
+ params.X >= 0 && params.X < dev_state.display_res_x &&
+ params.Y >= 0 && params.Y < dev_state.display_res_y)
{
- QMutexLocker l(&global_state_mtx);
-
- if (params.Timestamp > dev_state.last_timestamp &&
- dev_state.display_res_x > 0 &&
- // the API allows for events outside screen bounds to e.g. detect looking at keyboard.
- // closer to the screen bounds, the values get less accurate.
- // ignore events outside the screen bounds.
- params.X >= 0 && params.X < dev_state.display_res_x &&
- params.Y >= 0 && params.Y < dev_state.display_res_y)
- {
- dev_state.last_timestamp = params.Timestamp;
- dev_state.px = params.X;
- dev_state.py = params.Y;
-
-#ifdef TOBII_EYEX_DEBUG_PRINTF
- char buf[256] = {0};
- (void) std::sprintf(buf, "gaze data: (%.1f, %.1f)", params.X, params.Y);
- dbg_debug(buf);
+ dev_state.last_timestamp = params.Timestamp;
+ dev_state.px = params.X;
+ dev_state.py = params.Y;
+
+#ifdef TOBII_EYEX_DEBUG2_PRINTF
+ char buf[256] = {0};
+ (void) std::sprintf(buf, "gaze data: (%.1f, %.1f)", params.X, params.Y);
+ dbg_debug(buf);
#endif
- dev_state.fresh = true;
- }
+ dev_state.fresh = true;
}
}
else
- {
- dbg_notice("failed to interpret gaze data event packet");
- }
+ dbg_notice("failed to process gaze data event packet");
}
void tobii_eyex_tracker::event_handler(TX_CONSTHANDLE async_data_handle, TX_USERPARAM param)
@@ -215,9 +217,15 @@ module_status tobii_eyex_tracker::start_tracker(QFrame*)
status &= txInitializeEyeX(TX_EYEXCOMPONENTOVERRIDEFLAG_NONE, nullptr, nullptr, nullptr, nullptr) == TX_RESULT_OK;
status &= txCreateContext(&ctx, TX_FALSE) == TX_RESULT_OK;
status &= register_state_snapshot(ctx, &state_snapshot);
- status &= txRegisterConnectionStateChangedHandler(ctx, &state_changed_ticket, state_change_handler, (TX_USERPARAM)this) == TX_RESULT_OK;
- status &= txRegisterEventHandler(ctx, &event_handler_ticket, event_handler, (TX_USERPARAM)this) == TX_RESULT_OK;
+ status &= txRegisterConnectionStateChangedHandler(ctx, &state_change_ticket, state_change_handler, (TX_USERPARAM)this) == TX_RESULT_OK;
+ status &= txRegisterEventHandler(ctx, &event_cookie, event_handler, (TX_USERPARAM)this) == TX_RESULT_OK;
status &= txEnableConnection(ctx) == TX_RESULT_OK;
+#if 0
+ // XXX check this
+ TX_CONNECTIONSTATE state;
+ status &= txGetConnectionState(ctx, &state) == TX_RESULT_OK;
+ status &= state == TX_CONNECTIONSTATE_CONNECTED || state == TX_CONNECTIONSTATE_TRYINGTOCONNECT;
+#endif
if (!status)
return error(tr("Connection can't be established. device missing?"));
diff --git a/tracker-tobii-eyex/tobii-eyex.hpp b/tracker-tobii-eyex/tobii-eyex.hpp
index def2ea2e..a3e9c1f2 100644
--- a/tracker-tobii-eyex/tobii-eyex.hpp
+++ b/tracker-tobii-eyex/tobii-eyex.hpp
@@ -61,14 +61,14 @@ private:
static void TX_CALLCONVENTION display_state_handler(TX_CONSTHANDLE async_data_handle, TX_USERPARAM param);
void process_display_state(TX_HANDLE display_state_handle);
- real gain(real x);
+ static real gain(real x);
state dev_state;
real yaw = 0, pitch = 0;
TX_CONTEXTHANDLE ctx = TX_EMPTY_HANDLE;
- TX_TICKET state_changed_ticket = TX_INVALID_TICKET;
- TX_TICKET event_handler_ticket = TX_INVALID_TICKET;
+ TX_TICKET state_change_ticket = TX_INVALID_TICKET;
+ TX_TICKET event_cookie = TX_INVALID_TICKET;
TX_HANDLE state_snapshot = TX_EMPTY_HANDLE;
TX_HANDLE display_state = TX_EMPTY_HANDLE;
@@ -83,7 +83,7 @@ class tobii_eyex_metadata : public Metadata
{
Q_OBJECT
- QString name() override { return QString("Tobii EyeX"); }
+ QString name() override { return tr("Tobii EyeX"); }
QIcon icon() override { return QIcon(":/images/tobii-eyex-logo.png"); }
};
diff --git a/tracker-tobii-eyex/tobii-settings.hpp b/tracker-tobii-eyex/tobii-settings.hpp
index 6101a28f..138faa54 100644
--- a/tracker-tobii-eyex/tobii-settings.hpp
+++ b/tracker-tobii-eyex/tobii-settings.hpp
@@ -34,10 +34,10 @@ struct settings final : public opts
acc_yaw {b, "acc-max-yaw", y20};
#endif
value<slider_value> acc_speed { b, "acc-max-speed-deg", { 3, 1, 10 } };
- value<slider_value> acc_dz { b, "acc-deadzone", { .15, .0, .3 } };
+ value<slider_value> acc_dz { b, "acc-deadzone", { .15, .0, .5 } };
- value<slider_value> acc_max_yaw { b, "acc-max-yaw", { 30, 15, 45} },
- acc_max_pitch { b, "acc-max-pitch", { 30, 15, 45 } };
+ value<slider_value> acc_max_yaw { b, "acc-max-yaw", { 45, 15, 60} },
+ acc_max_pitch { b, "acc-max-pitch", { 45, 15, 60 } };
settings();
};