From 5abf777e00ccc86214480193c5798fb0c5363892 Mon Sep 17 00:00:00 2001 From: pixl Date: Thu, 2 Jul 2020 14:50:40 -0400 Subject: [PATCH] Add SmartShift hidpp20 feature --- src/logid/CMakeLists.txt | 1 + .../backend/hidpp20/features/SmartShift.cpp | 47 ++++++++++++++++ .../backend/hidpp20/features/SmartShift.h | 54 +++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 src/logid/backend/hidpp20/features/SmartShift.cpp create mode 100644 src/logid/backend/hidpp20/features/SmartShift.h diff --git a/src/logid/CMakeLists.txt b/src/logid/CMakeLists.txt index 733ed0d..4d0962e 100644 --- a/src/logid/CMakeLists.txt +++ b/src/logid/CMakeLists.txt @@ -35,6 +35,7 @@ add_executable(logid backend/hidpp20/features/DeviceName.cpp backend/hidpp20/features/Reset.cpp backend/hidpp20/features/AdjustableDPI.cpp + backend/hidpp20/features/SmartShift.cpp backend/dj/Report.cpp util/mutex_queue.h util/thread.cpp diff --git a/src/logid/backend/hidpp20/features/SmartShift.cpp b/src/logid/backend/hidpp20/features/SmartShift.cpp new file mode 100644 index 0000000..2170f10 --- /dev/null +++ b/src/logid/backend/hidpp20/features/SmartShift.cpp @@ -0,0 +1,47 @@ +/* + * Copyright 2019-2020 PixlOne + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#include "SmartShift.h" + +using namespace logid::backend::hidpp20; + +SmartShift::SmartShift(Device* dev) : Feature(dev, ID) +{ +} + +SmartShift::SmartshiftStatus SmartShift::getStatus() +{ + std::vector params(0); + SmartshiftStatus status{}; + auto response = callFunction(GetStatus, params); + status.active = response[0]-1; + status.autoDisengage = response[1]; + status.defaultAutoDisengage = response[2]; + return status; +} + +void SmartShift::setStatus(SmartshiftStatus status) +{ + std::vector params(3); + if(status.setActive) + params[0] = status.active + 1; + if(status.setAutoDisengage) + params[1] = status.autoDisengage; + if(status.setDefaultAutoDisengage) + params[2] = status.defaultAutoDisengage; + callFunction(SetStatus, params); +} \ No newline at end of file diff --git a/src/logid/backend/hidpp20/features/SmartShift.h b/src/logid/backend/hidpp20/features/SmartShift.h new file mode 100644 index 0000000..95717f5 --- /dev/null +++ b/src/logid/backend/hidpp20/features/SmartShift.h @@ -0,0 +1,54 @@ +/* + * Copyright 2019-2020 PixlOne + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#ifndef LOGID_BACKEND_HIDPP20_FEATURE_SMARTSHIFT_H +#define LOGID_BACKEND_HIDPP20_FEATURE_SMARTSHIFT_H + +#include "../feature_defs.h" +#include "../Feature.h" + +namespace logid { +namespace backend { +namespace hidpp20 +{ + class SmartShift : public Feature + { + public: + static const uint16_t ID = FeatureID::SMART_SHIFT; + virtual uint16_t getID() { return ID; } + + enum Function { + GetStatus = 0, + SetStatus = 1 + }; + + SmartShift(Device* dev); + + struct SmartshiftStatus + { + bool active; + uint8_t autoDisengage; + uint8_t defaultAutoDisengage; + bool setActive, setAutoDisengage, setDefaultAutoDisengage; + }; + + SmartshiftStatus getStatus(); + void setStatus(SmartshiftStatus status); + }; +}}} + +#endif //LOGID_BACKEND_HIDPP20_FEATURE_SMARTSHIFT_H