Files
tide-display/ePaper-ESP-IDF/components/lilygo-epd47/i2s_data_bus.h
Peter Siegmund 09037c6df0 initial ESP-IDF project
Signed-off-by: Peter Siegmund <peter@rdkr.com>
2024-05-29 23:03:43 +02:00

104 lines
3.0 KiB
C

/**
* Implements a 8bit parallel interface to transmit pixel
* data to the display, based on the I2S peripheral.
*/
#ifndef _I2S_DATA_BUS_H_
#define _I2S_DATA_BUS_H_
#ifdef __cplusplus
extern "C" {
#endif
/******************************************************************************/
/*** include files ***/
/******************************************************************************/
#include <driver/gpio.h>
#include <esp_attr.h>
#include <stdint.h>
/******************************************************************************/
/*** macro definitions ***/
/******************************************************************************/
/******************************************************************************/
/*** type definitions ***/
/******************************************************************************/
/**
* I2S bus configuration parameters.
*/
typedef struct
{
/// GPIO numbers of the parallel bus pins.
gpio_num_t data_0;
gpio_num_t data_1;
gpio_num_t data_2;
gpio_num_t data_3;
gpio_num_t data_4;
gpio_num_t data_5;
gpio_num_t data_6;
gpio_num_t data_7;
/// Data clock pin.
gpio_num_t clock;
/// "Start Pulse", enabling data input on the slave device (active low)
gpio_num_t start_pulse;
// Width of a display row in pixels.
uint32_t epd_row_width;
} i2s_bus_config;
/******************************************************************************/
/*** exported variables ***/
/******************************************************************************/
/******************************************************************************/
/*** exported functions ***/
/******************************************************************************/
/**
* @brief Initialize the I2S data bus for communication with a 8bit parallel
* display interface.
*/
void i2s_bus_init(i2s_bus_config *cfg);
/**
* @brief Get the currently writable line buffer.
*/
volatile uint8_t IRAM_ATTR *i2s_get_current_buffer();
/**
* @brief Switches front and back line buffer.
*
* @note If the switched-to line buffer is currently in use, this function
* blocks until transmission is done.
*/
void IRAM_ATTR i2s_switch_buffer();
/**
* @brief Start transmission of the current back buffer.
*/
void IRAM_ATTR i2s_start_line_output();
/**
* @brief Returns true if there is an ongoing transmission.
*/
bool IRAM_ATTR i2s_is_busy();
/**
* @brief Give up allocated resources.
*/
void i2s_deinit();
#ifdef __cplusplus
}
#endif
#endif
/******************************************************************************/
/*** END OF FILE ***/
/******************************************************************************/