#pragma once template struct Checker { static constexpr bool value = v; }; namespace entry { enum Type : uint8_t { stop = 0, config = 1, set = 2, set_ts = 3, clear = 4, clear_ts = 5, tempo = 6, }; enum NextType { nt_none, nt_tone, nt_tempo, }; struct Tone { uint8_t index; uint8_t amplitude; uint16_t frequency; }; struct Tempo { uint32_t ticks; uint32_t us_per_tick; }; inline size_t get_size(Type type) { switch(type) { case Type::set: return 3; case Type::clear: return 1; case Type::set_ts: return 5; case Type::clear_ts: return 4; case Type::config: return 8; case Type::tempo: return 7; case Type::stop: default: return 1; } } };