Merge pull request #209 from a1xd/change-poll

Update time interval behavior given polling rate
This commit is contained in:
a1xd 2024-03-22 09:46:34 -04:00 committed by GitHub
commit fba570d2e8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 16 additions and 2 deletions

View file

@ -9,7 +9,7 @@ namespace rawaccel {
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 DEFAULT_TIME_MAX = 100;
inline constexpr milliseconds WRITE_DELAY = 1000;

View file

@ -12,6 +12,7 @@ namespace rawaccel {
struct device_config {
bool disable = false;
bool set_extra_info = false;
bool poll_time_lock = false;
int dpi = 0;
int polling_rate = 0;
time_clamp clamp;

View file

@ -373,11 +373,18 @@ DeviceSetup(WDFOBJECT hDevice)
auto set_ext_from_cfg = [devExt](const ra::device_config& cfg) {
devExt->enable = !cfg.disable;
devExt->set_extra_info = cfg.set_extra_info;
devExt->keep_time = cfg.polling_rate <= 0;
devExt->dpi_factor = (cfg.dpi > 0) ? (1000.0 / cfg.dpi) : 1;
bool rate_given = cfg.polling_rate > 0;
devExt->keep_time = !(cfg.poll_time_lock && rate_given);
if (devExt->keep_time) {
devExt->clamp = cfg.clamp;
if (rate_given) {
devExt->clamp.min = 1000.0 / cfg.polling_rate;
}
}
else {
milliseconds interval = 1000.0 / cfg.polling_rate;

View file

@ -175,6 +175,10 @@ public value struct DeviceConfig {
[JsonProperty(Required = Required::Default)]
bool setExtraInfo;
[MarshalAs(UnmanagedType::U1)]
[JsonProperty("Use constant time interval based on polling rate", Required = Required::Default)]
bool pollTimeLock;
[JsonProperty("DPI (normalizes sens to 1000dpi and converts input speed unit: counts/ms -> in/s)")]
int dpi;
@ -208,6 +212,7 @@ public value struct DeviceConfig {
{
disable = cfg.disable;
setExtraInfo = cfg.set_extra_info;
pollTimeLock = cfg.poll_time_lock;
dpi = cfg.dpi;
pollingRate = cfg.polling_rate;
minimumTime = cfg.clamp.min;
@ -595,6 +600,7 @@ public:
auto* base_data = reinterpret_cast<ra::io_base*>(byte_ptr);
base_data->default_dev_cfg.disable = defaultDeviceConfig.disable;
base_data->default_dev_cfg.set_extra_info = defaultDeviceConfig.setExtraInfo;
base_data->default_dev_cfg.poll_time_lock = defaultDeviceConfig.pollTimeLock;
base_data->default_dev_cfg.dpi = defaultDeviceConfig.dpi;
base_data->default_dev_cfg.polling_rate = defaultDeviceConfig.pollingRate;
base_data->default_dev_cfg.clamp.min = defaultDeviceConfig.minimumTime;