diff --git a/boards/sim/sim/sim/src/sim_bringup.c b/boards/sim/sim/sim/src/sim_bringup.c index c6404ee1d77..55d2d8e4bd8 100644 --- a/boards/sim/sim/sim/src/sim_bringup.c +++ b/boards/sim/sim/sim/src/sim_bringup.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -318,6 +319,16 @@ int sim_bringup(void) } #endif +#ifdef CONFIG_INPUT_UINPUT + /* Initialize the touchscreen uinput */ + + ret = uinput_touch_initialize("utouch", 1, 4); + if (ret < 0) + { + syslog(LOG_ERR, "ERROR: uinput_touch_initialize failed: %d\n", ret); + } +#endif + #ifdef CONFIG_IEEE802154_LOOPBACK /* Initialize and register the IEEE802.15.4 MAC network loop device */ diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig index 74f9b89c267..5f4ec2e2415 100644 --- a/drivers/input/Kconfig +++ b/drivers/input/Kconfig @@ -45,6 +45,13 @@ config INPUT_TOUCHSCREEN_NPOLLWAITERS endif # INPUT_TOUCHSCREEN +config INPUT_UINPUT + bool "Enable uinput" + select INPUT_TOUCHSCREEN + default n + ---help--- + Enable support virtual input device driver + config INPUT_MAX11802 bool "MAX11802 touchscreen controller" default n diff --git a/drivers/input/Make.defs b/drivers/input/Make.defs index 44dbb5e0477..8595d28c16e 100644 --- a/drivers/input/Make.defs +++ b/drivers/input/Make.defs @@ -32,6 +32,10 @@ ifeq ($(CONFIG_INPUT_TSC2007),y) CSRCS += tsc2007.c endif +ifeq ($(CONFIG_INPUT_UINPUT),y) + CSRCS += uinput.c +endif + ifeq ($(CONFIG_INPUT_FT5X06),y) CSRCS += ft5x06.c endif diff --git a/drivers/input/uinput.c b/drivers/input/uinput.c new file mode 100644 index 00000000000..47dd9e08c59 --- /dev/null +++ b/drivers/input/uinput.c @@ -0,0 +1,108 @@ +/**************************************************************************** + * drivers/input/uinput.c + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +#define UINPUT_NAME_SIZE 32 + +/**************************************************************************** + * Private Function Prototypes + ****************************************************************************/ + +static ssize_t uinput_touch_write(FAR struct touch_lowerhalf_s *lower, + FAR const char *buffer, size_t buflen); + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: uinput_touch_write + ****************************************************************************/ + +static ssize_t uinput_touch_write(FAR struct touch_lowerhalf_s *lower, + FAR const char *buffer, size_t buflen) +{ + FAR const struct touch_sample_s *sample; + sample = (FAR const struct touch_sample_s *)buffer; + + if (sample == NULL) + { + return -EINVAL; + } + + touch_event(lower->priv, sample); + return buflen; +} + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: uinput_touch_initialize + * + * Description: + * Initialized the uinput touchscreen device + * + * Input Parameters: + * name: Touchscreen devices name + * maxpoint: Maximum number of touch points supported. + * buff_nums: Number of the touch points structure. + * + * Returned Value: + * Zero is returned on success. Otherwise, a negated errno value is + * returned to indicate the nature of the failure. + * + ****************************************************************************/ + +int uinput_touch_initialize(FAR const char *name, int maxpoint, int buffnums) +{ + char devname[UINPUT_NAME_SIZE]; + FAR struct touch_lowerhalf_s *lower; + + lower = kmm_malloc(sizeof(struct touch_lowerhalf_s)); + if (!lower) + { + return -ENOMEM; + } + + /* Regiest Touchscreen device */ + + lower->write = uinput_touch_write; + lower->maxpoint = maxpoint; + snprintf(devname, UINPUT_NAME_SIZE, "/dev/%s", name); + + return touch_register(lower, devname, buffnums); +} diff --git a/include/nuttx/input/uinput.h b/include/nuttx/input/uinput.h new file mode 100644 index 00000000000..46e777212ef --- /dev/null +++ b/include/nuttx/input/uinput.h @@ -0,0 +1,52 @@ +/**************************************************************************** + * include/nuttx/input/uinput.h + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ****************************************************************************/ + +#ifndef __INCLUDE_NUTTX_INPUT_UINPUT_H +#define __INCLUDE_NUTTX_INPUT_UINPUT_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Name: uinput_touch_initialize + * + * Description: + * Initialized the uinput touchscreen device + * + * Input Parameters: + * name: Touchscreen devices name + * maxpoint: Maximum number of touch points supported. + * buff_nums: Number of the touch points structure. + * + * Returned Value: + * Zero is returned on success. Otherwise, a negated errno value is + * returned to indicate the nature of the failure. + * + ****************************************************************************/ + +int uinput_touch_initialize(FAR const char *name, int maxpoint, + int buffnums); + +#endif /* __INCLUDE_NUTTX_INPUT_UINPUT_H */