embox
53 строки · 1.2 Кб
1/**
2* @file
3* @brief LVGL display interface port
4* @defails Based on lv_drivers/display/fbdev.c
5*
6* @date 15.02.2021
7* @author Alexander Kalmuk
8*/
9
10#include <unistd.h>11#include <fcntl.h>12#include <sys/mman.h>13#include <sys/ioctl.h>14#include <util/log.h>15#include <drivers/video/fb.h>16#include <linux/fb.h> /* For FBIOGET_FSCREENINFO */17
18#include "lvgl.h"19
20uint8_t *lv_fbp = NULL;21struct fb_var_screeninfo lv_vinfo;22struct fb_fix_screeninfo lv_finfo;23
24int lvgl_port_fbdev_init(const char *fb_path) {25int fbfd;26size_t fb_size;27
28fbfd = open(fb_path, O_RDWR);29if (fbfd < 0) {30log_error("Error open framebuffer %s", fb_path);31return -1;32}33if (ioctl(fbfd, FBIOGET_FSCREENINFO, &lv_finfo) == -1) {34log_error("Error reading finfo for framebuffer %s", fb_path);35return -1;36}37if (ioctl(fbfd, FBIOGET_VSCREENINFO, &lv_vinfo) == -1) {38log_error("Error reading vinfo for framebuffer %s", fb_path);39return -1;40}41
42fb_size = lv_finfo.line_length * lv_vinfo.yres;43
44lv_fbp = (uint8_t *) mmap(0, fb_size, PROT_READ | PROT_WRITE,45MAP_SHARED, fbfd, 0);46if (lv_fbp == MAP_FAILED) {47log_error("Error mmap framebuffer %s", fb_path);48}49
50log_debug("framebuffer %s mapped successfully", fb_path);51
52return 0;53}
54