diff -r 148f8dd077e8 -r 465572518625 src/HID.h --- a/src/HID.h Mon Aug 19 17:21:02 2019 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,91 +0,0 @@ -/** - * 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 - -#include - -using Packet = std::vector; -static_assert(sizeof (uint8_t) == sizeof (unsigned char)); // unsigned char is used in the HID API library - -class HIDException { -private: - std::wstring message; -public: - - HIDException(std::wstring message) : message(message) { - } - - virtual ~HIDException() { - } - - const std::wstring getMessage() const { - return message; - } - -}; - -class HIDDevice { -private: - std::shared_ptr handle; - -public: - - HIDDevice(unsigned short vendorId, unsigned short productId, const wchar_t *serialNumber) { - int initError = hid_init(); // TODO: move to HIDContext class? - if (initError) throw HIDException(L"Unable to init HID API."); - handle.reset(hid_open(vendorId, productId, serialNumber), hid_close); - if (handle == nullptr) throw HIDException(L"Unable to open HID device. Are you root? Is the device present?"); - } - - virtual ~HIDDevice() { - hid_exit(); // TODO: move to HIDContext class? - } - - const std::wstring getManufacturerName() const { - std::array buffer; - int error = hid_get_manufacturer_string(handle.get(), buffer.data(), buffer.size()); - if (error) throw HIDException(L"Unable to get manufacturer name."); - return buffer.data(); - } - - const std::wstring getProductName() const { - std::array buffer; - int error = hid_get_product_string(handle.get(), buffer.data(), buffer.size()); - if (error) throw HIDException(L"Unable to get product name."); - return buffer.data(); - } - - const std::wstring getSerialNumber() const { - std::array buffer; - int error = hid_get_serial_number_string(handle.get(), buffer.data(), buffer.size()); - if (error) throw HIDException(L"Unable to get serial number."); - return buffer.data(); - } - - void sendFeatureReport(Packet data) { - int written = hid_send_feature_report(handle.get(), data.data(), data.size()); - if (written < 0) throw HIDException(L"Unable to send feature report."); - } - -};