diff --git a/src/logid/Configuration.cpp b/src/logid/Configuration.cpp index 63e8817..ee3aad8 100644 --- a/src/logid/Configuration.cpp +++ b/src/logid/Configuration.cpp @@ -27,8 +27,8 @@ using namespace logid; using namespace libconfig; using namespace logid::config; -Configuration::Configuration(const std::string& config_file) : - _config_file (config_file) +Configuration::Configuration(std::string config_file) : + _config_file (std::move(config_file)) { try { _config.readFile(_config_file); diff --git a/src/logid/Configuration.h b/src/logid/Configuration.h index 41cfbae..41e8b4b 100644 --- a/src/logid/Configuration.h +++ b/src/logid/Configuration.h @@ -39,7 +39,7 @@ namespace logid class Configuration : public config::Config { public: - explicit Configuration(const std::string& config_file); + explicit Configuration(std::string config_file); Configuration() = default; // Reloading is not safe, references will be invalidated diff --git a/src/logid/actions/ChangeDPI.cpp b/src/logid/actions/ChangeDPI.cpp index 782f1de..5447985 100644 --- a/src/logid/actions/ChangeDPI.cpp +++ b/src/logid/actions/ChangeDPI.cpp @@ -29,7 +29,12 @@ const char* ChangeDPI::interface_name = "ChangeDPI"; ChangeDPI::ChangeDPI( Device *device, config::ChangeDPI& config, const std::shared_ptr& parent) : - Action(device, interface_name), _config (config) + Action(device, interface_name, { + { + {"GetConfig", {this, &ChangeDPI::getConfig, {"change", "sensor"}}}, + {"SetChange", {this, &ChangeDPI::setChange, {"change"}}}, + {"SetSensor", {this, &ChangeDPI::setSensor, {"sensor", "reset"}}}, + }, {}, {} }), _config (config) { _dpi = _device->getFeature("dpi"); if(!_dpi) @@ -39,6 +44,25 @@ ChangeDPI::ChangeDPI( _device->hidpp20().deviceIndex()); } +std::tuple ChangeDPI::getConfig() +{ + return {_config.inc.value_or(0), _config.sensor.value_or(0)}; +} + +void ChangeDPI::setChange(int16_t change) +{ + _config.inc = change; +} + +void ChangeDPI::setSensor(uint8_t sensor, bool reset) +{ + if (reset) { + _config.sensor.reset(); + } else { + _config.sensor = sensor; + } +} + void ChangeDPI::press() { _pressed = true; diff --git a/src/logid/actions/ChangeDPI.h b/src/logid/actions/ChangeDPI.h index 4f83065..041eb56 100644 --- a/src/logid/actions/ChangeDPI.h +++ b/src/logid/actions/ChangeDPI.h @@ -35,6 +35,10 @@ namespace logid { virtual void press(); virtual void release(); + std::tuple getConfig(); + void setChange(int16_t change); + void setSensor(uint8_t sensor, bool reset); + virtual uint8_t reprogFlags() const; protected: diff --git a/src/logid/actions/CycleDPI.cpp b/src/logid/actions/CycleDPI.cpp index 010a8e6..dd78acc 100644 --- a/src/logid/actions/CycleDPI.cpp +++ b/src/logid/actions/CycleDPI.cpp @@ -28,8 +28,13 @@ using namespace libconfig; const char* CycleDPI::interface_name = "CycleDPI"; CycleDPI::CycleDPI(Device* device, config::CycleDPI& config, - const std::shared_ptr& parent) : - Action (device, interface_name), + [[maybe_unused]] const std::shared_ptr& parent) : + Action (device, interface_name, { + { + {"GetDPIs", {this, &CycleDPI::getDPIs, {"dpis"}}}, + {"SetDPIs", {this, &CycleDPI::setDPIs, {"dpis"}}} + }, {}, {} + }), _config (config) { _dpi = _device->getFeature("dpi"); @@ -44,6 +49,20 @@ CycleDPI::CycleDPI(Device* device, config::CycleDPI& config, } } +std::vector CycleDPI::getDPIs() +{ + std::lock_guard lock(_dpi_lock); + auto dpis = _config.dpis.value_or(std::list()); + return {dpis.begin(), dpis.end()}; +} + +void CycleDPI::setDPIs(const std::vector& dpis) +{ + std::lock_guard lock(_dpi_lock); + _config.dpis.emplace(dpis.begin(), dpis.end()); + _current_dpi = _config.dpis->cbegin(); +} + void CycleDPI::press() { _pressed = true; diff --git a/src/logid/actions/CycleDPI.h b/src/logid/actions/CycleDPI.h index 8f2cbfa..d55e9f3 100644 --- a/src/logid/actions/CycleDPI.h +++ b/src/logid/actions/CycleDPI.h @@ -35,6 +35,9 @@ namespace actions { virtual void press(); virtual void release(); + std::vector getDPIs(); + void setDPIs(const std::vector& dpis); + virtual uint8_t reprogFlags() const; protected: diff --git a/src/logid/actions/gesture/Gesture.cpp b/src/logid/actions/gesture/Gesture.cpp index 85168ec..deacfaa 100644 --- a/src/logid/actions/gesture/Gesture.cpp +++ b/src/logid/actions/gesture/Gesture.cpp @@ -16,7 +16,6 @@ * */ -#include #include #include "Gesture.h" #include "ReleaseGesture.h" @@ -71,20 +70,17 @@ std::shared_ptr Gesture::makeGesture( { if(type == AxisGesture::interface_name) { config = config::AxisGesture(); - return makeGesture(device, config, parent); } else if(type == IntervalGesture::interface_name) { config = config::IntervalGesture(); - return makeGesture(device, config, parent); } else if(type == ReleaseGesture::interface_name) { - config = config::IntervalGesture(); - return makeGesture(device, config, parent); + config = config::ReleaseGesture(); } else if(type == ThresholdGesture::interface_name) { config = config::ThresholdGesture(); - return makeGesture(device, config, parent); } else if(type == NullGesture::interface_name) { config = config::NoGesture(); - return makeGesture(device, config, parent); + } else { + throw InvalidGesture(); } - throw InvalidGesture(); + return makeGesture(device, config, parent); }