From 7d14daf1d5fce4d09471a3abe2aca49cf7680816 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Wed, 2 Dec 2020 05:25:19 -0500 Subject: embed version info into assemblies check app versions against lib, lib against driver add an 'about' dialog which displays version details, accessible from menu refactor error handling + add check for negative offset --- wrapper/wrapper.cpp | 107 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 101 insertions(+), 6 deletions(-) (limited to 'wrapper/wrapper.cpp') diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index ee88112..acd0dbf 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -3,11 +3,15 @@ #include #include +#include #include "wrapper_io.hpp" using namespace System; using namespace System::Runtime::InteropServices; +using namespace System::Reflection; + +using namespace Windows::Forms; using namespace Newtonsoft::Json; @@ -129,9 +133,11 @@ using error_list_t = Collections::Generic::List; error_list_t^ get_accel_errors(AccelMode mode, AccelArgs^ args) { - accel_mode m = (accel_mode)mode; + accel_mode mode_native = (accel_mode)mode; - auto is_mode = [m](auto... modes) { return ((m == modes) || ...); }; + auto is_mode = [mode_native](auto... modes) { + return ((mode_native == modes) || ...); + }; using am = accel_mode; @@ -142,7 +148,7 @@ error_list_t^ get_accel_errors(AccelMode mode, AccelArgs^ args) else if (args->acceleration == 0 && is_mode(am::naturalgain)) error_list->Add("acceleration must be positive"); else if (args->acceleration < 0) { - bool additive = m < am::power; + bool additive = mode_native < am::power; if (additive) error_list->Add("acceleration can not be negative, use a negative weight to compensate"); else error_list->Add("acceleration can not be negative"); } @@ -161,6 +167,9 @@ error_list_t^ get_accel_errors(AccelMode mode, AccelArgs^ args) if (args->midpoint <= 0) error_list->Add("midpoint must be positive"); + if (args->offset < 0) + error_list->Add("offset can not be negative"); + return error_list; } @@ -172,7 +181,36 @@ public: bool Empty() { - return x->Count == 0 && y->Count == 0; + return (x == nullptr || x->Count == 0) && + (y == nullptr || y->Count == 0); + } + + virtual String^ ToString() override + { + if (x == nullptr) throw; + + Text::StringBuilder^ sb = gcnew Text::StringBuilder(); + + if (y == nullptr) // assume combineMagnitudes + { + for each (String^ str in x) + { + sb->AppendLine(str); + } + } + else + { + for each (String^ str in x) + { + sb->AppendFormat("x: {0}\n", str); + } + for each (String^ str in y) + { + sb->AppendFormat("y: {0}\n", str); + } + } + + return sb->ToString(); } }; @@ -202,8 +240,9 @@ public ref struct DriverInterop errors->x = get_accel_errors(args->modes.x, args->args.x); - if (args->combineMagnitudes) errors->y = gcnew error_list_t(); - else errors->y = get_accel_errors(args->modes.y, args->args.y); + if (!args->combineMagnitudes) { + errors->y = get_accel_errors(args->modes.y, args->args.y); + } return errors; } @@ -274,3 +313,59 @@ public: return active; } }; + +public ref struct RawAccelVersion +{ + literal String^ value = RA_VER_STRING; +}; + +public ref struct VersionException : public Exception +{ +public: + VersionException() {} + VersionException(String^ what) : Exception(what) {} +}; + +Version^ convert(rawaccel::version_t v) +{ + return gcnew Version(v.major, v.minor, v.patch, 0); +} + +public ref struct VersionHelper +{ + + static Version^ ValidateAndGetDriverVersion(Version^ wrapperTarget) + { + Version^ wrapperActual = VersionHelper::typeid->Assembly->GetName()->Version; + + if (wrapperTarget != wrapperActual) { + throw gcnew VersionException("version mismatch, expected wrapper.dll v" + wrapperActual); + } + + version_t drv_ver; + + try { + wrapper_io::getDriverVersion(drv_ver); + } + catch (DriverNotInstalledException^ ex) { + throw gcnew VersionException(ex->Message); + } + catch (DriverIOException^) { + // Assume version ioctl is unimplemented (driver version < v1.3.0) + throw gcnew VersionException("driver version is out of date, run installer.exe to reinstall"); + } + + Version^ drv_ver_managed = convert(drv_ver); + + if (drv_ver_managed < convert(min_driver_version)) { + throw gcnew VersionException("driver version is out of date, run installer.exe to reinstall"); + } + else if (drv_ver_managed > wrapperActual) { + throw gcnew VersionException("newer driver version is installed"); + } + else { + return drv_ver_managed; + } + } + +}; -- cgit v1.2.3 From 5657d5a54c0a8e980c9b0cac39e2d16e452f302e Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Thu, 3 Dec 2020 20:00:31 -0500 Subject: add directional multipliers adds multipliers for movement in negative directions (up & left by default, can be flipped by rot or sens) avoid division by user input in mousewatcher --- wrapper/wrapper.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'wrapper/wrapper.cpp') diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index acd0dbf..54bfb91 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -71,7 +71,10 @@ public ref struct DriverSettings [JsonProperty("Sensitivity multipliers")] Vec2 sensitivity; - + + [JsonProperty("Negative directional multipliers", Required = Required::Default)] + Vec2 negativeMultipliers; + [JsonProperty(Required = Required::Default)] double minimumTime; -- cgit v1.2.3 From c221eb3d62ccbd7f2a5203abd3e0eae8e9bf31e8 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Thu, 3 Dec 2020 22:42:29 -0500 Subject: add changes from review rename some vars prefer exceptions over assert refactor poll rate field usage in MouseWatcher --- wrapper/wrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'wrapper/wrapper.cpp') diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index 54bfb91..c59dc00 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -73,7 +73,7 @@ public ref struct DriverSettings Vec2 sensitivity; [JsonProperty("Negative directional multipliers", Required = Required::Default)] - Vec2 negativeMultipliers; + Vec2 directionalMultipliers; [JsonProperty(Required = Required::Default)] double minimumTime; -- cgit v1.2.3 From 2c7c24ee1513616dc6260849bf97340d8484b6b4 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Sat, 5 Dec 2020 01:21:03 -0500 Subject: add more changes from review improve version error messages revert poll time changes add range validation after text parse --- wrapper/wrapper.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'wrapper/wrapper.cpp') diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index c59dc00..fcbf2e8 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -355,16 +355,20 @@ public ref struct VersionHelper } catch (DriverIOException^) { // Assume version ioctl is unimplemented (driver version < v1.3.0) - throw gcnew VersionException("driver version is out of date, run installer.exe to reinstall"); + throw gcnew VersionException("driver version is out of date\n\nrun installer.exe to reinstall"); } Version^ drv_ver_managed = convert(drv_ver); if (drv_ver_managed < convert(min_driver_version)) { - throw gcnew VersionException("driver version is out of date, run installer.exe to reinstall"); + throw gcnew VersionException( + String::Format("driver version is out of date (v{0})\n\nrun installer.exe to reinstall", + drv_ver_managed)); } else if (drv_ver_managed > wrapperActual) { - throw gcnew VersionException("newer driver version is installed"); + throw gcnew VersionException( + String::Format("newer driver version is installed (v{0})", + drv_ver_managed)); } else { return drv_ver_managed; -- cgit v1.2.3