summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/accel-base.hpp1
-rw-r--r--common/rawaccel-settings.h4
-rw-r--r--common/rawaccel.hpp23
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;