diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2019-01-16 06:21:48 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2019-01-16 07:49:13 +0100 |
commit | bdbab6bbfef596011302b595cab9b09aec147c55 (patch) | |
tree | 05696f23bad81498bf131f9fe5a93d0ef6bc5809 /proto-vjoystick | |
parent | b8ea949f768e47624d938d73a5de58b230d59f71 (diff) |
proto/mouse: add legacy input method
Diffstat (limited to 'proto-vjoystick')
-rw-r--r-- | proto-vjoystick/lang/nl_NL.ts | 4 | ||||
-rw-r--r-- | proto-vjoystick/lang/ru_RU.ts | 4 | ||||
-rw-r--r-- | proto-vjoystick/lang/stub.ts | 4 | ||||
-rw-r--r-- | proto-vjoystick/lang/zh_CN.ts | 4 | ||||
-rw-r--r-- | proto-vjoystick/vjoystick.cpp | 78 | ||||
-rw-r--r-- | proto-vjoystick/vjoystick.h | 25 |
6 files changed, 52 insertions, 67 deletions
diff --git a/proto-vjoystick/lang/nl_NL.ts b/proto-vjoystick/lang/nl_NL.ts index 46d0398d..027e5f39 100644 --- a/proto-vjoystick/lang/nl_NL.ts +++ b/proto-vjoystick/lang/nl_NL.ts @@ -46,10 +46,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>unknown error</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Virtual joystick</source> <translation type="unfinished"></translation> </message> diff --git a/proto-vjoystick/lang/ru_RU.ts b/proto-vjoystick/lang/ru_RU.ts index 6a618904..583144ef 100644 --- a/proto-vjoystick/lang/ru_RU.ts +++ b/proto-vjoystick/lang/ru_RU.ts @@ -46,10 +46,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>unknown error</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Virtual joystick</source> <translation type="unfinished"></translation> </message> diff --git a/proto-vjoystick/lang/stub.ts b/proto-vjoystick/lang/stub.ts index c8909cfe..a71e2882 100644 --- a/proto-vjoystick/lang/stub.ts +++ b/proto-vjoystick/lang/stub.ts @@ -46,10 +46,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>unknown error</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Virtual joystick</source> <translation type="unfinished"></translation> </message> diff --git a/proto-vjoystick/lang/zh_CN.ts b/proto-vjoystick/lang/zh_CN.ts index c8909cfe..a71e2882 100644 --- a/proto-vjoystick/lang/zh_CN.ts +++ b/proto-vjoystick/lang/zh_CN.ts @@ -46,10 +46,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>unknown error</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Virtual joystick</source> <translation type="unfinished"></translation> </message> diff --git a/proto-vjoystick/vjoystick.cpp b/proto-vjoystick/vjoystick.cpp index bb0f0f51..d781d8e1 100644 --- a/proto-vjoystick/vjoystick.cpp +++ b/proto-vjoystick/vjoystick.cpp @@ -39,7 +39,7 @@ const unsigned char handle::axis_ids[6] = // HID_USAGE_WHL, }; -static const double val_minmax[6] = +static constexpr double val_minmax[6] = { 50, 50, @@ -49,56 +49,54 @@ static const double val_minmax[6] = 180 }; -void handle::init() +bool handle::init() { + if (!AcquireVJD(OPENTRACK_VJOYSTICK_ID)) + return false; + + unsigned cnt = 0; + bool status = true; + for (unsigned i = 0; i < axis_count; i++) { if (!GetVJDAxisExist(OPENTRACK_VJOYSTICK_ID, axis_ids[i])) - { - // avoid floating point division by zero - axis_min[i] = 0; - axis_max[i] = 1; continue; - } - GetVJDAxisMin(OPENTRACK_VJOYSTICK_ID, axis_ids[i], &axis_min[i]); - GetVJDAxisMax(OPENTRACK_VJOYSTICK_ID, axis_ids[i], &axis_max[i]); + cnt++; + status &= !!GetVJDAxisMin(OPENTRACK_VJOYSTICK_ID, axis_ids[i], &axis_min[i]); + status &= !!GetVJDAxisMax(OPENTRACK_VJOYSTICK_ID, axis_ids[i], &axis_max[i]); } - (void) ResetVJD(OPENTRACK_VJOYSTICK_ID); + //(void)ResetVJD(OPENTRACK_VJOYSTICK_ID); + + return status && cnt; } handle::handle() { - const bool ret = AcquireVJD(OPENTRACK_VJOYSTICK_ID); - if (!ret) - { - if (!isVJDExists(OPENTRACK_VJOYSTICK_ID)) - joy_state = state_notent; - else - joy_state = state_fail; - } + if (!isVJDExists(OPENTRACK_VJOYSTICK_ID)) + joy_state = state::notent; + else if (init()) + joy_state = state::success; else - { - joy_state = state_success; - init(); - } + joy_state = state::fail; } handle::~handle() { - if (joy_state == state_success) - { - (void) RelinquishVJD(OPENTRACK_VJOYSTICK_ID); - joy_state = state_fail; - } + if (joy_state == state::success) + RelinquishVJD(OPENTRACK_VJOYSTICK_ID); } -LONG handle::to_axis_value(unsigned axis_id, double val) +bool handle::to_axis_value(unsigned axis_id, double val, int& ret) const { + if (!axis_min[axis_id] && !axis_max[axis_id]) + return false; + const double minmax = val_minmax[axis_id]; const double min = axis_min[axis_id]; const double max = axis_max[axis_id]; - return LONG(clamp((val+minmax) * max / (2*minmax) - min, min, max)); + ret = int(clamp((val+minmax) * max / (2*minmax) - min, min, max)); + return true; } vjoystick_proto::vjoystick_proto() = default; @@ -106,7 +104,9 @@ vjoystick_proto::~vjoystick_proto() = default; module_status vjoystick_proto::initialize() { - if (h.get_state() != state_success) + h = handle{}; + + if (h->get_state() != state::success) { QMessageBox msgbox; msgbox.setIcon(QMessageBox::Critical); @@ -131,27 +131,29 @@ module_status vjoystick_proto::initialize() } } - switch (h.get_state()) + switch (h->get_state()) { - case state_notent: + default: + case state::notent: return error(tr("vjoystick not installed or disabled")); - case state_fail: + case state::fail: return error(tr("can't initialize vjoystick")); - case state_success: + case state::success: return status_ok(); - default: - return error(tr("unknown error")); } } void vjoystick_proto::pose(const double *pose) { - if (h.get_state() != state_success) + if (h->get_state() != state::success) return; for (unsigned i = 0; i < handle::axis_count; i++) { - SetAxis(h.to_axis_value(i, pose[i]), OPENTRACK_VJOYSTICK_ID, handle::axis_ids[i]); + int val; + if (!h->to_axis_value(i, pose[i], val)) + continue; + SetAxis(val, OPENTRACK_VJOYSTICK_ID, handle::axis_ids[i]); } } diff --git a/proto-vjoystick/vjoystick.h b/proto-vjoystick/vjoystick.h index 0de86638..96d10e9e 100644 --- a/proto-vjoystick/vjoystick.h +++ b/proto-vjoystick/vjoystick.h @@ -10,13 +10,13 @@ #include "api/plugin-api.hpp" #include "compat/macros.hpp" -#include <windows.h> +#include <optional> -enum state : signed char +enum class state : int { - state_notent = -1, - state_fail = -2, - state_success = 1, + notent = -1, + fail = -2, + success = 1, }; class handle final @@ -26,23 +26,22 @@ public: static const unsigned char axis_ids[axis_count]; private: - state joy_state; - LONG axis_min[6] {}; - LONG axis_max[6] {}; - - void init(); + state joy_state = state::notent; + long axis_min[6] {}; + long axis_max[6] {}; + [[nodiscard]] bool init(); public: handle(); ~handle(); - state get_state() { return joy_state; } - LONG to_axis_value(unsigned axis_id, double val); + state get_state() const { return joy_state; } + [[nodiscard]] bool to_axis_value(unsigned axis_id, double val, int& ret) const; }; class vjoystick_proto : public TR, public IProtocol { Q_OBJECT - handle h; + std::optional<handle> h; public: vjoystick_proto(); ~vjoystick_proto() override; |