This commit is contained in:
wgzAIIT 2022-06-02 10:54:58 +08:00
commit 0a2ef3aba3
10 changed files with 2737 additions and 0 deletions

View File

@ -0,0 +1,109 @@
#
# This file is autogenerated: PLEASE DO NOT EDIT IT.
#
# You can use "make menuconfig" to make any modifications to the installed .config file.
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
# modifications.
#
CONFIG_ADD_NUTTX_FETURES=y
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="xidatong"
CONFIG_ARCH_BOARD_XIDATONG=y
CONFIG_ARCH_CHIP="imxrt"
CONFIG_ARCH_CHIP_IMXRT=y
CONFIG_ARCH_CHIP_MIMXRT1052CVL5B=y
CONFIG_ARCH_INTERRUPTSTACK=10240
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARMV7M_DCACHE=y
CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
CONFIG_ARMV7M_ICACHE=y
CONFIG_ARMV7M_USEBASEPRI=y
CONFIG_BOARD_LOOPSPERMSEC=104926
CONFIG_BUILTIN=y
CONFIG_CLOCK_MONOTONIC=y
CONFIG_EXAMPLES_HELLO=y
CONFIG_IMXRT_GPIO_IRQ=y
CONFIG_IDLETHREAD_STACKSIZE=2048
CONFIG_IMXRT_LPUART1=y
CONFIG_INTELHEX_BINARY=y
CONFIG_LPUART1_SERIAL_CONSOLE=y
CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_DISABLE_IFUPDOWN=y
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_LINELEN=64
CONFIG_NSH_READLINE=y
CONFIG_RAM_SIZE=524288
CONFIG_RAM_START=0x20200000
CONFIG_RAW_BINARY=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_START_DAY=14
CONFIG_START_MONTH=3
CONFIG_SYSTEM_NSH=y
CONFIG_DEV_GPIO=y
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_READLINE_CMD_HISTORY_LEN=100
CONFIG_READLINE_CMD_HISTORY_LINELEN=120
CONFIG_READLINE_TABCOMPLETION=y
CONFIG_USER_ENTRYPOINT="nsh_main"
CONFIG_IMXRT_LPI2C=y
CONFIG_IMXRT_LCD=y
CONFIG_IMXRT_LPI2C1=y
CONFIG_LPI2C1_BUSYIDLE=0
CONFIG_LPI2C1_FILTSCL=0
CONFIG_LPI2C1_FILTSDA=0
CONFIG_IMXRT_GPIO2_16_31_IRQ=y
CONFIG_IMXRT_LPI2C_DYNTIMEO=y
CONFIG_IMXRT_LPI2C_DYNTIMEO_USECPERBYTE=500
CONFIG_IMXRT_LPI2C_DYNTIMEO_STARTSTOP=1000
CONFIG_IMXRT_LPI2C_TIMEOSEC=0
CONFIG_IMXRT_LCD_VIDEO_PLL_FREQ=92000000
CONFIG_IMXRT_LCD_VRAMBASE=0x80000000
CONFIG_IMXRT_LCD_REFRESH_FREQ=60
CONFIG_IMXRT_LCD_BACKLIGHT=y
CONFIG_IMXRT_LCD_INPUT_BPP16=y
CONFIG_IMXRT_LCD_OUTPUT_16=y
CONFIG_IMXRT_LCD_BACKCOLOR=0x0
CONFIG_IMXRT_LCD_HWIDTH=480
CONFIG_IMXRT_LCD_HPULSE=41
CONFIG_IMXRT_LCD_HFRONTPORCH=4
CONFIG_IMXRT_LCD_HBACKPORCH=8
CONFIG_IMXRT_LCD_VHEIGHT=272
CONFIG_IMXRT_LCD_VPULSE=10
CONFIG_IMXRT_LCD_VFRONTPORCH=4
CONFIG_IMXRT_LCD_VBACKPORCH=2
CONFIG_IMXRT_DATAEN_ACTIVE_HIGH=y
CONFIG_IMXRT_DATA_RISING_EDGE=y
CONFIG_I2C=y
CONFIG_I2C_DRIVER=y
CONFIG_ARCH_HAVE_SPI_CS_CONTROL=y
CONFIG_SPI=y
CONFIG_SPI_EXCHANGE=y
CONFIG_FB_MODULEINFO=y
CONFIG_DRIVERS_VIDEO=y
CONFIG_VIDEO_FB=y
CONFIG_INPUT=y
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_INPUT_GT9XX=y
CONFIG_FS_PROCFS=y
CONFIG_FS_PROCFS_MAX_TASKS=128
CONFIG_FS_PROCFS_EXCLUDE_ENVIRON=y
CONFIG_EXAMPLES_FB=y
CONFIG_EXAMPLES_FB_DEFAULTFB="/dev/fb0"
CONFIG_EXAMPLES_FB_PROGNAME="fb"
CONFIG_EXAMPLES_FB_PRIORITY=100
CONFIG_EXAMPLES_FB_STACKSIZE=2048
CONFIG_EXAMPLES_TOUCHSCREEN=y
CONFIG_EXAMPLES_TOUCHSCREEN_MINOR=0
CONFIG_EXAMPLES_TOUCHSCREEN_DEVPATH="/dev/input0"
CONFIG_EXAMPLES_TOUCHSCREEN_NSAMPLES=0

