summaryrefslogtreecommitdiff
path: root/wrapper
diff options
context:
space:
mode:
Diffstat (limited to 'wrapper')
-rw-r--r--wrapper/wrapper.cpp128
-rw-r--r--wrapper/wrapper.hpp74
-rw-r--r--wrapper/wrapper.vcxproj1
-rw-r--r--wrapper/wrapper.vcxproj.filters3
-rw-r--r--wrapper/wrapper_io.cpp34
-rw-r--r--wrapper/wrapper_io.hpp17
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 {};