Руководство по разработке дисплея Allwinner Tina Linux поддерживает Baiwen.com T113 D1-H Nezha DongshanPI-D1s V853-Pro и другие платы разработки.
Руководство по разработке дисплея Allwinner Tina Linux поддерживает Baiwen.com T113 D1-H Nezha DongshanPI-D1s V853-Pro и другие платы разработки.

1 Обзор

Позвольте разработчикам приложений дисплея понять интерфейс и процесс использования драйвера дисплея, а также быстро приступить к разработке, чтобы новые люди могли быстро понять интерфейс драйвера при принятии на себя работу, а также отлаживать и устранять проблемы. Платформа Sunxi DE1.0/DE2.0. Разработчики приложений, связанных с отображением, разработчики других модулей, связанных с отображением, и новички.

2 Введение в модуль

2.1 Знакомство с функциями модуля

Рисунок 2-1: Блок-схема модуля

Блок-схема этого модуля аналогична приведенной выше и состоит из механизма отображения (DE) и различных типов контроллеров (tcon). После того как входные слои (слои) обработаны в DE для отображения, они выводятся на устройство отображения через один или несколько интерфейсов.

Дисплей, чтобы реализовать функцию синтеза слоев, отображаемых многими приложениями, и представления их пользователю на дисплее. DE имеет 2 независимых блока (может обозначаться как de0, de1), которые соответственно могут принимать слои пользовательского ввода для синтеза.

Вывод на разные мониторы для двойного дисплея. Каждый независимый блок DE имеет 1-4 канала (обычно у de0 — 4, а у de1 — 2). Каждый канал может одновременно обрабатывать и принимать 4 файла одного формата.

слои. Платформа Sunxi разделена на видеоканал и канал пользовательского интерфейса. Видеоканал является мощным и может поддерживать формат YUV и слои RGB. Каналы пользовательского интерфейса поддерживают только слои RGB.

Проще говоря, основные функции дисплейного модуля следующие:

• Поддержка вывода ЖК-дисплея (hv/lvds/cpu/dsi). • Поддержка вывода на два дисплея. • Поддерживает многослойное наложение и обработку смешивания. • Поддерживает обработку различных эффектов отображения (альфа, цветовая клавиша, улучшение изображения, регулировка яркости/контрастности/насыщенности/цветности). •Поддерживает интеллектуальную регулировку подсветки. • Поддерживает несколько входных форматов данных изображения (arg, yuv). • Поддержка масштабирования изображения. • Поддерживает снимки экрана. • Поддержка преобразования изображений.

2.2 Введение в связанные термины

2.2.1 Введение в аппаратную терминологию

Таблица 2-1: Введение в термины аппаратного обеспечения

термин

объяснять

de

Механизм отображения, механизм отображения — это аппаратный модуль, отвечающий за наложение, смешивание, масштабирование и т. д. входных нескольких слоев.

channel

Аппаратный канал содержит несколько блоков обработки слоев, которые могут одновременно обрабатывать несколько (обычно 4) слоев одного и того же формата.

layer

Блок обработки слоев может обрабатывать входное изображение, разделенное на типы видео и пользовательского интерфейса в соответствии с поддерживаемыми форматами изображений.

capture

Сделайте снимок экрана и сохраните вывод de в локальный файл.

alpha

Прозрачность, определяющая прозрачность соответствующего изображения при наложении.

transform

Преобразование изображения, такое как перевод, вращение и т. д.

overlay

Наложение изображений — эффект последовательного наложения изображений. Те, у кого z-порядок больше, находятся ближе к наблюдателю и будут блокировать те, у кого z-порядок меньше.

blending

Смешивание изображений, эффект объединения изображений в соответствии с соотношением альфа.

enhance

Улучшение изображения — процесс или метод целенаправленной обработки данных изображения для улучшения эффектов изображения.

2.2.2 Введение в терминологию программного обеспечения

Таблица 2-2: Таблица введения терминов программного обеспечения

термин

объяснять

fb

Фреймбуфер (framebuffer) — интерфейс, предоставляемый Linux для устройств отображения, абстрагирует видеопамять в устройство. Иногда также относится к фрагменту видеопамяти.

al

Уровень абстракции, который абстрагирует базовое оборудование в уровень программного обеспечения с фиксированной бизнес-логикой в ​​драйвере.

lowlevel

Нижний уровень, программный уровень, который напрямую управляет аппаратными регистрами.

2.3 Введение в настройку модуля

2.3.1 Инструкции по настройке kenel_menuconfig
Язык кода:javascript
копировать
make kenel_menuconfig

Конкретный каталог конфигурации:

Язык кода:javascript
копировать
Device Drivers --->
	Graphics support --->
		<*> Support for frame buffer devices --->
			Video support for sunxi --->
				<*> DISP Driver Support(sunxi-disp2)

Рисунок 2-2: конфигурация дисплея

в:

• DISP Driver Support(sunxi-disp2)

Пожалуйста, выберите драйвер DE.

• debugfs support for disp driver(sunxi-disp2)

Рекомендуется выбрать узел отладки, чтобы облегчить отладку.

• composer support for disp driver(sunxi-disp2)

Обработка забора Disp2. Системы Linux выбирать не нужно.

2.4 Введение в структуру исходного кода

Структура исходного кода следующая:

Язык кода:javascript
копировать
├─drivers
│ ├─video
│ │ ├─fbdev
│ │ │ ├─sunxi --display driver for sunxi
│ │ │ │ ├─disp2/ --disp2 каталог
│ │ │ │ │ ├─disp
│ │ │ │ │ │ ├─dev_disp.c --display driver слой
│ │ │ │ │ │ ├─dev_fb.c --framebuffer driver слой
│ │ │ │ │ │ ├─de --bspслой
│ │ │ │ │ │ │ ├─disp_lcd.c --disp_manager.c ..
│ │ │ │ │ │ │ ├─disp_al.c --alслой
│ │ │ │ │ │ │ │ └─lowlevel_sun*i/ --lowlevel слой
│ │ │ │ │ │ │ │ ├─de_lcd.c ...
│ │ │ │ │ │ │ └─disp_sys_int.c --OSAL слой, уровень, связанный с операционной системой
│ │ │ │ │ │ ├─lcd/ lcd driver
│ │ │ │ │ │ │ │─lcd_src_interface.c --с дисплеем Движимый
│ │ │ │ │ │ │ │─default_panel.c... --Платформа основана на поддержке экрана
include
├─video video header dir
│ ├─sunxi_display2.h display header file

2.5 Введение в структуру драйверов

Рисунок 2-3: Блок-схема драйвера

Драйверы дисплея можно разделить на три уровня: уровень драйвера, уровень инфраструктуры и нижний уровень. Нижний уровень подключен к графическому оборудованию и в основном отвечает за преобразование функциональных параметров, настроенных верхним уровнем, в параметры, необходимые аппаратному обеспечению, и настройку их в соответствующие регистры.

Уровень инфраструктуры отображения абстрагирует и инкапсулирует базовый уровень в функциональные модули. Уровень драйвера инкапсулирует внешние функциональные интерфейсы и предоставляет соответствующие узлы устройств и унифицированные интерфейсы пользовательскому пространству через ядро. На уровне драйвера он разделен на четыре драйвера.

Драйверы: драйвер кадрового буфера, драйвер дисплея, драйвер ЖК-дисплея и драйвер HDMI. Драйвер Framebuffer взаимодействует с ядром кадрового буфера и реализует стандартный интерфейс кадрового буфера Linux.

Драйвер Disp является основным модулем драйвера дисплея. Все интерфейсы предоставляются драйвером Disp, включая интерфейс ЖК-дисплея.

3 Обзор интерфейса модуля

Использование модуля в основном реализуется через ioctl, а соответствующий узел драйвера — /dev/disp.

Чтобы получить конкретные определения, внимательно прочитайте комментарии над заголовочным файлом kernel/linux-4.9/include/video/sunxi_display2.h.

Для модуля дисплея установите параметры слоя драйверу, чтобы сделать дисплей наиболее важным. DE платформы Sunxi принимает заданные пользователем параметры слоя и определяет положение отображения, которое необходимо установить, с помощью трех индексов disp, канала и Layer_id (disp: 0/1, канал: 0/1/2/3, Layer_id: 0/1/2/3), где disp представляет индекс отображения, канал представляет индекс канала, а Layer_id представляет индекс слоя внутри канала.

Далее основное внимание уделяется получению параметров слоя из заголовочного файла и их представлению.

Язык кода:javascript
копировать
truct disp_fb_info2 {
    int fd;
    struct disp_rectsz size[3];
    unsigned int align[3];
    enum disp_pixel_format format;
    enum disp_color_space color_space;
    int trd_right_fd;
    bool pre_multiply;
    struct disp_rect64 crop;
    enum disp_buffer_flags flags;
    enum disp_scan_flags scan;
    enum disp_eotf eotf;
    int depth;
    unsigned int fbd_en;
    int metadata_fd;
    unsigned int metadata_size;
    unsigned int metadata_flag;
};

• fd

Дескриптор файла видеопамяти.

• размер и обрезка

Размер представляет собой полный размер буфера, а обрезка представляет собой область обрезки, которая должна отображаться в буфере. Как показано на рисунке ниже, полное изображение отмечено размером, а часть, заключенная в прямоугольник, представляет собой область обрезки, отмеченную на экране.

Видна только часть с логотипом кропа, остальное скрыто и не может быть отображено на экране.

Рисунок 3-1: Диаграмма размера и обрезки

• обрезать и экран_win

Как упоминалось выше, Screen_win — это позиция, в которой буфер обрезки отображается на экране. Если масштабирование не требуется, ширина и высота обрезки и screen_win при необходимости равны.

Ширина и высота масштабирования, обрезки и screen_win могут быть неодинаковыми.

Рисунок 3-2: Схематическая диаграмма обрезки и выигрыша экрана.

• alpha

Существует три режима Альфа:

  1. глобальная альфа: глобальная альфа, также называемая поверхностной альфа, означает, что весь слой имеет одну альфу и единую прозрачность.
  2. Пиксельная альфа: Точка альфа, то есть каждый пиксель имеет свою отдельную альфу, благодаря чему можно добиться эффекта полной прозрачности в некоторых областях, полупрозрачности в некоторых областях и непрозрачности в некоторых областях.
  3. global_pixel альфа: можно сказать, что это суперпозиция двух вышеупомянутых эффектов. При достижении эффекта пикселя альфа он также может достигать эффекта постепенного появления и исчезновения.

Рисунок 3-3: Режим альфа-наложения

• align

Количество байт выравнивания в видеопамяти.

• format

Введите формат слоя. Поддерживаемые форматы канала пользовательского интерфейса:

