#pragma once #include #include "event_bus.h" namespace roro { struct StorageState { bool present = false; uint64_t totalBytes = 0; uint64_t usedBytes = 0; int usedPercent = 0; int level = 0; // 0, 80, 90 or 100 (full) bool logsAllowed = false; bool capturesAllowed = false; }; // Applies the SD card rules (see CONTEXT.md): Storage Warning once per boot past 80 %, Logs stop // past 90 % to keep room for Captures, Captures stop when the card is full. class StorageMonitor { public: static constexpr uint64_t kFullReserveBytes = 2ull * 1024 * 1024; explicit StorageMonitor(EventBus& bus) : bus_(bus) {} void update(bool present, uint64_t totalBytes, uint64_t usedBytes); const StorageState& state() const { return state_; } private: EventBus& bus_; StorageState state_; bool warned_ = false; }; } // namespace roro