// SPDX-License-Identifier: GPL-3.0-or-later // Copyright (C) 2025 - 2026, Patrick Schurig / ETM PowerSync #pragma once #include #include "../types/loadaction.h" #include "../types/loaddescriptor.h" #include "../types/surpluscontext.h" // Vue runtime minimale qu'un adaptateur expose à l'arbitre. struct LoadTelemetry { double currentPowerW = 0; bool available = true; // faux si l'appareil nymea est absent/erreur QDateTime lastActionAt; }; // Interface pure — les implémentations concrètes héritent de QObject + ILoadAdapter. // Signaux (telemetryChanged, descriptorChanged) déclarés dans les classes concrètes. class ILoadAdapter { public: virtual ~ILoadAdapter() = default; // Déclaration statique : capacités, limites, priorité, needs. virtual LoadDescriptor descriptor() const = 0; // Télémétrie runtime (courant, disponibilité, dernière action). virtual LoadTelemetry telemetry() const = 0; // Construit l'entrée §5 loads[] pour SurplusContext. // Inclut declared, telemetry type-spécifique, learned courant. virtual LoadContext toLoadContext() const = 0; // Applique l'action. Retourne ce qui a réellement été appliqué // (après écrêtage matériel). L'arbitre a déjà écrêté selon les limites // et le budget — c'est le second filet. virtual LoadAction applyAction(const LoadAction &action) = 0; };