diff --git a/src/logid/CMakeLists.txt b/src/logid/CMakeLists.txt index e610233..7ece018 100644 --- a/src/logid/CMakeLists.txt +++ b/src/logid/CMakeLists.txt @@ -57,6 +57,7 @@ add_executable(logid backend/hidpp20/features/ReprogControls.cpp backend/hidpp20/features/HiresScroll.cpp backend/hidpp20/features/ChangeHost.cpp + backend/hidpp20/features/WirelessDeviceStatus.cpp backend/dj/Report.cpp util/mutex_queue.h util/workqueue.cpp diff --git a/src/logid/backend/hidpp20/features/WirelessDeviceStatus.cpp b/src/logid/backend/hidpp20/features/WirelessDeviceStatus.cpp new file mode 100644 index 0000000..d8c526b --- /dev/null +++ b/src/logid/backend/hidpp20/features/WirelessDeviceStatus.cpp @@ -0,0 +1,37 @@ +/* + * 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 +#include "WirelessDeviceStatus.h" + +using namespace logid::backend::hidpp20; + +WirelessDeviceStatus::WirelessDeviceStatus(Device* dev) : Feature(dev, ID) +{ +} + +WirelessDeviceStatus::Status WirelessDeviceStatus::statusBroadcastEvent( + const hidpp::Report &report) +{ + assert(report.function() == StatusBroadcast); + Status status = {}; + auto params = report.paramBegin(); + status.reconnection = params[0]; + status.reconfNeeded = params[1]; + status.powerSwitch = params[2]; + return status; +} \ No newline at end of file diff --git a/src/logid/backend/hidpp20/features/WirelessDeviceStatus.h b/src/logid/backend/hidpp20/features/WirelessDeviceStatus.h new file mode 100644 index 0000000..77d6f15 --- /dev/null +++ b/src/logid/backend/hidpp20/features/WirelessDeviceStatus.h @@ -0,0 +1,52 @@ +/* + * 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 . + * + */ +#ifndef LOGID_BACKEND_HIDPP20_FEATURE_WIRELESSDEVICESTATUS_H +#define LOGID_BACKEND_HIDPP20_FEATURE_WIRELESSDEVICESTATUS_H + +#include "../Feature.h" +#include "../feature_defs.h" + +namespace logid { +namespace backend { +namespace hidpp20 +{ + class WirelessDeviceStatus : public Feature + { + public: + static constexpr uint16_t ID = FeatureID::WIRELESS_DEVICE_STATUS; + virtual uint16_t getID() { return ID; } + + WirelessDeviceStatus(Device* dev); + + enum Event : uint8_t + { + StatusBroadcast = 0 + }; + + struct Status + { + bool reconnection; + bool reconfNeeded; + bool powerSwitch; + }; + + static Status statusBroadcastEvent(const hidpp::Report &report); + }; +}}} + +#endif //LOGID_BACKEND_HIDPP20_FEATURE_WIRELESSDEVICESTATUS_H