diff options
| author | a1xd <[email protected]> | 2020-10-25 23:57:44 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-10-25 23:57:44 -0400 |
| commit | 1601eaffd7c83888fd804c00eae0b0e8633232ee (patch) | |
| tree | 72beb1b8b32b82ebfd853c04fe85c1f67e1d4afe /common | |
| parent | Merge pull request #37 from JacobPalecki/GUI (diff) | |
| parent | update signed (diff) | |
| download | rawaccel-1.2.0.tar.xz rawaccel-1.2.0.zip | |
1.2.0
Diffstat (limited to 'common')
| -rw-r--r-- | common/accel-base.hpp | 1 | ||||
| -rw-r--r-- | common/rawaccel-settings.h | 4 | ||||
| -rw-r--r-- | common/rawaccel.hpp | 23 |
3 files changed, 23 insertions, 5 deletions
diff --git a/common/accel-base.hpp b/common/accel-base.hpp index ac7ac4d..b15d695 100644 --- a/common/accel-base.hpp +++ b/common/accel-base.hpp @@ -14,6 +14,7 @@ namespace rawaccel { double weight = 1; double scale_cap = 0; double gain_cap = 0; + double speed_cap = 0; }; template <typename Func> diff --git a/common/rawaccel-settings.h b/common/rawaccel-settings.h index aeb89e8..e9e158c 100644 --- a/common/rawaccel-settings.h +++ b/common/rawaccel-settings.h @@ -4,10 +4,12 @@ #include "accel-base.hpp" namespace rawaccel { + using milliseconds = double; + inline constexpr int MAX_POLL_RATE_KHZ = 8; + inline constexpr milliseconds DEFAULT_TIME_MIN = 1.0 / MAX_POLL_RATE_KHZ * 0.8; inline constexpr milliseconds WRITE_DELAY = 1000; - inline constexpr milliseconds DEFAULT_TIME_MIN = 0.4; enum class accel_mode { linear, classic, natural, naturalgain, power, motivity, noaccel diff --git a/common/rawaccel.hpp b/common/rawaccel.hpp index ecd3850..b160a42 100644 --- a/common/rawaccel.hpp +++ b/common/rawaccel.hpp @@ -195,16 +195,31 @@ namespace rawaccel { accel_variant accel; velocity_gain_cap gain_cap; accel_scale_clamp clamp; + double output_speed_cap = 0; accelerator(const accel_args& args, accel_mode mode, si_pair* lut = nullptr) : accel(args, mode, lut), gain_cap(args.gain_cap, accel), clamp(args.scale_cap) - {} + { + output_speed_cap = maxsd(args.speed_cap, 0); + } + + inline double apply(double speed) const { + double scale; - inline double apply(double speed) const { if (gain_cap.should_apply(speed)) { - return clamp(gain_cap.apply(speed)); + scale = gain_cap.apply(speed); + } + else { + scale = accel.apply(speed); } - else return clamp(accel.apply(speed)); + + scale = clamp(scale); + + if (output_speed_cap > 0 && (scale * speed) > output_speed_cap) { + scale = output_speed_cap / speed; + } + + return scale; } accelerator() = default; |