Язык кода:javascript
копировать
DISP_FORMAT_ARGB_8888
DISP_FORMAT_ABGR_8888
DISP_FORMAT_RGBA_8888
DISP_FORMAT_BGRA_8888
DISP_FORMAT_XRGB_8888
DISP_FORMAT_XBGR_8888
DISP_FORMAT_RGBX_8888
DISP_FORMAT_BGRX_8888
DISP_FORMAT_RGB_888
DISP_FORMAT_BGR_888
DISP_FORMAT_RGB_565
DISP_FORMAT_BGR_565
DISP_FORMAT_ARGB_4444
DISP_FORMAT_ABGR_4444
DISP_FORMAT_RGBA_4444
DISP_FORMAT_BGRA_4444
DISP_FORMAT_ARGB_1555
DISP_FORMAT_ABGR_1555
DISP_FORMAT_RGBA_5551
DISP_FORMAT_BGRA_5551
DISP_FORMAT_A2R10G10B10
DISP_FORMAT_A2B10G10R10
DISP_FORMAT_R10G10B10A2
DISP_FORMAT_B10G10R10A2

Поддерживаемые форматы видеоканала:

Язык кода:javascript
копировать
DISP_FORMAT_ARGB_8888
DISP_FORMAT_ABGR_8888
DISP_FORMAT_RGBA_8888
DISP_FORMAT_BGRA_8888
DISP_FORMAT_XRGB_8888
DISP_FORMAT_XBGR_8888
DISP_FORMAT_RGBX_8888
DISP_FORMAT_BGRX_8888
DISP_FORMAT_RGB_888
DISP_FORMAT_BGR_888
DISP_FORMAT_RGB_565
DISP_FORMAT_BGR_565
DISP_FORMAT_ARGB_4444
DISP_FORMAT_ABGR_4444
DISP_FORMAT_RGBA_4444
DISP_FORMAT_BGRA_4444
DISP_FORMAT_ARGB_1555
DISP_FORMAT_ABGR_1555
DISP_FORMAT_RGBA_5551
DISP_FORMAT_BGRA_5551
DISP_FORMAT_YUV444_I_AYUV
DISP_FORMAT_YUV444_I_VUYA
DISP_FORMAT_YUV422_I_YVYU
DISP_FORMAT_YUV422_I_YUYV
DISP_FORMAT_YUV422_I_UYVY
DISP_FORMAT_YUV422_I_VYUY
DISP_FORMAT_YUV444_P
DISP_FORMAT_YUV422_P
DISP_FORMAT_YUV420_P
DISP_FORMAT_YUV411_P
DISP_FORMAT_YUV422_SP_UVUV
DISP_FORMAT_YUV422_SP_VUVU
DISP_FORMAT_YUV420_SP_UVUV
DISP_FORMAT_YUV420_SP_VUVU
DISP_FORMAT_YUV411_SP_UVUV
DISP_FORMAT_YUV411_SP_VUVU
DISP_FORMAT_YUV444_I_AYUV_10BIT
DISP_FORMAT_YUV444_I_VUYA_10BIT

Все слои поддерживают масштабирование. Действия над слоями следующие:

  1. Схема установкислойпараметри включить,интерфейсдляDISP_LAYER_SET_CONFIG,Формат изображения,buffer size, buffer адрес, альфа модель, включить, идентификатор кадра изображения Нет и т. д.параметр。
  2. Выключите слой, все равно передайте DISP_LAYER_SET_CONFIG, включите параметр установлен на 0 закрытие.

4 Инструкции по эксплуатации устройства вывода дисплея

Disp2 поддерживает различные устройства вывода изображения, включая ЖК-дисплей, телевизор и HDMI. Существует несколько способов включения устройства вывода дисплея. Первый — настроить параметры инициализации [disp] в sys_config или dts при загрузке модуля дисплея.

Выбранное устройство вывода дисплея будет инициализировано в соответствии с конфигурацией; второй метод заключается в вызове интерфейса ioctl модуля драйвера для включения или выключения указанного устройства вывода после запуска ядра. Ниже приведены инструкции по выполнению операции:

• Включите или переключитесь на определенное устройство вывода дисплея, ioctl(DISP_DEVICE_SWITCH…), установите параметры для определенного типа устройства вывода, DISP_OUTPUT_TYPE_LCD/TV/HDMI.

• Выключите устройство, ioctrl(DISP_DEVICE_SWITCH…), параметр установлен на DISP_OUTPUT_TYPE_NONE.

5 Инструкция по изменению параметров интерфейса

Платформа Sunxi поддерживает дисп1 и дисп2.

Таблица 5-1: Различия между disp1 и disp2

Проект\Платформа

disp2

disp1

Идентификатор слоя

Уникально идентифицируется по disp, chennel, Layer_id

Уникально идентифицируется по disp, Layer_id

Переключение слоев

Рассматривайте переключатель как параметр слоя в DISP_LAYER_SET_CONFIG.

независимый Переключение слоевинтерфейс

размер слоя

Для каждого компонента необходимо установить 1 размер.

В буфере только 1

выравнивание слоя

Для каждого компонента необходимо установить его выравнивание, а единицей измерения является байт.

никто

Обрезка слоя

Это 64-битная десятичная дробь с фиксированной запятой, старшие 32 бита — целые числа, а нижние 32 бита — десятичные.

Это 32-битный параметр, который не поддерживает десятичные дроби.

Поддержка формата YUV MB

Больше не поддерживается

поддерживать

PALETTE Форматподдерживать

Больше не поддерживается

поддерживать

Монохромнаямодель(никтоbuffer)

поддерживать

Нетподдерживать

Выбор труб

Канал прозрачен для пользователей, пользователям нужны только выборы и только каналы.

Пользовательские настройки

zorder

Пользовательские настройки,Гарантированный заказ Никаких повторов, начиная с 0 до Н-1

Пользователь не может установить

Установить интерфейс информации о слое

Информацию о нескольких слоях можно установить одновременно, добавив параметр номера информации о слое.

Устанавливайте информацию по одному слою за раз

6 Знакомство с устройствами вывода

платформаподдерживатьэкрана такжеHDMI вывод, и оба отображаются одновременно.

6.1 экран

экранизинтерфейсмного,платформаподдерживатьRGB/CPU/LVDS/DSI интерфейс.

6.2 HDMI

Полное название HDMI: Мультимедийный интерфейс высокой четкости. Может обеспечить взаимодействие высокой четкости между DVD, аудиоустройствами, приставками, телевизорами и другими видеодисплеями.

Союз. Может нести звук,видеочислов соответствии с,и другие элементы управления,числов соответствии синформация。поддерживатьгорячая замена,Защита контента,модельлиподдерживатьиз Запрос。

6.3 Одновременное отображение

водить машинуподдерживать Двойной дисплей。экран(хозяин)+ HDMI (вспомогательный).

Разница между одновременным отображением и дифференциальным отображением заключается только в содержимом отображения. Если содержимое отображения одинаковое, то это одновременное отображение; в противном случае это другое отображение;

  1. если это андроид Система, 4.2 версии и выше собственная платформа отображалась на нескольких экранах (Одновременное дружеский, гетерогенный дисплей, виртуальное устройство отображения), реализовать совместное Обращение относительно простое, в Android hal Просто подключите его к верхнему слою.
  2. если это андроид 4.1 В следующих версиях одновременное отображение необходимо реализовать самостоятельно. Эталонный метод заключается в том, что содержимое основного экрана предоставляется Android. Изначально дополнительный экран требует наличия Android. hal В нужный момент (например, HDMI открываться при вставке)

Вторичный экран и скопируйте содержимое главного экрана (хранящееся в FB0) в внутренний буфер дисплея вторичного экрана, а затем переключите внутренний буфер вторичного экрана на внешний буфер. Обратите внимание, что проблема в том, что двусторонний дисплей

Синхронизация буфера. Если синхронизация неудовлетворительна, произойдет разрыв изображения и несовпадение.

  1. Если это система Linux, метод аналогичен предыдущему.

7 Описание интерфейса IOCTL

Драйвер дисплея платформы Sunxi предоставляет пользователям множество функциональных интерфейсов, которые могут управлять ресурсами дисплея, такими как слои, ЖК-дисплей и HDMI.

7.1 Global Interface

7.1.1 DISP_SHADOW_PROTECT

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_SHADOW_PROTECT

arg

arg[0] Для канала отображения 0/1 arg[1] защищать параметр,1 значит защитить, 0: значит нет protect

• Возвращаемое значение

В случае успеха верните DIS_SUCCESS, в противном случае верните номер ошибки.

• описывать

DISP_SHADOW_PROTECT (1) сочетается с DISP_SHADOW_PROTECT (0). В течение периода защиты все запросы буферизуются как последовательность команд и ожидают вызова.

DISP_SHADOW_PROTECT(0) будет выполнен вместе.

• Пример

Язык кода:javascript
копировать
//запускатьcache,disphdдля Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//disp0
arg[1] = 1;//protect
ioctl(disphd, DISP_SHADOW_PROTECT, (void*)arg);
//do somthing other
arg[1] = 0;//unprotect
ioctl(disphd, DISP_SHADOW_PROTECT, (void*)arg);
7.1.2 DISP_SET_BKCOLOR

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_SET_BKCOLOR

arg

arg[0] Для канала отображения 0/1 arg[1] для фона Информация, указывающая на disp_color указатель структуры данных

• Возвращаемое значение

В случае успеха верните DIS_SUCCESS, в противном случае верните номер ошибки.

• описывать

Эта функция используется для установки цвета фона дисплея.

• Пример

Язык кода:javascript
копировать
//Устанавливаем цвет фона дисплея, disphd — Показать дескриптор водителя,selдляэкран0/1
disp_color bk;
unsigned int arg[3];
bk.red = 0xff;
bk.green = 0x00;
bk.blue = 0x00;
arg[0] = 0;
arg[1] = (unsigned int)&bk;
ioctl(disphd, DISP_SET_BKCOLOR, (void*)arg);
7.1.3 DISP_GET_BKCOLOR

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_GET_BKCOLOR

arg

arg[0] Для канала отображения 0/1 arg[1] для фона Информация, указывающая на disp_color указатель структуры данных

• Возвращаемое значение

В случае успеха верните DIS_SUCCESS, в противном случае верните номер ошибки.

• описывать

Эта функция используется для получения цвета фона дисплея.

• Пример

Язык кода:javascript
копировать
//Получаем цвет фона дисплея, disphd — Показать дескриптор водителя,selдляэкран0/1
disp_color bk;
unsigned int arg[3];
arg[0] = 0;
arg[1] = (unsigned int)&bk;
ioctl(disphd, DISP_GET_BKCOLOR, (void*)arg);
7.1.4 DISP_GET_SCN_WIDTH

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_GET_SCN_WIDTH

arg

arg[0] отображает канал 0/1

• Возвращаемое значение

В случае успеха верните текущее разрешение экрана по горизонтали, в противном случае верните номер ошибки.

• описывать

Эта функция используется для получения текущего разрешения экрана по горизонтали.

• Пример

Язык кода:javascript
копировать
//получатьэкрануровень занавеса Различать Ставка
unsigned int screen_width;
unsigned int arg[3];
arg[0] = 0;
screen_width = ioctl(disphd, DISP_GET_SCN_WIDTH, (void*)arg);
7.1.5 DISP_GET_SCN_HEIGHT

