mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-25 22:43:50 +01:00
Merge pull request #17540 from leandrolanzieri/pr/drivers/ft5x06/fix_multiple_models
drivers/ft5x06: allow multiple device types
This commit is contained in:
commit
2cb8ffe307
@ -28,7 +28,7 @@ config BOARD_STM32F723E_DISCO
|
||||
select BOARD_HAS_LSE
|
||||
|
||||
select HAVE_SAUL_GPIO
|
||||
select HAVE_FT6X06
|
||||
select HAVE_FT5X06
|
||||
select MODULE_PERIPH_UART_HW_FC if TEST_KCONFIG && HAS_PERIPH_UART_HW_FC
|
||||
# Workaround due to stdout only working with stdin enabled
|
||||
select MODULE_STDIN if TEST_KCONFIG
|
||||
|
||||
@ -5,7 +5,7 @@ ifneq (,$(filter saul_default,$(USEMODULE)))
|
||||
endif
|
||||
|
||||
ifneq (,$(filter touch_dev,$(USEMODULE)))
|
||||
USEMODULE += ft6x06
|
||||
USEMODULE += ft5x06
|
||||
endif
|
||||
|
||||
# TODO: remove the stdin dependency
|
||||
|
||||
@ -68,6 +68,7 @@ extern "C" {
|
||||
#define FT5X06_PARAM_INT_PIN GPIO_PIN(PORT_I, 9) /**< Interrupt pin */
|
||||
#define FT5X06_PARAM_XMAX (240) /**< Max width */
|
||||
#define FT5X06_PARAM_YMAX (240) /**< Max height */
|
||||
#define FT5X06_PARAM_TYPE FT5X06_TYPE_FT6X06 /**< Device type */
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
||||
@ -29,6 +29,6 @@ config BOARD_STM32F746G_DISCO
|
||||
select BOARD_HAS_LSE
|
||||
|
||||
select HAVE_SAUL_GPIO
|
||||
select HAVE_FT5336
|
||||
select HAVE_FT5X06
|
||||
|
||||
source "$(RIOTBOARD)/common/stm32/Kconfig"
|
||||
|
||||
@ -11,5 +11,5 @@ ifneq (,$(filter disp_dev,$(USEMODULE)))
|
||||
endif
|
||||
|
||||
ifneq (,$(filter touch_dev,$(USEMODULE)))
|
||||
USEMODULE += ft5336
|
||||
USEMODULE += ft5x06
|
||||
endif
|
||||
|
||||
@ -73,6 +73,7 @@ extern "C" {
|
||||
#define FT5X06_PARAM_INT_PIN GPIO_PIN(PORT_I, 13) /**< Interrupt pin */
|
||||
#define FT5X06_PARAM_XMAX (480) /**< Max width */
|
||||
#define FT5X06_PARAM_YMAX (272) /**< Max height */
|
||||
#define FT5X06_PARAM_TYPE FT5X06_TYPE_FT5336 /**< Device type */
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
||||
1
dist/tools/doccheck/exclude_patterns
vendored
1
dist/tools/doccheck/exclude_patterns
vendored
@ -14705,3 +14705,4 @@ drivers/ft5x06/include/ft5x06_constants\.h:[0-9]+: warning: Member FT5X06_G_MODE
|
||||
drivers/ft5x06/include/ft5x06_constants\.h:[0-9]+: warning: Member FT5X06_G_MODE_INTERRUPT_SHIFT \(macro definition\) of file ft5x06_constants\.h is not documented\.
|
||||
drivers/ft5x06/include/ft5x06_constants\.h:[0-9]+: warning: Member FT5X06_G_MODE_INTERRUPT_POLLING \(macro definition\) of file ft5x06_constants\.h is not documented\.
|
||||
drivers/ft5x06/include/ft5x06_constants\.h:[0-9]+: warning: Member FT5X06_G_MODE_INTERRUPT_TRIGGER \(macro definition\) of file ft5x06_constants\.h is not documented\.
|
||||
drivers/ft5x06/include/ft5x06_params\.h:[0-9]+: warning: Member FT5X06_PARAM_TYPE \(macro definition\) of file ft5x06_params\.h is not documented\.
|
||||
|
||||
@ -13,97 +13,12 @@ config MODULE_FT5X06
|
||||
select MODULE_PERIPH_I2C
|
||||
select MODULE_ZTIMER
|
||||
select MODULE_ZTIMER_MSEC
|
||||
|
||||
config MODULE_FT5606
|
||||
bool "FT5606 touch panel driver"
|
||||
select MODULE_FT5X06
|
||||
|
||||
config MODULE_FT5X16
|
||||
bool "FT5X16 touch panel driver"
|
||||
select MODULE_FT5X06
|
||||
|
||||
config MODULE_FT6X06
|
||||
bool "FT6X06 touch panel driver"
|
||||
select MODULE_FT5X06
|
||||
|
||||
config MODULE_FT6X36
|
||||
bool "FT6X36 touch panel driver"
|
||||
select MODULE_FT5X06
|
||||
|
||||
config MODULE_FT5X06I
|
||||
bool "FT5X06I touch panel driver"
|
||||
select MODULE_FT5X06
|
||||
|
||||
config MODULE_FT5336
|
||||
bool "FT5336 touch panel driver"
|
||||
select MODULE_FT5X06
|
||||
|
||||
config MODULE_FT3316
|
||||
bool "FT3316 touch panel driver"
|
||||
select MODULE_FT5X06
|
||||
|
||||
config MODULE_FT5436I
|
||||
bool "FT5436I touch panel driver"
|
||||
select MODULE_FT5X06
|
||||
|
||||
config MODULE_FT5336I
|
||||
bool "FT5336I touch panel driver"
|
||||
select MODULE_FT5X06
|
||||
|
||||
config MODULE_FT5X46
|
||||
bool "FT5X46 touch panel driver"
|
||||
select MODULE_FT5X06
|
||||
|
||||
config HAVE_FT5606
|
||||
bool
|
||||
select MODULE_FT5606 if MODULE_TOUCH_DEV
|
||||
help
|
||||
Indicates that an FT5606 touch panel is present.
|
||||
This driver is compatible with the following controllers: ft5x06, ft5606, ft5x16, ft6x06,
|
||||
ft6x36, ft5x06i, ft5336, ft3316, ft5436i, ft5336i and ft5x46.
|
||||
|
||||
config HAVE_FT5X16
|
||||
config HAVE_FT5X06
|
||||
bool
|
||||
select MODULE_FT5X16 if MODULE_TOUCH_DEV
|
||||
select MODULE_FT5X06 if MODULE_TOUCH_DEV
|
||||
help
|
||||
Indicates that an FT5X16 touch panel is present.
|
||||
|
||||
config HAVE_FT6X06
|
||||
bool
|
||||
select MODULE_FT6X06 if MODULE_TOUCH_DEV
|
||||
help
|
||||
Indicates that an FT6X06 touch panel is present.
|
||||
|
||||
config HAVE_FT6X36
|
||||
bool
|
||||
select MODULE_FT6X36 if MODULE_TOUCH_DEV
|
||||
help
|
||||
Indicates that an FT6X36 touch panel is present.
|
||||
|
||||
config HAVE_FT5X06I
|
||||
bool
|
||||
select MODULE_FT5X06I if MODULE_TOUCH_DEV
|
||||
help
|
||||
Indicates that an FT5X06I touch panel is present.
|
||||
|
||||
config HAVE_FT5336
|
||||
bool
|
||||
select MODULE_FT5336 if MODULE_TOUCH_DEV
|
||||
help
|
||||
Indicates that an FT5336 touch panel is present.
|
||||
|
||||
config HAVE_FT3316
|
||||
bool
|
||||
select MODULE_FT3316 if MODULE_TOUCH_DEV
|
||||
help
|
||||
Indicates that an FT3316 touch panel is present.
|
||||
|
||||
config HAVE_FT5436I
|
||||
bool
|
||||
select MODULE_FT5436I if MODULE_TOUCH_DEV
|
||||
help
|
||||
Indicates that an FT5436I touch panel is present.
|
||||
|
||||
config HAVE_FT5X46
|
||||
bool
|
||||
select MODULE_FT5X46 if MODULE_TOUCH_DEV
|
||||
help
|
||||
Indicates that an FT5X46 touch panel is present.
|
||||
Indicates that an FT5X06 touch panel is present.
|
||||
|
||||
@ -1,13 +1,2 @@
|
||||
USEMODULE_INCLUDES_ft5x06 := $(LAST_MAKEFILEDIR)/include
|
||||
USEMODULE_INCLUDES += $(USEMODULE_INCLUDES_ft5x06)
|
||||
|
||||
PSEUDOMODULES += ft5606
|
||||
PSEUDOMODULES += ft5x16
|
||||
PSEUDOMODULES += ft6x06
|
||||
PSEUDOMODULES += ft6x36
|
||||
PSEUDOMODULES += ft5x06i
|
||||
PSEUDOMODULES += ft5336
|
||||
PSEUDOMODULES += ft3316
|
||||
PSEUDOMODULES += ft5436i
|
||||
PSEUDOMODULES += ft5336i
|
||||
PSEUDOMODULES += ft5x46
|
||||
|
||||
@ -27,6 +27,7 @@
|
||||
#include "ztimer.h"
|
||||
|
||||
#include "ft5x06.h"
|
||||
#include "ft5x06_internal.h"
|
||||
#include "ft5x06_constants.h"
|
||||
#include "ft5x06_params.h"
|
||||
|
||||
@ -53,15 +54,24 @@ int ft5x06_init(ft5x06_t *dev, const ft5x06_params_t *params, ft5x06_event_cb_t
|
||||
return -EPROTO;
|
||||
}
|
||||
|
||||
if (vendor_id != FT5X06_VENDOR_ID) {
|
||||
uint8_t expected_id;
|
||||
if (dev->params.type == FT5X06_TYPE_FT6X06 || dev->params.type == FT5X06_TYPE_FT6X36) {
|
||||
expected_id = FT6XX6_VENDOR_ID;
|
||||
}
|
||||
else {
|
||||
expected_id = FT5X06_VENDOR_ID;
|
||||
}
|
||||
|
||||
if (expected_id != vendor_id) {
|
||||
DEBUG("[ft5x06] init: invalid vendor ID: '0x%02x' (expected: 0x%02x)\n",
|
||||
vendor_id, FT5X06_VENDOR_ID);
|
||||
vendor_id, expected_id);
|
||||
i2c_release(FT5X06_BUS);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Auto-calibrate if needed */
|
||||
if (IS_ACTIVE(FT5X06_AUTO_CALIB_NEEDED)) {
|
||||
if (dev->params.type == FT5X06_TYPE_FT5606|| dev->params.type == FT5X06_TYPE_FT5X16 ||
|
||||
dev->params.type == FT5X06_TYPE_FT5X06I) {
|
||||
DEBUG("[ft5x06] init: enable device auto-calibration\n");
|
||||
i2c_write_reg(FT5X06_BUS, FT5X06_ADDR, FT5X06_G_AUTO_CLB_MODE_REG, 0, 0);
|
||||
}
|
||||
@ -81,11 +91,9 @@ int ft5x06_init(ft5x06_t *dev, const ft5x06_params_t *params, ft5x06_event_cb_t
|
||||
static const uint8_t touch_reg_map[FT5X06_TOUCHES_COUNT_MAX] = {
|
||||
FT5X06_TOUCH1_XH_REG,
|
||||
FT5X06_TOUCH2_XH_REG,
|
||||
#if FT5X06_TOUCHES_COUNT_MAX > 2
|
||||
FT5X06_TOUCH3_XH_REG,
|
||||
FT5X06_TOUCH4_XH_REG,
|
||||
FT5X06_TOUCH5_XH_REG,
|
||||
#endif
|
||||
};
|
||||
|
||||
int ft5x06_read_touch_positions(const ft5x06_t *dev, ft5x06_touch_position_t *positions, size_t len)
|
||||
@ -113,7 +121,7 @@ int ft5x06_read_touch_count(const ft5x06_t *dev, uint8_t *count)
|
||||
i2c_release(FT5X06_BUS);
|
||||
*count &= FT5X06_TD_STATUS_MASK;
|
||||
|
||||
if (*count > FT5X06_TOUCHES_COUNT_MAX) {
|
||||
if (*count > ft5x06_get_touches_count_max(dev)) {
|
||||
*count = 0;
|
||||
}
|
||||
|
||||
|
||||
29
drivers/ft5x06/ft5x06_internal.c
Normal file
29
drivers/ft5x06/ft5x06_internal.c
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) 2022 HAW Hamburg
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @{
|
||||
* @file
|
||||
* @brief Implementation of internal functions for ft5x06
|
||||
*
|
||||
* @author Leandro Lanzieri <leandro.lanzieri@haw-hamburg.de>
|
||||
* @}
|
||||
*/
|
||||
#include <inttypes.h>
|
||||
|
||||
#include "ft5x06.h"
|
||||
#include "ft5x06_internal.h"
|
||||
|
||||
uint8_t ft5x06_get_touches_count_max(const ft5x06_t *dev) {
|
||||
if (dev->params.type == FT5X06_TYPE_FT6X06 || dev->params.type == FT5X06_TYPE_FT6X36) {
|
||||
return FT6XX6_TOUCHES_COUNT_MAX;
|
||||
}
|
||||
else {
|
||||
return FT5X06_TOUCHES_COUNT_MAX;
|
||||
}
|
||||
}
|
||||
@ -26,6 +26,7 @@
|
||||
#include "periph/gpio.h"
|
||||
|
||||
#include "ft5x06.h"
|
||||
#include "ft5x06_internal.h"
|
||||
#include "ft5x06_touch_dev.h"
|
||||
|
||||
#define ENABLE_DEBUG 0
|
||||
@ -56,7 +57,7 @@ uint8_t _ft5x06_touches(const touch_dev_t *touch_dev, touch_t *touches, size_t l
|
||||
ft5x06_read_touch_count(dev, &ret);
|
||||
|
||||
if (ret && touches != NULL) {
|
||||
assert(len <= FT5X06_TOUCHES_COUNT_MAX);
|
||||
assert(len <= ft5x06_get_touches_count_max(dev));
|
||||
ft5x06_read_touch_positions(dev, (ft5x06_touch_position_t *)touches, len);
|
||||
}
|
||||
|
||||
|
||||
@ -30,23 +30,27 @@ extern "C" {
|
||||
* @{
|
||||
*/
|
||||
#define FT5X06_I2C_DEFAULT_ADDRESS (0x38)
|
||||
#if IS_USED(MODULE_FT6X06) || IS_USED(MODULE_FT6X36)
|
||||
#define FT5X06_VENDOR_ID (0xcd)
|
||||
#else
|
||||
|
||||
/**
|
||||
* @brief Vendor ID for FT6X06 and FT6X36 models.
|
||||
*/
|
||||
#define FT6XX6_VENDOR_ID (0xcd)
|
||||
|
||||
/**
|
||||
* @brief Vendor ID for FT5606, FT5X16, FT5X06I, FT5336, FT3316, FT5436I, FT5336I, FT5X46 models.
|
||||
*/
|
||||
#define FT5X06_VENDOR_ID (0x51)
|
||||
#endif
|
||||
#if IS_USED(MODULE_FT6X06) || IS_USED(MODULE_FT6X36)
|
||||
#define FT5X06_TOUCHES_COUNT_MAX (2)
|
||||
#else
|
||||
|
||||
/**
|
||||
* @brief Maximum touches count for FT6X06 and FT6X36 models.
|
||||
*/
|
||||
#define FT6XX6_TOUCHES_COUNT_MAX (2)
|
||||
|
||||
/**
|
||||
* @brief Maximum touches count for FT5606, FT5X16, FT5X06I, FT5336, FT3316, FT5436I, FT5336I,
|
||||
* FT5X46 models.
|
||||
*/
|
||||
#define FT5X06_TOUCHES_COUNT_MAX (5)
|
||||
#endif
|
||||
#if IS_USED(MODULE_FT6X06) || IS_USED(MODULE_FT6X36) || IS_USED(MODULE_FT5336) || \
|
||||
IS_USED(MODULE_FT3316) || IS_USED(MODULE_FT5436I) || IS_USED(MODULE_FT5336I) || \
|
||||
IS_USED(MODULE_FT5X46)
|
||||
#define FT5X06_AUTO_CALIB_NEEDED 0
|
||||
#else
|
||||
#define FT5X06_AUTO_CALIB_NEEDED 1
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
||||
41
drivers/ft5x06/include/ft5x06_internal.h
Normal file
41
drivers/ft5x06/include/ft5x06_internal.h
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (C) 2022 HAW Hamburg
|
||||
*
|
||||
* This file is subject to the terms and conditions of the GNU Lesser
|
||||
* General Public License v2.1. See the file LICENSE in the top level
|
||||
* directory for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @{
|
||||
* @file
|
||||
* @brief FT5X06 internal functions
|
||||
*
|
||||
* @author Leandro Lanzieri <leandro.lanzieri@haw-hamburg.de>
|
||||
*/
|
||||
|
||||
#ifndef FT5X06_INTERNAL_H
|
||||
#define FT5X06_INTERNAL_H
|
||||
|
||||
#include <inttypes.h>
|
||||
#include "ft5x06.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Get the maximum touches count of a device, based on its model.
|
||||
*
|
||||
* @param[in] dev Device descriptor of the driver
|
||||
*
|
||||
* @return Maximum touches count
|
||||
*/
|
||||
uint8_t ft5x06_get_touches_count_max(const ft5x06_t *dev);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* FT5X06_INTERNAL_H */
|
||||
/** @} */
|
||||
@ -49,6 +49,9 @@ extern "C" {
|
||||
#ifndef FT5X06_PARAM_YMAX
|
||||
#define FT5X06_PARAM_YMAX (272U)
|
||||
#endif
|
||||
#ifndef FT5X06_PARAM_TYPE
|
||||
#define FT5X06_PARAM_TYPE FT5X06_TYPE_FT5336
|
||||
#endif
|
||||
|
||||
#define FT5X06_PARAMS { \
|
||||
.i2c = FT5X06_PARAM_I2C_DEV, \
|
||||
@ -56,6 +59,7 @@ extern "C" {
|
||||
.int_pin = FT5X06_PARAM_INT_PIN, \
|
||||
.xmax = FT5X06_PARAM_XMAX, \
|
||||
.ymax = FT5X06_PARAM_YMAX, \
|
||||
.type = FT5X06_PARAM_TYPE \
|
||||
}
|
||||
/**@}*/
|
||||
|
||||
|
||||
@ -60,6 +60,23 @@ typedef enum {
|
||||
FT5X06_TOUCH_ZOOM_OUT, /**< Zoom out gesture detected */
|
||||
} ft5x06_touch_gesture_t;
|
||||
|
||||
/**
|
||||
* @brief Device type
|
||||
*/
|
||||
typedef enum {
|
||||
FT5X06_TYPE_FT5X06, /**< FT5X06 */
|
||||
FT5X06_TYPE_FT5606, /**< FT5606 */
|
||||
FT5X06_TYPE_FT5X16, /**< FT5X16 */
|
||||
FT5X06_TYPE_FT6X06, /**< FT6X06 */
|
||||
FT5X06_TYPE_FT6X36, /**< FT6X36 */
|
||||
FT5X06_TYPE_FT5X06I, /**< FT5X06I */
|
||||
FT5X06_TYPE_FT5336, /**< FT5336 */
|
||||
FT5X06_TYPE_FT3316, /**< FT3316 */
|
||||
FT5X06_TYPE_FT5436I, /**< FT5436I */
|
||||
FT5X06_TYPE_FT5336I, /**< FT5336I */
|
||||
FT5X06_TYPE_FT5X46, /**< FT5X46 */
|
||||
} ft5x06_type_t;
|
||||
|
||||
/**
|
||||
* @brief Signature of the touch event callback triggered from interrupt
|
||||
*
|
||||
@ -76,6 +93,7 @@ typedef struct {
|
||||
gpio_t int_pin; /**< Touch screen interrupt pin */
|
||||
uint16_t xmax; /**< Touch screen max X position */
|
||||
uint16_t ymax; /**< Touch screen max Y position */
|
||||
ft5x06_type_t type; /**< Device type */
|
||||
} ft5x06_params_t;
|
||||
|
||||
/**
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
BOARD ?= stm32f746g-disco
|
||||
include ../Makefile.tests_common
|
||||
|
||||
DRIVER ?= ft5336
|
||||
USEMODULE += $(DRIVER)
|
||||
USEMODULE += ft5x06
|
||||
|
||||
include $(RIOTBASE)/Makefile.include
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
# this file enables modules defined in Kconfig. Do not use this file for
|
||||
# application configuration. This is only needed during migration.
|
||||
CONFIG_MODULE_FT5336=y
|
||||
CONFIG_MODULE_FT5X06=y
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user