View File

@ -82,6 +82,10 @@ ifeq ($(CONFIG_XIDATONG_SDIO_AUTOMOUNT),y)
CSRCS += imxrt_mmcsd_automount.c
endif
ifeq ($(CONFIG_INPUT_GT9XX),y)
CSRCS += imxrt_gt9xx.c
endif
ifeq ($(CONFIG_BSP_USING_CH438),y)
CSRCS += imxrt_ch438.c ch438_demo.c
endif

View File

@ -51,6 +51,10 @@
# include "imxrt_ch438.h"
#endif
#ifdef CONFIG_INPUT_GT9XX
#include "imxrt_gt9xx.h"
#endif
#include "xidatong.h"
#include <arch/board/board.h> /* Must always be included last */
@ -187,6 +191,19 @@ int imxrt_bringup(void)
board_ch438_initialize();
#endif
#ifdef CONFIG_INPUT_GT9XX
/* Initialize the GT9XX touchscreen driver */
ret = imxrt_gt9xx_register();
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: imxrt_ft5x06_register() failed: %d\n", ret);
}
syslog(LOG_NOTICE, "Start initialize %d ok ...\n", ret);
#endif
UNUSED(ret);
return OK;
}

View File

@ -0,0 +1,328 @@
/****************************************************************************
* boards/arm/imxrt/xidatong/src/imxrt_gt9xx.c
*
* Copyright 2019 ElFaro LAB S.L. All rights reserved.
* Author: Fabio Balzano <fabio@elfarolab.com>
*
* Based on boards/arm/lpc54xx/lpcxpresso-lpc54628/src/lpc54_ft5x06.c
* Copyright (C) 2017 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/**
* @file imxrt_gt9xx.c
* @brief gt9xx touch driver refer to imxrt_ft5x06.c
* @version 1.0
* @author AIIT XUOS Lab
* @date 2022.5.31
*/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <syslog.h>
#include <assert.h>
#include <errno.h>
#include <nuttx/arch.h>
#include <nuttx/i2c/i2c_master.h>
#include <nuttx/input/gt9xx.h>
#include "imxrt_config.h"
#include "imxrt_gpio.h"
#include "imxrt_lpi2c.h"
#include "arch/chip/irq.h"
#include "imxrt_iomuxc.h"
#define gt_print printf
#define GT9XX_I2C_ADDRESS 0x5D
#define GPIO_GT9XX_INTR IMXRT_IRQ_GPIO2_30
#define IOMUX_GT9XX_RST (IOMUX_PULL_NONE | IOMUX_CMOS_OUTPUT | \
IOMUX_DRIVE_40OHM | IOMUX_SPEED_MEDIUM | \
IOMUX_SLEW_SLOW)
#define GPIO_GT9XX_CTRSTN (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | \
GPIO_PORT2 | GPIO_PIN30 | IOMUX_GT9XX_RST)
#define GPIO_GT9XX_CTINTN (GPIO_INTERRUPT | GPIO_INT_RISINGEDGE | \
IOMUX_SW_DEFAULT | GPIO_PORT2 | GPIO_PIN30 )
#ifdef CONFIG_INPUT_GT9XX
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define GT9XX_FREQUENCY 400000
/****************************************************************************
* Private Function Ptototypes
****************************************************************************/
#ifndef CONFIG_GT9XX_POLLMODE
static int imxrt_gt9xx_attach(FAR const struct gt9xx_config_s *config,
xcpt_t isr, FAR void *arg);
static void imxrt_gt9xx_enable(FAR const struct gt9xx_config_s *config,
bool enable);
static void imxrt_gt9xx_clear(FAR const struct gt9xx_config_s *config);
#endif
static void imxrt_gt9xx_wakeup(FAR const struct gt9xx_config_s *config);
static void imxrt_gt9xx_nreset(FAR const struct gt9xx_config_s *config,
bool state);
/****************************************************************************
* Private Data
****************************************************************************/
static const struct gt9xx_config_s g_gt9xx_config =
{
.address = GT9XX_I2C_ADDRESS,
.frequency = GT9XX_FREQUENCY,
#ifndef CONFIG_GT9XX_POLLMODE
.attach = imxrt_gt9xx_attach,
.enable = imxrt_gt9xx_enable,
.clear = imxrt_gt9xx_clear,
#endif
.wakeup = imxrt_gt9xx_wakeup,
.nreset = imxrt_gt9xx_nreset
};
#ifndef CONFIG_GT9XX_POLLMODE
static uint8_t g_gt9xx_irq;
#endif
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Name: imxrt_gt9xx_attach
*
* Description:
* Attach an GT9XX interrupt handler to a GPIO interrupt
*
****************************************************************************/
#ifndef CONFIG_GT9XX_POLLMODE
static int imxrt_gt9xx_attach(FAR const struct gt9xx_config_s *config,
xcpt_t isr, FAR void *arg)
{
return irq_attach(g_gt9xx_irq, isr, arg);
}
#endif
/****************************************************************************
* Name: imxrt_gt9xx_enable
*
* Description:
* Enable or disable a GPIO interrupt
*
****************************************************************************/
#ifndef CONFIG_GT9XX_POLLMODE
static void imxrt_gt9xx_enable(FAR const struct gt9xx_config_s *config,
bool enable)
{
if (enable)
{
up_enable_irq(g_gt9xx_irq);
}
else
{
up_disable_irq(g_gt9xx_irq);
}
}
#endif
/****************************************************************************
* Name: imxrt_gt9xx_clear
*
* Description:
* Acknowledge/clear any pending GPIO interrupt
*
****************************************************************************/
#ifndef CONFIG_GT9XX_POLLMODE
static void imxrt_gt9xx_clear(FAR const struct gt9xx_config_s *config)
{
imxrt_gpioirq_disable(g_gt9xx_irq);
}
#endif
/****************************************************************************
* Name: imxrt_gt9xx_wakeup
*
* Description:
* Issue WAKE interrupt to GT9XX to change the GT9XX from Hibernate to
* Active mode.
*
****************************************************************************/
static void imxrt_gt9xx_wakeup(FAR const struct gt9xx_config_s *config)
{
/* We do not have access to the WAKE pin in the implementation */
}
/****************************************************************************
* Name: imxrt_gt9xx_nreset
*
* Description:
* Control the chip reset pin (active low)
*
****************************************************************************/
static void imxrt_gt9xx_nreset(FAR const struct gt9xx_config_s *config,
bool nstate)
{
imxrt_gpio_write(GPIO_GT9XX_CTRSTN, nstate);
}
/****************************************************************************
* Public Functions
****************************************************************************/
#define IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_MASK (0x7U)
#define IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_SHIFT (0U)
#define IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(x) (((uint32_t)(((uint32_t)(x)) << IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_SHIFT)) & IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_MASK)
#define IOMUXC_SW_MUX_CTL_PAD_SION_MASK (0x10U)
#define IOMUXC_SW_MUX_CTL_PAD_SION_SHIFT (4U)
#define IOMUXC_SW_MUX_CTL_PAD_SION(x) (((uint32_t)(((uint32_t)(x)) << IOMUXC_SW_MUX_CTL_PAD_SION_SHIFT)) & IOMUXC_SW_MUX_CTL_PAD_SION_MASK)
#define IOMUXC_GPIO_B1_14_GPIO2_IO30 0x401F81B4U, 0x5U, 0, 0, 0x401F83A4U
static inline void IOMUXC_SetPinMux(uint32_t muxRegister,
uint32_t muxMode,
uint32_t inputRegister,
uint32_t inputDaisy,
uint32_t configRegister,
uint32_t inputOnfield)
{
*((volatile uint32_t *)muxRegister) =
IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(muxMode) | IOMUXC_SW_MUX_CTL_PAD_SION(inputOnfield);
if (inputRegister)
{
*((volatile uint32_t *)inputRegister) = inputDaisy;
}
}
static inline void IOMUXC_SetPinConfig(uint32_t muxRegister,
uint32_t muxMode,
uint32_t inputRegister,
uint32_t inputDaisy,
uint32_t configRegister,
uint32_t configValue)
{
if (configRegister)
{
*((volatile uint32_t *)configRegister) = configValue;
}
}
void imxrt_config_gt9xx_pins(void)
{
IOMUXC_SetPinMux(
IOMUXC_GPIO_B1_14_GPIO2_IO30, /* WAKEUP is configured as GPIO5_IO00 */
0U); /* Software Input On Field: Input Path is determined by functionality */
IOMUXC_SetPinConfig(
IOMUXC_GPIO_B1_14_GPIO2_IO30,
0x10B0u);
}
/****************************************************************************
* Name: imxrt_gt9xx_register
*
* Description:
* Register the GT9XX touch panel driver
*
****************************************************************************/
int imxrt_gt9xx_register(void)
{
FAR struct i2c_master_s *i2c;
int ret;
/* Initialize CTRSTN pin */
imxrt_config_gpio(GPIO_GT9XX_CTRSTN);
imxrt_gpio_write(GPIO_GT9XX_CTRSTN, false);
#ifndef CONFIG_GT9XX_POLLMODE
int irq;
/* Initialize GPIO interrupt pin. */
imxrt_config_gpio(GPIO_GT9XX_CTINTN);
irq = GPIO_GT9XX_INTR;
DEBUGASSERT(irq > 0 && irq < UINT8_MAX);
g_gt9xx_irq = (uint8_t)irq;
/* Make sure that the interrupt is disabled at the NVIC */
imxrt_gpioirq_disable(irq);
up_disable_irq(irq);
#endif
/* Take the GT9XX out of reset */
/* The GT9XX is on LPI2C1. Get the handle and register the GT9XX device */
i2c = imxrt_i2cbus_initialize(1);
if (i2c == NULL)
{
syslog(LOG_ERR, "ERROR: Failed to get LPI2C1 interface\n");
return -ENODEV;
}
else
{
ret = gt9xx_register(i2c, &g_gt9xx_config, 0);
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: Failed to register GT9XX driver: %d\n", ret);
imxrt_gpio_write(GPIO_GT9XX_CTRSTN, false);
imxrt_i2cbus_uninitialize(i2c);
return ret;
}
}
return OK;
}
#endif /* CONFIG_INPUT_GT9XX*/

