Files
product-vamp/include/vamp_zero/config.hpp
T
khodowany fe42d811fa
ci / checks (push) Successful in 42m54s
Formatting
2026-09-15 00:06:02 -05:00

75 lines
1.9 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>
#include <vamp_zero/types.hpp>
namespace vamp_zero {
struct runtime_config {
vamp_zero::hardware_mode hardware{vamp_zero::hardware_mode::REAL};
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{"/var/lib/product-vamp/vamp.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 track_enabled{false};
std::bool_t metronome_enabled{false};
std::uint32_t metronome_bpm{120};
std::uint32_t metronome_min_bpm{40};
std::uint32_t metronome_max_bpm{240};
std::uint32_t metronome_step{5};
std::uint32_t beats_per_bar{4};
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>;
}