Позвольте разработчикам приложений дисплея понять интерфейс и процесс использования драйвера дисплея, а также быстро приступить к разработке, чтобы новые люди могли быстро понять интерфейс драйвера при принятии на себя работу, а также отлаживать и устранять проблемы.
Платформа Sunxi DE1.0/DE2.0.
Разработчики приложений, связанных с отображением, разработчики других модулей, связанных с отображением, и новички.
Рисунок 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-1: Введение в термины аппаратного обеспечения
термин | объяснять |
---|---|
de | Механизм отображения, механизм отображения — это аппаратный модуль, отвечающий за наложение, смешивание, масштабирование и т. д. входных нескольких слоев. |
channel | Аппаратный канал содержит несколько блоков обработки слоев, которые могут одновременно обрабатывать несколько (обычно 4) слоев одного и того же формата. |
layer | Блок обработки слоев может обрабатывать входное изображение, разделенное на типы видео и пользовательского интерфейса в соответствии с поддерживаемыми форматами изображений. |
capture | Сделайте снимок экрана и сохраните вывод de в локальный файл. |
alpha | Прозрачность, определяющая прозрачность соответствующего изображения при наложении. |
transform | Преобразование изображения, такое как перевод, вращение и т. д. |
overlay | Наложение изображений — эффект последовательного наложения изображений. Те, у кого z-порядок больше, находятся ближе к наблюдателю и будут блокировать те, у кого z-порядок меньше. |
blending | Смешивание изображений, эффект объединения изображений в соответствии с соотношением альфа. |
enhance | Улучшение изображения — процесс или метод целенаправленной обработки данных изображения для улучшения эффектов изображения. |
Таблица 2-2: Таблица введения терминов программного обеспечения
термин | объяснять |
---|---|
fb | Фреймбуфер (framebuffer) — интерфейс, предоставляемый Linux для устройств отображения, абстрагирует видеопамять в устройство. Иногда также относится к фрагменту видеопамяти. |
al | Уровень абстракции, который абстрагирует базовое оборудование в уровень программного обеспечения с фиксированной бизнес-логикой в драйвере. |
lowlevel | Нижний уровень, программный уровень, который напрямую управляет аппаратными регистрами. |
make kenel_menuconfig
Конкретный каталог конфигурации:
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 выбирать не нужно.
Структура исходного кода следующая:
├─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-3: Блок-схема драйвера
Драйверы дисплея можно разделить на три уровня: уровень драйвера, уровень инфраструктуры и нижний уровень. Нижний уровень подключен к графическому оборудованию и в основном отвечает за преобразование функциональных параметров, настроенных верхним уровнем, в параметры, необходимые аппаратному обеспечению, и настройку их в соответствующие регистры.
Уровень инфраструктуры отображения абстрагирует и инкапсулирует базовый уровень в функциональные модули. Уровень драйвера инкапсулирует внешние функциональные интерфейсы и предоставляет соответствующие узлы устройств и унифицированные интерфейсы пользовательскому пространству через ядро. На уровне драйвера он разделен на четыре драйвера.
Драйверы: драйвер кадрового буфера, драйвер дисплея, драйвер ЖК-дисплея и драйвер HDMI. Драйвер Framebuffer взаимодействует с ядром кадрового буфера и реализует стандартный интерфейс кадрового буфера Linux.
Драйвер Disp является основным модулем драйвера дисплея. Все интерфейсы предоставляются драйвером Disp, включая интерфейс ЖК-дисплея.
Использование модуля в основном реализуется через 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 представляет индекс слоя внутри канала.
Далее основное внимание уделяется получению параметров слоя из заголовочного файла и их представлению.
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
Существует три режима Альфа:
Рисунок 3-3: Режим альфа-наложения
• align
Количество байт выравнивания в видеопамяти.
• format
Введите формат слоя. Поддерживаемые форматы канала пользовательского интерфейса:
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
Поддерживаемые форматы видеоканала:
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
Все слои поддерживают масштабирование. Действия над слоями следующие:
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.
Платформа 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 | Пользователь не может установить |
Установить интерфейс информации о слое | Информацию о нескольких слоях можно установить одновременно, добавив параметр номера информации о слое. | Устанавливайте информацию по одному слою за раз |
платформаподдерживатьэкрана такжеHDMI вывод, и оба отображаются одновременно.
экранизинтерфейсмного,платформаподдерживатьRGB/CPU/LVDS/DSI интерфейс.
Полное название HDMI: Мультимедийный интерфейс высокой четкости. Может обеспечить взаимодействие высокой четкости между DVD, аудиоустройствами, приставками, телевизорами и другими видеодисплеями.
Союз. Может нести звук,видеочислов соответствии с,и другие элементы управления,числов соответствии синформация。поддерживатьгорячая замена,Защита контента,модельлиподдерживатьиз Запрос。
водить машинуподдерживать Двойной дисплей。экран(хозяин)+ HDMI (вспомогательный).
Разница между одновременным отображением и дифференциальным отображением заключается только в содержимом отображения. Если содержимое отображения одинаковое, то это одновременное отображение; в противном случае это другое отображение;
Вторичный экран и скопируйте содержимое главного экрана (хранящееся в FB0) в внутренний буфер дисплея вторичного экрана, а затем переключите внутренний буфер вторичного экрана на внешний буфер. Обратите внимание, что проблема в том, что двусторонний дисплей
Синхронизация буфера. Если синхронизация неудовлетворительна, произойдет разрыв изображения и несовпадение.
Драйвер дисплея платформы Sunxi предоставляет пользователям множество функциональных интерфейсов, которые могут управлять ресурсами дисплея, такими как слои, ЖК-дисплей и HDMI.
• Прототип
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) будет выполнен вместе.
• Пример
//запускать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);
• Прототип
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, в противном случае верните номер ошибки.
• описывать
Эта функция используется для установки цвета фона дисплея.
• Пример
//Устанавливаем цвет фона дисплея, 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);
• Прототип
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, в противном случае верните номер ошибки.
• описывать
Эта функция используется для получения цвета фона дисплея.
• Пример
//Получаем цвет фона дисплея, 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);
• Прототип
int ioctl(int handle, unsigned int cmd, unsigned int *arg);
• Параметры
параметр | иллюстрировать |
---|---|
hdle | Показать дескриптор водителя |
cmd | DISP_GET_SCN_WIDTH |
arg | arg[0] отображает канал 0/1 |
• Возвращаемое значение
В случае успеха верните текущее разрешение экрана по горизонтали, в противном случае верните номер ошибки.
• описывать
Эта функция используется для получения текущего разрешения экрана по горизонтали.
• Пример
//получатьэкрануровень занавеса Различать Ставка
unsigned int screen_width;
unsigned int arg[3];
arg[0] = 0;
screen_width = ioctl(disphd, DISP_GET_SCN_WIDTH, (void*)arg);
• Прототип
int ioctl(int handle, unsigned int cmd, unsigned int *arg);
• Параметры
параметр | иллюстрировать |
---|---|
hdle | Показать дескриптор водителя |
cmd | DISP_GET_SCN_HEIGHT |
arg | arg[0] отображает канал 0/1 |
• Возвращаемое значение
В случае успеха верните текущее разрешение экрана по вертикали, в противном случае верните номер ошибки.
• описывать
Эта функция используется для получения текущего разрешения экрана по вертикали.
• Пример
//получатьэкран Штора вертикальная Различать Ставка
unsigned int screen_height;
unsigned int arg[3];
arg[0] = 0;
screen_height = ioctl(disphd, DISP_GET_SCN_HEIGHT, (void*)arg);
• Прототип
int ioctl(int handle, unsigned int cmd, unsigned int *arg);
• Параметры
параметр | иллюстрировать |
---|---|
hdle | Показать дескриптор водителя |
cmd | DISP_GET_OUTPUT_TYPE |
arg | arg[0] отображает канал 0/1 |
• Возвращаемое значение
В случае успеха возвращает отображаемый в данный момент тип вывода, в противном случае возвращает номер ошибки.
• описывать
Эта функция используется для получения текущего типа вывода дисплея (ЖК-дисплей, ТВ, HDMI, VGA, НЕТ).
• Пример
//Получаем текущий тип отображения вывода
disp_output_type выходной_тип;
беззнаковый int arg[3];
арг[0] = 0;
output_type = (disp_output_type) ioctl (disphd, DISP_GET_OUTPUT_TYPE, (void*) arg);
• Прототип
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, НЕТ).
• Пример
//Получаем текущий тип отображения выхода
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;
• Прототип
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.
• Пример
//Включаем/выключаем вертикальную синхронизациюинформация Функция отправки,disphdдля Показать дескриптор водителя,выбор экрана0/1
беззнаковый int arg[3];
арг[0] = 0;
арг[1] = 1;
ioctl(disphd, DISP_VSYNC_EVENT_EN, (void*)arg);
• Прототип
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, в противном случае верните номер ошибки.
• описывать
Эта функция используется для переключения типа выхода.
• Пример
//Выключатель
беззнаковый 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, который отключит вывод текущего канала отображения.
• Прототип
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, в противном случае верните номер ошибки.
• описывать
Письмочислодля переключения Тип выход и задайте свойства параметра выходного устройства。
• Пример
//Выключатель Тип выход и задайте свойства параметра выходного устройства
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, который отключит вывод текущего канала отображения.
• Прототип
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, в противном случае верните номер ошибки.
• описывать
Письмочислоиспользуется дляполучатьтекущий Тип Параметр производительности и связанных свойств。
• Пример
//Получаем текущий тип Параметр производительности и связанных свойств
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, это означает, что текущий выходной канал отображения закрыт
• Прототип
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; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция используется для установки многоуровневой информации.
• Пример
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);
• Прототип
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; в случае неудачи возвращается номер ошибки.
• описывать
Письмочислоиспользуется дляполучатькартинаслойпараметр。
• Пример
//получатькартинаслойпараметр,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);
• Прототип
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.
• Пример
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
• Прототип
int ioctl(int handle, unsigned int cmd,unsigned int *arg);
• Параметры
параметр | иллюстрировать |
---|---|
hdle | Показать дескриптор водителя |
cmd | DISP_CAPTURE_START |
arg | arg[0] для Канал дисплея 0/1 |
• Возвращаемое значение
В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция используется для включения функции скриншота.
• Пример
//Запускаем функцию скриншота, dispfd для Показать дескриптор водителя
arg[0] = 0;//отображаем канал 0
ioctl(dispfd, DISP_CAPTURE_START, (void*)arg);
• Прототип
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; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция используется для отправки задания на создание снимков экрана. После отправки будет запущена операция создания снимков экрана.
• Пример
//Отправляем функцию скриншота, 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);
• Прототип
int ioctl(int handle, unsigned int cmd, unsigned int *arg);
• Параметры
параметр | иллюстрировать |
---|---|
hdle | Показать дескриптор водителя |
cmd | DISP_CAPTURE_STOP |
arg | arg[0] для Канал дисплея 0/1 |
• Возвращаемое значение
В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция используется для отключения функции скриншота.
• Пример
//Остановим функцию скриншота, dispfd для Показать дескриптор водителя
unsigned long arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(dispfd, DISP_CAPTURE_STOP, (void*)arg);
• Прототип
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; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция проверяет, был ли сделан снимок экрана только что завершившегося кадра изображения.
• Пример
//Запрашиваем, успешен ли скриншот, dispfd для Показать дескриптор водителя
unsigned long arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(dispfd, DISP_CAPTURE_QUERY, (void*)arg);
• Прототип
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; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция используется для настройки яркости ЖК-дисплея.
• Пример
//Устанавливаем яркость подсветки ЖК-дисплея, disphd — Показать дескриптор водителя
unsigned int arg[3];
unsigned int bl = 197;
arg[0] = 0;//отображаем канал 0
arg[1] = bl;
ioctl(disphd, DISP_LCD_SET_BRIGHTNESS, (void*)arg);
• Прототип
int ioctl(int handle, unsigned int cmd, unsigned int *arg);
• Параметры
параметр | иллюстрировать |
---|---|
hdle | Показать дескриптор водителя |
cmd | DISP_LCD_GET_BRIGHTNESS |
arg | arg[0] для Канал дисплея 0/1 |
• Возвращаемое значение
В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция используется для регулировки яркости ЖК-дисплея.
• Пример
//Получаем яркость подсветки ЖК-дисплея, disphd — Показать дескриптор водителя
unsigned int arg[3];
unsigned int bl;
arg[0] = 0;//отображаем канал 0
bl = ioctl(disphd, DISP_LCD_GET_BRIGHTNESS, (void*)arg);
• Прототип
int ioctl(int handle, unsigned int cmd, unsigned int *arg);
• Параметры
параметр | иллюстрировать |
---|---|
hdle | Показать дескриптор водителя |
cmd | DISP_ENHANCE_ENABLE |
arg | arg[0] для Канал дисплея 0/1 |
• Возвращаемое значение
В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция используется для включения функции постобработки изображения.
• Пример
//Включаем функцию постобработки изображения, disphd — Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(disphd, DISP_ENHANCE_ENABLE, (void*)arg);
• Прототип
int ioctl(int handle, unsigned int cmd, unsigned int *arg);
• Параметры
параметр | иллюстрировать |
---|---|
hdle | Показать дескриптор водителя |
cmd | DISP_ENHANCE_DISABLE |
arg | arg[0] для Канал дисплея 0/1 |
• Возвращаемое значение
В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция используется для отключения функции постобработки изображения.
• Пример
//Отключаем функцию постобработки изображения, disphd - Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(disphd, DISP_ENHANCE_DISABLE, (void*)arg);
• Прототип
int ioctl(int handle, unsigned int cmd, unsigned int *arg);
• Параметры
параметр | иллюстрировать |
---|---|
hdle | Показать дескриптор водителя |
cmd | DISP_ENHANCE_DEMO_ENABLE |
arg | arg[0] для Канал дисплея 0/1 |
• Возвращаемое значение
В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция используется для включения демонстрационного режима постобработки изображения. После его включения на экране для удобства сравнения появятся постобработанное изображение слева и необработанное изображение справа. Демонстрационный режим доступен только после включения функции постобработки.
эффект.
• Пример
//Включаем демонстрационную модель постобработки изображения, disphd — Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(disphd, DISP_ENHANCE_DEMO_ENABLE, (void*)arg);
• Прототип
int ioctl(int handle, unsigned int cmd, unsigned int *arg);
• Параметры
параметр | иллюстрировать |
---|---|
hdle | Показать дескриптор водителя |
cmd | DISP_ENHANCE_DEMO_DISABLE |
arg | arg[0] для Канал дисплея 0/1 |
• Возвращаемое значение
В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция используется для отключения демонстрационного режима постобработки изображения.
• Пример
//Включаем демонстрационную модель постобработки изображения, disphd — Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(disphd, DISP_ENHANCE_DEMO_ENABLE, (void*)arg);
• Прототип
int ioctl(int handle, unsigned int cmd, unsigned int *arg);
• Параметры
параметр | иллюстрировать |
---|---|
hdle | Показать дескриптор водителя |
cmd | DISP_SMBL_ENABLE |
arg | arg[0] для Канал дисплея 0/1 |
• Возвращаемое значение
В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция используется для включения функции интеллектуальной подсветки.
• Пример
//Включаем функцию умной подсветки, disphd - Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(disphd, DISP_SMBL_ENABLE, (void*)arg);
• Прототип
int ioctl(int handle, unsigned int cmd, unsigned int *arg);
• Параметры
параметр | иллюстрировать |
---|---|
hdle | Показать дескриптор водителя |
cmd | DISP_SMBL_ENABLE |
arg | arg[0] для Канал дисплея 0/1 |
• Возвращаемое значение
В случае успеха возвращается DIS_SUCCESS; в случае неудачи возвращается номер ошибки.
• описывать
Эта функция используется для отключения функции интеллектуальной подсветки.
• Пример
//Отключаем функцию умной подсветки, disphd - Показать дескриптор водителя
unsigned int arg[3];
arg[0] = 0;//отображаем канал 0
ioctl(disphd, DISP_SMBL_DISABLE, (void*)arg);
• Прототип
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; в случае неудачи возвращается номер ошибки.
• описывать
Письмочислоиспользуется для Установите эффект активации интеллектуальной подсветкиизокно,Умная подсветка в окне настроек середина имеет эффект.
• Пример
//Устанавливаем окно умной подсветки, 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);
• Прототип
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 модельлиподдерживать。
• Пример
//Запрос, является ли указанная модель 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);
• Прототип
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.
• Пример
//Запрашиваем, подключен ли 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");
Следующие две функции будут использоваться в демонстрации интерфейса ниже.
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;
}
• Системные узлы
/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。
• описывать
Этот интерфейс используется для установки режима улучшения цвета.
• Пример
//Устанавливаем дисп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/С++:
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));
• Системные узлы
/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 /* Снижение шума*/
• Параметры
disp display channel,Например, 0: дисп0, 1: дисп1.。
enhance_xxx: объем:0~100,числов соответствии с Чем больше,Чем больше диапазон регулировки.
• Возвращаемое значение no。
• описывать
Этот интерфейс используется для установки диапазона регулировки яркости/контрастности/насыщенности изображения/резкости краев/улучшения деталей/уменьшения шума.
• Пример
//Устанавливаем дисп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/С++:
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));
• Системные узлы
/sys/class/hdmi/hdmi/attr/edid
• Параметры
no。
• Возвращаемое значение
Edid data(1024 bytes)。
• описывать
Этот интерфейс используется для чтения необработанных данных EDID.
• Пример
// читатьedidчислов соответствии с
cat /sys/class/hdmi/hdmi/attr/edid
код c/С++:
#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);
• Системные узлы
/sys/class/switch/hdmi/state
• Параметры
no。
• Возвращаемое значение
Hdmi hotplut state, 0: unplug; 1: plug in。
• описывать
Интерфейс используется для чтения HDMI изгорячая заменасостояние.
• Пример
// Чтение статуса горячего подключения HDMI
cat /sys/class/switch/hdmi/state
c/c++Код:
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");
• Системные узлы
/sys/class/hdmi/hdmi/attr/hdcp_enable
• Параметры
enable: 0: disable hdmi hdcp function;1:enable hdmi hdcp function。
• Возвращаемое значение
No returns。
• описывать
Этот интерфейс используется для включения и отключения функции hdmi hdcp.
• Пример
// включи HDMI функция hdcp
echo 1 > /sys/class/hdmi/hdmi/attr/hdcp_enable
// выключи HDMI функция hdcp
echo 0 > /sys/class/hdmi/hdmi/attr/hdcp_enable
код c/С++:
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));
• Прототип
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 атрибутивная информация.
• Прототип
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 для описывания картинки слойатрибутивная информация.
• Прототип
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 используется дляописыватькартинаслой Конфигурацияатрибутивная информация.
• Прототип
typedef struct
{
u8 alpha;
u8 red;
u8 green;
u8 blue;
}disp_color_info;
• Члены
переменнаяиллюстрировать | |
---|---|
alpha | прозрачность цвета |
red | красный |
green | зеленый |
blue | синий |
• описывать
disp_color_info для записи информации о цвете.
• Прототип
typedef struct
{
s32 x;
s32 y;
u32 width;
u32 height;
}disp_rect;
• Члены
переменная | параметр |
---|---|
x | Начальная точка x значение |
y | Значение начальной точки y |
width | Ширина |
height | высокий |
• описывать
disp_rect используется для прямоугольного окна информации.
• Прототип
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 для записи прямоугольного окна.
• Прототип
typedef struct
{
s32 x;
s32 y;
}disp_posistion;
• Члены
переменная | иллюстрировать |
---|---|
x | x |
y | y |
• описывать
disp_position используется для записи информации о координатах.
• Прототип
typedef struct
{
u32 width;
u32 height;
}disp_rectsz;
• Члены
переменная | иллюстрировать |
---|---|
width | Ширина |
height | высокий |
• описывать
disp_rectsz для описывания информации прямоугольного размера.
• Прототип
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 используется для записи формата пикселей.
• Прототип
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 источникмодель。
• Прототип
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 выходмодель。
• Прототип
typedef enum
{
DISP_BT601 = 0,
DISP_BT709 = 1,
DISP_YCC = 2,
}disp_color_mode;
• Члены
переменная | иллюстрировать |
---|---|
DISP_BT601 | для SD-видео |
DISP_BT709 | Для высокого четкого видео |
DISP_YCC | для фотографий |
• описывать
disp_color_space используется для записи типа цветового пространства.
• Прототип
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Тип выхода。
• Прототип
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 используется дляописывать ТВ-выходмодель。
• Прототип
typedef struct
{
unsigned int type;
unsigned int mode;
}disp_output;
• Члены
переменная | иллюстрировать |
---|---|
Type | Тип выхода |
Mode | выходмодель,480P/576P, etc |
• описывать
disp_output для записиshowТип выхода,модель。
• Прототип
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 используется дляописыватькартинаслоймодель。
• Прототип
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 Используется для отображения буфера метод сканирования.
cat /sys/class/disp/disp/attr/sys
Пример следующий:
# 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
картинаслой Каждая информацияописыватьследующее:
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 Передача более одного кадра изображения вниз.
отлаживатьиллюстрировать:
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 Скриншот
echo 0 > /sys/class/disp/disp/attr/disp
echo /data/filename.bmp > /sys/class/disp/disp/attr/capture_dump
Этот метод отладки используется для перехвата изображения до того, как DE будет выведен в TCON, и используется для отображения сегментированного устранения неполадок на пути. Если проблем с созданием снимков экрана нет, но интерфейс работает ненормально, можно определить, что между TCON и монитором возникла ошибка.
Первый путь принимает индекс отображения 0 или 1.
Второй путь принимает путь к файлу.
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;
Отладочный узел
mount -t debugfs none /sys/kernek/debug;
/sys/kernel/debug/dispdbg;
name command param start info
//name: Имя объекта, представляющее операцию
//command: Указывает команду, которую необходимо выполнить
//param: Указывает параметр, полученный командой
//start: Введите 1 Начать выполнение команды
//info: Сохраняем результаты выполнения команды
//Только чтение, размер 1024 bytes。
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;
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;
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;
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;
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;
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
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
//показыватьизда智能подсветкаливключать,Эффективный размер окна,Текущая подсветкаценить,Коэффициент энергосбережения
Проблемное явление:Подключение машины ЖК-выход,ОТКРОЙТЕ ДЛЯ СЕБЯЖКД Дисплея нет, а подсветка неяркая, если присмотреться.
Анализ проблемы:Это явлениеиллюстрироватьLCD Неисправен блок питания подсветки. Нельзя исключать наличие и других проблем, но проблему отсутствия подсветки необходимо решить в первую очередь.
Действия по устранению неполадок:
• Шаг 1
С помощью вольтметра измерьте напряжение каждого канала ЖК-экрана. Если напряжение на выводе подсветки ненормальное, это означает, что проблема связана с ШИМ. В противном случае попробуйте сменить экран и повторить попытку.
• Шаг 2
Сначала проверьте, выпущено ли вместе с SDK руководство по использованию модуля ШИМ, и если да, выполните действия по устранению неполадок.
• Шаг 3
Если SDK не публикует руководство по использованию модуля ШИМ. Вы можете просмотреть /sys/kernel/debug/pwm, чтобы увидеть, есть ли какие-либо выходные данные. Если нет, драйвер PWM не загружен. Проверьте, открыто ли меню.
• Шаг 4
Если шаг третий не помог решить проблему, устраните неполадки dts. или board.dts Конфигурация。еслиеще нетиметьрешать,Можно искать технологииподдерживать。
Проблема: машина подключена к ЖК-дисплею.,Нашёл подсветку,интерфейсвыходчерныйэкран。
Анализ проблемы:Это явлениеиллюстрироватьбезиметьсодержаниевыход,может бытьDE、TCON Произошла ошибка или приложение не отправило кадр.
Действия по устранению неполадок:
• Шаг 1
Согласно главе 10.1 Устраните проблемы с корректностью входной информации о слое в приложении. Наиболее распространены ошибки его середина, Ширинавысокий и дескриптора файла видеопамяти.
• Шаг 2
Сделайте снимок экрана в соответствии с главой 10.2, чтобы проверить, в порядке ли выходной сигнал DE. Если это ненормально, проверьте правильность конфигурации драйвера DE, если все в порядке, продолжите выполнение следующих шагов;
• Шаг 3 Согласно 10.3 Цветовая полоса вывода главы, если TCON собственная цветовая полоса Если дисплея нет, проверьте путь к оборудованию; Если он отображается, проверьте TCON входитьисточниквыбиратьиззарегистрироваться。Последняя концепция Ставкаочень низкий,Вы можете искать технологии в это времяподдерживать。
Симптом: на мониторе появляется зеленый экран, возможно и другие изменения в интерфейсе переключения.
Анализ проблемы:Это явлениеиллюстрироватьиметь дело скартинаслойчасDE Что-то пошло не так. Это может быть буфер, отправленный приложением. Также существует проблема с содержанием или форматом;
Возможно, конфигурация DE неправильная.
Действия по устранению неполадок:
• Шаг 1
Согласно главе 10.1 Устраните проблемы с корректностью входной информации о слое в приложении. Это середина,картинаслой Формат Неверная записьизвопрос最多。
• Шаг 2
Экспорт DE зарегистрироваться,Устранение исключений. Этот шаг более сложный,Необходимо добиваться поддержки технологий.
Признак: Интерфейс зафиксирован на одном экране и не изменится.
Анализ проблемы: данное явление означает, что канал отображения в целом работает нормально, но приложение не продолжает отправлять кадры.
Действия по устранению неполадок:
• Шаг 1
Согласно 10.1 Есть ли какие-либо изменения во входной информации о слое в главе «Приложение устранения неполадок», особенно обратите внимание накартинаслойизадрес。
• Шаг 2
Устраните неполадки в логике отправки кадров приложения, уделяя особое внимание взаимоблокировкам, потокам и ненормальным выходам, а также исключениям обработки ограничений.
Признак: при переходе экрана к определенной сцене наблюдается частичное размытие и постоянная тряска.
Анализ проблемы: Это явление является типичным явлением ошибки масштабатора DE.
Действия по устранению неполадок:
Согласно 10.1 章节查看вопрос出现часприносить Увеличитькартинаслойизпараметр。еслиэкранэкранвыходиз Ширинаx высокийразделить наcrop из Ширинаx высокийменьше, чем1/16 Или больше 32, тогда слой не может перейти в DE масштабирования, используйте вместо него графический процессор или следует
Использовать модификациюкартинаслой Ширинавысокий。
Симптомы проблемы: Экран размыт при быстром переключении интерфейсов, а интерфейс, который не сильно изменился, отображается нормально.
Анализ проблемы. Это явление является типичной проблемой производительности и не имеет ничего общего с драйвером дисплея.
Действия по устранению неполадок:
• Шаг 1
Соответствует ли «Устранение неполадок DRAM с шириной» требованиям сцены?
• Шаг 2
Если это система Android, проверьте процесс обработки ограждения, если это чистая система Linux, проверьте процесс отправки кадров, буфер подкачки и процесс pandisplay.