From efbb443ec08de0de3fc66ac6fbc243082dbbcfda Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Wed, 8 Sep 2021 04:43:15 -0400 Subject: rename driver_settings found a better one refactor driver/DeviceSetup --- common/rawaccel-io.hpp | 16 ++++++------- common/rawaccel.hpp | 12 +++++----- driver/driver.cpp | 64 +++++++++++++++++++++++++++----------------------- driver/driver.h | 2 +- wrapper/wrapper.cpp | 38 +++++++++++++++--------------- 5 files changed, 68 insertions(+), 64 deletions(-) diff --git a/common/rawaccel-io.hpp b/common/rawaccel-io.hpp index f368896..046ac3d 100644 --- a/common/rawaccel-io.hpp +++ b/common/rawaccel-io.hpp @@ -47,19 +47,19 @@ namespace rawaccel { size_t size = sizeof(base_data); - if (base_data.driver_data_size == 0) { + if (base_data.modifier_data_size == 0) { // driver has no data, but it's more useful to return something, - // so return a default driver_settings object along with base data + // so return a default modifier_settings object along with base data - size += sizeof(driver_settings); - base_data.driver_data_size = 1; + size += sizeof(modifier_settings); + base_data.modifier_data_size = 1; auto bytes = std::make_unique(size); *reinterpret_cast(bytes.get()) = base_data; - *reinterpret_cast(bytes.get() + sizeof(io_base)) = {}; + *reinterpret_cast(bytes.get() + sizeof(io_base)) = {}; return bytes; } else { - size += sizeof(driver_settings) * base_data.driver_data_size; + size += sizeof(modifier_settings) * base_data.modifier_data_size; size += sizeof(device_settings) * base_data.device_data_size; auto bytes = std::make_unique(size); io_control(READ, NULL, 0, bytes.get(), DWORD(size)); @@ -74,7 +74,7 @@ namespace rawaccel { auto* base_ptr = static_cast(buffer); auto size = sizeof(io_base); - size += base_ptr->driver_data_size * sizeof(driver_settings); + size += base_ptr->modifier_data_size * sizeof(modifier_settings); size += base_ptr->device_data_size * sizeof(device_settings); if (size > DWORD(-1)) throw io_error("write buffer is too large"); @@ -85,7 +85,7 @@ namespace rawaccel { inline void reset() { io_base base_data{}; - // all driver/device data is cleared when a default io_base is passed + // all modifier/device data is cleared when a default io_base is passed io_control(WRITE, &base_data, sizeof(io_base), NULL, 0); } diff --git a/common/rawaccel.hpp b/common/rawaccel.hpp index c7bf33d..be4e1a5 100644 --- a/common/rawaccel.hpp +++ b/common/rawaccel.hpp @@ -24,7 +24,7 @@ namespace rawaccel { device_config config; }; - struct driver_settings { + struct modifier_settings { profile prof; struct data_t { @@ -34,7 +34,7 @@ namespace rawaccel { } data = {}; }; - inline void init_data(driver_settings& settings) + inline void init_data(modifier_settings& settings) { auto set_accel = [](accel_union& u, const accel_args& args) { u.visit([&](auto& impl) { @@ -50,18 +50,18 @@ namespace rawaccel { struct io_base { device_config default_dev_cfg; - unsigned driver_data_size = 0; + unsigned modifier_data_size = 0; unsigned device_data_size = 0; }; - static_assert(alignof(io_base) == alignof(driver_settings) && alignof(driver_settings) == alignof(device_settings)); + static_assert(alignof(io_base) == alignof(modifier_settings) && alignof(modifier_settings) == alignof(device_settings)); class modifier { public: #ifdef _KERNEL_MODE __forceinline #endif - void modify(vec2d& in, const driver_settings& settings, double dpi_factor, milliseconds time) const + void modify(vec2d& in, const modifier_settings& settings, double dpi_factor, milliseconds time) const { auto& args = settings.prof; auto& data = settings.data; @@ -147,7 +147,7 @@ namespace rawaccel { } } - modifier(driver_settings& settings) + modifier(modifier_settings& settings) { auto& args = settings.prof; diff --git a/driver/driver.cpp b/driver/driver.cpp index 07b947f..febf64f 100644 --- a/driver/driver.cpp +++ b/driver/driver.cpp @@ -24,7 +24,7 @@ struct { WDFCOLLECTION device_collection; WDFWAITLOCK collection_lock; ra::io_base base_data; - ra::driver_settings* driver_data; + ra::modifier_settings* modifier_data; ra::device_settings* device_data; milliseconds tick_interval; } global = {}; @@ -98,7 +98,7 @@ Arguments: static_cast(it->LastY) }; - devExt->mod.modify(input, devExt->drv_settings, devExt->dpi_factor, time); + devExt->mod.modify(input, devExt->mod_settings, devExt->dpi_factor, time); double carried_result_x = input.x + devExt->carry.x; double carried_result_y = input.y + devExt->carry.y; @@ -191,9 +191,9 @@ Return Value: else { *static_cast(buffer) = global.base_data; - size_t driver_bytes = global.base_data.driver_data_size * sizeof(ra::driver_settings); + size_t modifier_bytes = global.base_data.modifier_data_size * sizeof(ra::modifier_settings); size_t device_bytes = global.base_data.device_data_size * sizeof(ra::device_settings); - size_t total_bytes = SIZEOF_BASE + driver_bytes + device_bytes; + size_t total_bytes = SIZEOF_BASE + modifier_bytes + device_bytes; if (buffer_length < total_bytes) { bytes_out = SIZEOF_BASE; @@ -201,8 +201,8 @@ Return Value: else { BYTE* output_ptr = static_cast(buffer) + SIZEOF_BASE; - if (global.driver_data) RtlCopyMemory(output_ptr, global.driver_data, driver_bytes); - output_ptr += driver_bytes; + if (global.modifier_data) RtlCopyMemory(output_ptr, global.modifier_data, modifier_bytes); + output_ptr += modifier_bytes; if (global.device_data) RtlCopyMemory(output_ptr, global.device_data, device_bytes); bytes_out = total_bytes; } @@ -223,26 +223,26 @@ Return Value: ra::io_base& input = *static_cast(buffer); - auto driver_bytes = size_t(input.driver_data_size) * sizeof(ra::driver_settings); + auto modifier_bytes = size_t(input.modifier_data_size) * sizeof(ra::modifier_settings); auto device_bytes = size_t(input.device_data_size) * sizeof(ra::device_settings); - auto alloc_size = driver_bytes + device_bytes; + auto alloc_size = modifier_bytes + device_bytes; auto total_size = alloc_size + SIZEOF_BASE; auto max_u32 = unsigned(-1); - if (driver_bytes > max_u32 || device_bytes > max_u32 || total_size > max_u32) { + if (modifier_bytes > max_u32 || device_bytes > max_u32 || total_size > max_u32) { status = STATUS_CANCELLED; break; } - if (input.driver_data_size == 0) { + if (input.modifier_data_size == 0) { // clear data and disable all devices WdfWaitLockAcquire(global.collection_lock, NULL); global.base_data = {}; - if (global.driver_data) { - ExFreePoolWithTag(global.driver_data, 'g'); - global.driver_data = NULL; + if (global.modifier_data) { + ExFreePoolWithTag(global.modifier_data, 'g'); + global.modifier_data = NULL; global.device_data = NULL; } @@ -265,15 +265,15 @@ Return Value: WdfWaitLockAcquire(global.collection_lock, NULL); - if (global.driver_data) { - ExFreePoolWithTag(global.driver_data, 'g'); + if (global.modifier_data) { + ExFreePoolWithTag(global.modifier_data, 'g'); } - void* dev_data = static_cast(pool) + driver_bytes; + void* dev_data = static_cast(pool) + modifier_bytes; global.device_data = input.device_data_size > 0 ? static_cast(dev_data) : NULL; - global.driver_data = static_cast(pool); + global.modifier_data = static_cast(pool); global.base_data = input; auto count = WdfCollectionGetCount(global.device_collection); @@ -373,15 +373,27 @@ DeviceSetup(WDFOBJECT hDevice) } }; - if (!global.driver_data) { + auto set_mod_if_found = [devExt](auto* prof_name) { + for (auto i = 0u; i < global.base_data.modifier_data_size; i++) { + auto& profile = global.modifier_data[i].prof; + + if (wcsncmp(prof_name, profile.name, ra::MAX_NAME_LEN) == 0) { + devExt->mod_settings = global.modifier_data[i]; + devExt->mod = { devExt->mod_settings }; + return; + } + } + }; + + if (!global.modifier_data) { devExt->enable = false; devExt->mod = {}; return; } set_ext_from_cfg(global.base_data.default_dev_cfg); - devExt->drv_settings = *global.driver_data; - devExt->mod = { devExt->drv_settings }; + devExt->mod_settings = *global.modifier_data; + devExt->mod = { devExt->mod_settings }; for (auto i = 0u; i < global.base_data.device_data_size; i++) { auto& dev_settings = global.device_data[i]; @@ -390,18 +402,10 @@ DeviceSetup(WDFOBJECT hDevice) set_ext_from_cfg(dev_settings.config); if (dev_settings.profile[0] != L'\0') { - for (auto j = 0u; j < global.base_data.driver_data_size; j++) { - auto& profile = global.driver_data[j].prof; - - if (wcsncmp(dev_settings.profile, profile.name, ra::MAX_NAME_LEN) == 0) { - devExt->drv_settings = global.driver_data[j]; - devExt->mod = { devExt->drv_settings }; - return; - } - } + set_mod_if_found(dev_settings.profile); } - return; + break; } } } diff --git a/driver/driver.h b/driver/driver.h index d8b3162..c55afac 100644 --- a/driver/driver.h +++ b/driver/driver.h @@ -28,7 +28,7 @@ typedef struct _DEVICE_EXTENSION { ra::modifier mod; vec2d carry; CONNECT_DATA UpperConnectData; - ra::driver_settings drv_settings; + ra::modifier_settings mod_settings; WCHAR dev_id[ra::MAX_DEV_ID_LEN]; } DEVICE_EXTENSION, *PDEVICE_EXTENSION; diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index 5acc0d0..c0b3b22 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -15,7 +15,7 @@ using namespace Newtonsoft::Json::Linq; namespace ra = rawaccel; -ra::driver_settings default_driver_settings; +ra::modifier_settings default_modifier_settings; ra::device_settings default_device_settings; public ref struct VersionHelper @@ -147,7 +147,7 @@ public ref struct Profile } Profile() : - Profile(default_driver_settings.prof) {} + Profile(default_modifier_settings.prof) {} }; [JsonObject(ItemRequired = Required::Always)] @@ -395,11 +395,11 @@ public: struct accel_instance_t { ra::modifier mod; - ra::driver_settings settings; + ra::modifier_settings settings; accel_instance_t() = default; - accel_instance_t(ra::driver_settings& args) : + accel_instance_t(ra::modifier_settings& args) : settings(args), mod(args) {} @@ -418,7 +418,7 @@ public: ManagedAccel() {} - ManagedAccel(ra::driver_settings& settings) : + ManagedAccel(ra::modifier_settings& settings) : instance(new accel_instance_t(settings)) {} ManagedAccel(Profile^ settings) @@ -462,7 +462,7 @@ public: } - ra::driver_settings NativeSettings() + ra::modifier_settings NativeSettings() { return instance->settings; } @@ -495,11 +495,11 @@ public: std::byte* buffer; - auto driver_data_bytes = accels->Count * sizeof(ra::driver_settings); + auto modifier_data_bytes = accels->Count * sizeof(ra::modifier_settings); auto device_data_bytes = devices->Count * sizeof(ra::device_settings); try { - buffer = new std::byte[sizeof(ra::io_base) + driver_data_bytes + device_data_bytes]; + buffer = new std::byte[sizeof(ra::io_base) + modifier_data_bytes + device_data_bytes]; } catch (const std::exception& e) { throw gcnew InteropException(e); @@ -514,18 +514,18 @@ public: base_data->default_dev_cfg.polling_rate = defaultDeviceConfig.pollingRate; base_data->default_dev_cfg.clamp.min = defaultDeviceConfig.minimumTime; base_data->default_dev_cfg.clamp.max = defaultDeviceConfig.maximumTime; - base_data->driver_data_size = accels->Count; + base_data->modifier_data_size = accels->Count; base_data->device_data_size = devices->Count; byte_ptr += sizeof(ra::io_base); - auto* driver_data = reinterpret_cast(byte_ptr); + auto* modifier_data = reinterpret_cast(byte_ptr); for (auto i = 0; i < accels->Count; i++) { - auto& drv_settings = driver_data[i]; - drv_settings = accels[i]->NativeSettings(); + auto& mod_settings = modifier_data[i]; + mod_settings = accels[i]->NativeSettings(); } - byte_ptr += driver_data_bytes; + byte_ptr += modifier_data_bytes; auto* device_data = reinterpret_cast(byte_ptr); for (auto i = 0; i < devices->Count; i++) { @@ -683,14 +683,14 @@ public: byte_ptr += sizeof(ra::io_base); - ra::driver_settings* driver_data = reinterpret_cast(byte_ptr); - for (auto i = 0u; i < base_data->driver_data_size; i++) { - auto& drv_settings = driver_data[i]; - cfg->profiles->Add(gcnew Profile(drv_settings.prof)); - cfg->accels->Add(gcnew ManagedAccel(drv_settings)); + ra::modifier_settings* modifier_data = reinterpret_cast(byte_ptr); + for (auto i = 0u; i < base_data->modifier_data_size; i++) { + auto& mod_settings = modifier_data[i]; + cfg->profiles->Add(gcnew Profile(mod_settings.prof)); + cfg->accels->Add(gcnew ManagedAccel(mod_settings)); } - byte_ptr += base_data->driver_data_size * sizeof(ra::driver_settings); + byte_ptr += base_data->modifier_data_size * sizeof(ra::modifier_settings); ra::device_settings* device_data = reinterpret_cast(byte_ptr); for (auto i = 0u; i < base_data->device_data_size; i++) { -- cgit v1.2.3