// 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); private: void reset(); 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; std::atomic configured = 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; std::shared_ptr cpuSentinel; std::function messageProcessedCallback; };