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 <xiaoxiang@xiaomi.com>
This commit is contained in:
Xiang Xiao 2022-03-20 00:06:52 +08:00 committed by Petro Karashchenko
parent 7de9b879a1
commit 7ea14aa8f8
4 changed files with 16 additions and 14 deletions

View File

@ -40,16 +40,6 @@ config INPUT_KEYBOARD
select MM_CIRCBUF select MM_CIRCBUF
default n 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 config INPUT_UINPUT
bool bool
default n default n
@ -100,6 +90,14 @@ config UINPUT_KEYBOARD
---help--- ---help---
Enable support virtual input keyboard device driver 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 config INPUT_MAX11802
bool "MAX11802 touchscreen controller" bool "MAX11802 touchscreen controller"
default n default n

View File

@ -60,6 +60,7 @@ struct keyboard_upperhalf_s
struct list_node head; /* Head of list */ struct list_node head; /* Head of list */
FAR struct keyboard_lowerhalf_s FAR struct keyboard_lowerhalf_s
*lower; /* A pointer of lower half instance */ *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 */ /* 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) if (ret < 0)
{ {
kmm_free(opriv); 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, 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; FAR struct keyboard_upperhalf_s *upper;
int ret; int ret;
@ -362,6 +363,7 @@ int keyboard_register(FAR struct keyboard_lowerhalf_s *lower,
} }
upper->lower = lower; upper->lower = lower;
upper->nums = nums;
lower->priv = upper; lower->priv = upper;
list_initialize(&upper->head); list_initialize(&upper->head);
nxsem_init(&upper->exclsem, 0, 1); nxsem_init(&upper->exclsem, 0, 1);

View File

@ -588,7 +588,9 @@ int uinput_keyboard_initialize(void)
/* Regiest Touchscreen device */ /* 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) if (ret < 0)
{ {
kmm_free(ukbd_lower); kmm_free(ukbd_lower);

View File

@ -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, int keyboard_register(FAR struct keyboard_lowerhalf_s *lower,
FAR const char *path); FAR const char *path, uint8_t nums);
/**************************************************************************** /****************************************************************************
* Name: keyboard_register * Name: keyboard_register