summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authora1xd <[email protected]>2021-04-01 18:33:00 -0400
committera1xd <[email protected]>2021-04-01 18:33:00 -0400
commite9866f27d78d9909fd4639cbd14a54b8ad5c2ec1 (patch)
tree1254f1db0dfd39d76c20a1907380ecbb60f86ab4
parentadd flag to negate device match (diff)
downloadrawaccel-e9866f27d78d9909fd4639cbd14a54b8ad5c2ec1.tar.xz
rawaccel-e9866f27d78d9909fd4639cbd14a54b8ad5c2ec1.zip
driver - apply accel disregarding num packets
add setting for max time threshold
-rw-r--r--common/rawaccel-base.hpp4
-rw-r--r--common/rawaccel-validate.hpp4
-rw-r--r--driver/driver.cpp32
-rw-r--r--wrapper/wrapper.cpp8
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);