rawaccel/common/rawaccel-base.hpp
a1xd 5b659e1cfb add per-device configuration
adds input and [in, out] cap for classic mode
adds input cap for power mode
change wrapper/input, now gets useful device names
change (now dev specific) dpi to adjust sensitivity
change y sensitivity to y/x ratio
remove spaced LUTs

grapher and convert do not build
2021-09-23 22:28:44 -04:00

93 lines
2.2 KiB
C++

#pragma once
#include "vec2.h"
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;
inline constexpr size_t POOL_SIZE = 1024 * 512;
inline constexpr size_t MAX_DEV_ID_LEN = 200;
inline constexpr size_t MAX_NAME_LEN = 256;
inline constexpr size_t LUT_RAW_DATA_CAPACITY = 258;
inline constexpr size_t LUT_POINTS_CAPACITY = LUT_RAW_DATA_CAPACITY / 2;
inline constexpr double MAX_NORM = 16;
inline constexpr double PI = 3.14159265358979323846;
inline constexpr bool LEGACY = 0;
inline constexpr bool GAIN = 1;
enum class accel_mode {
classic,
jump,
natural,
motivity,
power,
lookup,
noaccel
};
enum class classic_cap_mode {
io, in, out
};
struct accel_args {
accel_mode mode = accel_mode::noaccel;
bool gain = 1;
double offset = 0;
double acceleration = 0.005;
double decay_rate = 0.1;
double growth_rate = 1;
double motivity = 1.5;
double exponent_classic = 2;
double scale = 1;
double weight = 1;
double exponent_power = 0.05;
double limit = 1.5;
double midpoint = 5;
double smooth = 0.5;
vec2d cap = { 15, 1.5 };
classic_cap_mode cap_mode = classic_cap_mode::out;
int length = 0;
mutable float data[LUT_RAW_DATA_CAPACITY] = {};
};
struct profile {
wchar_t name[MAX_NAME_LEN] = L"default";
bool whole = true;
double lp_norm = 2;
vec2d domain_weights = { 1, 1 };
vec2d range_weights = { 1, 1 };
double sensitivity = 1;
double yx_sens_ratio = 1;
accel_args accel_x;
accel_args accel_y;
double speed_min = 0;
double speed_max = 0;
vec2d dir_multipliers = { 1, 1 };
double degrees_rotation = 0;
double degrees_snap = 0;
};
}