summaryrefslogtreecommitdiffhomepage
path: root/proto-vjoystick
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2019-01-16 06:21:48 +0100
committerStanislaw Halik <sthalik@misaki.pl>2019-01-16 07:49:13 +0100
commitbdbab6bbfef596011302b595cab9b09aec147c55 (patch)
tree05696f23bad81498bf131f9fe5a93d0ef6bc5809 /proto-vjoystick
parentb8ea949f768e47624d938d73a5de58b230d59f71 (diff)
proto/mouse: add legacy input method
Diffstat (limited to 'proto-vjoystick')
-rw-r--r--proto-vjoystick/lang/nl_NL.ts4
-rw-r--r--proto-vjoystick/lang/ru_RU.ts4
-rw-r--r--proto-vjoystick/lang/stub.ts4
-rw-r--r--proto-vjoystick/lang/zh_CN.ts4
-rw-r--r--proto-vjoystick/vjoystick.cpp78
-rw-r--r--proto-vjoystick/vjoystick.h25
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;