diff options
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;  | 
