Files
khodowany 82349cf897
ci / checks (push) Failing after 23m37s
Playback
2026-10-05 23:41:11 -05:00

69 lines
1.7 KiB
C++

#pragma once
#include <chrono>
#include <cstdint>
#include <expected>
#include <string>
#include <boost/json/value.hpp>
#include <ligo.hpp>
#include <luma.hpp>
#include <modulus.hpp>
#include <modulus/types.hpp>
namespace vamp_zero {
struct runtime_config {
std::bool_t headless{false};
std::bool_t exit_after_startup{false};
std::string assets_path{"/usr/share/product_vamp"};
std::string heartbeat_path{"/run/product_vamp/heartbeat.json"};
};
struct database_config {
std::string path{"/usr/share/product_vamp/catalog.db"};
};
struct control_config {
ligo::endpoint_config endpoint{
.name = "product_vamp_control",
.protocol = ligo::protocol::HTTP,
.bind = "0.0.0.0:8080",
.timeout = std::chrono::milliseconds{5000},
.http = {
.max_body_size = 64U * 1024U,
},
};
std::string ap_ssid{"Vamp Control"};
std::string ap_passphrase{"vamp-control"};
std::string ap_interface{"wlan0"};
std::string zero_ip{"192.168.42.1"};
std::string zero_cidr{"192.168.42.1/24"};
};
struct audio_config {
std::bool_t enabled{true};
std::bool_t backing_enabled{false};
std::bool_t metronome_enabled{false};
std::uint32_t tempo_bpm{120};
std::float32_t master_volume{0.70F};
std::float32_t metronome_volume{0.45F};
};
struct config {
modulus::config modulus{};
vamp_zero::runtime_config runtime{};
vamp_zero::database_config database{};
vamp_zero::control_config control{};
vamp_zero::audio_config audio{};
luma::application_config display{.title = "Product Vamp"};
};
auto parse_config(boost::json::value const &value) -> std::expected<vamp_zero::config, modulus::error>;
auto load_config(std::string const &path) -> std::expected<vamp_zero::config, modulus::error>;
}