Files
MuditaOS/module-bluetooth/Bluetooth/WorkerController.hpp
Piotr Tański 1db3f19205 [EGD-5472] Bluetooth worker state machine
State machine POC implemented using SML library.
2021-02-03 12:48:07 +01:00

51 lines
1.5 KiB
C++

// 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 "CommandHandler.hpp"
#include "interface/BluetoothDriver.hpp"
#include <functional>
#include <memory>
namespace bluetooth
{
using DeviceRegistrationFunction = std::function<Error::Code()>;
class AbstractController
{
public:
virtual ~AbstractController() noexcept = default;
virtual void turnOn() = 0;
virtual void turnOff() = 0;
virtual void shutdown() = 0;
virtual auto isOn() const -> bool = 0;
virtual auto isTerminated() const -> bool = 0;
virtual void processCommand(Command command) = 0;
};
class StatefulController : public AbstractController
{
public:
StatefulController(std::shared_ptr<AbstractDriver> &&driver,
std::shared_ptr<AbstractCommandHandler> &&handler,
DeviceRegistrationFunction &&registerDevice);
~StatefulController() noexcept override;
void turnOn() override;
void turnOff() override;
void shutdown() override;
[[nodiscard]] auto isOn() const -> bool override;
[[nodiscard]] auto isTerminated() const -> bool override;
void processCommand(Command command) override;
private:
class Impl;
std::unique_ptr<Impl> pimpl;
};
} // namespace bluetooth