• Прототип

int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_GET_SCN_HEIGHT

arg

arg[0] отображает канал 0/1

• Возвращаемое значение

В случае успеха верните текущее разрешение экрана по вертикали, в противном случае верните номер ошибки.

• описывать

Эта функция используется для получения текущего разрешения экрана по вертикали.

• Пример

Язык кода:javascript
копировать
//получатьэкран Штора вертикальная Различать Ставка
unsigned int screen_height;
unsigned int arg[3];
arg[0] = 0;
screen_height = ioctl(disphd, DISP_GET_SCN_HEIGHT, (void*)arg);
7.1.6 DISP_GET_OUTPUT_TYPE

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_GET_OUTPUT_TYPE

arg

arg[0] отображает канал 0/1

• Возвращаемое значение

В случае успеха возвращает отображаемый в данный момент тип вывода, в противном случае возвращает номер ошибки.

• описывать

Эта функция используется для получения текущего типа вывода дисплея (ЖК-дисплей, ТВ, HDMI, VGA, НЕТ).

• Пример

Язык кода:javascript
копировать
//Получаем текущий тип отображения вывода
disp_output_type выходной_тип;
беззнаковый int arg[3];
арг[0] = 0;
output_type = (disp_output_type) ioctl (disphd, DISP_GET_OUTPUT_TYPE, (void*) arg);
7.1.7 DISP_GET_OUTPUT

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_GET_OUTPUT

arg

arg[0] Для канала отображения 0/1 arg[1] Чтобы указать на disp_output Структурный указатель, используемый для сохранения возвращаемых данных. значение

• Возвращаемое значение

В случае успеха верните 0, в противном случае верните номер ошибки.

• описывать

Эта функция используется для получения текущего типа и режима вывода изображения (ЖК-дисплей, ТВ, HDMI, VGA, НЕТ).

• Пример

Язык кода:javascript
копировать
//Получаем текущий тип отображения выхода
unsigned int arg[3];
disp_output output;
disp_output_type type;
disp_tv_mode mode;
arg[0] = 0;
arg[1] = (unsigned long)&output;
ioctl(disphd, DISP_GET_OUTPUT, (void*)arg);
type = (disp_output_type)output.type;
mode = (disp_tv_mode)output.mode;
7.1.8 DISP_VSYNC_EVENT_EN

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_VSYNC_EVENT_EN

arg

arg[0] Для канала отображения 0/1 arg[1] чтобы включить параметр,0:disable, 1:enable

• Возвращаемое значение

В случае успеха возвращает DIS_SUCCESS.

В противном случае возвращается номер ошибки.

• описывать

Эта функция включает/выключает функцию отправки сообщений vsync.

• Пример

Язык кода:javascript
копировать
//Включаем/выключаем вертикальную синхронизациюинформация Функция отправки,disphdдля Показать дескриптор водителя,выбор экрана0/1
беззнаковый int arg[3];
арг[0] = 0;
арг[1] = 1;
ioctl(disphd, DISP_VSYNC_EVENT_EN, (void*)arg);
7.1.9 DISP_DEVICE_SWITCH

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_DEVICE_SWITCH

arg

arg[0] Для канала отображения 0/1 arg[1] — тип вывода arg[2] Для режима вывода, когда тип вывода не ЖК-дисплей действителен, когда

• Возвращаемое значение

В случае успеха верните DIS_SUCCESS, в противном случае верните номер ошибки.

• описывать

Эта функция используется для переключения типа выхода.

• Пример

Язык кода:javascript
копировать
//Выключатель
беззнаковый int arg[3];
арг[0] = 0;
arg[1] = (длинный без знака)DISP_OUTPUT_TYPE_HDMI;
arg[2] = (длинный без знака)DISP_TV_MOD_1080P_60HZ;
ioctl(disphd, DISP_DEVICE_SWITCH, (void*)arg);

иллюстрировать:еслипередачаизtype Это DISP_OUTPUT_TYPE_NONE, который отключит вывод текущего канала отображения.

7.1.10 DISP_DEVICE_SET_CONFIG

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd,unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_DEVICE_SET_CONFIG

arg

arg[0] Для канала отображения 0/1 arg[1] Укажите на disp_device_config указатель

• Возвращаемое значение

В случае успеха верните DIS_SUCCESS, в противном случае верните номер ошибки.

• описывать

Письмочислодля переключения Тип выход и задайте свойства параметра выходного устройства。

• Пример

Язык кода:javascript
копировать
//Выключатель Тип выход и задайте свойства параметра выходного устройства
unsigned long arg[3];
struct disp_device_config config;
config.type = DISP_OUTPUT_TYPE_LCD;
config.mode = 0;
config.format = DISP_CSC_TYPE_RGB;
config.bits = DISP_DATA_8BITS;
config.eotf = DISP_EOTF_GAMMA22;
config.cs = DISP_BT709;
arg[0] = 0;
arg[1] = (unsigned long)&config;
ioctl(dispfd, DISP_DEVICE_SET_CONFIG, (void*)arg);
//иллюстрировать: если передан тип Это DISP_OUTPUT_TYPE_NONE, который отключит вывод текущего канала отображения.
7.1.11 DISP_DEVICE_GET_CONFIG

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd,unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_DEVICE_GET_CONFIG

arg

arg[0] Для канала отображения 0/1 arg[1] Укажите на disp_device_config указатель

• Возвращаемое значение

В случае успеха верните DIS_SUCCESS, в противном случае верните номер ошибки.

• описывать

Письмочислоиспользуется дляполучатьтекущий Тип Параметр производительности и связанных свойств。

• Пример

Язык кода:javascript
копировать
//Получаем текущий тип Параметр производительности и связанных свойств
unsigned long arg[3];
struct disp_device_config config;
arg[0] = 0;
arg[1] = (unsigned long)&config;
ioctl(dispfd, DISP_DEVICE_GET_CONFIG, (void*)arg);
//иллюстрировать: Если возвращаемый тип DISP_OUTPUT_TYPE_NONE, это означает, что текущий выходной канал отображения закрыт

7.2 Layer Interface

7.2.1 DISP_LAYER_SET_CONFIG

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_CMD_SET_LAYER_CONFIG

arg

arg[0] Для канала отображения 0/1 arg[1] длякартинаслой Конфигурацияпараметруказатель;arg[2] Количество настраиваемых слоев

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для установки многоуровневой информации.

• Пример

