core(M0): монорепо-каркас — CMake (posix+esp-idf), платслой, лог, мини-httpd
- CMakeLists в корне: ветвление ESP_PLATFORM (idf_component_register, lwip/esp_timer/esp_hw_support/pthread) / POSIX (статическая библиотека fgl-aircon, C++20, -fno-exceptions -fno-rtti, -Werror). - src/ayla/platform: сокеты/потоки/CSPRNG/время; posix (getrandom, poll, pthread_join) и esp-idf (lwip_select, esp_fill_random, pthread-слой IDF); tcp_shutdown/tcp_local_port/thread_join для управляемой остановки. - src/ayla: log (sink, без printf); мини-httpd/1.1 (keep-alive, Content-Length, лимиты заголовков/тела, ephemeral-порт, жизненный цикл с гарантией завершения потока: shutdown(active)→join→close). - tests/ayla: platform (join, loopback+shutdown) и httpd (404, keep-alive, обработчик/парсинг, oversize-400, stop при живом соединении, стрим заголовков). doctest через FetchContent. - scripts/ci.sh: сборка+ctest. ESP-IDF v5.5.5 esp32: смоук-сборка с ядром как компонентом — Project build complete. Ревью под-агентом: 3 круга, все блокеры (жизненный цикл httpd) закрыты, APPROVED.
This commit is contained in:
32
src/ayla/log.hpp
Normal file
32
src/ayla/log.hpp
Normal file
@@ -0,0 +1,32 @@
|
||||
// Логирование ядра: без printf в stdout, вывод через настраиваемый sink.
|
||||
// Вызовы из внутреннего потока сессии; sink должен быть быстрым и реентерабельным.
|
||||
#pragma once
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
namespace fgl::ayla::log {
|
||||
|
||||
enum Level : int {
|
||||
kDebug = 0,
|
||||
kInfo = 1,
|
||||
kWarn = 2,
|
||||
kError = 3,
|
||||
};
|
||||
|
||||
using Sink = void (*)(int level, const char* msg, size_t len, void* ctx);
|
||||
|
||||
// Устанавливает приёмник логов (глобально). nullptr — логирование отключено.
|
||||
void set_sink(Sink sink, void* ctx);
|
||||
|
||||
// Форматирует в фиксированный буфер (без кучи) и отправляет в sink.
|
||||
void write(int level, const char* fmt, ...) __attribute__((format(printf, 2, 3)));
|
||||
|
||||
int min_level(); // по умолчанию kInfo
|
||||
void set_min_level(int level);
|
||||
|
||||
} // namespace fgl::ayla::log
|
||||
|
||||
#define FGL_LOGD(...) ::fgl::ayla::log::write(::fgl::ayla::log::kDebug, __VA_ARGS__)
|
||||
#define FGL_LOGI(...) ::fgl::ayla::log::write(::fgl::ayla::log::kInfo, __VA_ARGS__)
|
||||
#define FGL_LOGW(...) ::fgl::ayla::log::write(::fgl::ayla::log::kWarn, __VA_ARGS__)
|
||||
#define FGL_LOGE(...) ::fgl::ayla::log::write(::fgl::ayla::log::kError, __VA_ARGS__)
|
||||
Reference in New Issue
Block a user