From 96aa5be457d1455348ffdf5e90f38898c79eaf3a Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 20 Oct 2015 23:06:44 -0700 Subject: [PATCH] Implement all Sixense methods for OS X --- .../src/input-plugins/SixenseSupportOSX.cpp | 102 +++++++++++++----- 1 file changed, 76 insertions(+), 26 deletions(-) diff --git a/libraries/input-plugins/src/input-plugins/SixenseSupportOSX.cpp b/libraries/input-plugins/src/input-plugins/SixenseSupportOSX.cpp index c5c3f7f14a..a890d7c138 100644 --- a/libraries/input-plugins/src/input-plugins/SixenseSupportOSX.cpp +++ b/libraries/input-plugins/src/input-plugins/SixenseSupportOSX.cpp @@ -24,7 +24,7 @@ using SixenseTakeIntAndSixenseControllerData = int (*)(int, sixenseControllerDat static unique_ptr SIXENSE; -bool loadSixense() { +void loadSixense() { if (!SIXENSE) { static const QString LIBRARY_PATH = #ifdef SIXENSE_LIB_FILENAME @@ -41,57 +41,107 @@ bool loadSixense() { qDebug() << "Sixense library at" << SIXENSE->fileName() << "failed to load:" << SIXENSE->errorString(); qDebug() << "Continuing without hydra support."; } - return SIXENSE->isLoaded(); } void unloadSixense() { SIXENSE->unload(); } -template -Func resolve(const char* name) { +template +int call(const char* name, Args... args) { Q_ASSERT_X(SIXENSE && SIXENSE->isLoaded(), __FUNCTION__, "Sixense library not loaded"); - auto func = reinterpret_cast(SIXENSE->resolve(name)); + auto func = reinterpret_cast(SIXENSE->resolve(name)); Q_ASSERT_X(func, __FUNCTION__, string("Could not resolve ").append(name).c_str()); - return func; + return func(args...); } // sixense.h wrapper for OSX dynamic linking int sixenseInit() { loadSixense(); - auto sixenseInit = resolve("sixenseInit"); - return sixenseInit(); + return call(__FUNCTION__); } - int sixenseExit() { - auto sixenseExit = resolve("sixenseExit"); - auto returnCode = sixenseExit(); + auto returnCode = call(__FUNCTION__); unloadSixense(); return returnCode; } -int sixenseSetFilterEnabled(int input) { - auto sixenseSetFilterEnabled = resolve("sixenseSetFilterEnabled"); - return sixenseSetFilterEnabled(input); +int sixenseGetMaxBases() { + return call(__FUNCTION__); } - -int sixenseGetNumActiveControllers() { - auto sixenseGetNumActiveControllers = resolve("sixenseGetNumActiveControllers"); - return sixenseGetNumActiveControllers(); +int sixenseSetActiveBase(int i) { + return call(__FUNCTION__, i); +} +int sixenseIsBaseConnected(int i) { + return call(__FUNCTION__, i); } int sixenseGetMaxControllers() { - auto sixenseGetMaxControllers = resolve("sixenseGetMaxControllers"); - return sixenseGetMaxControllers(); + return call(__FUNCTION__); +} +int sixenseIsControllerEnabled(int which) { + return call(__FUNCTION__, which); +} +int sixenseGetNumActiveControllers() { + return call(__FUNCTION__); } -int sixenseIsControllerEnabled(int input) { - auto sixenseIsControllerEnabled = resolve("sixenseIsControllerEnabled"); - return sixenseIsControllerEnabled(input); +int sixenseGetHistorySize() { + return call(__FUNCTION__); } -int sixenseGetNewestData(int input1, sixenseControllerData* intput2) { - auto sixenseGetNewestData = resolve("sixenseGetNewestData"); - return sixenseGetNewestData(input1, intput2); +int sixenseGetData(int which, int index_back, sixenseControllerData* data) { + return call(__FUNCTION__, which, index_back, data); +} +int sixenseGetAllData(int index_back, sixenseAllControllerData* data) { + return call(__FUNCTION__, index_back, data); +} +int sixenseGetNewestData(int which, sixenseControllerData* data) { + return call(__FUNCTION__, which, data); +} +int sixenseGetAllNewestData(sixenseAllControllerData* data) { + return call(__FUNCTION__, data); +} + +int sixenseSetHemisphereTrackingMode(int which_controller, int state) { + return call(__FUNCTION__, which_controller, state); +} +int sixenseGetHemisphereTrackingMode(int which_controller, int* state) { + return call(__FUNCTION__, which_controller, state); +} +int sixenseAutoEnableHemisphereTracking(int which_controller) { + return call(__FUNCTION__, which_controller); +} + +int sixenseSetHighPriorityBindingEnabled(int on_or_off) { + return call(__FUNCTION__, on_or_off); +} +int sixenseGetHighPriorityBindingEnabled(int* on_or_off) { + return call(__FUNCTION__, on_or_off); +} + +int sixenseTriggerVibration(int controller_id, int duration_100ms, int pattern_id) { + return call(__FUNCTION__, controller_id, duration_100ms, pattern_id); +} + +int sixenseSetFilterEnabled(int on_or_off) { + return call(__FUNCTION__, on_or_off); +} +int sixenseGetFilterEnabled(int* on_or_off) { + return call(__FUNCTION__, on_or_off); +} + +int sixenseSetFilterParams(float near_range, float near_val, float far_range, float far_val) { + return call(__FUNCTION__, near_range, near_val, far_range, far_val); +} +int sixenseGetFilterParams(float* near_range, float* near_val, float* far_range, float* far_val) { + return call(__FUNCTION__, near_range, near_val, far_range, far_val); +} + +int sixenseSetBaseColor(unsigned char red, unsigned char green, unsigned char blue) { + return call(__FUNCTION__, red, green, blue); +} +int sixenseGetBaseColor(unsigned char* red, unsigned char* green, unsigned char* blue) { + return call(__FUNCTION__, red, green, blue); } #endif