// Copyright (c) 2017-2023, 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 class WorkerDesktop : public sys::Worker { public: enum class Signal { unlockMTP }; WorkerDesktop(sys::Service *ownerServicePtr, std::function messageProcessedCallback, const sdesktop::USBSecurityModel &securityModel, const std::string &serialNumber, const std::string &caseColour, const std::string &rootPath); virtual bool init(std::list queues) override; void closeWorker(); bool handleMessage(std::uint32_t queueID) override final; void notify(Signal command); xQueueHandle getReceiveQueue() { return receiveQueue; } private: void reset(); void suspendUsb(); bool handleReceiveQueueMessage(std::shared_ptr &queue); bool handleSendQueueMessage(std::shared_ptr &queue); bool handleServiceQueueMessage(std::shared_ptr &queue); bool handleIrqQueueMessage(std::shared_ptr &queue); bool handleSignallingQueueMessage(std::shared_ptr &queue); std::atomic initialized = false; xQueueHandle receiveQueue; xQueueHandle irqQueue; const sdesktop::USBSecurityModel &securityModel; const std::string serialNumber; const std::string caseColour; std::string rootPath; sys::Service *ownerService = nullptr; sdesktop::endpoints::StateMachine parser; bsp::USBDeviceStatus usbStatus = bsp::USBDeviceStatus::Disconnected; std::shared_ptr cpuSentinel; std::function messageProcessedCallback; };