diff options
| author | JacobPalecki <[email protected]> | 2020-08-31 23:03:46 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-08-31 23:03:46 -0700 |
| commit | 471fe599bab6ba0632ddd1dacd20c7fc42db0eee (patch) | |
| tree | 90a82ee14dbb112621657efbd2523ed35f59d154 /wrapper | |
| parent | Merge pull request #16 from JacobPalecki/Misc (diff) | |
| parent | add independent xy accel to driver (diff) | |
| download | rawaccel-471fe599bab6ba0632ddd1dacd20c7fc42db0eee.tar.xz rawaccel-471fe599bab6ba0632ddd1dacd20c7fc42db0eee.zip | |
Merge pull request #17 from a1xd/indep
Indep
Diffstat (limited to 'wrapper')
| -rw-r--r-- | wrapper/wrapper.cpp | 132 | ||||
| -rw-r--r-- | wrapper/wrapper.hpp | 89 | ||||
| -rw-r--r-- | wrapper/wrapper.vcxproj | 49 | ||||
| -rw-r--r-- | wrapper/wrapper.vcxproj.filters | 3 | ||||
| -rw-r--r-- | wrapper/wrapper_io.cpp | 38 | ||||
| -rw-r--r-- | wrapper/wrapper_io.hpp | 21 |
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 {}; |