forked from espressif/esp-idf
rgb_lcd: added API to get the frame buffer(s)
This commit is contained in:
@@ -168,6 +168,19 @@ esp_err_t esp_lcd_rgb_panel_register_event_callbacks(esp_lcd_panel_handle_t pane
|
|||||||
*
|
*
|
||||||
* @param panel LCD panel handle, returned from `esp_lcd_new_rgb_panel()`
|
* @param panel LCD panel handle, returned from `esp_lcd_new_rgb_panel()`
|
||||||
* @param freq_hz Frequency of pixel clock, in Hz
|
* @param freq_hz Frequency of pixel clock, in Hz
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the address of the frame buffer(s) that allocated by the driver
|
||||||
|
*
|
||||||
|
* @param[in] panel LCD panel handle, returned from `esp_lcd_new_rgb_panel()`
|
||||||
|
* @param[in] fb_num Number of frame buffer(s) to get. This value must be the same as the number of the following parameters.
|
||||||
|
* @param[out] fb0 Returned address of the frame buffer 0
|
||||||
|
* @param[out] ... List of other frame buffer addresses
|
||||||
|
* @return
|
||||||
|
* - ESP_ERR_INVALID_ARG: Get frame buffer address failed because of invalid argument
|
||||||
|
* - ESP_OK: Get frame buffer address successfully
|
||||||
|
*/
|
||||||
|
esp_err_t esp_lcd_rgb_panel_get_frame_buffer(esp_lcd_panel_handle_t panel, uint32_t fb_num, void **fb0, ...);
|
||||||
* @return
|
* @return
|
||||||
* - ESP_ERR_NOT_SUPPORTED if frequency is unreachable
|
* - ESP_ERR_NOT_SUPPORTED if frequency is unreachable
|
||||||
* - ESP_ERR_INVALID_ARG if parameter panel is invalid
|
* - ESP_ERR_INVALID_ARG if parameter panel is invalid
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdarg.h>
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -38,7 +39,7 @@
|
|||||||
#include "soc/lcd_periph.h"
|
#include "soc/lcd_periph.h"
|
||||||
#include "hal/lcd_hal.h"
|
#include "hal/lcd_hal.h"
|
||||||
#include "hal/lcd_ll.h"
|
#include "hal/lcd_ll.h"
|
||||||
#include <rom/cache.h>
|
#include "rom/cache.h"
|
||||||
|
|
||||||
#if CONFIG_LCD_RGB_ISR_IRAM_SAFE
|
#if CONFIG_LCD_RGB_ISR_IRAM_SAFE
|
||||||
#define LCD_RGB_INTR_ALLOC_FLAGS (ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_INTRDISABLED)
|
#define LCD_RGB_INTR_ALLOC_FLAGS (ESP_INTR_FLAG_IRAM | ESP_INTR_FLAG_INTRDISABLED)
|
||||||
@@ -319,6 +320,24 @@ esp_err_t esp_lcd_rgb_panel_register_event_callbacks(esp_lcd_panel_handle_t pane
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
esp_err_t esp_lcd_rgb_panel_get_frame_buffer(esp_lcd_panel_handle_t panel, uint32_t fb_num, void **fb0, ...)
|
||||||
|
{
|
||||||
|
ESP_RETURN_ON_FALSE(panel, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
|
||||||
|
ESP_RETURN_ON_FALSE(fb_num && fb_num <= 2, ESP_ERR_INVALID_ARG, TAG, "invalid frame buffer number");
|
||||||
|
esp_rgb_panel_t *rgb_panel = __containerof(panel, esp_rgb_panel_t, base);
|
||||||
|
void **fb_itor = fb0;
|
||||||
|
va_list args;
|
||||||
|
va_start(args, fb0);
|
||||||
|
for (int i = 0; i < fb_num; i++) {
|
||||||
|
if (fb_itor) {
|
||||||
|
*fb_itor = rgb_panel->fbs[i];
|
||||||
|
fb_itor = va_arg(args, void **);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
va_end(args);
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static esp_err_t rgb_panel_del(esp_lcd_panel_t *panel)
|
static esp_err_t rgb_panel_del(esp_lcd_panel_t *panel)
|
||||||
{
|
{
|
||||||
esp_rgb_panel_t *rgb_panel = __containerof(panel, esp_rgb_panel_t, base);
|
esp_rgb_panel_t *rgb_panel = __containerof(panel, esp_rgb_panel_t, base);
|
||||||
|
Reference in New Issue
Block a user