diff --git a/src/dev/nuttx/lv_nuttx_libuv.c b/src/dev/nuttx/lv_nuttx_libuv.c index b17d8bb28..f623ae062 100644 --- a/src/dev/nuttx/lv_nuttx_libuv.c +++ b/src/dev/nuttx/lv_nuttx_libuv.c @@ -301,14 +301,15 @@ static int lv_nuttx_uv_input_init(lv_nuttx_uv_t * uv_info, lv_nuttx_uv_ctx_t * u LV_ASSERT_NULL(uv_ctx); LV_ASSERT_NULL(loop); - if(!indev->read_timer) { - LV_LOG_ERROR("indev->read_timer is NULL"); + if(lv_indev_get_mode(indev) == LV_INDEV_MODE_EVENT) { + LV_LOG_ERROR("input device has been running in event-driven mode"); return -EINVAL; } lv_nuttx_uv_input_ctx_t * input_ctx = &uv_ctx->input_ctx; input_ctx->fd = *(int *)lv_indev_get_driver_data(indev); if(input_ctx->fd <= 0) { + LV_LOG_ERROR("can't get valid input fd"); return 0; } diff --git a/src/indev/lv_indev.c b/src/indev/lv_indev.c index 338fd376d..4489f09e2 100644 --- a/src/indev/lv_indev.c +++ b/src/indev/lv_indev.c @@ -487,6 +487,12 @@ lv_timer_t * lv_indev_get_read_timer(lv_indev_t * indev) return indev->read_timer; } +lv_indev_mode_t lv_indev_get_mode(lv_indev_t * indev) +{ + if(indev) return indev->mode; + return LV_INDEV_MODE_NONE; +} + void lv_indev_set_mode(lv_indev_t * indev, lv_indev_mode_t mode) { if(!indev || indev->mode == mode) diff --git a/src/indev/lv_indev.h b/src/indev/lv_indev.h index 0fb563aa2..62e44b8ea 100644 --- a/src/indev/lv_indev.h +++ b/src/indev/lv_indev.h @@ -42,8 +42,9 @@ typedef enum { } lv_indev_state_t; typedef enum { - LV_INDEV_MODE_TIMER = 0, - LV_INDEV_MODE_EVENT = 1 + LV_INDEV_MODE_NONE = 0, + LV_INDEV_MODE_TIMER, + LV_INDEV_MODE_EVENT, } lv_indev_mode_t; /** Data structure passed to an input driver to fill*/ @@ -247,6 +248,13 @@ lv_timer_t * lv_indev_get_read_timer(lv_indev_t * indev); */ void lv_indev_set_mode(lv_indev_t * indev, lv_indev_mode_t mode); +/** + * Get the input device's running mode. + * @param indev pointer to an input device + * @return the running mode for the specified input device. + */ +lv_indev_mode_t lv_indev_get_mode(lv_indev_t * indev); + /** * Search the most top, clickable object by a point * @param obj pointer to a start object, typically the screen