Initial commit
This commit is contained in:
61
firmware/esp32_node/main/panel_driver.h
Normal file
61
firmware/esp32_node/main/panel_driver.h
Normal file
@@ -0,0 +1,61 @@
|
||||
#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);
|
||||
|
||||
Reference in New Issue
Block a user