summaryrefslogtreecommitdiff
path: root/wrapper
diff options
context:
space:
mode:
authorJacobPalecki <[email protected]>2020-08-31 23:03:46 -0700
committerGitHub <[email protected]>2020-08-31 23:03:46 -0700
commit471fe599bab6ba0632ddd1dacd20c7fc42db0eee (patch)
tree90a82ee14dbb112621657efbd2523ed35f59d154 /wrapper
parentMerge pull request #16 from JacobPalecki/Misc (diff)
parentadd independent xy accel to driver (diff)
downloadrawaccel-471fe599bab6ba0632ddd1dacd20c7fc42db0eee.tar.xz
rawaccel-471fe599bab6ba0632ddd1dacd20c7fc42db0eee.zip
Merge pull request #17 from a1xd/indep
Indep
Diffstat (limited to 'wrapper')
-rw-r--r--wrapper/wrapper.cpp132
-rw-r--r--wrapper/wrapper.hpp89
-rw-r--r--wrapper/wrapper.vcxproj49
-rw-r--r--wrapper/wrapper.vcxproj.filters3
-rw-r--r--wrapper/wrapper_io.cpp38
-rw-r--r--wrapper/wrapper_io.hpp21
6 files changed, 102 insertions, 230 deletions
diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp
index dcc9606..757d3f1 100644
--- a/wrapper/wrapper.cpp
+++ b/wrapper/wrapper.cpp
@@ -1,84 +1,62 @@
#pragma once
-#include "wrapper.hpp"
+#include <rawaccel.hpp>
-using namespace rawaccel;
-using namespace System;
-
-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, (milliseconds)time);
-
- return gcnew Tuple<double, double>(output.x, output.y);
-}
-
-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)
-{
- modifier_args args = modifier_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;
-
- mouse_modifier* temp_modifier = new mouse_modifier(args);
- driverWriter->writeToDriver(temp_modifier);
- delete temp_modifier;
-
- ReadFromDriver();
-
-}
+#include "wrapper_io.hpp"
-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; }
+using namespace System;
-void ManagedAccel::WriteToDriver()
+public ref struct DriverInterop
{
- driverWriter->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
{
- delete modifier_instance;
- modifier_instance = driverWriter->readFromDriver();
-}
+ 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 3643eb5..0000000
--- a/wrapper/wrapper.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-#pragma once
-
-#include <iostream>
-
-#include "wrapper_io.hpp"
-
-using namespace rawaccel;
-using namespace System;
-
-public ref class ManagedAccel
-{
-protected:
- mouse_modifier* modifier_instance;
- wrapper_io* driverWriter;
-public:
- ManagedAccel(mouse_modifier* accel)
- : modifier_instance(accel)
- {
- driverWriter = new wrapper_io();
- }
-
- ManagedAccel(System::IntPtr args)
- {
- modifier_instance = new mouse_modifier(*reinterpret_cast<modifier_args*>(args.ToPointer()));
- driverWriter = new wrapper_io();
- }
-
- // Empty constructor needed for serialization
- ManagedAccel() {}
-
- 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(); }
- mouse_modifier* GetInstance()
- {
- return modifier_instance;
- }
-
- 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 3407d6d..8484c22 100644
--- a/wrapper/wrapper.vcxproj
+++ b/wrapper/wrapper.vcxproj
@@ -1,14 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="Debug|Win32">
- <Configuration>Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="Release|Win32">
- <Configuration>Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
@@ -27,20 +19,6 @@
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>true</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- <CLRSupport>true</CLRSupport>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseDebugLibraries>false</UseDebugLibraries>
- <PlatformToolset>v142</PlatformToolset>
- <CLRSupport>true</CLRSupport>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
@@ -61,12 +39,6 @@
<ImportGroup Label="Shared">
<Import Project="..\common\common.vcxitems" Label="Shared" />
</ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
@@ -85,26 +57,6 @@
<AdditionalDependencies />
</Link>
</ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <AdditionalDependencies />
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <ClCompile>
- <WarningLevel>Level3</WarningLevel>
- <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <LanguageStandard>stdcpp17</LanguageStandard>
- </ClCompile>
- <Link>
- <AdditionalDependencies />
- </Link>
- </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
@@ -116,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 4284d60..3f5673a 100644
--- a/wrapper/wrapper_io.cpp
+++ b/wrapper/wrapper_io.cpp
@@ -3,16 +3,38 @@
#include <rawaccel-io.hpp>
#include "wrapper_io.hpp"
-void wrapper_io::writeToDriver(rawaccel::mouse_modifier* modifier)
+void wrapper_io::writeToDriver(const settings& args)
{
- rawaccel::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()));
+ }
}
-rawaccel::mouse_modifier* wrapper_io::readFromDriver()
+void wrapper_io::readFromDriver(settings& args)
{
- rawaccel::mouse_modifier modifier = rawaccel::read();
- rawaccel::mouse_modifier* mod_pnt = (rawaccel::mouse_modifier*)malloc(sizeof(rawaccel::mouse_modifier));
- memcpy(mod_pnt, &modifier, sizeof(rawaccel::mouse_modifier));
-
- return mod_pnt;
+ 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 3427e3f..aff572b 100644
--- a/wrapper/wrapper_io.hpp
+++ b/wrapper/wrapper_io.hpp
@@ -1,8 +1,21 @@
#pragma once
-#include <rawaccel.hpp>
+#include <rawaccel-settings.h>
+
+using namespace rawaccel;
+using namespace System;
struct wrapper_io {
- void writeToDriver(rawaccel::mouse_modifier* modifier);
- rawaccel::mouse_modifier* readFromDriver();
-}; \ No newline at end of file
+ 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 {};