summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authora1xd <[email protected]>2020-07-31 20:04:19 -0400
committera1xd <[email protected]>2020-07-31 20:04:19 -0400
commit5241f9783b41e74f719dc4a472c6b0803b0eff8c (patch)
tree4c0a0507610e30b5c76b0dfff98e50b56993f8ae /common
parentMerge pull request #7 from JacobPalecki/GUI (diff)
downloadrawaccel-5241f9783b41e74f719dc4a472c6b0803b0eff8c.tar.xz
rawaccel-5241f9783b41e74f719dc4a472c6b0803b0eff8c.zip
add read
add function that makes an ioctl call to return the driver's active mouse_modifier
Diffstat (limited to 'common')
-rw-r--r--common/common.vcxitems1
-rw-r--r--common/external/tagged-union-single.h2
-rw-r--r--common/rawaccel-io.hpp46
3 files changed, 48 insertions, 1 deletions
diff --git a/common/common.vcxitems b/common/common.vcxitems
index d1e8db0..aeeaa95 100644
--- a/common/common.vcxitems
+++ b/common/common.vcxitems
@@ -23,6 +23,7 @@
<ClInclude Include="$(MSBuildThisFileDirectory)accel-power.hpp" />
<ClInclude Include="$(MSBuildThisFileDirectory)accel-sigmoid.hpp" />
<ClInclude Include="$(MSBuildThisFileDirectory)accel-error.hpp" />
+ <ClInclude Include="$(MSBuildThisFileDirectory)rawaccel-io.hpp" />
<ClInclude Include="$(MSBuildThisFileDirectory)rawaccel-userspace.hpp" />
<ClInclude Include="$(MSBuildThisFileDirectory)rawaccel.hpp" />
<ClInclude Include="$(MSBuildThisFileDirectory)x64-util.hpp" />
diff --git a/common/external/tagged-union-single.h b/common/external/tagged-union-single.h
index 3353325..f0de097 100644
--- a/common/external/tagged-union-single.h
+++ b/common/external/tagged-union-single.h
@@ -137,7 +137,7 @@ struct tagged_union {
int tag = 0;
struct storage_t {
- alignas(max_align_of<First, Rest...>) char bytes[max_size_of<First, Rest...>] = "";
+ alignas(max_align_of<First, Rest...>) char bytes[max_size_of<First, Rest...>] = {};
template <typename T>
inline constexpr T& as() {
diff --git a/common/rawaccel-io.hpp b/common/rawaccel-io.hpp
new file mode 100644
index 0000000..5d6fad6
--- /dev/null
+++ b/common/rawaccel-io.hpp
@@ -0,0 +1,46 @@
+#pragma once
+
+#include <system_error>
+
+#define NOMINMAX
+#include <Windows.h>
+
+#include "rawaccel.hpp"
+
+#define RA_IOCTL CTL_CODE(0x8888, 0x888, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+namespace rawaccel {
+
+ mouse_modifier read() {
+ 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");
+ }
+
+ mouse_modifier mod;
+ DWORD dummy;
+
+ BOOL success = DeviceIoControl(
+ ra_handle,
+ RA_IOCTL,
+ NULL, // input buffer
+ 0, // input buffer size
+ &mod, // output buffer
+ sizeof(mouse_modifier), // output buffer size
+ &dummy, // bytes returned
+ NULL // overlapped structure
+ );
+
+ CloseHandle(ra_handle);
+
+ if (!success) {
+ throw std::system_error(GetLastError(), std::system_category(), "DeviceIoControl failed");
+ }
+
+ return mod;
+ }
+
+}