// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include #include #include #include #include #include #include #include #include #include namespace constants { constexpr auto usbSuspendTimeout = std::chrono::seconds{1}; } // namespace constants class WorkerDesktop : public sys::Worker { public: WorkerDesktop(sys::Service *ownerServicePtr, const sdesktop::USBSecurityModel &securityModel, const std::string serialNumber); virtual bool init(std::list queues) override; virtual bool deinit() override; bool reinit(const std::filesystem::path &path); bool handleMessage(uint32_t queueID) override final; xQueueHandle getReceiveQueue() { return receiveQueue; } private: void suspendUsb(); bool stateChangeWait(); bool initialized = false; xQueueHandle receiveQueue; xQueueHandle irqQueue; const sdesktop::USBSecurityModel &securityModel; const std::string serialNumber; sys::Service *ownerService = nullptr; sdesktop::endpoints::StateMachine parser; sys::TimerHandle usbSuspendTimer; bsp::USBDeviceStatus usbStatus = bsp::USBDeviceStatus::Disconnected; std::shared_ptr cpuSentinel; };