parent
4247c9fe7d
commit
320fdeb9d8
@ -0,0 +1,113 @@ |
|||||||
|
/*
|
||||||
|
* Copyright 2023 jacqueline <me@jacqueline.id.au> |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-3.0-only |
||||||
|
*/ |
||||||
|
|
||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <memory> |
||||||
|
|
||||||
|
#include "battery.hpp" |
||||||
|
#include "bluetooth.hpp" |
||||||
|
#include "database.hpp" |
||||||
|
#include "gpios.hpp" |
||||||
|
#include "nvs.hpp" |
||||||
|
#include "samd.hpp" |
||||||
|
#include "tag_parser.hpp" |
||||||
|
#include "touchwheel.hpp" |
||||||
|
#include "track_queue.hpp" |
||||||
|
|
||||||
|
namespace system_fsm { |
||||||
|
|
||||||
|
class ServiceLocator { |
||||||
|
public: |
||||||
|
static auto instance() -> ServiceLocator&; |
||||||
|
|
||||||
|
auto gpios() -> drivers::Gpios& { |
||||||
|
assert(gpios_ != nullptr); |
||||||
|
return *gpios_; |
||||||
|
} |
||||||
|
|
||||||
|
auto gpios(std::unique_ptr<drivers::Gpios> i) { gpios_ = std::move(i); } |
||||||
|
|
||||||
|
auto samd() -> drivers::Samd& { |
||||||
|
assert(samd_ != nullptr); |
||||||
|
return *samd_; |
||||||
|
} |
||||||
|
|
||||||
|
auto samd(std::unique_ptr<drivers::Samd> i) { samd_ = std::move(i); } |
||||||
|
|
||||||
|
auto nvs() -> drivers::NvsStorage& { |
||||||
|
assert(nvs_ != nullptr); |
||||||
|
return *nvs_; |
||||||
|
} |
||||||
|
|
||||||
|
auto nvs(std::unique_ptr<drivers::NvsStorage> i) { nvs_ = std::move(i); } |
||||||
|
|
||||||
|
auto bluetooth() -> drivers::Bluetooth& { |
||||||
|
assert(bluetooth_ != nullptr); |
||||||
|
return *bluetooth_; |
||||||
|
} |
||||||
|
|
||||||
|
auto bluetooth(std::unique_ptr<drivers::Bluetooth> i) { |
||||||
|
bluetooth_ = std::move(i); |
||||||
|
} |
||||||
|
|
||||||
|
auto battery() -> battery::Battery& { |
||||||
|
assert(battery_ != nullptr); |
||||||
|
return *battery_; |
||||||
|
} |
||||||
|
|
||||||
|
auto battery(std::unique_ptr<battery::Battery> i) { battery_ = std::move(i); } |
||||||
|
|
||||||
|
auto touchwheel() -> std::optional<drivers::TouchWheel*> { |
||||||
|
if (!touchwheel_) { |
||||||
|
return {}; |
||||||
|
} |
||||||
|
return touchwheel_.get(); |
||||||
|
} |
||||||
|
|
||||||
|
auto touchwheel(std::unique_ptr<drivers::TouchWheel> i) { |
||||||
|
touchwheel_ = std::move(i); |
||||||
|
} |
||||||
|
|
||||||
|
auto database() -> std::weak_ptr<database::Database> { return database_; } |
||||||
|
|
||||||
|
auto database(std::unique_ptr<database::Database> i) { |
||||||
|
database_ = std::move(i); |
||||||
|
} |
||||||
|
|
||||||
|
auto tag_parser() -> database::ITagParser& { |
||||||
|
assert(tag_parser_ != nullptr); |
||||||
|
return *tag_parser_; |
||||||
|
} |
||||||
|
|
||||||
|
auto tag_parser(std::unique_ptr<database::ITagParser> i) { |
||||||
|
tag_parser_ = std::move(i); |
||||||
|
} |
||||||
|
|
||||||
|
auto track_queue() -> audio::TrackQueue& { |
||||||
|
assert(queue_ != nullptr); |
||||||
|
return *queue_; |
||||||
|
} |
||||||
|
|
||||||
|
auto track_queue(std::unique_ptr<audio::TrackQueue> i) { |
||||||
|
queue_ = std::move(i); |
||||||
|
} |
||||||
|
|
||||||
|
private: |
||||||
|
std::unique_ptr<drivers::Gpios> gpios_; |
||||||
|
std::unique_ptr<drivers::Samd> samd_; |
||||||
|
std::unique_ptr<drivers::NvsStorage> nvs_; |
||||||
|
std::unique_ptr<drivers::TouchWheel> touchwheel_; |
||||||
|
std::unique_ptr<drivers::Bluetooth> bluetooth_; |
||||||
|
|
||||||
|
std::unique_ptr<audio::TrackQueue> queue_; |
||||||
|
std::unique_ptr<battery::Battery> battery_; |
||||||
|
|
||||||
|
std::shared_ptr<database::Database> database_; |
||||||
|
std::unique_ptr<database::ITagParser> tag_parser_; |
||||||
|
}; |
||||||
|
|
||||||
|
} // namespace system_fsm
|
@ -0,0 +1,21 @@ |
|||||||
|
/*
|
||||||
|
* Copyright 2023 jacqueline <me@jacqueline.id.au> |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-3.0-only |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "service_locator.hpp" |
||||||
|
|
||||||
|
#include <memory> |
||||||
|
|
||||||
|
#include "nvs.hpp" |
||||||
|
#include "touchwheel.hpp" |
||||||
|
|
||||||
|
namespace system_fsm { |
||||||
|
|
||||||
|
auto ServiceLocator::instance() -> ServiceLocator& { |
||||||
|
static ServiceLocator sInstance{}; |
||||||
|
return sInstance; |
||||||
|
} |
||||||
|
|
||||||
|
} // namespace system_fsm
|
Loading…
Reference in new issue