diff options
Diffstat (limited to 'wrapper')
| -rw-r--r-- | wrapper/wrapper.cpp | 128 | ||||
| -rw-r--r-- | wrapper/wrapper.hpp | 74 | ||||
| -rw-r--r-- | wrapper/wrapper.vcxproj | 1 | ||||
| -rw-r--r-- | wrapper/wrapper.vcxproj.filters | 3 | ||||
| -rw-r--r-- | wrapper/wrapper_io.cpp | 34 | ||||
| -rw-r--r-- | wrapper/wrapper_io.hpp | 17 |
6 files changed, 99 insertions, 158 deletions
diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index 6dabd7e..757d3f1 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -1,80 +1,62 @@ #pragma once -#include "wrapper.hpp" +#include <rawaccel.hpp> -void replace(mouse_modifier* mod_ptr, const modifier_args& args) { - *mod_ptr = mouse_modifier(args); -} +#include "wrapper_io.hpp" -Tuple<double, double>^ ManagedAccel::Accelerate(int x, int y, double time) -{ - vec2d input_vec2d = { - (double)x, - (double)y - }; - vec2d output = modifier_instance->modify_with_accel(input_vec2d, time); - - return gcnew Tuple<double, double>(output.x, output.y); -} +using namespace System; -void ManagedAccel::UpdateAccel( - int mode, - double rotation, - double sensitivityX, - double sensitivityY, - double weightX, - double weightY, - double capX, - double capY, - double offset, - double accel, - double lim_exp, - double midpoint, - double gain_cap) +public ref struct DriverInterop { - modifier_args args{}; - args.acc_fn_args.accel_mode = mode; - args.degrees = rotation; - args.sens.x = sensitivityX; - args.sens.y = sensitivityY; - args.acc_fn_args.acc_args.weight.x = weightX; - args.acc_fn_args.acc_args.weight.y = weightY; - args.acc_fn_args.cap.x = capX; - args.acc_fn_args.cap.y = capY; - args.acc_fn_args.acc_args.offset = offset; - args.acc_fn_args.acc_args.accel = accel; - args.acc_fn_args.acc_args.limit = lim_exp; - args.acc_fn_args.acc_args.exponent = lim_exp; - args.acc_fn_args.acc_args.midpoint = midpoint; - args.acc_fn_args.acc_args.gain_cap = gain_cap; - - replace(modifier_instance, args); - WriteToDriver(); -} - -double ManagedAccel::SensitivityX::get() { return modifier_instance->sensitivity.x; } -double ManagedAccel::SensitivityY::get() { return modifier_instance->sensitivity.y; } -double ManagedAccel::Rotation::get() { return atan(modifier_instance->rotate.rot_vec.y / modifier_instance->rotate.rot_vec.x) * 180 / M_PI; } -int ManagedAccel::Type::get() { return modifier_instance->accel_fn.accel.tag; } -double ManagedAccel::Acceleration::get() { return modifier_instance->accel_fn.impl_args.accel; } -double ManagedAccel::CapX::get() { return modifier_instance->accel_fn.clamp.x.hi; } -double ManagedAccel::CapY::get() { return modifier_instance->accel_fn.clamp.y.hi; } -double ManagedAccel::GainCap::get() { return modifier_instance->accel_fn.gain_cap.threshold; } -bool ManagedAccel::GainCapEnabled::get() { return modifier_instance->accel_fn.gain_cap.cap_gain_enabled; } -double ManagedAccel::WeightX::get() { return modifier_instance->accel_fn.impl_args.weight.x; } -double ManagedAccel::WeightY::get() { return modifier_instance->accel_fn.impl_args.weight.y; } -double ManagedAccel::Offset::get() { return modifier_instance->accel_fn.speed_offset; } -double ManagedAccel::LimitExp::get() { return modifier_instance->accel_fn.impl_args.limit; } -double ManagedAccel::Midpoint::get() { return modifier_instance->accel_fn.impl_args.midpoint; } -double ManagedAccel::MinimumTime::get() { return modifier_instance->accel_fn.time_min; } -double ManagedAccel::PowerScale::get() { return modifier_instance->accel_fn.impl_args.power_scale; } - -void ManagedAccel::WriteToDriver() -{ - wrapper_io::writeToDriver(*modifier_instance); -} - -void ManagedAccel::ReadFromDriver() + static void GetActiveSettings(IntPtr argsOut) + { + wrapper_io::readFromDriver(*reinterpret_cast<settings*>(argsOut.ToPointer())); + } + + static void SetActiveSettings(IntPtr argsIn) + { + wrapper_io::writeToDriver(*reinterpret_cast<settings*>(argsIn.ToPointer())); + } +}; + +public ref class ManagedAccel { - wrapper_io::readFromDriver(*modifier_instance); -} + mouse_modifier* const modifier_instance = new mouse_modifier(); + +public: + virtual ~ManagedAccel() + { + delete modifier_instance; + } + + !ManagedAccel() + { + delete modifier_instance; + } + + Tuple<double, double>^ Accelerate(int x, int y, double time) + { + vec2d in_out_vec = { + (double)x, + (double)y + }; + modifier_instance->modify(in_out_vec, time); + + return gcnew Tuple<double, double>(in_out_vec.x, in_out_vec.y); + } + + void UpdateFromSettings(IntPtr argsIn) + { + *modifier_instance = { *reinterpret_cast<settings*>(argsIn.ToPointer()) }; + } + + static ManagedAccel^ GetActiveAccel() + { + settings args; + wrapper_io::readFromDriver(args); + + auto active = gcnew ManagedAccel(); + *active->modifier_instance = { args }; + return active; + } +}; diff --git a/wrapper/wrapper.hpp b/wrapper/wrapper.hpp deleted file mode 100644 index 45647e8..0000000 --- a/wrapper/wrapper.hpp +++ /dev/null @@ -1,74 +0,0 @@ -#pragma once - -#include "wrapper_io.hpp" - -using namespace System; - -public ref class ManagedAccel -{ - mouse_modifier* const modifier_instance; - -public: - - ManagedAccel(System::IntPtr args) : - modifier_instance(new mouse_modifier(*reinterpret_cast<modifier_args*>(args.ToPointer()))) - {} - - // Empty constructor needed for serialization - ManagedAccel() : modifier_instance(nullptr) {} - - virtual ~ManagedAccel() - { - if (modifier_instance != nullptr) - { - delete modifier_instance; - } - } - - !ManagedAccel() - { - if (modifier_instance != nullptr) - { - delete modifier_instance; - } - } - - // Duplicate all relevant rawaccel struct members here for access and display in GUI - property double SensitivityX { double get(); } - property double SensitivityY { double get(); } - property double Rotation { double get(); } - property int Type { int get(); } - property double Acceleration { double get(); } - property bool GainCapEnabled { bool get(); } - property double CapX { double get(); } - property double CapY { double get(); } - property double GainCap { double get(); } - property double WeightX { double get(); } - property double WeightY { double get(); } - property double Offset { double get(); } - property double LimitExp { double get(); } - property double Midpoint { double get(); } - property double MinimumTime { double get(); } - property double PowerScale { double get(); } - - Tuple<double, double>^ Accelerate(int x, int y, double time); - - void UpdateAccel( - int mode, - double rotation, - double sensitivityX, - double sensitivityY, - double weightX, - double weightY, - double capX, - double capY, - double offset, - double accel, - double lim_exp, - double midpoint, - double gain_cap); - - void WriteToDriver(); - - void ReadFromDriver(); -};
\ No newline at end of file diff --git a/wrapper/wrapper.vcxproj b/wrapper/wrapper.vcxproj index 0ea90de..8484c22 100644 --- a/wrapper/wrapper.vcxproj +++ b/wrapper/wrapper.vcxproj @@ -68,7 +68,6 @@ </Link> </ItemDefinitionGroup> <ItemGroup> - <ClInclude Include="wrapper.hpp" /> <ClInclude Include="wrapper_io.hpp" /> </ItemGroup> <ItemGroup> diff --git a/wrapper/wrapper.vcxproj.filters b/wrapper/wrapper.vcxproj.filters index 60fcc9c..88e539f 100644 --- a/wrapper/wrapper.vcxproj.filters +++ b/wrapper/wrapper.vcxproj.filters @@ -15,9 +15,6 @@ </Filter> </ItemGroup> <ItemGroup> - <ClInclude Include="wrapper.hpp"> - <Filter>Header Files</Filter> - </ClInclude> <ClInclude Include="wrapper_io.hpp"> <Filter>Header Files</Filter> </ClInclude> diff --git a/wrapper/wrapper_io.cpp b/wrapper/wrapper_io.cpp index b5727ef..3f5673a 100644 --- a/wrapper/wrapper_io.cpp +++ b/wrapper/wrapper_io.cpp @@ -3,12 +3,38 @@ #include <rawaccel-io.hpp> #include "wrapper_io.hpp" -void wrapper_io::writeToDriver(const mouse_modifier& modifier) +void wrapper_io::writeToDriver(const settings& args) { - write(modifier); + try + { + write(args); + } + catch (const cooldown_error&) + { + throw gcnew DriverWriteCDException(); + } + catch (const install_error&) + { + throw gcnew DriverNotInstalledException(); + } + catch (const std::system_error& e) + { + throw gcnew DriverIOException(gcnew String(e.what())); + } } -void wrapper_io::readFromDriver(mouse_modifier& modifier) +void wrapper_io::readFromDriver(settings& args) { - modifier = read(); + try + { + args = read(); + } + catch (const install_error&) + { + throw gcnew DriverNotInstalledException(); + } + catch (const std::system_error& e) + { + throw gcnew DriverIOException(gcnew String(e.what())); + } } diff --git a/wrapper/wrapper_io.hpp b/wrapper/wrapper_io.hpp index 1873f75..aff572b 100644 --- a/wrapper/wrapper_io.hpp +++ b/wrapper/wrapper_io.hpp @@ -1,10 +1,21 @@ #pragma once -#include <rawaccel.hpp> +#include <rawaccel-settings.h> using namespace rawaccel; +using namespace System; struct wrapper_io { - static void writeToDriver(const mouse_modifier& modifier); - static void readFromDriver(mouse_modifier& modifier); + static void writeToDriver(const settings&); + static void readFromDriver(settings&); }; + +public ref struct DriverIOException : public IO::IOException { +public: + DriverIOException() {} + DriverIOException(String^ what) : IO::IOException(what) {} +}; + +public ref struct DriverNotInstalledException : public DriverIOException {}; + +public ref struct DriverWriteCDException : public DriverIOException {}; |