Files
Infinity_Vis_Rust/firmware/esp32_node/main/panel_driver.h
2026-04-17 01:33:23 +02:00

62 lines
1.5 KiB
C

#pragma once
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include "esp_err.h"
#define INFINITY_NODE_OUTPUT_COUNT 3
#define INFINITY_LEDS_PER_OUTPUT 106
typedef enum {
PANEL_SLOT_TOP = 0,
PANEL_SLOT_MIDDLE = 1,
PANEL_SLOT_BOTTOM = 2,
} panel_slot_t;
typedef enum {
PANEL_DRIVER_KIND_UNVALIDATED = 0,
PANEL_DRIVER_KIND_GPIO,
PANEL_DRIVER_KIND_RMT,
PANEL_DRIVER_KIND_I2S,
PANEL_DRIVER_KIND_UART,
PANEL_DRIVER_KIND_SPI,
PANEL_DRIVER_KIND_EXTERNAL,
} panel_driver_kind_t;
typedef struct {
uint8_t r;
uint8_t g;
uint8_t b;
} rgb8_t;
typedef struct {
panel_slot_t panel_slot;
const char *physical_output_name;
const char *driver_reference;
panel_driver_kind_t driver_kind;
uint16_t led_count;
bool reverse;
bool enabled;
} panel_output_config_t;
typedef struct panel_driver panel_driver_t;
typedef struct {
esp_err_t (*init)(panel_driver_t *driver);
esp_err_t (*configure)(panel_driver_t *driver, const panel_output_config_t *config);
esp_err_t (*submit_frame)(panel_driver_t *driver, panel_slot_t panel_slot, const rgb8_t *pixels, size_t pixel_count);
esp_err_t (*apply)(panel_driver_t *driver);
esp_err_t (*self_test)(panel_driver_t *driver);
} panel_driver_vtable_t;
struct panel_driver {
const panel_driver_vtable_t *vtable;
void *context;
};
esp_err_t panel_driver_validate_output(const panel_output_config_t *config);
esp_err_t panel_driver_self_test_all(panel_driver_t *driver, const panel_output_config_t *outputs, size_t output_count);