new module

This commit is contained in:
2025-12-09 11:48:31 +00:00
parent 4820d9111e
commit e6e2622a95
98 changed files with 5349 additions and 8607 deletions

View File

@@ -0,0 +1,18 @@
// components/scheduler/include/scheduler.h
#pragma once
#include <stdbool.h>
#include "scheduler_types.h"
#ifdef __cplusplus
extern "C" {
#endif
void scheduler_init(void);
void scheduler_set_config(const sched_config_t *cfg);
sched_config_t scheduler_get_config(void);
bool scheduler_is_allowed_now(void);
#ifdef __cplusplus
}
#endif

View File

@@ -0,0 +1,17 @@
// scheduler_events.h
#pragma once
#include "esp_event.h"
#include <stdbool.h>
ESP_EVENT_DECLARE_BASE(SCHED_EVENTS);
typedef enum
{
SCHED_EVENT_INIT = 0, // envia estado inicial
SCHED_EVENT_WINDOW_CHANGED, // allowed_now mudou
} sched_event_id_t;
typedef struct
{
bool allowed_now;
} sched_event_state_t;

View File

@@ -0,0 +1,31 @@
// components/scheduler/include/scheduler_types.h
#pragma once
#include <stdbool.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
SCHED_MODE_DISABLED = 0, // não faz gating
SCHED_MODE_SIMPLE, // por ex: janela diária única
SCHED_MODE_WEEKLY // por ex: janelas por dia da semana
} sched_mode_t;
typedef struct {
bool enabled; // gating ativo?
sched_mode_t mode;
// exemplo bem simples: uma janela diária [start_min..end_min[
// minutos desde meia-noite, 0..1439
uint16_t start_min;
uint16_t end_min;
} sched_config_t;
const char *sched_mode_to_str(sched_mode_t mode);
bool sched_mode_from_str(const char *s, sched_mode_t *out);
#ifdef __cplusplus
}
#endif