/* * 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 "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& 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(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& 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); }