Lines Matching +full:- +full:- +full:include

9 #include "lv_nuttx_fbdev.h"
12 #include <stdlib.h>
13 #include <unistd.h>
14 #include <stddef.h>
15 #include <stdio.h>
16 #include <fcntl.h>
17 #include <errno.h>
18 #include <poll.h>
19 #include <sys/mman.h>
20 #include <sys/ioctl.h>
21 #include <nuttx/video/fb.h>
23 #include "../../../lvgl.h"
24 #include "../../lvgl_private.h"
86 dsc->fd = -1; in lv_nuttx_fbdev_create()
99 if(dsc->fd >= 0) close(dsc->fd); in lv_nuttx_fbdev_set_file()
103 dsc->fd = open(file, O_RDWR); in lv_nuttx_fbdev_set_file()
104 if(dsc->fd < 0) { in lv_nuttx_fbdev_set_file()
106 return -errno; in lv_nuttx_fbdev_set_file()
110 if(ioctl(dsc->fd, FBIOGET_VIDEOINFO, (unsigned long)((uintptr_t)&dsc->vinfo)) < 0) { in lv_nuttx_fbdev_set_file()
112 ret = -errno; in lv_nuttx_fbdev_set_file()
117 LV_LOG_USER(" fmt: %u", dsc->vinfo.fmt); in lv_nuttx_fbdev_set_file()
118 LV_LOG_USER(" xres: %u", dsc->vinfo.xres); in lv_nuttx_fbdev_set_file()
119 LV_LOG_USER(" yres: %u", dsc->vinfo.yres); in lv_nuttx_fbdev_set_file()
120 LV_LOG_USER(" nplanes: %u", dsc->vinfo.nplanes); in lv_nuttx_fbdev_set_file()
122 if((ret = fbdev_get_pinfo(dsc->fd, &dsc->pinfo)) < 0) { in lv_nuttx_fbdev_set_file()
126 lv_color_format_t color_format = fb_fmt_to_color_format(dsc->vinfo.fmt); in lv_nuttx_fbdev_set_file()
131 dsc->mem = mmap(NULL, dsc->pinfo.fblen, PROT_READ | PROT_WRITE, in lv_nuttx_fbdev_set_file()
132 MAP_SHARED | MAP_FILE, dsc->fd, 0); in lv_nuttx_fbdev_set_file()
133 if(dsc->mem == MAP_FAILED) { in lv_nuttx_fbdev_set_file()
135 ret = -errno; in lv_nuttx_fbdev_set_file()
139 uint32_t w = dsc->vinfo.xres; in lv_nuttx_fbdev_set_file()
140 uint32_t h = dsc->vinfo.yres; in lv_nuttx_fbdev_set_file()
141 uint32_t stride = dsc->pinfo.stride; in lv_nuttx_fbdev_set_file()
143 lv_draw_buf_init(&dsc->buf1, w, h, color_format, stride, dsc->mem, data_size); in lv_nuttx_fbdev_set_file()
146 bool double_buffer = dsc->pinfo.yres_virtual == (dsc->vinfo.yres * 2); in lv_nuttx_fbdev_set_file()
152 lv_draw_buf_init(&dsc->buf2, w, h, color_format, stride, dsc->mem2, data_size); in lv_nuttx_fbdev_set_file()
153 lv_display_set_draw_buffers(disp, &dsc->buf1, &dsc->buf2); in lv_nuttx_fbdev_set_file()
156 dsc->mem_off_screen = malloc(data_size); in lv_nuttx_fbdev_set_file()
157 LV_ASSERT_MALLOC(dsc->mem_off_screen); in lv_nuttx_fbdev_set_file()
158 if(!dsc->mem_off_screen) { in lv_nuttx_fbdev_set_file()
159 ret = -ENOMEM; in lv_nuttx_fbdev_set_file()
160 LV_LOG_ERROR("Failed to allocate memory for off-screen buffer"); in lv_nuttx_fbdev_set_file()
164 … LV_LOG_USER("Use off-screen mode, memory: %p, size: %" LV_PRIu32, dsc->mem_off_screen, data_size); in lv_nuttx_fbdev_set_file()
165 lv_draw_buf_init(&dsc->buf2, w, h, color_format, stride, dsc->mem_off_screen, data_size); in lv_nuttx_fbdev_set_file()
166 lv_display_set_draw_buffers(disp, &dsc->buf2, NULL); in lv_nuttx_fbdev_set_file()
171 lv_display_set_resolution(disp, dsc->vinfo.xres, dsc->vinfo.yres); in lv_nuttx_fbdev_set_file()
172 lv_timer_set_cb(disp->refr_timer, display_refr_timer_cb); in lv_nuttx_fbdev_set_file()
175 dsc->vinfo.xres, dsc->vinfo.yres, lv_display_get_dpi(disp)); in lv_nuttx_fbdev_set_file()
179 close(dsc->fd); in lv_nuttx_fbdev_set_file()
180 dsc->fd = -1; in lv_nuttx_fbdev_set_file()
195 for(inv_index = 0; inv_index < disp->inv_p; inv_index++) { in fbdev_join_inv_areas()
196 if(disp->inv_area_joined[inv_index] == 0) { in fbdev_join_inv_areas()
197 const lv_area_t * area_p = &disp->inv_areas[inv_index]; in fbdev_join_inv_areas()
223 pfds[0].fd = dsc->fd; in display_refr_timer_cb()
242 if(dsc->mem_off_screen) { in flush_cb()
243 /* When rendering in off-screen mode, copy the drawing buffer to fb */ in flush_cb()
244 /* buf2(off-screen buffer) -> buf1(fbmem)*/ in flush_cb()
245 lv_draw_buf_copy(&dsc->buf1, area, &dsc->buf2, area); in flush_cb()
248 /* Skip the non-last flush */ in flush_cb()
257 int yoffset = disp->buf_act == disp->buf_1 ? in flush_cb()
258 0 : dsc->mem2_yoffset; in flush_cb()
270 if(ioctl(dsc->fd, FBIO_UPDATE, (unsigned long)((uintptr_t)&fb_area)) < 0) { in flush_cb()
277 if(dsc->mem2 != NULL) { in flush_cb()
278 if(disp->buf_act == disp->buf_1) { in flush_cb()
279 dsc->pinfo.yoffset = 0; in flush_cb()
282 dsc->pinfo.yoffset = dsc->mem2_yoffset; in flush_cb()
285 if(ioctl(dsc->fd, FBIOPAN_DISPLAY, (unsigned long)((uintptr_t) & (dsc->pinfo))) < 0) { in flush_cb()
316 return -errno; in fbdev_get_pinfo()
319 LV_LOG_USER("PlaneInfo (plane %d):", pinfo->display); in fbdev_get_pinfo()
320 LV_LOG_USER(" mem: %p", pinfo->fbmem); in fbdev_get_pinfo()
321 LV_LOG_USER(" fblen: %zu", pinfo->fblen); in fbdev_get_pinfo()
322 LV_LOG_USER(" stride: %u", pinfo->stride); in fbdev_get_pinfo()
323 LV_LOG_USER(" display: %u", pinfo->display); in fbdev_get_pinfo()
324 LV_LOG_USER(" bpp: %u", pinfo->bpp); in fbdev_get_pinfo()
339 pinfo.display = dsc->pinfo.display + 1; in fbdev_init_mem2()
341 if((ret = fbdev_get_pinfo(dsc->fd, &pinfo)) < 0) { in fbdev_init_mem2()
347 if(pinfo.bpp != dsc->pinfo.bpp) { in fbdev_init_mem2()
349 return -EINVAL; in fbdev_init_mem2()
356 buf_offset = pinfo.fbmem - dsc->mem; in fbdev_init_mem2()
358 if((buf_offset % dsc->pinfo.stride) != 0) { in fbdev_init_mem2()
362 buf_offset, dsc->pinfo.stride); in fbdev_init_mem2()
368 dsc->mem2_yoffset = dsc->vinfo.yres; in fbdev_init_mem2()
369 dsc->mem2 = pinfo.fbmem + dsc->mem2_yoffset * pinfo.stride; in fbdev_init_mem2()
371 dsc->mem2, dsc->mem2_yoffset); in fbdev_init_mem2()
374 dsc->mem2_yoffset = buf_offset / dsc->pinfo.stride; in fbdev_init_mem2()
375 dsc->mem2 = pinfo.fbmem; in fbdev_init_mem2()
376 LV_LOG_USER("Use non-consecutive mem2 = %p, yoffset = %" LV_PRIu32, in fbdev_init_mem2()
377 dsc->mem2, dsc->mem2_yoffset); in fbdev_init_mem2()
391 if(dsc->fd >= 0) { in display_release_cb()
392 close(dsc->fd); in display_release_cb()
393 dsc->fd = -1; in display_release_cb()
396 if(dsc->mem_off_screen) { in display_release_cb()
397 /* Free the off-screen buffer */ in display_release_cb()
398 free(dsc->mem_off_screen); in display_release_cb()
399 dsc->mem_off_screen = NULL; in display_release_cb()