Для платформы R128 в качестве графической системы предусмотрена LVGL.
LVGL — это бесплатная графическая библиотека с открытым исходным кодом, которая предоставляет все необходимое для создания встроенных графических интерфейсов. Она имеет простые в использовании графические элементы, красивые визуальные эффекты и низкое использование памяти. Она соответствует лицензионному соглашению MIT. Вы можете посетить официальный сайт LittlevGL. больше информации.
В настоящее время основные компоненты LVGL 8.1.0 и демонстрационная версия перенесены в RTOS. В следующей таблице приведены описания библиотек, связанных с LVGL:
имя пакета | иллюстрировать |
---|---|
lv_demos | официальная демо-версия lvgl |
lv_drivers | Официальный драйвер устройства lvgl, объединяющий sunxifb, sunxig2d и sunximem |
lv_examples | Тестовый пример lvgl в конечном итоге вызывает функцию в lv_demos. |
lvgl | основная библиотека lvgl |
lv_g2d_test | Тестовый пример g2d, в частности тестирование подключенного интерфейса g2d |
lv_monitor | Программное обеспечение для стресс-тестирования и мониторинга состояния |
sunxifb.mk | Публичный файл конфигурации, который необходимо включить при написании Makefile приложения. |
mrtos_menuconfig
Конфигурация следующая
System components --->
thirdparty components --->
[*] Littlevgl-8 --->
[*] lvgl examples (официальная демо-версия lvgl)
[ ] lvgl g2d test (g2d тестовый пример интерфейса)
[*] lvgl-8.1.0 use sunxifb double buffer (Включите двойную буферизацию, чтобы решить проблему разрыва)
[*] lvgl-8.1.0 use sunxifb cache (включить ФБ cache)
[ ] lvgl-8.1.0 use sunxifb g2d (Включить аппаратное ускорение G2D)
[ ] lvgl-8.1.0 use sunxifb g2d rotate (Включить ротацию оборудования G2D)
[ ] lvgl-8.1.0 use freetype (включить произвольный тип)
LVGL Исходный код находится по адресу lichee/rtos-components/thirdparty/littlevgl-8
, Его каркас такой, как показано на рисунке:
существовать sunxifb
, мы предоставляем набор интерфейсов дисплея, а именно:
интерфейс | иллюстрировать |
---|---|
sunxifb_init | Основная функция этой функции — инициализация механизма отображения. С параметром вращения, если вращение g2d включено, используйте этот параметр, чтобы указать направление вращения. |
sunxifb_exit | Эта функция относительно проста: она закрывает кеш, закрывает g2d, освобождает буфер вращения и закрывает fb0. |
sunxifb_flush | Эта функция более важна, она отвечает за копирование буфера отрисовки в задний буфер и замену переднего и заднего буферов после отрисовки последнего кадра. Приложение не должно вызывать эту функцию |
sunxifb_get_sizes | Эта функция получает разрешение экрана, поэтому приложению не нужно жестко запрограммировать разрешение инициализации. |
sunxifb_alloc | Эта функция в основном используется для использования системной памяти для чертежей. После включения некоторых функций g2d она будет применяться для непрерывной физической памяти. |
sunxifb_free | Эта функция используется для освобождения памяти, запрошенной sunxifb_alloc. |
Расположение кода следующее:
lichee/rtos-components/thirdparty/littlevgl-8/lv_drivers/display/sunxifb.c
существоватьsunxifb_init(rotated)
,серединаrotated
извращатьценить Можетдля:
LV_DISP_ROT_NONE
,LV_DISP_ROT_90
,LV_DISP_ROT_180
,LV_DISP_ROT_270
。
Наконец, есть задание disp_drv.rotated = rotated
. Без вращения g2d,также Можетобозначениеdisp_drv.sw_rotate = 1
Используйте ротацию программного обеспечения.
существовать sunxig2d
середина,осозналg2d
ioctl
изинкапсуляция,Этифункция ВсеНет необходимости в звонках через приложение,Но это может углубить понимание всей кадриз.,Сопутствующие интерфейсы следующие:
интерфейс | иллюстрировать |
---|---|
sunxifb_g2d_init | функцию инициализации модуля g2d, откройте узел /dev/g2d и установите g_format. Во время инициализации соответствующий журнал печатается в соответствии с включенным макросом. |
sunxifb_g2d_deinit | Эта функция закрывает устройство g2d. |
sunxifb_g2d_get_limit | Эта функция получает порог использования g2d. |
sunxifb_g2d_blit_to_fb | Эта функция используется для копирования переднего и заднего буферов fb0. Она также может вращать буфер поворота в задний буфер. |
sunxifb_g2d_fill | Эта функция использует g2d для заполнения цветового прямоугольника, и цвет может иметь прозрачность. |
sunxifb_g2d_blit | Эта функция используется для копирования изображений и не позволяет смешивать изображения. |
sunxifb_g2d_blend | Эта функция может выполнять смешивание изображений. |
sunxifb_g2d_scale | Эта функция используется для масштабирования изображения. |
Расположение кода следующее:
lichee/rtos-components/thirdparty/littlevgl-8/lv_drivers/display/sunxig2d.c
Вот и все g2d
Функции были подключены lvgl
Схема построения, использование lvgl
из lv_draw_map
、lv_img_set_zoom
и lv_canvas_draw_img
Функцию можно использовать.
lv_g2d_test
Полный пример использования из можно найти в приложении.
существоватьsunximem
середина,Реализовано управление физической инкапсуляцией Памятьиз.,Этифункция ВсеНет необходимости в звонках через приложение,Но это может углубить понимание всей кадриз.,следующее:
интерфейс | иллюстрировать |
---|---|
sunxifb_mem_init | Функция будет вызываться в существующем sunxifb_init.,Инициализировать физику Интерфейс приложения Память,Использование из libuapi промежуточное программное обеспечение |
sunxifb_mem_deinit | Эту функцию вызывает SunxiMemClose,выпускать Применятьинтерфейсресурс |
sunxifb_mem_alloc | Функция важнее,Используется во многих местах,Нужно передать Применять Количество байтовииспользоватьиллюстрировать |
sunxifb_mem_free | Эта функция используется для завершения вызова sunxifb_mem_alloc Применять Память |
sunxifb_mem_get_phyaddr | Эта функция принимает sunxifb_mem_alloc Применить виртуальный адрес Памятьиз к физическому адресу, g2d Водитель принимает только buffer изфизический адрес или FD |
sunxifb_mem_flush_cache | Эта функция используется для чистки sunxifb_mem_alloc Подать заявку на буфер из cache |
Расположение кода следующее:
lichee/rtos-components/thirdparty/littlevgl-8/lv_drivers/display/sunxigmem.c
потому чтоg2d
Водитель может толькоиспользоватьфизическая непрерывность Память,Итак, при расшифровке картинки,должен пройти sunxifb_mem_alloc
применить на память.
В настоящее время реализованы только приложения bmp и png, gif и з Память, а изображения jpeg еще не реализованы.
при использовании lv_canvas_set_buffer
Когда, пройди из buffer
должно быть sunxifb_alloc
Применять buffer
,sunxifb_alloc
Будет решено, необходимо ли претендовать на физическую непрерывную память.
Пользовательский холст lv_canvas еще не подключен к функции масштабирования g2d.
прикоснись к намиздаlvgl
чиновникизevdev
Расположение кода следующее:
lichee/rtos-components/thirdparty/littlevgl-8/lv_drivers/indev/evdev.c
lvgl Чтобы использовать сенсорную функцию, вам необходимо существовать Применить lv_drv_conf.h Конфигурация в файле:
# define USE_EVDEV 1
приложениеlv_drv_conf.h
серединаизEVDEV_NAME
Он должен соответствовать используемому драйверу сенсорного экрана, например lv_examples
из файла конфигурации:
lichee/rtos-components/thirdparty/littlevgl-8/lv_examples/src/lv_drv_conf.h
Если в disp_drv.rotated указан поворот на 90 или 180 градусов, lvgl будет вращать координаты касания внутри себя без необходимости поворачивать координаты касания внутри драйвера сенсорного экрана.
существоватьприложение lv_conf.h
Документация о глубине цвета LV_COLOR_DEPTH
из Конфигурация, например. lv_examples
из файла конфигурации:
lichee/rtos-components/thirdparty/littlevgl-8/lv_examples/src/lv_conf.h
/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/
#define LV_COLOR_DEPTH 32
Использование SPI экран, приложение LV_COLOR_DEPTH
должени Экран поддерживаетсяиз Соответствие формата пикселей;в то время как другие типыизэкран,приложениеLV_COLOR_DEPTH
выбирать 16 или 32 может отображаться нормально.
LV_COLOR_DEPTH
выбирать16 бит по сравнению с 32 бит, объем памяти меньше, частота кадров выше, но общее количество цветов меньше, а градиентный переход цвета может быть не плавным.
Рекомендуется lv_g2d_test
В качестве шаблона скопируйте новый проект:
lichee/rtos-components/thirdparty/littlevgl-8/lv_g2d_test
существовать Makefile
, нужно включить sunxifb.mk
общественный Конфигурация,существоватькомпилироватьприложениепередаст макрос。Способследующее:
lichee/rtos-components/thirdparty/littlevgl-8/lv_g2d_test/Makefile
include components/common/thirdparty/littlevgl-8/sunxifb.mk
Кроме того, можно отметить, что имеются следующие Конфигурации.,Эти конфигурации необходимы по требованию, включая,существоватьна некоторых чипахда Не поддерживается G2D_BLEND
Для других операций поддерживаются только простые функции вращения:
ifeq ($(CONFIG_LVGL8_USE_SUNXIFB_G2D),y)
CFLAGS+=-DLV_USE_SUNXIFB_G2D_FILL \
-DLV_USE_SUNXIFB_G2D_BLEND \
-DLV_USE_SUNXIFB_G2D_BLIT \
-DLV_USE_SUNXIFB_G2D_SCALE
endif
существоватьприложениекомпилироватьиздействительный Makefile
середина,Вы можете скомпилировать только необходимые файлы,Уменьшите размер исполняемого файла.
О лвгл Также рекомендуется использовать файл конфигурации. lv_g2d_test
серединаиз,Можно сравнить с оригинальной немодифицированной конфигурацией.,Затем переключитесь соответственно в соответствии с реальной сценой.Конфигурация。Конфигурациядокументследующее:
lichee/rtos-components/thirdparty/littlevgl-8/lv_g2d_test/src/lv_conf.h
lichee/rtos-components/thirdparty/littlevgl-8/lv_g2d_test/src/lv_drv_conf.h
Исходный файл:
lichee/rtos-components/thirdparty/littlevgl-8/lvgl/lv_conf_template.h
lichee/rtos-components/thirdparty/littlevgl-8/lv_drivers/lv_drv_conf_template.h.h
Наконец, приложениеиз инициализируется, существует lv_g2d_test
, существует относительно понятный процесс вызова. Следует отметить, что из есть. sunxifb_init
Вам необходимо передать параметры вращения sunxifb_alloc
Просто подайте заявку на память.
Мы предоставляем несколько тестовых случаев, команды выполнения следующие:
lv_examples 0, is lv_demo_widgets
lv_examples 1, is lv_demo_music
lv_examples 2, is lv_demo_benchmark
lv_examples 3, is lv_demo_keypad_encoder
lv_examples 4, is lv_demo_stress
существоватьпри инициализации,Следующее будет напечатано,Будут различия в зависимости от конфигурации.,Указывает, что что-то открыто:
wh=800x480, vwh=800x960, bpp=32, rotated=0
Turn on double buffering.
Turn on 2d hardware acceleration.
Turn on 2d hardware acceleration fill.
Turn on 2d hardware acceleration blit.
Turn on 2d hardware acceleration blend.
Turn on 2d hardware acceleration scale.
Turn on 2d hardware acceleration rotate.
lvgl
Для использования сенсорной функции необходимо существованиеприложения. lv_drv_conf.h
Включить макросы в файлах USE_EVDEV
。Обязательным условием является подтверждение прикосновенияэкран Модуль драйвера можно загрузить нормальноиспользовать,и сделать lv_drv_conf.h
серединаиз EVDEV_NAME
Соответствует используемому драйверу сенсорного экрана:
# define USE_EVDEV 1
# define EVDEV_NAME "touchscreen"
lvgl Док-драйвер сенсорного экрана из Расположение кода следующее:
lichee/rtos-components/thirdparty/littlevgl-8/lv_drivers/indev/evdev.c
LOG
Отладка журналаlvgl Поставляется с журналом Отладка журнала Функция,существоватьприложение lv_conf.h
Макрос включения файла LV_USE_LOG
и связанные конфигурации:
#define LV_USE_LOG 1
#define LV_LOG_LEVEL LV_LOG_LEVEL_INFO
#define LV_LOG_PRINTF 1
кроме тогосуществовать sunxifb.c
файл или Makefile
Определить макрос в LV_USE_SUNXIFB_DEBUG
,Может Log Распечатать LVGL Фактическая чистка показывает частоту кадров.
приложение lv_conf.h
документсерединаизLV_COLOR_DEPTH
СПИ Экран поддерживает соответствие формата пикселей:
/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/
#define LV_COLOR_DEPTH 32