diff options
| author | a1xd <[email protected]> | 2021-04-01 18:33:00 -0400 |
|---|---|---|
| committer | a1xd <[email protected]> | 2021-04-01 18:33:00 -0400 |
| commit | e9866f27d78d9909fd4639cbd14a54b8ad5c2ec1 (patch) | |
| tree | 1254f1db0dfd39d76c20a1907380ecbb60f86ab4 | |
| parent | add flag to negate device match (diff) | |
| download | rawaccel-e9866f27d78d9909fd4639cbd14a54b8ad5c2ec1.tar.xz rawaccel-e9866f27d78d9909fd4639cbd14a54b8ad5c2ec1.zip | |
driver - apply accel disregarding num packets
add setting for max time threshold
| -rw-r--r-- | common/rawaccel-base.hpp | 4 | ||||
| -rw-r--r-- | common/rawaccel-validate.hpp | 4 | ||||
| -rw-r--r-- | driver/driver.cpp | 32 | ||||
| -rw-r--r-- | wrapper/wrapper.cpp | 8 |
4 files changed, 29 insertions, 19 deletions
diff --git a/common/rawaccel-base.hpp b/common/rawaccel-base.hpp index 200c7d4..ebc3f3e 100644 --- a/common/rawaccel-base.hpp +++ b/common/rawaccel-base.hpp @@ -5,9 +5,11 @@ namespace rawaccel { using milliseconds = double; + inline constexpr int POLL_RATE_MIN = 125; inline constexpr int POLL_RATE_MAX = 8000; inline constexpr milliseconds DEFAULT_TIME_MIN = 1000.0 / POLL_RATE_MAX / 2; + inline constexpr milliseconds DEFAULT_TIME_MAX = 1000.0 / POLL_RATE_MIN * 2; inline constexpr milliseconds WRITE_DELAY = 1000; @@ -77,7 +79,9 @@ namespace rawaccel { vec2d dir_multipliers = {}; domain_args dom_args = {}; vec2d range_weights = { 1, 1 }; + milliseconds time_min = DEFAULT_TIME_MIN; + milliseconds time_max = DEFAULT_TIME_MAX; bool ignore = false; wchar_t device_id[MAX_DEV_ID_LEN] = {}; diff --git a/common/rawaccel-validate.hpp b/common/rawaccel-validate.hpp index b9ee2af..a02324b 100644 --- a/common/rawaccel-validate.hpp +++ b/common/rawaccel-validate.hpp @@ -162,6 +162,10 @@ namespace rawaccel { error("minimum time"" must be positive"); } + if (args.time_max < args.time_min) { + error("max time is less than min time"); + } + return ret; } diff --git a/driver/driver.cpp b/driver/driver.cpp index ec340ea..a7fe3b6 100644 --- a/driver/driver.cpp +++ b/driver/driver.cpp @@ -60,9 +60,18 @@ Arguments: bool(wcsncmp(devExt->dev_id, global.args.device_id, ra::MAX_DEV_ID_LEN)); if (any && rel_move && dev_match) { - // if IO is backed up to the point where we get more than 1 packet here - // then applying accel is pointless as we can't get an accurate timing - bool enable_accel = num_packets == 1; + milliseconds time; + + if (global.args.time_min == global.args.time_max) { + time = global.args.time_min; + } + else { + counter_t now = KeQueryPerformanceCounter(NULL).QuadPart; + counter_t ticks = now - devExt->counter; + devExt->counter = now; + milliseconds t = ticks * global.tick_interval / num_packets; + time = ra::clampsd(t, global.args.time_min, global.args.time_max); + } auto it = InputDataStart; do { @@ -72,22 +81,7 @@ Arguments: static_cast<double>(it->LastY) }; - global.modifier.apply_rotation(input); - global.modifier.apply_angle_snap(input); - - if (enable_accel) { - auto time_supplier = [=] { - counter_t now = KeQueryPerformanceCounter(NULL).QuadPart; - counter_t ticks = now - devExt->counter; - devExt->counter = now; - milliseconds time = ticks * global.tick_interval; - return ra::clampsd(time, global.args.time_min, 100); - }; - - global.modifier.apply_acceleration(input, time_supplier); - } - - global.modifier.apply_sensitivity(input); + global.modifier.modify(input, time); double carried_result_x = input.x + devExt->carry.x; double carried_result_y = input.y + devExt->carry.y; diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index 873b156..ab129a8 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -130,6 +130,9 @@ public ref struct DriverSettings [JsonProperty(Required = Required::Default)] double minimumTime; + [JsonProperty(Required = Required::Default)] + double maximumTime; + [JsonProperty("Ignore devices with matching ID")] [MarshalAs(UnmanagedType::U1)] bool ignore; @@ -143,6 +146,11 @@ public ref struct DriverSettings return minimumTime != ra::DEFAULT_TIME_MIN; } + bool ShouldSerializemaximumTime() + { + return maximumTime != ra::DEFAULT_TIME_MAX; + } + DriverSettings() { Marshal::PtrToStructure(IntPtr(&default_settings), this); |