Язык кода:javascript
копировать
struct
{
	disp_layer_info info,
bool enable;
	unsigned int channel,
	unsigned int layer_id,
} disp_layer_config;
//Схема установкислойпараметр,disphdдля Показать дескриптор водителя
unsigned int arg[3];
disp_layer_config config;
unsigned int width = 1280;
unsigned int height = 800;
unsigned int ret = 0;
memset(&info, 0, sizeof(disp_layer_info));
config.channel = 0; //channel 0
config.layer_id = 0;//layer 0 at channel 0
config.info.enable = 1;
config.info.mode = LAYER_MODE_BUFFER;
config.info.fb.addr[0] = (__u32)mem_in; //адрес ФБ
config.info.fb.size.width = width;
config.info.fb.format = DISP_FORMAT_ARGB_8888; //DISP_FORMAT_YUV420_P
config.info.fb.crop.x = 0;
config.info.fb.crop.y = 0;
config.info.fb.crop.width = ((unsigned long)width) << 32;//фиксированная точка маленькаячисло。высокий32bitЭто целое число, младшие 32 бита означает маленький
число
config.info.fb.crop.height= ((uunsigned long)height)<<32;//фиксированная точка маленькаячисло。высокий32bitЭто целое число, младшие 32 бита означает маленький
число
config.info.fb.flags = DISP_BF_NORMAL;
config.info.fb.scan = DISP_SCAN_PROGRESSIVE;
config.info.alpha_mode = 1; //global alpha
config.info.alpha_value = 0xff;
config.info.screen_win.x = 0;
config.info.screen_win.y = 0;
config.info.screen_win.width = width;
config.info.screen_win.height= height;
config.info.id = 0;
arg[0] = 0;//screen 0
arg[1] = (unsigned int)&config;
arg[2 = 1; //one layer
ret = ioctl(disphd, DISP_CMD_LAYER_SET_CONFIG, (void*)arg);
7.2.2 DISP_LAYER_GET_CONFIG

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_LAYER_GET_CONFIG

arg

arg[0] Для канала отображения 0/1 arg[1] длякартинаслой Конфигурацияпараметруказатель;arg[2] Количество слоев, которые необходимо настроить

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Письмочислоиспользуется дляполучатькартинаслойпараметр。

• Пример

Язык кода:javascript
копировать
//получатькартинаслойпараметр,disphdдля Показать дескриптор водителя
unsigned int arg[3];
disp_layer_info info;
memset(&info, 0, sizeof(disp_layer_info));
config.channel = 0; //channel 0
config.layer_id = 0;//layer 0 at channel 0
arg[0] = 0;//отображаем канал 0
arg[1] = 0;//Слой изображения0
arg[2 = (unsigned int)&info;
ret = ioctl(disphd, DISP_LAYER_GET_CONFIG, (void*)arg);
7.2.3 DISP_LAYER_SET_CONFIG2

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd,unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_SET_LAYER_CONFIG2

arg

arg[0] Для канала отображения 0/1 arg[1] длякартинаслой Конфигурацияпараметруказатель;arg[2] Количество настраиваемых слоев

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для установки многоуровневой информации. Обратите внимание, что этот интерфейс принимает только информацию disp_layer_config2.

• Пример

Язык кода:javascript
копировать
struct
{
disp_layer_info info,
bool enable;
unsigned int channel,
unsigned int layer_id,
}disp_layer_config2;
//Схема установкислойпараметр,dispfd для Показать дескриптор водителя
unsigned long arg[3];
struct disp_layer_config2 config;
unsigned int width = 1280;
unsigned int height = 800;
unsigned int ret = 0;
memset(&config, 0, sizeof(struct disp_layer_config2));
config.channnel = 0;//blending channel
config.layer_id = 0;//layer index in the blending channel
config.info.enable = 1;
config.info.mode = LAYER_MODE_BUFFER;
config.info.fb.addr[0] = (unsigned long long)mem_in; //FB адрес
config.info.fb.size[0].width = width;
config.info.fb.align[0] = 4;//bytes
config.info.fb.format = DISP_FORMAT_ARGB_8888; //DISP_FORMAT_YUV420_P
config.info.fb.crop.x = 0;
config.info.fb.crop.y = 0;
config.info.fb.crop.width = ((unsigned long)width) << 32;//фиксированная точка маленькаячисло。высокий32bit Это целое число, младшие 32 бита как десятичная дробь
config.info.fb.crop.height= ((uunsigned long)height)<<32;//фиксированная точка маленькаячисло。высокий32bit Это целое число, младшие 32 бита как десятичная дробь
config.info.fb.flags = DISP_BF_NORMAL;
config.info.fb.scan = DISP_SCAN_PROGRESSIVE;
config.info.fb.eotf = DISP_EOTF_SMPTE2084; //HDR
config.info.fb.metadata_buf = (unsigned long long)mem_in2;
config.info.alpha_mode = 2; //global pixel alpha
config.info.alpha_value = 0xff;//global alpha value
config.info.screen_win.x = 0;
config.info.screen_win.y = 0;
config.info.screen_win.width = width;
config.info.screen_win.height= height;
config.info.id = 0;
arg[0] = 0;//screen 0
arg[1] = (unsigned long)&config;
arg[2 = 1; //one layer
ret = ioctl(dispfd, DISP_LAYER_SET_CONFIG2, (void*)arg);

7.2.4 DISP_LAYER_GET_CONFIG2

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd,unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_CAPTURE_START

arg

arg[0] для Канал дисплея 0/1

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для включения функции скриншота.

• Пример

Язык кода:javascript
копировать
//Запускаем функцию скриншота, dispfd для Показать дескриптор водителя
arg[0] = 0;//отображаем канал 0
ioctl(dispfd, DISP_CAPTURE_START, (void*)arg);
7.3.2 DISP_CAPTURE_COMMIT

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_CAPTURE_COMMIT

arg

arg[0] Для канала отображения 0/1 arg[1] Это информационная структура, указывающая на снимок экрана. Подробности см. в разделе disp_capture_info.

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для отправки задания на создание снимков экрана. После отправки будет запущена операция создания снимков экрана.

• Пример

Язык кода:javascript
копировать
//Отправляем функцию скриншота, dispfd для Показать дескриптор водителя
unsigned long arg[3];
struct disp_capture_info info;
arg[0] = 0;
screen_width = ioctl(dispfd, DISP_GET_SCN_WIDTH, (void*)arg);
screen_height = ioctl(dispfd, DISP_GET_SCN_HEIGHT, (void*)arg);
info.window.x = 0;
info.window.y = 0;
info.window.width = screen_width;
info.window.y = screen_height;
info.out_frame.format = DISP_FORMAT_ARGB_8888;
info.out_frame.size[0].width = screen_width;
info.out_frame.size[0].height = screen_height;
info.out_frame.crop.x = 0;
info.out_frame.crop.y = 0;
info.out_frame.crop.width = screen_width;
info.out_frame.crop.height = screen_height;
info.out_frame.addr[0] = fb_address; //buffer address
arg[0] = 0;//отображаем канал 0
arg[1] = (unsigned long)&info;
ioctl(dispfd, DISP_CAPTURE_COMMIT, (void*)arg);
7.3.3 DISP_CAPTURE_STOP

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_CAPTURE_STOP

arg

arg[0] для Канал дисплея 0/1

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для отключения функции скриншота.

• Пример

Язык кода:javascript
копировать
//Остановим функцию скриншота, dispfd для Показать дескриптор водителя
unsigned long arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(dispfd, DISP_CAPTURE_STOP, (void*)arg);
7.3.4 DISP_CAPTURE_QUERY

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd,unsigned int *arg);

• Параметры

Команда DISP_CAPTURE_QUERY является функцией запроса.

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_CAPTURE_QUERY

arg

arg[0] для Канал дисплея 0/1

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция проверяет, был ли сделан снимок экрана только что завершившегося кадра изображения.

• Пример

Язык кода:javascript
копировать
//Запрашиваем, успешен ли скриншот, dispfd для Показать дескриптор водителя
unsigned long arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(dispfd, DISP_CAPTURE_QUERY, (void*)arg);

7.4 LCD Interface

7.4.1 DISP_LCD_SET_BRIGHTNESS

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_LCD_SET_BRIGHTNESS

arg

arg[0] Для канала отображения 0/1 arg[1] значение яркости подсветки, (0~255)

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для настройки яркости ЖК-дисплея.

• Пример

Язык кода:javascript
копировать
//Устанавливаем яркость подсветки ЖК-дисплея, disphd — Показать дескриптор водителя
unsigned int arg[3];
unsigned int bl = 197;
arg[0] = 0;//отображаем канал 0
arg[1] = bl;
ioctl(disphd, DISP_LCD_SET_BRIGHTNESS, (void*)arg);
7.4.2 DISP_LCD_GET_BRIGHTNESS

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_LCD_GET_BRIGHTNESS

arg

arg[0] для Канал дисплея 0/1

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для регулировки яркости ЖК-дисплея.

• Пример

Язык кода:javascript
копировать
//Получаем яркость подсветки ЖК-дисплея, disphd — Показать дескриптор водителя
unsigned int arg[3];
unsigned int bl;
arg[0] = 0;//отображаем канал 0
bl = ioctl(disphd, DISP_LCD_GET_BRIGHTNESS, (void*)arg);

7.5 Enhance interface

7.5.1 DISP_ENHANCE_ENABLE

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_ENHANCE_ENABLE

arg

arg[0] для Канал дисплея 0/1

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для включения функции постобработки изображения.

• Пример

Язык кода:javascript
копировать
//Включаем функцию постобработки изображения, disphd — Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(disphd, DISP_ENHANCE_ENABLE, (void*)arg);
7.5.2 DISP_ENHANCE_DISABLE

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_ENHANCE_DISABLE

arg

arg[0] для Канал дисплея 0/1

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для отключения функции постобработки изображения.

• Пример

Язык кода:javascript
копировать
//Отключаем функцию постобработки изображения, disphd - Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(disphd, DISP_ENHANCE_DISABLE, (void*)arg);
7.5.3 DISP_ENHANCE_DEMO_ENABLE

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_ENHANCE_DEMO_ENABLE

arg

arg[0] для Канал дисплея 0/1

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для включения демонстрационного режима постобработки изображения. После его включения на экране для удобства сравнения появятся постобработанное изображение слева и необработанное изображение справа. Демонстрационный режим доступен только после включения функции постобработки.

эффект.

• Пример

Язык кода:javascript
копировать
//Включаем демонстрационную модель постобработки изображения, disphd — Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(disphd, DISP_ENHANCE_DEMO_ENABLE, (void*)arg);
7.5.4 DISP_ENHANCE_DEMO_DISABLE

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_ENHANCE_DEMO_DISABLE

arg

arg[0] для Канал дисплея 0/1

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для отключения демонстрационного режима постобработки изображения.

• Пример

Язык кода:javascript
копировать
//Включаем демонстрационную модель постобработки изображения, disphd — Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(disphd, DISP_ENHANCE_DEMO_ENABLE, (void*)arg);

7.6 Smart backlight

7.6.1 DISP_SMBL_ENABLE

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_SMBL_ENABLE

arg

arg[0] для Канал дисплея 0/1

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для включения функции интеллектуальной подсветки.

• Пример

Язык кода:javascript
копировать
//Включаем функцию умной подсветки, disphd - Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(disphd, DISP_SMBL_ENABLE, (void*)arg);
7.6.2 DISP_SMBL_DISABLE

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_SMBL_ENABLE

arg

arg[0] для Канал дисплея 0/1

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Эта функция используется для отключения функции интеллектуальной подсветки.

• Пример

Язык кода:javascript
копировать
//Отключаем функцию умной подсветки, disphd - Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(disphd, DISP_SMBL_DISABLE, (void*)arg);
7.6.3 DISP_SMBL_SET_WINDOW

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_SMBL_SET_WINDOW

arg

arg[0] Для канала отображения 0/1 arg[1] Чтобы указать на структуру disp_rect указатель

• Возвращаемое значение

В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.

• описывать

Письмочислоиспользуется для Установите эффект активации интеллектуальной подсветкиизокно,Умная подсветка в окне настроек середина имеет эффект.

• Пример

Язык кода:javascript
копировать
//Устанавливаем окно умной подсветки, disphd — Показать дескриптор водителя
unsigned int arg[3];
unsigned int screen_width, screen_height;
struct disp_rect window;
  
screen_width = ioctl(disphd, DISP_GET_SCN_WIDTH, (void*)arg);
screen_height = ioctl(disphd, DISP_GET_SCN_HEIGHT, (void*)arg);
window.x = 0;
window.y = 0;
window.width = screen_width / 2;
widnow.height = screen_height;
arg[0] = 0;//отображаем канал 0
arg[1] = (unsigned long)&window;
ioctl(disphd, DISP_SMBL_SET_WINDOW, (void*)arg);

7.7 Hdmi interface

7.7.1 DISP_HDMI_SUPPORT_MODE

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_HDMI_SUPPORT_MODE

arg

arg[0] Для канала отображения 0/1 arg[1] Это режим, который необходимо запросить. Подробности см. в разделе disp_tv_mode.

• Возвращаемое значение

еслиподдерживать,Возвращает 1 в случае неудачи;,Затем верните 0.

• описывать

Эта функция используется для запроса указанного HDMI модельлиподдерживать。

• Пример

Язык кода:javascript
копировать
//Запрос, является ли указанная модель HDMI одобренной
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
arg[1] = (unsigned long)DISP_TV_MOD_1080P_60HZ;
ioctl(disphd, DISP_HDMI_SUPPORT_MODE, (void*)arg);
7.7.2 DISP_HDMI_GET_HPD_STATUS

• Прототип

Язык кода:javascript
копировать
int ioctl(int handle, unsigned int cmd, unsigned int *arg);

• Параметры

параметр

иллюстрировать

hdle

Показать дескриптор водителя

cmd

DISP_HDMI_GET_HPD_STATUS

arg

arg[0] для Канал дисплея 0/1

• Возвращаемое значение

Возвращает 1, если HDMI подключен; 0, если не подключен;

• описывать

Эта функция используется для определения того, подключен ли HDMI.

• Пример

Язык кода:javascript
копировать
//Запрашиваем, подключен ли HDMI
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
if (ioctl(disphd, DISP_HDMI_GET_HPD_STATUS, (void*)arg) == 1)
printf("hdmi plug in\n");
else
printf("hdmi plug out\n");

8 описание интерфейса sysfs

Следующие две функции будут использоваться в демонстрации интерфейса ниже.

Язык кода:javascript
копировать
    const int MAX_LENGTH = 128;
    const int MAX_DATA = 128;
    static ssize_t read_data(const char *sysfs_path, char *data)
    {
        ssize_t err = 0;
        FILE *fp = NULL;
        fp = fopen(sysfs_path, "r");
        if (fp) {
            err = fread(data, sizeof(char), MAX_DATA ,fp);
            fclose(fp);
        }
        return err;
    }
    static ssize_t write_data(const char *sysfs_path, const char *data, size_t len)
    {
        ssize_t err = 0;
        int fd = -1;
        fd = open(sysfs_path, O_WRONLY);
        if (fp) {
            errno = 0;
            err = write(fd, data, len);
            if (err < 0) {
                err = -errno;
    }
    close(fd);
    } else {
        ALOGE("%s: Failed to open file: %s error: %s", __FUNCTION__, sysfs_path,
        strerror(errno));
        err = -errno;
    }
    return err;
    }

8.1 enhance

8.1.1 enhance_mode

• Системные узлы

Язык кода:javascript
копировать
/sys/class/disp/disp/attr/disp
/sys/class/disp/disp/attr/enhance_mode

• Параметры

параметр

иллюстрировать

disp display channel

Например, 0: дисп0, 1: дисп1.

enhance_mode

0:standard, 1: enhance, 2: soft, 3: enahnce + demo

• Возвращаемое значение

no。

• описывать

Этот интерфейс используется для установки режима улучшения цвета.

• Пример

Язык кода:javascript
копировать
//Устанавливаем дисп0 Улучшение цвета модели для улучшения модели
echo 0 > /sys/class/disp/disp/attr/disp;
echo 1 > /sys/class/disp/disp/attr/enhance_mode;
//Устанавливаем дисплей1 Модель с улучшенным цветом для пастельной модели
echo 1 > /sys/class/disp/disp/attr/disp;
echo 2 > /sys/class/disp/disp/attr/enhance_mode;
//Устанавливаем дисп0 Улучшение цвета модели для увеличения модели и включения демо-модели
echo 0 > /sys/class/disp/disp/attr/disp;
echo 3 > /sys/class/disp/disp/attr/enhance_mode;

код c/С++:

Язык кода:javascript
копировать
char sysfs_path[MAX_LENGTH];
char sysfs_data[MAX_DATA];
unisgned int disp = 0
unsigned int enhance_mode = 1;
snprintf(sysfs_path,sizeof(sysfs_full_path),"sys/class/disp/disp/attr/disp");
snprintf(sysfs_data, sizeof(sysfs_data),"%d",disp);
write_data(sysfs_path, sys_data, strlen(sysfs_data));
snprintf(sysfs_path,sizeof(sysfs_full_path),
"/sys/class/disp/disp/attr/enhance_mode");
snprintf(sysfs_data, sizeof(sysfs_data), "%d",enhance_mode);
write_data(sysfs_path, sys_data, strlen(sysfs_data));
8.1.2 enhance_bright/contrast/saturation/edge/detail/denoise

• Системные узлы

Язык кода:javascript
копировать
/sys/class/disp/disp/attr/disp
/sys/class/disp/disp/attr/enhance_bright /* яркость*/
/sys/class/disp/disp/attr/enhance_contrast /* Контраст*/
/sys/class/disp/disp/attr/enhance_saturation /* насыщенность*/
/sys/class/disp/disp/attr/enhance_edge /* Резкость края*/
/sys/class/disp/disp/attr/enhance_detail /* Улучшение деталей*/
/sys/class/disp/disp/attr/enhance_denoise /* Снижение шума*/

• Параметры

Язык кода:javascript
копировать
disp display channel,Например, 0: дисп0, 1: дисп1.。
enhance_xxx: объем:0~100,числов соответствии с Чем больше,Чем больше диапазон регулировки.

• Возвращаемое значение no。

• описывать

Этот интерфейс используется для установки диапазона регулировки яркости/контрастности/насыщенности изображения/резкости краев/улучшения деталей/уменьшения шума.

• Пример

Язык кода:javascript
копировать
//Устанавливаем дисп0 Яркость изображения 80.
echo 0 > /sys/class/disp/disp/attr/disp;
echo 80 > /sys/class/disp/disp/attr/enhance_bright;
//Устанавливаем дисплей1 Насыщенность 50.
echo 1 > /sys/class/disp/disp/attr/disp;
echo 50 > /sys/class/disp/disp/attr/enhance_saturation;

код c/С++:

Язык кода:javascript
копировать
char sysfs_path[MAX_LENGTH];
char sysfs_data[MAX_DATA];
unisgned int disp = 0
unsigned int enhance_bright = 80;
snprintf(sysfs_path,sizeof(sysfs_full_path),"sys/class/disp/disp/attr/disp");
snprintf(sysfs_data, sizeof(sysfs_data),"%d",disp);
write_data(sysfs_path, sys_data, strlen(sysfs_data));
snprintf(sysfs_path,sizeof(sysfs_full_path),
"/sys/class/disp/disp/attr/enhance_bright");
snprintf(sysfs_data, sizeof(sysfs_data), "%d",enhance_bright);
write_data(sysfs_path, sys_data, strlen(sysfs_data));

8.2 hdmi edid

8.2.1 edid

• Системные узлы

Язык кода:javascript
копировать
/sys/class/hdmi/hdmi/attr/edid

• Параметры

no。

• Возвращаемое значение

Edid data(1024 bytes)。

• описывать

Этот интерфейс используется для чтения необработанных данных EDID.

• Пример

Язык кода:javascript
копировать
// читатьedidчислов соответствии с
cat /sys/class/hdmi/hdmi/attr/edid

код c/С++:

Язык кода:javascript
копировать
#define EDID_MAX_LENGTH 1024
char sysfs_path[MAX_LENGTH];
char sysfs_data[EDID_MAX_LENGTH];
ssize_t edid_length;
snprintf(sysfs_path,sizeof(sysfs_full_path),"/sys/class/hdmi/hdmi/attr/edid");
edid_length = read_data(sysfs_path, sys_data);
8.2.2 hpd

• Системные узлы

Язык кода:javascript
копировать
/sys/class/switch/hdmi/state

• Параметры

no。

• Возвращаемое значение

Hdmi hotplut state, 0: unplug; 1: plug in。

• описывать

Язык кода:javascript
копировать
Интерфейс используется для чтения HDMI изгорячая заменасостояние.

• Пример

Язык кода:javascript
копировать
// Чтение статуса горячего подключения HDMI
cat /sys/class/switch/hdmi/state

c/c++Код:

Язык кода:javascript
копировать
char sysfs_path[MAX_LENGTH];
char sysfs_data[MAX_DATA];
int hpd;
snprintf(sysfs_path,sizeof(sysfs_full_path),"/sys/class/hdmi/hdmi/attr/edid");
read_data(sysfs_path, sys_data);
hpd = atoi(sys_data);
If (hpd)
printf("hdmi plug in\n");
else
printf("hdmi unplug \n");
8.2.3 hdcp_enable

• Системные узлы

Язык кода:javascript
копировать
/sys/class/hdmi/hdmi/attr/hdcp_enable

• Параметры

enable: 0: disable hdmi hdcp function;1:enable hdmi hdcp function。

• Возвращаемое значение

No returns。

• описывать

Этот интерфейс используется для включения и отключения функции hdmi hdcp.

• Пример

Язык кода:javascript
копировать
// включи HDMI функция hdcp
echo 1 > /sys/class/hdmi/hdmi/attr/hdcp_enable
// выключи HDMI функция hdcp
echo 0 > /sys/class/hdmi/hdmi/attr/hdcp_enable

код c/С++:

Язык кода:javascript
копировать
char sysfs_path[MAX_LENGTH];
char sysfs_data[MAX_DATA];
snprintf(sysfs_path,sizeof(sysfs_full_path),"/sys/class/hdmi/hdmi/attr/hdcp_enable");
snprintf(sysfs_data, sizeof(sysfs_data),"%d",1);
write_data(sysfs_path, sys_data, strlen(sysfs_data));

9 Data Structure

9.1 disp_fb_info

• Прототип

Язык кода:javascript
копировать
typedef struct
{
    unsigned long long addr[3]; /* address of frame buffer,
    single addr for interleaved fomart,
    double addr for semi-planar fomart
    triple addr for planar format */
    disp_rectsz size[3]; //size for 3 component,unit: pixels
    unsigned int align[3]; //align for 3 comonent,unit: bytes(align=2^n,i.e
    .1/2/4/8/16/32..
    disp_pixel_format format;
    disp_color_space color_space; //color space
    unsigned int trd_right_addr[3];/* right address of 3d fb,
    used when in frame packing 3d mode */
    bool pre_multiply; //true: pre-multiply fb
    disp_rect64 crop; //crop rectangle boundaries
    disp_buffer_flags flags; //indicate stereo or non-stereo buffer
    disp_scan_flags scan; //scan type & scan order
}disp_fb_info;

• Члены

переменная

иллюстрировать

addr

Адрес содержимого кадрового буфера для чередующегося типа допустим только addr[0], для плоского типа доступны все три; для комбинированного типа UV допустимы addr[0], addr[1];

size

размер фреймбуфера, единица измерения — пиксель

align

Разрядность выравнивания, показатель степени 2

format

формат пикселей, подробности см. в разделе disp_pixel_format.

color_space

режим цветового пространства, подробности см. в разделе disp_cs_mode.

b_trd_src

1:3D source; 0:2D source

trd_mode

исходный 3D-режим, подробности см. в разделе disp_3d_src_mode.

trd_right_addr

used when in frame packing 3d mode

crop

Область отсечения буфера для отображения

flags

Идентифицирует буфер как 2D или 3D

scan

Идентификация типа записи, прогресса, чередования

• описывать

disp_fb_info для записи дисплея frambuffer атрибутивная информация.

9.2 disp_layer_info

• Прототип

Язык кода:javascript
копировать
typedef struct
{
    disp_layer_mode mode;
    unsigned char zorder; /*specifies the front-to-back ordering of the layers on
    the screen,
    the top layer having the highest Z value
    can't set zorder, but can get */
    unsigned char alpha_mode; //0: pixel alpha; 1: global alpha; 2: global
    pixel alpha
    unsigned char alpha_value; //global alpha value
    disp_rect screen_win; //display window on the screen
    bool b_trd_out; //3d display
    disp_3d_out_mode out_trd_mode;//3d display mode
    union {
        unsigned int color; //valid when LAYER_MODE_COLOR
        disp_fb_info fb; //framebuffer, valid when LAYER_MODE_BUFFER
    };
    unsigned int id; /* frame id, can get the id of frame display currently
    by DISP_LAYER_GET_FRAME_ID */
}disp_layer_info;

• Члены

переменная

иллюстрировать

mode

Режим слоя, подробности см. в разделе display_layer_mode.

zorder

Порядок слоев: слой с более высоким приоритетом может перезаписать слой с более низким приоритетом.

alpha_mode

0:pixel alpha, 1:global alpha, 2:global pixel alpha

alpha_value

layer global alpha value,valid while alpha_mode(1/2)

screenn_win

окно экрана, прямоугольное окно, в котором слой отображается на экране

fb

Атрибуты кадрового буфера см. в разделе disp_fb_info, действительны при BUFFER_MODE.

color

display color, valid when COLOR_MODE

b_trd_out

if output in 3d mode,used for scaler layer

out_trd_mode

режим вывода 3D, подробности см. в разделе disp_3d_out_mode.

id

идентификатор кадра, номер кадра изображения, установленный для драйвера. Вы можете получить номер отображаемого в данный момент кадра с помощью DISP_LAYER_GET_FRAME_ID для выполнения конкретной обработки, например освобождения отображаемого буфера кадра.

• описывать

disp_layer_info для описывания картинки слойатрибутивная информация.

9.3 disp_layer_config

• Прототип

Язык кода:javascript
копировать
typedef struct
{
    disp_layer_info info;
    bool enable;
    unsigned int channel;
    unsigned int layer_id;
}disp_layer_config;

• Члены

переменная

иллюстрировать

info

Свойства информации об изображении

enable

включить флаг

channel

Идентификатор канала слоя (0/1/2/3)

layer_id

Идентификатор слоя. Этот идентификатор является идентификатором слоя внутри канала. То есть (channel,layer_id)=(0,0) означает уровень 0 в канале 0.

• описывать

disp_layer_config используется дляописыватькартинаслой Конфигурацияатрибутивная информация.

9.4 disp_color_info

• Прототип

Язык кода:javascript
копировать
typedef struct
{
    u8 alpha;
    u8 red;
    u8 green;
    u8 blue;
}disp_color_info;

• Члены

переменнаяиллюстрировать

alpha

прозрачность цвета

red

красный

green

зеленый

blue

синий

• описывать

disp_color_info для записи информации о цвете.

9.5 disp_rect

• Прототип

Язык кода:javascript
копировать
typedef struct
{
    s32 x;
    s32 y;
    u32 width;
    u32 height;
}disp_rect;

• Члены

переменная

параметр

Начальная точка x значение

y

Значение начальной точки y

width

Ширина

height

высокий

• описывать

disp_rect используется для прямоугольного окна информации.

9.6 disp_rect64

• Прототип

Язык кода:javascript
копировать
typedef struct
{
    long long x;
    long long y;
    long long width;
    long long height;
}disp_rect64;

• Члены

переменная

иллюстрировать

x

Начальная точка x значение, фиксированная точка маленькаячисло,высокий32bit Это целое число, младшие 32 бита как десятичная дробь

y

Значение начальной точки y, фиксированная точка маленькаячисло,высокий32bit Это целое число, младшие 32 бита как десятичная дробь

width

Ширина, фиксированная точка маленькаячисло,высокий32bit Это целое число, младшие 32 бита как десятичная дробь

height

высокий, фиксированная точка маленькаячисло,высокий32bit Это целое число, младшие 32 бита как десятичная дробь

• описывать

disp_rect64 для записи прямоугольного окна.

9.7 disp_position

• Прототип

Язык кода:javascript
копировать
typedef struct
{
    s32 x;
    s32 y;
}disp_posistion;

• Члены

переменная

иллюстрировать

x

x

y

y

• описывать

disp_position используется для записи информации о координатах.

9.8 disp_rectsz

• Прототип

Язык кода:javascript
копировать
typedef struct
{
    u32 width;
    u32 height;
}disp_rectsz;

• Члены

переменная

иллюстрировать

width

Ширина

height

высокий

• описывать

disp_rectsz для описывания информации прямоугольного размера.

9.9 disp_pixel_format

• Прототип

Язык кода:javascript
копировать
typedef enum
{
    DISP_FORMAT_ARGB_8888 = 0x00,//MSB A-R-G-B LSB
    DISP_FORMAT_ABGR_8888 = 0x01,
    DISP_FORMAT_RGBA_8888 = 0x02,
    DISP_FORMAT_BGRA_8888 = 0x03,
    DISP_FORMAT_XRGB_8888 = 0x04,
    DISP_FORMAT_XBGR_8888 = 0x05,
    DISP_FORMAT_RGBX_8888 = 0x06,
    DISP_FORMAT_BGRX_8888 = 0x07,
    DISP_FORMAT_RGB_888 = 0x08,
    DISP_FORMAT_BGR_888 = 0x09,
    DISP_FORMAT_RGB_565 = 0x0a,
    DISP_FORMAT_BGR_565 = 0x0b,
    DISP_FORMAT_ARGB_4444 = 0x0c,
    DISP_FORMAT_ABGR_4444 = 0x0d,
    DISP_FORMAT_RGBA_4444 = 0x0e,
    DISP_FORMAT_BGRA_4444 = 0x0f,
    DISP_FORMAT_ARGB_1555 = 0x10,
    DISP_FORMAT_ABGR_1555 = 0x11,
    DISP_FORMAT_RGBA_5551 = 0x12,
    DISP_FORMAT_BGRA_5551 = 0x13,
    /* SP: semi-planar, P:planar, I:interleaved
    * UVUV: U in the LSBs; VUVU: V in the LSBs */
    DISP_FORMAT_YUV444_I_AYUV = 0x40,//MSB A-Y-U-V LSB
    DISP_FORMAT_YUV444_I_VUYA = 0x41,//MSB V-U-Y-A LSB
    DISP_FORMAT_YUV422_I_YVYU = 0x42,//MSB Y-V-Y-U LSB
    DISP_FORMAT_YUV422_I_YUYV = 0x43,//MSB Y-U-Y-V LSB
    DISP_FORMAT_YUV422_I_UYVY = 0x44,//MSB U-Y-V-Y LSB
    DISP_FORMAT_YUV422_I_VYUY = 0x45,//MSB V-Y-U-Y LSB
    DISP_FORMAT_YUV444_P = 0x46,//MSB P3-2-1-0 LSB, YYYY UUUU VVVV
    DISP_FORMAT_YUV422_P = 0x47,//MSB P3-2-1-0 LSB YYYY UU VV
    DISP_FORMAT_YUV420_P = 0x48,//MSB P3-2-1-0 LSB YYYY U V
    DISP_FORMAT_YUV411_P = 0x49,//MSB P3-2-1-0 LSB YYYY U V
    DISP_FORMAT_YUV422_SP_UVUV = 0x4a,//MSB V-U-V-U LSB
    DISP_FORMAT_YUV422_SP_VUVU = 0x4b,//MSB U-V-U-V LSB
    DISP_FORMAT_YUV420_SP_UVUV = 0x4c,
    DISP_FORMAT_YUV420_SP_VUVU = 0x4d,
    DISP_FORMAT_YUV411_SP_UVUV = 0x4e,
    DISP_FORMAT_YUV411_SP_VUVU = 0x4f,
}disp_pixel_format;

• Члены

переменная

иллюстрировать

DISP_FORMAT_ARGB_8888

32bpp, A В самом высоком положении B в самой нижней позиции

DISP_FORMAT_YUV420_P

плоский формат yuv,Хранится в трёх блоках,Требуется три адреса,P3 находится в самом верхнем положении.

DISP_FORMAT_YUV422_SP_UVUV

Полуплоский формат yuv, хранящийся в двух блоках, требует двух адресов, U находится в младшем бите.

DISP_FORMAT_YUV422_SP_VUVU

Полупланарный формат yuv, хранящийся в двух блоках, требует двух адресов, V находится в младшем бите.

• описывать

disp_pixel_format используется для записи формата пикселей.

9.10 disp_buffer_flags

• Прототип

Язык кода:javascript
копировать
typedef enum
{
    DISP_BF_NORMAL = 0,//non-stereo
    DISP_BF_STEREO_TB = 1 << 0,//stereo top-bottom
    DISP_BF_STEREO_FP = 1 << 1,//stereo frame packing
    DISP_BF_STEREO_SSH = 1 << 2,//stereo side by side half
    DISP_BF_STEREO_SSF = 1 << 3,//stereo side by side full
    DISP_BF_STEREO_LI = 1 << 4,//stereo line interlace
}disp_buffer_flags;

• Члены

переменная

иллюстрировать

DISP_BF_NORMAL

2d

DISP_BF_STEREO_TB top bottom

модель

DISP_BF_STEREO_FP

framepacking

DISP_BF_STEREO_SSF

бок о бок полная, левая и правая панорама

DISP_BF_STEREO_SSH

вид бок о бок, левая и правая половины

DISP_BF_STEREO_LI

line interleaved, модель со смещением рядов

• описывать

disp_buffer_flags используется дляописывать3D источникмодель。

9.11 disp_3d_out_mode

• Прототип

Язык кода:javascript
копировать
typedef enum
{
    //for lcd
    DISP_3D_OUT_MODE_CI_1 = 0x5,//column interlaved 1
    DISP_3D_OUT_MODE_CI_2 = 0x6,//column interlaved 2
    DISP_3D_OUT_MODE_CI_3 = 0x7,//column interlaved 3
    DISP_3D_OUT_MODE_CI_4 = 0x8,//column interlaved 4
    DISP_3D_OUT_MODE_LIRGB = 0x9,//line interleaved rgb
    //for hdmi
    DISP_3D_OUT_MODE_TB = 0x0,//top bottom
    DISP_3D_OUT_MODE_FP = 0x1,//frame packing
    DISP_3D_OUT_MODE_SSF = 0x2,//side by side full
    DISP_3D_OUT_MODE_SSH = 0x3,//side by side half
    DISP_3D_OUT_MODE_LI = 0x4,//line interleaved
    DISP_3D_OUT_MODE_FA = 0xa,//field alternative
}disp_3d_out_mode;

• Члены

for lcd:

переменная

иллюстрировать

DISP_3D_OUT_MODE_CI_1

Чередование столбцов

DISP_3D_OUT_MODE_CI_2

Чередование столбцов

DISP_3D_OUT_MODE_CI_3

Чередование столбцов

DISP_3D_OUT_MODE_CI_4

Чередование столбцов

DISP_3D_OUT_MODE_LIRGB

Строки чередуются

for hdmi:

переменная

иллюстрировать

DISP_3D_OUT_MODE_TB top bottom

вверх и внизмодель

DISP_3D_OUT_MODE_FP

framepacking

DISP_3D_OUT_MODE_SSF

бок о бок полная, левая и правая панорама

DISP_3D_OUT_MODE_SSH

вид бок о бок, левая и правая половины

DISP_3D_OUT_MODE_LI

line interleaved, Строки чередуются

DISP_3D_OUT_MODE_FA

альтернативное поле альтернативное поле

• описывать

disp_3d_out_mode используется дляописывать3D выходмодель。

9.12 disp_color_space

• Прототип

Язык кода:javascript
копировать
typedef enum
{
    DISP_BT601 = 0,
    DISP_BT709 = 1,
    DISP_YCC = 2,
}disp_color_mode;

• Члены

переменная

иллюстрировать

DISP_BT601

для SD-видео

DISP_BT709

Для высокого четкого видео

DISP_YCC

для фотографий

• описывать

disp_color_space используется для записи типа цветового пространства.

9.13 disp_output_type

• Прототип

Язык кода:javascript
копировать
typedef enum
{
    DISP_OUTPUT_TYPE_NONE = 0,
    DISP_OUTPUT_TYPE_LCD = 1,
    DISP_OUTPUT_TYPE_TV = 2,
    DISP_OUTPUT_TYPE_HDMI = 4,
    DISP_OUTPUT_TYPE_VGA = 8,
}disp_output_type;

• Члены

переменная

иллюстрировать

DISP_OUTPUT_TYPE_NONE

никтопоказыватьвыход

DISP_OUTPUT_TYPE_LCD

ЖК-выход

DISP_OUTPUT_TYPE_TV

ТВ-выход

DISP_OUTPUT_TYPE_HDMI

HDMI-выход

DISP_OUTPUT_TYPE_VGA

выход VGA

• описывать

disp_output_type для записиshowТип выхода。

9.14 disp_tv_mode

• Прототип

Язык кода:javascript
копировать
typedef enum
{
    DISP_TV_MOD_480I = 0,
    DISP_TV_MOD_576I = 1,
    DISP_TV_MOD_480P = 2,
    DISP_TV_MOD_576P = 3,
    DISP_TV_MOD_720P_50HZ = 4,
    DISP_TV_MOD_720P_60HZ = 5,
    DISP_TV_MOD_1080I_50HZ = 6,
    DISP_TV_MOD_1080I_60HZ = 7,
    DISP_TV_MOD_1080P_24HZ = 8,
    DISP_TV_MOD_1080P_50HZ = 9,
    DISP_TV_MOD_1080P_60HZ = 0xa,
    DISP_TV_MOD_1080P_24HZ_3D_FP = 0x17,
    DISP_TV_MOD_720P_50HZ_3D_FP = 0x18,
    DISP_TV_MOD_720P_60HZ_3D_FP = 0x19,
    DISP_TV_MOD_1080P_25HZ = 0x1a,
    DISP_TV_MOD_1080P_30HZ = 0x1b,
    DISP_TV_MOD_PAL = 0xb,
    DISP_TV_MOD_PAL_SVIDEO = 0xc,
    DISP_TV_MOD_NTSC = 0xe,
    DISP_TV_MOD_NTSC_SVIDEO = 0xf,
    DISP_TV_MOD_PAL_M = 0x11,
    DISP_TV_MOD_PAL_M_SVIDEO = 0x12,
    DISP_TV_MOD_PAL_NC = 0x14,
    DISP_TV_MOD_PAL_NC_SVIDEO = 0x15,
    DISP_TV_MOD_3840_2160P_30HZ = 0x1c,
    DISP_TV_MOD_3840_2160P_25HZ = 0x1d,
    DISP_TV_MOD_3840_2160P_24HZ = 0x1e,
    DISP_TV_MODE_NUM = 0x1f,
}disp_tv_mode;

• Члены

• описывать

disp_tv_mode используется дляописывать ТВ-выходмодель。

9.15 disp_output

• Прототип

Язык кода:javascript
копировать
typedef struct
{
    unsigned int type;
    unsigned int mode;
}disp_output;

• Члены

переменная

иллюстрировать

Type

Тип выхода

Mode

выходмодель,480P/576P, etc

• описывать

disp_output для записиshowТип выхода,модель。

9.16 disp_layer_mode

• Прототип

Язык кода:javascript
копировать
typedef enum
{
    LAYER_MODE_BUFFER = 0,
    LAYER_MODE_COLOR = 1,
}disp_layer_mode;

• Члены

переменная

иллюстрировать

LAYER_MODE_BUFFER

buffer модель,приноситьbuffer слой

LAYER_MODE_COLOR

Монохромнаямодель,никтоbuffer слое, для представления содержимого изображения необходим только один цвет

• описывать

disp_layer_mode используется дляописыватькартинаслоймодель。

9.17 disp_scan_flags

• Прототип

Язык кода:javascript
копировать
typedef enum
{
    DISP_SCAN_PROGRESSIVE = 0,//non interlace
    DISP_SCAN_INTERLACED_ODD_FLD_FIRST = 1 << 0,//interlace ,odd field first
    DISP_SCAN_INTERLACED_EVEN_FLD_FIRST = 1 << 1,//interlace,even field first
}disp_scan_flags;

• Члены

переменная

иллюстрировать

DISP_SCAN_PROGRESSIVE

построчномодель

DISP_SCAN_INTERLACED_ODD_FLD_FIRST

альтернативные строкимодель,странныйчислоприоритет строк

DISP_SCAN_INTERLACED_EVEN_FLD_FIRST

альтернативные строкимодель,дажечислоприоритет строк

• описывать disp_scan_flags Используется для отображения буфера метод сканирования.

10 Отладка

10.1 Проверка состояния модуля дисплея

Язык кода:javascript
копировать
cat /sys/class/disp/disp/attr/sys

Пример следующий:

Язык кода:javascript
копировать
# cat /sys/class/disp/disp/attr/sys
screen 0:
de_rate 432000000 Hz /* de тактовая частота*/, ref_fps=50 /* Эталонная частота обновления выходного устройства*/
hdmi output mode(4) fps:50.5 1280x 720
err:0 skip:54 irq:21494 vsync:0
BUF enable ch[0] lyr[0] z[0] prem[N] a[globl 255] fmt[ 1] fb
[1920,1080;1920,1080;1920,1080] crop[ 0, 0,1920,1080] frame[ 32, 18,1216, 684]
addr[716da000, 0, 0] flags[0x 0] trd[0,0]
screen 1:
de_rate 432000000 Hz /* de тактовая частота*/, ref_fps=50 /* Эталонная частота обновления выходного устройства*/
tv output mode(11) fps:50.5 720x 576 /* ТВ-выход| модельдля(11:PAL) | Частота обновления: 50,5 Гц | Различать
Размер: 720x576 */
err:0 skip:54 irq:8372 vsync:0
BUF enable ch[0] lyr[0] z[0] prem[Y] a[globl 255] fmt[ 0] fb[ 720, 576; 720, 576; 720,
576] crop[ 0, 0, 720, 576] frame[ 18, 15, 684, 546]
addr[739a8000, 0, 0] flags[0x 0] trd[0,0]
acquire: 225, 2.6 fps
release: 224, 2.6 fps
display: 201, 2.5 fps

картинаслой Каждая информацияописыватьследующее:

Язык кода:javascript
копировать
BUF: картинаслойтип,BUF/COLOR,Обычно BUF,Прямо сейчаскартинаслойдаприноситьBUFFER из. ЦВЕТ Это означает отображение сплошного цветного экрана без
BUFFER。
enable: Дисплей включен состояние.
ch[0]: Долженкартинаслойвblending Канал 0.
lyr[0]: Долженкартинаслойвтекущийblending рядсерединаслой0。
z[0]: картинаслойz порядке, чем он меньше, тем ближе к низу и может быть z Предисловие покрыто большим слоем.
prem[Y]: Следует ли форматировать предварительное умножение, Y Да,Н нет.
a: alpha параметр, globl/pixel/; alpha ценить。
fmt: картинаслой Формат,ценить64 Ниже приведен RGB Формат выше: YUV; формат, общий 72 за YV12,76 для НВ12.
fb: картинаслойbuffer Размер, ширина и высота — это три компонента.
crop: буфер изображения серединаизплощадь резкидомен, [x,y,w,h]。
frame: картинаслойсуществоватьэкранэкранначальствоизпоказыватьокругдомен,[x,y,w,h]。
addr: три компонентаизадрес。
flags: Обычно 0, 3D SS Время 0x4, 3D TB Когда это 0x1, 3D FP время 0x2.
trd: 3D или нет выход,3D Тип выхода (HDMI FP Когда выход равен 1) каждый счетчик описыватьследующее:
err: de недостатокчислоиз Второсортныйчисло,de недостатокчисломожет появитьсяэкрандрожание экрана,цветокэкранизвопрос。de недостатокчислов целомдляприносить Ширина Нетвызванный ногой。
skip: экспресс де пропуск кадровиз Второсортныйчисло,Пропуск кадров приведет к проблемам с задержкой. Пропуск кадров означает медленную реакцию на это прерывание.,de Модуль определяет, что текущий разрыв середина близок к или
Если оно превышает зону гашения, возможность обновления изображения будет прекращена, а исходное изображение продолжит отображаться.
irq: Указывает вертикальную область гашения на канале.серединапрерывать выполнениеиз Второсортныйчисло,продолжает растивыражать Долженрядначальствоизtiming。
controller Бегу, когда середина.
vsync: указывает vsync, отправленный модулем дисплея в пространство пользователя середина. информацияизчислоглаз,продолжает растивыражатьтолькосуществовать Нетотправлять непрерывносередина。
acquire/release/display Смысл следующий, только в андроиде плансерединаиметьэффект.
acquire: Да, хах composer передано в дисп driver изкартинакак рамкачислоа такжерамка Ставка,Частота кадров действительна только при обновлении изображения.,все еще
Цена неточная.
release: isdisp driver После завершения отображения верните его на андроид изкартинакак рамкачислоа такжерамка Ставка,Частота кадров доступна только при обновлении изображения.
эффект,все еще Цена неточная.
display: isdisp показыватьприезжатьвыходоборудованиеначальствоизрамкачислоа такжерамка Ставка,Частота кадров действительна только при обновлении изображения.,все ещечасизценитьда Нетточныйизнравиться
果приобрести с выпуском Нетпоследовательный,иллюстрироватьdisp Некоторые кадры изображений все еще используются и не были возвращены, разница составляет 1–2. Между нормальными ценить. Ни один не может
Равные, если равны, все иллюстрированные кадры изображения будут возвращены, и отображение будет отключено.
Происходит разрывание. если отобразить с выпуском противоречиво, иллюстрировать на дисплее середина Возникла ситуация с потерей кадров, причина в том, что в активном режиме в пределах области
hwcomposer Передача более одного кадра изображения вниз.

отлаживатьиллюстрировать:

Язык кода:javascript
копировать
1. для Android система, может дампсис SurfaceFlinger поверхность печати информация, если информация связана с дисп. серединаsys серединаизинформация Нетпоследовательный,Очень вероятно Да, хахc Есть проблема с конвертацией.
2. Если вы обнаружите, что обновление изображения происходит медленно и существует проблема с задержкой, вы можете посмотреть частоту обновления выходного устройства и сравнить ее с ref_fps. с фпс Согласовано ли оно? Если противоречиво, проиллюстрировать tcon? тактовая частота или время Нет Конфигурация правильная. если ref_fps спецификация с экраном Если противоречиво, вам нужно проверить sys_config. Тактовая частота и синхронизация середина Конфигурация правильная. экран вообще 60Гц, а если это телевизор или HDMI, который связан с моделью и встречается чаще
Видно как 60/50/30/24Гц.
если это андроид схему, вы также можете взглянуть на дисплей с выпуском прилавок Согласовано ли это? Если разница слишком велика, Android будет отправлять кадры неравномерно, что приведет к потере кадров.
3. Если вы обнаружите, что обновление изображения происходит медленно и возникает проблема с задержкой, вам также необходимо обратить внимание на пропуск. счетчик, если пропустить counter Рост произошел, иллюстрировать теперь нагрузка на систему увеличилась, vblank Середина реагирует медленно, происходит пропуск кадров, из-за чего изображение зависает.
4. еслиэкран Нет Яркий,Когда сомневаешься в подсветке,Вы можете проверить, равна ли подсветка экранаценить 0. если 0,иллюстрироватьначальствослойпередача下来изподсветкаценить Нет Разумный;если Нетдля0,Подсветка все еще выключена,нодляводить машину或аппаратное обеспечениевопрос了。аппаратное обеспечениеначальство Можно измерить поbl_en и ШИМ напряжение ценить для устранения проблемы.
5. Если оно размыто или изображение дрожит, вы можете проверить ошибку. счетчик, если ошибка counter иметьувеличивать,ноиллюстрироватьdeнедостатокчисло,Возможно, вам не хватает ремней.,Либо существует проблема недостаточной мгновенной пропускной способности ремня.

10.2 Скриншот

Язык кода:javascript
копировать
echo 0 > /sys/class/disp/disp/attr/disp
echo /data/filename.bmp > /sys/class/disp/disp/attr/capture_dump

Этот метод отладки используется для перехвата изображения до того, как DE будет выведен в TCON, и используется для отображения сегментированного устранения неполадок на пути. Если проблем с созданием снимков экрана нет, но интерфейс работает ненормально, можно определить, что между TCON и монитором возникла ошибка.

Первый путь принимает индекс отображения 0 или 1.

Второй путь принимает путь к файлу.

10.3 colorbar

Язык кода:javascript
копировать
echo 0 > /sys/class/disp/disp/attr/disp
echo > /sys/class/disp/disp/attr/colorbar

Первый путь принимает индекс отображения 0 или 1.

Второй путь представляет источник входного сигнала, выбранный TCON. 1, выход DE; 2–7, цветная полоса для самотестирования TCON 8, цветная полоса для самотестирования DE;

10.4 Интерфейс отладки модуля дисплея

10.4.1 Обзор

Отладочный узел

Язык кода:javascript
копировать
mount -t debugfs none /sys/kernek/debug;
/sys/kernel/debug/dispdbg;
Язык кода:javascript
копировать
name command param start info
//name: Имя объекта, представляющее операцию
//command: Указывает команду, которую необходимо выполнить
//param: Указывает параметр, полученный командой
//start: Введите 1 Начать выполнение команды
//info: Сохраняем результаты выполнения команды
//Только чтение, размер 1024 bytes。
10.4.2 Переключение устройства вывода дисплея
Язык кода:javascript
копировать
name: disp0/1/2 //выражать Канал дисплея 0/1/2
command: switch
param: type mode
//параметриллюстрировать:type:0(none),1(lcd),2(tv),4(hdmi),8(vga)
//mode Подробности см. в разделе disp_tv_mode. определение
/* пример*/
/* Отображение канала 0 выходLCD */
echo disp0 > name;echo switch > command;echo 1 0 > param;echo 1 > start;
/* закрытие Отображение канала 0 извыход*/
echo disp0 > name;echo switch > command;echo 0 0 > param;echo 1 > start;
10.4.3 Переключение устройств вывода дисплея
Язык кода:javascript
копировать
name: disp0/1/2 //выражать Канал дисплея 0/1/2
command: blank
param: 0/1
//параметриллюстрировать:1 Показывает пустое состояние, что означает выключение дисплея. Выход 0; Указывает непустое, что означает включение выхода дисплея
/* пример*/
/* закрытие Отображение канала 0 Отображение выхода*/
эхо disp0 > name;echo blank > command;echo 1 > param;echo 1 > start;
/* Включите отображение канала 1. Отображение выхода*/
эхо disp1 > name;echo blank > command;echo 0 > param;echo 1 > start;
10.4.4 Интерфейс управления питанием (приостановка/возобновление)
Язык кода:javascript
копировать
name: disp0/1/2 //выражать Канал дисплея 0/1/2
command: suspend/resume //Команда «Сон, пробуждение»
param: никто
/* пример*/
/* Позвольте модулю дисплея перейти в спящий режим*/
echo disp0 > name;echo suspend > command;echo 1 > start;
/* Позвольте модулю дисплея выйти из спящего режима*/
echo disp1 > name;echo resume > command;echo 1 > start;
10.4.5 Регулировка подсветки ЖК-экрана
Язык кода:javascript
копировать
name: lcd0/1/2 //Указывает ЖК0/1/2
command: setbl //Устанавливаем яркость подсветки
param: xx
//параметриллюстрировать:оценить яркость подсветки, диапазон 0~255.
/* пример*/
/* Установите яркость подсветки на 100. */
echo lcd0 > name;echo setbl > command;echo 100 > param;echo 1 > start;
/* Установите яркость подсветки на 0. */
echo lcd0 > name;echo setbl > command;echo 0 > param;echo 1 > start;
10.4.6 Переключатель сообщений vsync
Язык кода:javascript
копировать
name: disp0/1/2 //выражать Канал дисплея 0/1/2
command: vsync_enable //Включаем/выключаем вертикальную синхронизацию информация
param: 0/1
//параметриллюстрировать:0:выражатьзакрытие; 1: указывает на открытие
/* пример*/
/* закрытие Отображение канала 0 вертикальная синхронизация информация*/
echo disp0 > name;echo vsync_enable > command;echo 0 > param;echo 1 > start;
/* Включите отображение канала 1. вертикальная синхронизация информация*/
echo disp1 > name;echo vsync_enable > command;echo 1 > param;echo 1 > start;
10.4.7 Проверка статуса улучшения
Язык кода:javascript
копировать
name: enhance0/1/2 //Указывает улучшение0/1/2
command: getinfo //Получить улучшение статус
param: никто
/* пример*/
/* получать Отображение канала 0 усиливать Информация о статусе*/
# echo enhance0 > name;echo getinfo > command;echo 1 > start;cat info;
# enhance 0: enable, normal
10.4.8 Проверка состояния интеллектуальной подсветки
Язык кода:javascript
копировать
name: smbl0/1/2 //выражать Канал дисплея 0/1/2
command: getinfo //Будь умнее backlight статус
param: никто
/* пример*/
/* получать Отображение канала 0 что-то Информация о статусе*/
# echo smbl0 > name;echo getinfo > command;echo 1 > start;cat info;
# smbl 0: disable, window<0,0,0,0>, backlight=0, save_power=0 percent
//показыватьизда智能подсветкаливключать,Эффективный размер окна,Текущая подсветкаценить,Коэффициент энергосбережения

10.5 Часто задаваемые вопросы

10.5.1 Черный экран (без подсветки)

Проблемное явление:Подключение машины ЖК-выход,ОТКРОЙТЕ ДЛЯ СЕБЯЖКД Дисплея нет, а подсветка неяркая, если присмотреться.

Анализ проблемы:Это явлениеиллюстрироватьLCD Неисправен блок питания подсветки. Нельзя исключать наличие и других проблем, но проблему отсутствия подсветки необходимо решить в первую очередь.

Действия по устранению неполадок:

• Шаг 1

С помощью вольтметра измерьте напряжение каждого канала ЖК-экрана. Если напряжение на выводе подсветки ненормальное, это означает, что проблема связана с ШИМ. В противном случае попробуйте сменить экран и повторить попытку.

• Шаг 2

Сначала проверьте, выпущено ли вместе с SDK руководство по использованию модуля ШИМ, и если да, выполните действия по устранению неполадок.

• Шаг 3

Если SDK не публикует руководство по использованию модуля ШИМ. Вы можете просмотреть /sys/kernel/debug/pwm, чтобы увидеть, есть ли какие-либо выходные данные. Если нет, драйвер PWM не загружен. Проверьте, открыто ли меню.

• Шаг 4

Если шаг третий не помог решить проблему, устраните неполадки dts. или board.dts Конфигурация。еслиеще нетиметьрешать,Можно искать технологииподдерживать。

10.5.2 Черный экран (с подсветкой)

Проблема: машина подключена к ЖК-дисплею.,Нашёл подсветку,интерфейсвыходчерныйэкран。

Анализ проблемы:Это явлениеиллюстрироватьбезиметьсодержаниевыход,может бытьDE、TCON Произошла ошибка или приложение не отправило кадр.

Действия по устранению неполадок:

• Шаг 1

Согласно главе 10.1 Устраните проблемы с корректностью входной информации о слое в приложении. Наиболее распространены ошибки его середина, Ширинавысокий и дескриптора файла видеопамяти.

• Шаг 2

Сделайте снимок экрана в соответствии с главой 10.2, чтобы проверить, в порядке ли выходной сигнал DE. Если это ненормально, проверьте правильность конфигурации драйвера DE, если все в порядке, продолжите выполнение следующих шагов;

• Шаг 3 Согласно 10.3 Цветовая полоса вывода главы, если TCON собственная цветовая полоса Если дисплея нет, проверьте путь к оборудованию; Если он отображается, проверьте TCON входитьисточниквыбиратьиззарегистрироваться。Последняя концепция Ставкаочень низкий,Вы можете искать технологии в это времяподдерживать。

10.5.3 Зеленый экран

Симптом: на мониторе появляется зеленый экран, возможно и другие изменения в интерфейсе переключения.

Анализ проблемы:Это явлениеиллюстрироватьиметь дело скартинаслойчасDE Что-то пошло не так. Это может быть буфер, отправленный приложением. Также существует проблема с содержанием или форматом;

Возможно, конфигурация DE неправильная.

Действия по устранению неполадок:

• Шаг 1

Согласно главе 10.1 Устраните проблемы с корректностью входной информации о слое в приложении. Это середина,картинаслой Формат Неверная записьизвопрос最多。

• Шаг 2

Экспорт DE зарегистрироваться,Устранение исключений. Этот шаг более сложный,Необходимо добиваться поддержки технологий.

10.5.4 Интерфейс завис

Признак: Интерфейс зафиксирован на одном экране и не изменится.

Анализ проблемы: данное явление означает, что канал отображения в целом работает нормально, но приложение не продолжает отправлять кадры.

Действия по устранению неполадок:

• Шаг 1

Согласно 10.1 Есть ли какие-либо изменения во входной информации о слое в главе «Приложение устранения неполадок», особенно обратите внимание накартинаслойизадрес。

• Шаг 2

Устраните неполадки в логике отправки кадров приложения, уделяя особое внимание взаимоблокировкам, потокам и ненормальным выходам, а также исключениям обработки ограничений.

10.5.5 Частичное искажение интерфейса

Признак: при переходе экрана к определенной сцене наблюдается частичное размытие и постоянная тряска.

Анализ проблемы: Это явление является типичным явлением ошибки масштабатора DE.

Действия по устранению неполадок:

Согласно 10.1 章节查看вопрос出现часприносить Увеличитькартинаслойизпараметр。еслиэкранэкранвыходиз Ширинаx высокийразделить наcrop из Ширинаx высокийменьше, чем1/16 Или больше 32, тогда слой не может перейти в DE масштабирования, используйте вместо него графический процессор или следует

Использовать модификациюкартинаслой Ширинавысокий。

10.5.6 Быстрое переключение интерфейса на размытый экран

Симптомы проблемы: Экран размыт при быстром переключении интерфейсов, а интерфейс, который не сильно изменился, отображается нормально.

Анализ проблемы. Это явление является типичной проблемой производительности и не имеет ничего общего с драйвером дисплея.

Действия по устранению неполадок:

• Шаг 1

Соответствует ли «Устранение неполадок DRAM с шириной» требованиям сцены?

• Шаг 2

Если это система Android, проверьте процесс обработки ограждения, если это чистая система Linux, проверьте процесс отправки кадров, буфер подкачки и процесс pandisplay.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose