diff options
| -rw-r--r-- | console/console.cpp | 34 | ||||
| -rw-r--r-- | console/console.vcxproj | 2 | ||||
| -rw-r--r-- | console/console_write.cpp | 32 | ||||
| -rw-r--r-- | console/console_write.hpp | 14 | ||||
| -rw-r--r-- | wrapper/wrapper.cpp | 24 | ||||
| -rw-r--r-- | wrapper/wrapper.hpp | 10 | ||||
| -rw-r--r-- | wrapper/wrapper.vcxproj | 2 | ||||
| -rw-r--r-- | wrapper/wrapper.vcxproj.filters | 6 | ||||
| -rw-r--r-- | wrapper/wrapper_writer.cpp | 9 | ||||
| -rw-r--r-- | wrapper/wrapper_writer.hpp | 7 |
10 files changed, 102 insertions, 38 deletions
diff --git a/console/console.cpp b/console/console.cpp index 490051c..549cb68 100644 --- a/console/console.cpp +++ b/console/console.cpp @@ -4,39 +4,7 @@ #include <Windows.h> #include <rawaccel-userspace.hpp> - -#define RA_WRITE CTL_CODE(0x8888, 0x888, METHOD_BUFFERED, FILE_ANY_ACCESS) - -namespace ra = rawaccel; - -void write(ra::mouse_modifier vars) { - HANDLE ra_handle = INVALID_HANDLE_VALUE; - - ra_handle = CreateFileW(L"\\\\.\\rawaccel", 0, 0, 0, OPEN_EXISTING, 0, 0); - - if (ra_handle == INVALID_HANDLE_VALUE) { - throw std::system_error(GetLastError(), std::system_category(), "CreateFile failed"); - } - - DWORD dummy; - - BOOL success = DeviceIoControl( - ra_handle, - RA_WRITE, - &vars, - sizeof(ra::mouse_modifier), - NULL, // output buffer - 0, // output buffer size - &dummy, // bytes returned - NULL // overlapped structure - ); - - CloseHandle(ra_handle); - - if (!success) { - throw std::system_error(GetLastError(), std::system_category(), "DeviceIoControl failed"); - } -} +#include "console_write.hpp" int main(int argc, char** argv) { try { diff --git a/console/console.vcxproj b/console/console.vcxproj index d0ad292..05780cd 100644 --- a/console/console.vcxproj +++ b/console/console.vcxproj @@ -90,6 +90,8 @@ </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="console.cpp" /> + <ClCompile Include="console_write.cpp" /> + <ClCompile Include="console_write.hpp" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> diff --git a/console/console_write.cpp b/console/console_write.cpp new file mode 100644 index 0000000..3240ea5 --- /dev/null +++ b/console/console_write.cpp @@ -0,0 +1,32 @@ +#pragma once + +#include "console_write.hpp" + +void write(ra::mouse_modifier vars) { + HANDLE ra_handle = INVALID_HANDLE_VALUE; + + ra_handle = CreateFileW(L"\\\\.\\rawaccel", 0, 0, 0, OPEN_EXISTING, 0, 0); + + if (ra_handle == INVALID_HANDLE_VALUE) { + throw std::system_error(GetLastError(), std::system_category(), "CreateFile failed"); + } + + DWORD dummy; + + BOOL success = DeviceIoControl( + ra_handle, + RA_WRITE, + &vars, + sizeof(ra::mouse_modifier), + NULL, // output buffer + 0, // output buffer size + &dummy, // bytes returned + NULL // overlapped structure + ); + + CloseHandle(ra_handle); + + if (!success) { + throw std::system_error(GetLastError(), std::system_category(), "DeviceIoControl failed"); + } +} diff --git a/console/console_write.hpp b/console/console_write.hpp new file mode 100644 index 0000000..31eb575 --- /dev/null +++ b/console/console_write.hpp @@ -0,0 +1,14 @@ +#pragma once + +#include <iostream> + +#define NOMINMAX +#include <Windows.h> + +#include "..\common\rawaccel.hpp" + +#define RA_WRITE CTL_CODE(0x8888, 0x888, METHOD_BUFFERED, FILE_ANY_ACCESS) + +namespace ra = rawaccel; + +void write(ra::mouse_modifier vars);
\ No newline at end of file diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index c1cc570..ebf44cf 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -1,7 +1,6 @@ #pragma once -#include "..\common\rawaccel.hpp"; -#include "wrapper.hpp"; +#include "wrapper.hpp" using namespace rawaccel; using namespace System; @@ -11,4 +10,23 @@ Tuple<double, double>^ ManagedAccel::Accelerate(int x, int y, double time) vec2d output = (*modifier_instance).modify_with_accel(input_vec2d, (milliseconds)time); return gcnew Tuple<double, double>(output.x, output.y); -}
\ No newline at end of file +} + +void ManagedAccel::UpdateAccel(int mode, double offset, double accel, double lim_exp, double midpoint) +{ + delete modifier_instance; + + modifier_args args{}; + args.acc_fn_args.acc_args.accel = accel; + args.acc_fn_args.acc_args.lim_exp = lim_exp; + args.acc_fn_args.acc_args.midpoint = midpoint; + args.acc_fn_args.accel_mode = mode; + args.acc_fn_args.acc_args.offset = offset; + + modifier_instance = new mouse_modifier(args); +} + +void ManagedAccel::WriteToDriver() +{ + driverWriter->writeToDriver(modifier_instance); +} diff --git a/wrapper/wrapper.hpp b/wrapper/wrapper.hpp index 19b0987..5ea94fa 100644 --- a/wrapper/wrapper.hpp +++ b/wrapper/wrapper.hpp @@ -1,7 +1,7 @@ #pragma once -#include "..\common\rawaccel.hpp"; -#include "..\common\error.hpp"; +#include "..\common\error.hpp" +#include "wrapper_writer.hpp" #include <iostream> using namespace rawaccel; using namespace System; @@ -10,6 +10,7 @@ public ref class ManagedAccel { protected: mouse_modifier* modifier_instance; + writer* driverWriter; public: ManagedAccel(mouse_modifier* accel) : modifier_instance(accel) @@ -26,6 +27,7 @@ public: args.acc_fn_args.acc_args.offset = offset; modifier_instance = new mouse_modifier(args); + driverWriter = new writer(); } virtual ~ManagedAccel() @@ -49,4 +51,8 @@ public: } Tuple<double, double>^ Accelerate(int x, int y, double time); + + void UpdateAccel(int mode, double offset, double accel, double lim_exp, double midpoint); + + void WriteToDriver(); };
\ No newline at end of file diff --git a/wrapper/wrapper.vcxproj b/wrapper/wrapper.vcxproj index d27266d..28acbe7 100644 --- a/wrapper/wrapper.vcxproj +++ b/wrapper/wrapper.vcxproj @@ -116,9 +116,11 @@ </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="wrapper.hpp" /> + <ClInclude Include="wrapper_writer.hpp" /> </ItemGroup> <ItemGroup> <ClCompile Include="wrapper.cpp" /> + <ClCompile Include="wrapper_writer.cpp" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> diff --git a/wrapper/wrapper.vcxproj.filters b/wrapper/wrapper.vcxproj.filters index 22d967d..28b22ba 100644 --- a/wrapper/wrapper.vcxproj.filters +++ b/wrapper/wrapper.vcxproj.filters @@ -18,10 +18,16 @@ <ClInclude Include="wrapper.hpp"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="wrapper_writer.hpp"> + <Filter>Header Files</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="wrapper.cpp"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="wrapper_writer.cpp"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> </Project>
\ No newline at end of file diff --git a/wrapper/wrapper_writer.cpp b/wrapper/wrapper_writer.cpp new file mode 100644 index 0000000..0a74105 --- /dev/null +++ b/wrapper/wrapper_writer.cpp @@ -0,0 +1,9 @@ +#pragma once + +#include "..\console\console_write.cpp" +#include "wrapper_writer.hpp" + +void writer::writeToDriver(rawaccel::mouse_modifier* modifier) +{ + write(*modifier); +} diff --git a/wrapper/wrapper_writer.hpp b/wrapper/wrapper_writer.hpp new file mode 100644 index 0000000..591f62f --- /dev/null +++ b/wrapper/wrapper_writer.hpp @@ -0,0 +1,7 @@ +#pragma once + +#include "..\common\rawaccel.hpp" + +struct writer { + void writeToDriver(rawaccel::mouse_modifier* modifier); +};
\ No newline at end of file |