From 7ea14aa8f8ee66ab95fd3b30177ae9d33ce6de78 Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Sun, 20 Mar 2022 00:06:52 +0800 Subject: [PATCH] input/keyboard: Make each instance could have a different buffer size just like what is done for touch screen driver Signed-off-by: Xiang Xiao --- drivers/input/Kconfig | 18 ++++++++---------- drivers/input/keyboard_upper.c | 6 ++++-- drivers/input/uinput.c | 4 +++- include/nuttx/input/keyboard.h | 2 +- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig index 3f794fff3f..c04351f460 100644 --- a/drivers/input/Kconfig +++ b/drivers/input/Kconfig @@ -40,16 +40,6 @@ config INPUT_KEYBOARD select MM_CIRCBUF default n -if INPUT_KEYBOARD - -config INPUT_KEYBOARD_BUFFSIZE - int "Number keyboard data buffer" - default 64 - ---help--- - Maximum number of keyboard data buffer - -endif # INPUT_KEYBOARD - config INPUT_UINPUT bool default n @@ -100,6 +90,14 @@ config UINPUT_KEYBOARD ---help--- Enable support virtual input keyboard device driver +if UINPUT_KEYBOARD + +config UINPUT_KEYBOARD_BUFNUMBER + int "Number keyboard data buffer" + default 8 + +endif + config INPUT_MAX11802 bool "MAX11802 touchscreen controller" default n diff --git a/drivers/input/keyboard_upper.c b/drivers/input/keyboard_upper.c index 5b69ee08d6..2ff5d2b3d6 100644 --- a/drivers/input/keyboard_upper.c +++ b/drivers/input/keyboard_upper.c @@ -60,6 +60,7 @@ struct keyboard_upperhalf_s struct list_node head; /* Head of list */ FAR struct keyboard_lowerhalf_s *lower; /* A pointer of lower half instance */ + uint8_t nums; /* Number of buffer */ }; /**************************************************************************** @@ -148,7 +149,7 @@ static int keyboard_open(FAR struct file *filep) /* Initializes the buffer for each open file */ - ret = circbuf_init(&opriv->circ, NULL, CONFIG_INPUT_KEYBOARD_BUFFSIZE); + ret = circbuf_init(&opriv->circ, NULL, upper->nums); if (ret < 0) { kmm_free(opriv); @@ -342,7 +343,7 @@ static ssize_t keyboard_write(FAR struct file *filep, ****************************************************************************/ int keyboard_register(FAR struct keyboard_lowerhalf_s *lower, - FAR const char *path) + FAR const char *path, uint8_t nums) { FAR struct keyboard_upperhalf_s *upper; int ret; @@ -362,6 +363,7 @@ int keyboard_register(FAR struct keyboard_lowerhalf_s *lower, } upper->lower = lower; + upper->nums = nums; lower->priv = upper; list_initialize(&upper->head); nxsem_init(&upper->exclsem, 0, 1); diff --git a/drivers/input/uinput.c b/drivers/input/uinput.c index 7596fd4527..d298a1adbc 100644 --- a/drivers/input/uinput.c +++ b/drivers/input/uinput.c @@ -588,7 +588,9 @@ int uinput_keyboard_initialize(void) /* Regiest Touchscreen device */ - ret = keyboard_register(&ukbd_lower->lower, "/dev/" UINPUT_NAME_KEYBOARD); + ret = keyboard_register(&ukbd_lower->lower, + "/dev/" UINPUT_NAME_KEYBOARD, + CONFIG_UINPUT_KEYBOARD_BUFNUMBER); if (ret < 0) { kmm_free(ukbd_lower); diff --git a/include/nuttx/input/keyboard.h b/include/nuttx/input/keyboard.h index 3b1c51ffec..27df59d980 100644 --- a/include/nuttx/input/keyboard.h +++ b/include/nuttx/input/keyboard.h @@ -80,7 +80,7 @@ void keyboard_event(FAR struct keyboard_lowerhalf_s *lower, uint32_t keycode, ****************************************************************************/ int keyboard_register(FAR struct keyboard_lowerhalf_s *lower, - FAR const char *path); + FAR const char *path, uint8_t nums); /**************************************************************************** * Name: keyboard_register