#ifndef _ED047TC1_H_ #define _ED047TC1_H_ #ifdef __cplusplus extern "C" { #endif /******************************************************************************/ /*** include files ***/ /******************************************************************************/ #include #include /******************************************************************************/ /*** macro definitions ***/ /******************************************************************************/ #if CONFIG_IDF_TARGET_ESP32 /* Config Reggister Control */ #define CFG_DATA GPIO_NUM_23 #define CFG_CLK GPIO_NUM_18 #define CFG_STR GPIO_NUM_0 /* Control Lines */ #define CKV GPIO_NUM_25 #define STH GPIO_NUM_26 /* Edges */ #define CKH GPIO_NUM_5 /* Data Lines */ #define D7 GPIO_NUM_22 #define D6 GPIO_NUM_21 #define D5 GPIO_NUM_27 #define D4 GPIO_NUM_2 #define D3 GPIO_NUM_19 #define D2 GPIO_NUM_4 #define D1 GPIO_NUM_32 #define D0 GPIO_NUM_33 #elif CONFIG_IDF_TARGET_ESP32S3 /* Config Reggister Control */ #define CFG_DATA GPIO_NUM_13 #define CFG_CLK GPIO_NUM_12 #define CFG_STR GPIO_NUM_0 /* Control Lines */ #define CKV GPIO_NUM_38 #define STH GPIO_NUM_40 /* Edges */ #define CKH GPIO_NUM_41 /* Data Lines */ #define D7 GPIO_NUM_7 #define D6 GPIO_NUM_6 #define D5 GPIO_NUM_5 #define D4 GPIO_NUM_4 #define D3 GPIO_NUM_3 #define D2 GPIO_NUM_2 #define D1 GPIO_NUM_1 #define D0 GPIO_NUM_8 #else #error "Unknown SOC" #endif /******************************************************************************/ /*** type definitions ***/ /******************************************************************************/ /******************************************************************************/ /*** exported variables ***/ /******************************************************************************/ /******************************************************************************/ /*** exported functions ***/ /******************************************************************************/ void epd_base_init(uint32_t epd_row_width); void epd_poweron(); void epd_poweroff(); /** * @brief Start a draw cycle. */ void epd_start_frame(); /** * @brief End a draw cycle. */ void epd_end_frame(); /** * @brief output row data * * @note Waits until all previously submitted data has been written. * Then, the following operations are initiated: * * 1. Previously submitted data is latched to the output register. * 2. The RMT peripheral is set up to pulse the vertical (gate) driver * for `output_time_dus` / 10 microseconds. * 3. The I2S peripheral starts transmission of the current buffer to * the source driver. * 4. The line buffers are switched. * * This sequence of operations allows for pipelining data preparation and * transfer, reducing total refresh times. */ void epd_output_row(uint32_t output_time_dus); /** * @brief Skip a row without writing to it. */ void epd_skip(); /** * @brief Get the currently writable line buffer. */ uint8_t* epd_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 epd_switch_buffer(); #ifdef __cplusplus } #endif #endif /******************************************************************************/ /*** END OF FILE ***/ /******************************************************************************/