62 lines
1.5 KiB
C
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);
|
|
|