View File

@ -0,0 +1,27 @@
/*
* Copyright (c) 2022 AIIT XUOS Lab
* XiUOS is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
/**
* @file imxrt_gt9xx.h
* @brief API for imxrt gt9xx.
* @version 1.0
* @author AIIT XUOS Lab
* @date 2022.5.31
*/
#ifndef __IMXRT_GT9XX_H_
#define __IMXRT_GT9XX_H_
int imxrt_gt9xx_register(void);
#endif /* __IMXRT_GT9XX_H__ */

0
Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/build.sh Normal file → Executable file
View File

View File

@ -0,0 +1,570 @@
#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#
menuconfig INPUT
bool "Input Device Support"
default n
---help---
This directory holds implementations of input device drivers.
This includes such things as touchscreen and keypad drivers.
See include/nuttx/input/*.h for registration information.
if INPUT
config INPUT_MOUSE
bool "Enable mouse support"
default n
---help---
Enable support for mouse devices.
if INPUT_MOUSE
config INPUT_MOUSE_WHEEL
bool "Enable mouse wheel support"
default n
---help---
Enable support for a 4-button mouse report that includes a while
position.
endif # INPUT_MOUSE
config INPUT_TOUCHSCREEN
bool
default n
config INPUT_MAX11802
bool "MAX11802 touchscreen controller"
default n
select SPI
select INPUT_TOUCHSCREEN
---help---
Enable support for the MAX11802 touchscreen controller
config INPUT_TSC2007
bool "TI TSC2007 touchscreen controller"
default n
select I2C
select INPUT_TOUCHSCREEN
---help---
Enable support for the TI TSC2007 touchscreen controller
if INPUT_TSC2007
config TSC2007_8BIT
bool "TSC2007 8-bit Conversions"
default n
---help---
Use faster, but less accurate, 8-bit conversions. Default: 12-bit conversions.
config TSC2007_MULTIPLE
bool "Multiple TSC2007 Devices"
default n
---help---
Can be defined to support multiple TSC2007 devices on board.
config TSC2007_NPOLLWAITERS
int "Number TSC2007 poll waiters"
default 4
---help---
Maximum number of threads that can be waiting on poll()
endif # INPUT_TSC2007
config INPUT_FT5X06
bool "FocalTech FT5x06 multi-touch, capacitive touch panel controller"
default n
select I2C
select INPUT_TOUCHSCREEN
---help---
Enable support for the FocalTech FT5x06 multi-touch, capacitive
touch panel controller
config INPUT_GT9XX
bool "Goodix GT9XX touch panel controller"
default n
select I2C
select INPUT_TOUCHSCREEN
---help---
Enable support for the Goodix GT9XX multi-touch, capacitive
touch panel controller
config INPUT_FT5336
bool "FocalTech FT5336 multi-touch, capacitive touch panel controller"
default n
select I2C
select INPUT_FT5X06
select INPUT_TOUCHSCREEN
depends on EXPERIMENTAL
---help---
Enable support for the FocalTech FT5x06 multi-touch, capacitive
touch panel controller
if INPUT_FT5X06
config FT5X06_POLLMODE
bool "Polled mode"
default n
---help---
Run the FT5x06 in a non-interrupt driven polled mode. Events will
not be driven by interrupts but rather based on a timed poll.
This is a non-optimal design both because (1) it will lead to delays
in detecting touch related events and (2) it will consume a
significant amount of CPU time to perform the polling.
config FT5X06_SWAPXY
bool "Swap X/Y"
default n
---help---
Reverse the meaning of X and Y to handle different LCD orientations.
config FT5X06_SINGLEPOINT
bool "Single point"
default n
---help---
Do no report multi-touch events
if FT5X06_SINGLEPOINT
config FT5X06_THRESHX
int "X threshold"
default 12
---help---
New touch positions will only be reported when the X or Y data changes by these
thresholds. This trades reduced data rates for some loss in dragging accuracy. For
12-bit values the raw ranges are 0-4095. So for example, if your display is
320x240, then THRESHX=13 and THRESHY=17 would correspond to one pixel. Default: 12
config FT5X06_THRESHY
int "Y threshold"
default 12
---help---
New touch positions will only be reported when the X or Y data changes by these
thresholds. This trades reduced data rates for some loss in dragging accuracy. For
12-bit values the raw ranges are 0-4095. So for example, if your display is
320x240, then THRESHX=13 and THRESHY=17 would correspond to one pixel. Default: 12
endif # FT5X06_SINGLEPOINT
config FT5X06_NPOLLWAITERS
int "Number FT5336/FT5x06 poll waiters"
default 4
---help---
Maximum number of threads that can be waiting on poll()
endif # INPUT_FT5X06
config INPUT_ADS7843E
bool "TI ADS7843/TSC2046 touchscreen controller"
default n
select SPI
select INPUT_TOUCHSCREEN
---help---
Enable support for the TI/Burr-Brown ADS7842 touchscreen controller. I believe
that driver should be compatible with the TI/Burr-Brown TSC2046 and XPT2046
touchscreen controllers as well.
if INPUT_ADS7843E
config ADS7843E_MULTIPLE
bool "Multiple ADS7843E Devices"
default n
---help---
Can be defined to support multiple ADS7843E devices on board.
config ADS7843E_NPOLLWAITERS
int "Number poll waiters"
default 4
---help---
Maximum number of threads that can be waiting on poll()
config ADS7843E_SPIDEV
int "SPI bus number"
default 0
---help---
Selects the SPI bus number identifying that SPI interface that
connects the ADS843E to the MCU.
config ADS7843E_DEVMINOR
int "Input device minor number"
default 0
---help---
The ADS7843E device will be registered as /dev/inputN where N is the
value provided by this setting.
config ADS7843E_SPIMODE
int "SPI mode"
default 0
range 0 3
---help---
Controls the SPI mode. The device should work in mode 0, but
sometimes you need to experiment.
config ADS7843E_FREQUENCY
int "SPI frequency"
default 100000
---help---
Define to use a different SPI bus frequency.
config ADS7843E_SWAPXY
bool "Swap X/Y"
default n
---help---
Reverse the meaning of X and Y to handle different LCD orientations.
config ADS7843E_THRESHX
int "X threshold"
default 12
---help---
New touch positions will only be reported when the X or Y data changes by these
thresholds. This trades reduced data rates for some loss in dragging accuracy. For
12-bit values the raw ranges are 0-4095. So for example, if your display is
320x240, then THRESHX=13 and THRESHY=17 would correspond to one pixel. Default: 12
config ADS7843E_THRESHY
int "Y threshold"
default 12
---help---
New touch positions will only be reported when the X or Y data changes by these
thresholds. This trades reduced data rates for some loss in dragging accuracy. For
12-bit values the raw ranges are 0-4095. So for example, if your display is
320x240, then THRESHX=13 and THRESHY=17 would correspond to one pixel. Default: 12
endif # INPUT_ADS7843E
config INPUT_MXT
bool "Atmel maXTouch Driver"
select INPUT_TOUCHSCREEN
default n
---help---
Enables support for the Atmel maXTouch driver
if INPUT_MXT
config MXT_THRESHX
int "X threshold"
default 5
---help---
New touch positions will only be reported when the X or Y data
changes by these thresholds. This trades reduced data rates for some
loss in dragging accuracy. For 12-bit values the raw ranges are
0-4095. So for example, if your display is 800x480, then THRESHX=5
and THRESHY=8 would correspond to a one pixel change. Default: 5
NOTE: This does nothing to reduce the interrupt rate. It only
reduces the rate at which touch events are reports.
config MXT_THRESHY
int "Y threshold"
default 8
---help---
New touch positions will only be reported when the X or Y data
changes by these thresholds. This trades reduced data rates for some
loss in dragging accuracy. For 12-bit values the raw ranges are
0-4095. So for example, if your display is 800x480, then THRESHX=5
and THRESHY=8 would correspond to a one pixel change. Default: 8
NOTE: This does nothing to reduce the interrupt rate. It only
reduces the rate at which touch events are reports.
config MXT_NPOLLWAITERS
int "Number poll waiters"
default 4
---help---
Maximum number of threads that can be waiting on poll()
config MXT_DISABLE_CONFIG_DEBUG_INFO
bool "Disable verbose debug output"
default y
depends on DEBUG_INPUT_INFO
---help---
The maXTouch tends to generate interrupts at a high rate during the
contact. If verbose debug is enabled in this driver, you may not
be able to get anything done because of the high debug output rate.
This setting will allow you to keep verbose touchscreen debug output
in other modules, but to specifically suppress the debug out from
the MXT driver. Debug (non-verbose) errors will still be generated,
but the chit-chat level will be eliminated.
endif # INPUT_MXT
config INPUT_STMPE811
bool "STMicro STMPE811 Driver"
default n
select INPUT_TOUCHSCREEN
---help---
Enables support for the STMPE811 driver
if INPUT_STMPE811
choice
prompt "STMPE Interface"
default STMPE811_I2C
config STMPE811_SPI
bool "SPI Interface"
select SPI
---help---
Enables support for the SPI interface (not currently supported)
config STMPE811_I2C
bool "STMPE811 I2C Interface"
select I2C
---help---
Enables support for the I2C interface
endchoice
config STMPE811_ACTIVELOW
bool "Active Low Interrupt"
default n
---help---
The STMPE811 interrupt is provided by a discrete input (usually a
GPIO interrupt on most MCU architectures). This setting determines
whether the interrupt is active high (or rising edge triggered) or
active low (or falling edge triggered). Default: Active
high/rising edge.
config STMPE811_EDGE
bool "Edge triggered Interrupt"
default n
---help---
The STMPE811 interrupt is provided by a discrete input (usually a
GPIO interrupt on most MCU architectures). This setting determines
whether the interrupt is edge or level triggered. Default: Level
triggered.
config STMPE811_MULTIPLE
bool "Multiple STMPE811 Devices"
default n
---help---
Can be defined to support multiple STMPE811 devices on board.
config STMPE811_NPOLLWAITERS
int "Number poll waiters"
default 4
---help---
Maximum number of threads that can be waiting on poll()
config STMPE811_TSC_DISABLE
bool "Disable STMPE811 Touchscreen Support"
default n
---help---
Disable driver touchscreen functionality.
config STMPE811_SWAPXY
bool "Swap X/Y"
default n
depends on !STMPE811_TSC_DISABLE
---help---
Reverse the meaning of X and Y to handle different LCD orientations.
config STMPE811_THRESHX
int "X threshold"
default 12
depends on !STMPE811_TSC_DISABLE
---help---
STMPE811 touchscreen data comes in a a very high rate. New touch positions
will only be reported when the X or Y data changes by these thresholds.
This trades reduced data rates for some loss in dragging accuracy. The
STMPE811 is configure for 12-bit values the raw ranges are 0-4095. So
for example, if your display is 320x240, then THRESHX=13 and THRESHY=17
would correspond to one pixel. Default: 12
config STMPE811_THRESHY
int "Y threshold"
default 12
depends on !STMPE811_TSC_DISABLE
---help---
STMPE811 touchscreen data comes in a a very high rate. New touch positions
will only be reported when the X or Y data changes by these thresholds.
This trades reduced data rates for some loss in dragging accuracy. The
STMPE811 is configure for 12-bit values the raw ranges are 0-4095. So
for example, if your display is 320x240, then THRESHX=13 and THRESHY=17
would correspond to one pixel. Default: 12
config STMPE811_ADC_DISABLE
bool "Disable STMPE811 ADC Support"
default y
---help---
Disable driver ADC functionality.
config STMPE811_GPIO_DISABLE
bool "Disable STMPE811 GPIO Support"
default y
---help---
Disable driver GPIO functionality.
config STMPE811_GPIOINT_DISABLE
bool "Disable STMPE811 GPIO Interrupt Support"
default y
depends on !STMPE811_GPIO_DISABLE
---help---
Disable driver GPIO interrupt functionality (ignored if GPIO functionality is
disabled).
config STMPE811_TEMP_DISABLE
bool "Disable STMPE811 Temperature Sensor Support"
default y
---help---
Disable driver temperature sensor functionality.
config STMPE811_REGDEBUG
bool "Enable Register-Level STMPE811 Debug"
default n
depends on DEBUG_FEATURES
---help---
Enable very low register-level debug output.
endif # INPUT_STMPE811
config INPUT_CYPRESS_MBR3108
bool "Enable Cypress MBR3108 CapSense driver"
default n
select INPUT_TOUCHSCREEN
---help---
Enable support for Cypress MBR3108 CapSense touch button & proximity
input sensor.
if INPUT_CYPRESS_MBR3108
config INPUT_CYPRESS_MBR3108_DEBUG
bool "Enable debug support for Cypress sensor"
default n
depends on DEBUG_FEATURES
---help---
Enable debugging traces for MBR3108 driver
config INPUT_CYPRESS_MBR3108_NPOLLWAITERS
int "Number of waiters to poll"
default 1
---help---
Maximum number of threads that can be waiting on poll()
endif # INPUT_CYPRESS_MBR3108
config INPUT_BUTTONS
bool "Button Inputs"
default n
---help---
Enable standard button upper half driver.
if INPUT_BUTTONS
config INPUT_BUTTONS_LOWER
bool "Generic Lower Half Button Driver"
default n
depends on ARCH_BUTTONS && ARCH_IRQBUTTONS
---help---
If the board supports the standard button interfaces as
defined in include/nuttx/board.h header file, then this
standard button lower half driver might be usable.
In order for this generic driver to be usable:
1. The board implementation must provide the button
interfaces as defined in include/nuttx/board.h
2. The board implementation must support interrupts for each
button.
If your board does not meet these requirements, then the
button_lower.c file can still be copied to your your
board src/ directory and modified for your specific board
requirements.
config INPUT_BUTTONS_NPOLLWAITERS
int "Max Number of Poll Waiters"
default 2
endif # INPUT_BUTTONS
config INPUT_DJOYSTICK
bool "Discrete Joystick"
default n
---help---
Enable standard discrete joystick upper half driver. A discrete
joystick refers to a joystick that could be implemented entirely
with GPIO input pins. So up, down, left, and right are all discrete
values like buttons (as opposed to integer values like you might
obtain from an analog joystick).
if INPUT_DJOYSTICK
config INPUT_DJOYSTICK_NPOLLWAITERS
int "Max Number of Poll Waiters"
default 2
endif # INPUT_DJOYSTICK
config INPUT_AJOYSTICK
bool "Analog Joystick"
default n
---help---
Enable standard analog joystick upper half driver. An analog
joystick refers to a joystick that provides position data as an
integer value that might have been obtained through Analog-
to-Digital Conversion (ADC). The analog positional data may also
be accompanied by discrete button data.
if INPUT_AJOYSTICK
config INPUT_AJOYSTICK_NPOLLWAITERS
int "Max Number of Poll Waiters"
default 2
endif # INPUT_AJOYSTICK
config INPUT_NUNCHUCK
bool "Nintendo Wii Nunchuck Joystick (White Model)"
default n
select I2C
---help---
Enable a Nintendo Wii Nunchuck joystick upper half driver. The
nunchuck joystick provides position data as an integer value.The
analog positional data may also be accompanied by discrete
button data.
if INPUT_NUNCHUCK
config NUNCHUCK_NPOLLWAITERS
int "Max Number of Poll Waiters"
default 2
endif # INPUT_NUNCHUCK
config INPUT_SPQ10KBD
bool "Solder Party Q10 BlackBerry Keyboard"
default n
select I2C
---help---
Enable the Solder Party Q10 BlackBerry Keyboard support. This
exposes itself as a standard keyboard at /dev/kbdN.
This keyboard exists both as a standalone module and integrated
into the Solder Party Keyboard FeatherWing. Information on this
can be found at https://www.solder.party/docs/keyboard-pmod/
if INPUT_SPQ10KBD
config SPQ10KBD_DJOY
bool "Joystick Interface for Buttons"
select INPUT_DJOYSTICK
default n
config SPQ10KBD_REGDBG
bool "Keyboard Register Debug"
default n
config SPQ10KBD_BUFSIZE
int "Keyboard Buffer Size"
default 10
config SPQ10KBD_NPOLLWAITERS
int "Max Number of Poll Waiters"
default 2
endif # INPUT_SPQ10KBD
endif # INPUT

View File

@ -0,0 +1,100 @@
############################################################################
# drivers/input/Make.defs
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you 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.
#
############################################################################
# Don't build anything if there is no support for input devices
ifeq ($(CONFIG_INPUT),y)
# Include the selected touchscreen drivers
ifeq ($(CONFIG_INPUT_TSC2007),y)
CSRCS += tsc2007.c
endif
ifeq ($(CONFIG_INPUT_FT5X06),y)
CSRCS += ft5x06.c
endif
ifeq ($(CONFIG_INPUT_GT9XX),y)
CSRCS += gt9xx.c
endif
ifeq ($(CONFIG_INPUT_ADS7843E),y)
CSRCS += ads7843e.c
endif
ifeq ($(CONFIG_INPUT_MAX11802),y)
CSRCS += max11802.c
endif
ifeq ($(CONFIG_INPUT_MXT),y)
CSRCS += mxt.c
endif
ifeq ($(CONFIG_INPUT_STMPE811),y)
CSRCS += stmpe811_base.c
ifneq ($(CONFIG_INPUT_STMPE811_TSC_DISABLE),y)
CSRCS += stmpe811_tsc.c
endif
ifneq ($(CONFIG_INPUT_STMPE811_GPIO_DISABLE),y)
CSRCS += stmpe811_gpio.c
endif
ifneq ($(CONFIG_INPUT_STMPE811_ADC_DISABLE),y)
CSRCS += stmpe811_adc.c
endif
ifneq ($(CONFIG_INPUT_STMPE811_TEMP_DISABLE),y)
CSRCS += stmpe811_temp.c
endif
endif
ifeq ($(CONFIG_INPUT_CYPRESS_MBR3108),y)
CSRCS += cypress_mbr3108.c
endif
ifeq ($(CONFIG_INPUT_BUTTONS),y)
CSRCS += button_upper.c
ifeq ($(CONFIG_INPUT_BUTTONS_LOWER),y)
CSRCS += button_lower.c
endif
endif
ifeq ($(CONFIG_INPUT_DJOYSTICK),y)
CSRCS += djoystick.c
endif
ifeq ($(CONFIG_INPUT_AJOYSTICK),y)
CSRCS += ajoystick.c
endif
ifeq ($(CONFIG_INPUT_NUNCHUCK),y)
CSRCS += nunchuck.c
endif
ifeq ($(CONFIG_INPUT_SPQ10KBD),y)
CSRCS += spq10kbd.c
endif
# Include input device driver build support
DEPPATH += --dep-path input
VPATH += :input
CFLAGS += ${shell $(INCDIR) "$(CC)" $(TOPDIR)$(DELIM)drivers$(DELIM)input}
endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,165 @@
/*
* Copyright (c) 2022 AIIT XUOS Lab
* XiUOS is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
/**
* @file gt9xx.h
* @brief API for gt9xx.
* @version 1.0
* @author AIIT XUOS Lab
* @date 2022.5.31
*/
#ifndef __GT9XX_H_
#define __GT9XX_H_
#define GT9XX_MAX_TOUCHES (1)
#define GT9XX_TOUCH_DATA_LEN (8 * GT9XX_MAX_TOUCHES + 4)
#define TOUCH_POINT_GET_EVENT(t) ((t).xh >> 6)
#define TOUCH_POINT_GET_ID(t) ((t).yh >> 4)
#define TOUCH_POINT_GET_X(t) ((((t).xh & 0x0f) << 8) | (t).xl)
#define TOUCH_POINT_GET_Y(t) ((((t).yh & 0x0f) << 8) | (t).yl)
#define GT9XX_MAX_HEIGHT 272
#define GT9XX_MAX_WIDTH 480
#define GT9XX_INT_TRIGGER 0
#define GT9XX_ADDR_LENGTH 2
#define GT9XX_CONFIG_MIN_LENGTH 186
#define GT9XX_CONFIG_MAX_LENGTH 240
#define GT9XX_REG_BAK_REF 0x99D0
#define GT9XX_REG_MAIN_CLK 0x8020
#define GT9XX_REG_CHIP_TYPE 0x8000
#define GT9XX_REG_HAVE_KEY 0x804E
#define GT9XX_REG_MATRIX_DRVNUM 0x8069
#define GT9XX_REG_MATRIX_SENNUM 0x806A
#define GT9XX_REG_COMMAND 0x8040
#define GT9XX_COMMAND_READSTATUS 0
#define GT9XX_COMMAND_DIFFERENCE 1
#define GT9XX_COMMAND_SOFTRESET 2
#define GT9XX_COMMAND_UPDATE 3
#define GT9XX_COMMAND_CALCULATE 4
#define GT9XX_COMMAND_TURNOFF 5
#define GT9XX_REG_READ_COOR 0x814E
#define GT9XX_REG_SLEEP 0x8040
#define GT9XX_REG_SENSOR_ID 0x814A
#define GT9XX_REG_CONFIG_DATA 0x8047
#define GT9XX_REG_VERSION 0x8140
/****************************************************************************
* Public Types
****************************************************************************/
enum touch_event_e
{
GT9XX_DOWN = 0, /* The state changed to touched */
GT9XX_UP = 1, /* The state changed to not touched */
GT9XX_CONTACT = 2, /* There is a continuous touch being detected */
GT9XX_INVALID = 3 /* No touch information available */
};
/* Describes on touchpoint returned by the GT9xx */
struct gt9xx_touch_point_s
{
uint8_t xl;
uint8_t xh;
uint8_t yl;
uint8_t yh;
uint8_t weight;
uint8_t area;
};
/* Describes all touch data returned by the GT9xx */
struct gt9xx_touch_data_s
{
uint8_t tdstatus; /* Touch status */
struct gt9xx_touch_point_s touch[GT9XX_MAX_TOUCHES];
};
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Configuration ************************************************************/
/* Maximum number of threads than can be waiting for POLL events */
#ifndef CONFIG_GT9XX_NPOLLWAITERS
# define CONFIG_GT9XX_NPOLLWAITERS 2
#endif
/* Check for some required settings. This can save the user a lot of time
* in getting the right configuration.
*/
#ifndef CONFIG_SCHED_WORKQUEUE
# error "Work queue support required. CONFIG_SCHED_WORKQUEUE must be selected."
#endif
/****************************************************************************
* Public Types
****************************************************************************/
/* A reference to a structure of this type must be passed to the GT9XX
* driver. This structure provides information about the configuration
* of the FT5x06 and provides some board-specific hooks.
*
* Memory for this structure is provided by the caller. It is not copied
* by the driver and is presumed to persist while the driver is active. The
* memory must be writeable because, under certain circumstances, the driver
* may modify frequency or X plate resistance values.
*/
struct gt9xx_config_s
{
/* Device characterization */
uint8_t address; /* 7-bit I2C address (only bits 0-6 used) */
uint32_t frequency; /* Default I2C frequency */
/* IRQ/GPIO access callbacks. These operations all hidden behind
* callbacks to isolate the GT9XX driver from differences in GPIO
* interrupt handling by varying boards and MCUs.
*
* attach - Attach an FT5x06 interrupt handler to a GPIO interrupt
* enable - Enable or disable a GPIO interrupt
* clear - Acknowledge/clear any pending GPIO interrupt
* wakeup - Issue WAKE interrupt to FT5x06 to change the FT5x06 from
* Hibernate to Active mode.
* nreset - Control the chip reset pin (active low)
*/
#ifndef CONFIG_GT9XX_POLLMODE
int (*attach)(FAR const struct gt9xx_config_s *config, xcpt_t isr,
FAR void *arg);
void (*enable)(FAR const struct gt9xx_config_s *config, bool enable);
void (*clear)(FAR const struct gt9xx_config_s *config);
#endif
void (*wakeup)(FAR const struct gt9xx_config_s *config);
void (*nreset)(FAR const struct gt9xx_config_s *config,
bool state);
};
int gt9xx_register(FAR struct i2c_master_s *i2c,
FAR const struct gt9xx_config_s *config, int minor);
#endif /* __GT9XX_H__ */