You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.4 KiB
97 lines
2.4 KiB
/* |
|
* 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 "util/log.h" |
|
#include "features/DPI.h" |
|
#include "Device.h" |
|
|
|
using namespace logid; |
|
using namespace logid::backend; |
|
|
|
Device::Device(std::string path, backend::hidpp::DeviceIndex index) : |
|
_hidpp20 (path, index), _path (std::move(path)), _index (index), |
|
_config (global_config, this) |
|
{ |
|
_init(); |
|
} |
|
|
|
Device::Device(const std::shared_ptr<backend::raw::RawDevice>& raw_device, |
|
hidpp::DeviceIndex index) : _hidpp20(raw_device, index), _path |
|
(raw_device->hidrawPath()), _index (index), |
|
_config (global_config, this) |
|
{ |
|
_init(); |
|
} |
|
|
|
void Device::_init() |
|
{ |
|
///TODO: Surely there's a better way of doing this |
|
try { |
|
_features.push_back(std::make_shared<features::DPI>(this)); |
|
} catch (backend::hidpp20::UnsupportedFeature& e) { |
|
} |
|
|
|
for(auto& feature: _features) |
|
feature->configure(); |
|
} |
|
|
|
std::string Device::name() |
|
{ |
|
return _hidpp20.name(); |
|
} |
|
|
|
uint16_t Device::pid() |
|
{ |
|
return _hidpp20.pid(); |
|
} |
|
|
|
void Device::sleep() |
|
{ |
|
logPrintf(INFO, "%s:%d fell asleep.", _path.c_str(), _index); |
|
} |
|
|
|
void Device::wakeup() |
|
{ |
|
logPrintf(INFO, "%s:%d woke up.", _path.c_str(), _index); |
|
} |
|
|
|
DeviceConfig& Device::config() |
|
{ |
|
return _config; |
|
} |
|
|
|
hidpp20::Device& Device::hidpp20() |
|
{ |
|
return _hidpp20; |
|
} |
|
|
|
DeviceConfig::DeviceConfig(const std::shared_ptr<Configuration>& config, Device* |
|
device) : _device (device), _config (config) |
|
{ |
|
try { |
|
_root_setting = config->getDevice(device->name()); |
|
} catch(Configuration::DeviceNotFound& e) { |
|
logPrintf(INFO, "Device %s not configured, using default config.", |
|
device->name().c_str()); |
|
} |
|
} |
|
|
|
libconfig::Setting& DeviceConfig::getSetting(std::string path) |
|
{ |
|
return _config->getSetting(_root_setting + '/' + path); |
|
}
|
|
|