Add ToggleHiresScroll action
This commit is contained in:
		@@ -22,6 +22,7 @@ add_executable(logid
 | 
				
			|||||||
        features/RemapButton.cpp
 | 
					        features/RemapButton.cpp
 | 
				
			||||||
        actions/Action.cpp
 | 
					        actions/Action.cpp
 | 
				
			||||||
        actions/KeypressAction.cpp
 | 
					        actions/KeypressAction.cpp
 | 
				
			||||||
 | 
					        actions/ToggleHiresScroll.cpp
 | 
				
			||||||
        actions/ToggleSmartShift.cpp
 | 
					        actions/ToggleSmartShift.cpp
 | 
				
			||||||
        backend/Error.cpp
 | 
					        backend/Error.cpp
 | 
				
			||||||
        backend/raw/DeviceMonitor.cpp
 | 
					        backend/raw/DeviceMonitor.cpp
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,6 +21,7 @@
 | 
				
			|||||||
#include "../util/log.h"
 | 
					#include "../util/log.h"
 | 
				
			||||||
#include "KeypressAction.h"
 | 
					#include "KeypressAction.h"
 | 
				
			||||||
#include "ToggleSmartShift.h"
 | 
					#include "ToggleSmartShift.h"
 | 
				
			||||||
 | 
					#include "ToggleHiresScroll.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace logid;
 | 
					using namespace logid;
 | 
				
			||||||
using namespace logid::actions;
 | 
					using namespace logid::actions;
 | 
				
			||||||
@@ -50,6 +51,8 @@ std::shared_ptr<Action> Action::makeAction(Device *device, libconfig::Setting
 | 
				
			|||||||
            return std::make_shared<KeypressAction>(device, setting);
 | 
					            return std::make_shared<KeypressAction>(device, setting);
 | 
				
			||||||
        else if(type == "togglesmartshift")
 | 
					        else if(type == "togglesmartshift")
 | 
				
			||||||
            return std::make_shared<ToggleSmartShift>(device, setting);
 | 
					            return std::make_shared<ToggleSmartShift>(device, setting);
 | 
				
			||||||
 | 
					        else if(type == "togglehiresscroll")
 | 
				
			||||||
 | 
					            return std::make_shared<ToggleHiresScroll>(device, setting);
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            throw InvalidAction(type);
 | 
					            throw InvalidAction(type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										64
									
								
								src/logid/actions/ToggleHiresScroll.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								src/logid/actions/ToggleHiresScroll.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * 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 <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#include "ToggleHiresScroll.h"
 | 
				
			||||||
 | 
					#include "../Device.h"
 | 
				
			||||||
 | 
					#include "../util/log.h"
 | 
				
			||||||
 | 
					#include "../util/thread.h"
 | 
				
			||||||
 | 
					#include "../backend/hidpp20/features/ReprogControls.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace logid::actions;
 | 
				
			||||||
 | 
					using namespace logid::backend;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ToggleHiresScroll::ToggleHiresScroll(Device *dev, libconfig::Setting &config) :
 | 
				
			||||||
 | 
					    Action (dev), _config (dev, config)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    _hires_scroll = _device->getFeature<features::HiresScroll>("hiresscroll");
 | 
				
			||||||
 | 
					    if(!_hires_scroll)
 | 
				
			||||||
 | 
					        logPrintf(WARN, "%s:%d: HiresScroll feature not found, cannot use "
 | 
				
			||||||
 | 
					                        "ToggleHiresScroll action.",
 | 
				
			||||||
 | 
					                  _device->hidpp20().devicePath().c_str(),
 | 
				
			||||||
 | 
					                  _device->hidpp20().devicePath().c_str());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ToggleHiresScroll::press()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    _pressed = true;
 | 
				
			||||||
 | 
					    if(_hires_scroll)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        thread::spawn([hires=this->_hires_scroll](){
 | 
				
			||||||
 | 
					            auto mode = hires->getMode();
 | 
				
			||||||
 | 
					            mode ^= backend::hidpp20::HiresScroll::HiRes;
 | 
				
			||||||
 | 
					            hires->setMode(mode);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ToggleHiresScroll::release()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    _pressed = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t ToggleHiresScroll::reprogFlags() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return hidpp20::ReprogControls::TemporaryDiverted;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ToggleHiresScroll::Config::Config(Device *device, libconfig::Setting &root) :
 | 
				
			||||||
 | 
					    Action::Config(device)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										48
									
								
								src/logid/actions/ToggleHiresScroll.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/logid/actions/ToggleHiresScroll.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * 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 <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#ifndef LOGID_ACTION_TOGGLEHIRESSCROLL_H
 | 
				
			||||||
 | 
					#define LOGID_ACTION_TOGGLEHIRESSCROLL_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "Action.h"
 | 
				
			||||||
 | 
					#include "../features/HiresScroll.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace logid {
 | 
				
			||||||
 | 
					namespace actions
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    class ToggleHiresScroll : public Action
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        ToggleHiresScroll(Device* dev, libconfig::Setting& config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        virtual void press();
 | 
				
			||||||
 | 
					        virtual void release();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        virtual uint8_t reprogFlags() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        class Config : public Action::Config
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					        public:
 | 
				
			||||||
 | 
					            explicit Config(Device* device, libconfig::Setting& root);
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    protected:
 | 
				
			||||||
 | 
					        Config _config;
 | 
				
			||||||
 | 
					        std::shared_ptr<features::HiresScroll> _hires_scroll;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif //LOGID_ACTION_TOGGLEHIRESSCROLL_H
 | 
				
			||||||
@@ -39,6 +39,16 @@ void HiresScroll::listen()
 | 
				
			|||||||
    ///TODO: Map hires scroll events
 | 
					    ///TODO: Map hires scroll events
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t HiresScroll::getMode()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return _hires_scroll.getMode();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void HiresScroll::setMode(uint8_t mode)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    _hires_scroll.setMode(mode);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HiresScroll::Config::Config(Device *dev) : DeviceFeature::Config(dev)
 | 
					HiresScroll::Config::Config(Device *dev) : DeviceFeature::Config(dev)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,6 +31,9 @@ namespace features
 | 
				
			|||||||
        virtual void configure();
 | 
					        virtual void configure();
 | 
				
			||||||
        virtual void listen();
 | 
					        virtual void listen();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        uint8_t getMode();
 | 
				
			||||||
 | 
					        void setMode(uint8_t mode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        class Config : public DeviceFeature::Config
 | 
					        class Config : public DeviceFeature::Config
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
        public:
 | 
					        public:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user