// copyright (C) 2026 Allen Hill // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "avclan.hpp" #include "frame.hpp" #include #include namespace avclan { template concept Device = requires { std::integral_constant{}; } && requires(T dev, const Frame *in, Frame *out, detail::Error::Send err) { dev.init(); dev.handle(in, out); dev.enable(out); dev.react(out, err); { dev.pending() } -> std::convertible_to; dev.resolvepending(); dev.emit(out); }; } // namespace avclan