This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push: new 621bf54efc drivers/video/fb: fix poll event lost 621bf54efc is described below commit 621bf54efc2229009dd784fb0835edd242871086 Author: pengyiqiang <pengyiqi...@xiaomi.com> AuthorDate: Fri Feb 24 17:21:25 2023 +0800 drivers/video/fb: fix poll event lost Signed-off-by: pengyiqiang <pengyiqi...@xiaomi.com> --- drivers/video/fb.c | 18 ++++++++++++++++++ include/nuttx/video/fb.h | 6 ++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/drivers/video/fb.c b/drivers/video/fb.c index 6a1006220c..2a88e4f329 100644 --- a/drivers/video/fb.c +++ b/drivers/video/fb.c @@ -58,6 +58,7 @@ struct fb_chardev_s size_t fblen; /* Size of the framebuffer */ uint8_t plane; /* Video plan number */ uint8_t bpp; /* Bits per pixel */ + volatile bool pollready; /* Poll ready flag */ }; /**************************************************************************** @@ -160,6 +161,8 @@ static ssize_t fb_write(FAR struct file *filep, FAR const char *buffer, inode = filep->f_inode; fb = (FAR struct fb_chardev_s *)inode->i_private; + fb->pollready = false; + /* Get the start and size of the transfer */ start = filep->f_pos; @@ -526,6 +529,14 @@ static int fb_ioctl(FAR struct file *filep, int cmd, unsigned long arg) DEBUGASSERT(pinfo != NULL && fb->vtable != NULL && fb->vtable->pandisplay != NULL); ret = fb->vtable->pandisplay(fb->vtable, pinfo); + fb->pollready = false; + } + break; + + case FBIO_CLEARNOTIFY: + { + fb->pollready = false; + ret = OK; } break; @@ -725,6 +736,11 @@ static int fb_poll(FAR struct file *filep, struct pollfd *fds, bool setup) { return -EBUSY; } + + if (fb->pollready) + { + poll_notify(&fb->fds, 1, POLLOUT); + } } else if (fds->priv) { @@ -754,6 +770,8 @@ void fb_pollnotify(FAR struct fb_vtable_s *vtable) fb = vtable->priv; + fb->pollready = true; + /* Notify framebuffer is writable. */ poll_notify(&fb->fds, 1, POLLOUT); diff --git a/include/nuttx/video/fb.h b/include/nuttx/video/fb.h index b77ffee45e..0db5d8b00b 100644 --- a/include/nuttx/video/fb.h +++ b/include/nuttx/video/fb.h @@ -286,12 +286,14 @@ * Argument: read-only struct * fb_planeinfo_s* */ +#define FBIO_CLEARNOTIFY _FBIOC(0x0017) /* Clear notify signal */ + /* Linux Support ************************************************************/ -#define FBIOGET_VSCREENINFO _FBIOC(0x0017) /* Get video variable info */ +#define FBIOGET_VSCREENINFO _FBIOC(0x0018) /* Get video variable info */ /* Argument: writable struct * fb_var_screeninfo */ -#define FBIOGET_FSCREENINFO _FBIOC(0x0018) /* Get video fix info */ +#define FBIOGET_FSCREENINFO _FBIOC(0x0019) /* Get video fix info */ /* Argument: writable struct * fb_fix_screeninfo */