Commit ab4023c4 authored by James Roy's avatar James Roy Committed by Benjamin Cabé
Browse files

drivers: display: Add SDL implementation example



Implement the '.clear' interface in the SDL driver
to allow the upper layers to use the display_clear
function.

Signed-off-by: default avatarJames Roy <rruuaanng@outlook.com>
parent 1a55ecfb
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
@@ -428,6 +428,45 @@ static int sdl_display_read(const struct device *dev, const uint16_t x,
	return 0;
}

static int sdl_display_clear(const struct device *dev)
{
	const struct sdl_display_config *config = dev->config;
	struct sdl_display_data *disp_data = dev->data;
	uint8_t bgcolor = 0x00u;
	size_t size;

	LOG_DBG("Clearing display screen to black");

	switch (disp_data->current_pixel_format) {
	case PIXEL_FORMAT_ARGB_8888:
		size = config->width * config->height * 4U;
		bgcolor = 0xFFu;
		break;
	case PIXEL_FORMAT_RGB_888:
		size = config->width * config->height * 3U;
		break;
	case PIXEL_FORMAT_MONO10:
		size = config->height * DIV_ROUND_UP(config->width,
						NUM_BITS(uint8_t));
		break;
	case PIXEL_FORMAT_MONO01:
		size = config->height * DIV_ROUND_UP(config->width,
						NUM_BITS(uint8_t));
		bgcolor = 0xFFu;
		break;
	case PIXEL_FORMAT_RGB_565:
	case PIXEL_FORMAT_BGR_565:
		size = config->width * config->height * 2U;
		break;
	default:
		LOG_ERR("Pixel format not supported");
	}
	LOG_DBG("size: %zu, bgcolor: %hhu", size, bgcolor);
	memset(disp_data->buf, bgcolor, size);

	return 0;
}

static int sdl_display_blanking_off(const struct device *dev)
{
	struct sdl_display_data *disp_data = dev->data;
@@ -506,6 +545,7 @@ static DEVICE_API(display, sdl_display_api) = {
	.blanking_off = sdl_display_blanking_off,
	.write = sdl_display_write,
	.read = sdl_display_read,
	.clear = sdl_display_clear,
	.get_capabilities = sdl_display_get_capabilities,
	.set_pixel_format = sdl_display_set_pixel_format,
};