diff -r bb42abd9f510 -r cf77c218b0b1 cadMousePro-daemon/src/Daemon.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cadMousePro-daemon/src/Daemon.h Thu Aug 29 17:57:30 2019 +0200 @@ -0,0 +1,88 @@ +/** + * cadMousePro + * Copyright © 2019 František Kučera (Frantovo.cz, GlobalCode.info) + * + * 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 . + */ +#pragma once + +#include +#include +#include +#include + +#include "HID.h" +#include "CadMouseConfig.h" +#include "Common.h" + +class Daemon : public QObject, public QDBusContext { + Q_OBJECT; + +private: + + HIDDevice getMouse() { + return HIDDevice(VENDOR_ID, PRODUCT_ID, nullptr); + } + + void logException(const HIDException& e) { + std::wcout << L"HIDException: " << e.getMessage() << std::endl; + } +public: + + static unsigned short const VENDOR_ID = 0x256f; + static unsigned short const PRODUCT_ID = 0xc652; + + Daemon(QObject* parent = nullptr) : QObject(parent) { + } + + Q_PROPERTY(bool devicePresent READ devicePresent) + bool devicePresent() { + std::wcout << L"checking mouse presence" << std::endl; + try { + getMouse(); + return true; + } catch (const HIDException& e) { + logException(e); + return false; + } + } + + Q_PROPERTY(QString deviceName READ deviceName) + QString deviceName() { + std::wcout << L"reading mouse name" << std::endl; + try { + return QString::fromStdWString(getMouse().getProductName()); + } catch (HIDException& e) { + logException(e); + return QString(); + } + } + + void configure(bool liftOffDetection, bool smartScrolling, int frequency) { + std::wcout << L"configuring mouse" << std::endl; + try { + CadMouseConfig config; + config.setLiftOffDetection(liftOffDetection); + config.setSmartScrolling(smartScrolling); + config.setFrequency(Common::parseFrequency(std::to_wstring(frequency))); + getMouse().sendFeatureReport(config.serialize()); + } catch (HIDException& e) { + logException(e); + sendErrorReply(QDBusError::ErrorType::Failed, QString::fromStdWString(e.getMessage())); + } catch (CLIException& e) { + sendErrorReply(QDBusError::ErrorType::Failed, QString::fromStdWString(e.getMessage())); + } + } + +};