123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- /*
- * Copyright (c) 2006-2025, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2025-05-23 godmial Refactor to conform to RT-Thread coding style.
- */
- #ifndef __TOUCH_H__
- #define __TOUCH_H__
- #include "stdio.h"
- #include "string.h"
- #include "gd32f4xx.h"
- #define SCL_RCU RCU_GPIOB
- #define SCL_PORT GPIOB
- #define SCL_PIN GPIO_PIN_6
- #define SCL_ON gpio_bit_set(SCL_PORT, SCL_PIN)
- #define SCL_OFF gpio_bit_reset(SCL_PORT, SCL_PIN)
- #define SCL_TOGGLE gpio_bit_toggle(SCL_PORT, SCL_PIN)
- #define SDA_RCU RCU_GPIOB
- #define SDA_PORT GPIOB
- #define SDA_PIN GPIO_PIN_7
- #define SDA_ON gpio_bit_set(SDA_PORT, SDA_PIN)
- #define SDA_OFF gpio_bit_reset(SDA_PORT, SDA_PIN)
- #define SDA_TOGGLE gpio_bit_toggle(SDA_PORT, SDA_PIN)
- /* IO direction settings */
- #define CT_SDA_IN() gpio_mode_set(SCL_PORT, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, SDA_PIN); //{GPIOF->MODER&=~(3<<(2*11));GPIOF->MODER|=0<<2*11;} //PF11输入模式
- #define CT_SDA_OUT() gpio_mode_set(SCL_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, SDA_PIN); //{GPIOF->MODER&=~(3<<(2*11));GPIOF->MODER|=1<<2*11;} //PF11输出模式
- /* IO operations */
- #define CT_IIC_SCL // PBout(0) //SCL
- #define CT_IIC_SDA(val) ((val) == 1 ? SDA_ON : SDA_OFF) // PFout(11) //SDA
- #define CT_READ_SDA gpio_input_bit_get(SDA_PORT, SDA_PIN) // PFin(11) //输入SDA
- /* Reset and interrupt pin definitions */
- #define RST_RCU RCU_GPIOD
- #define RST_PORT GPIOD
- #define RST_PIN GPIO_PIN_12
- #define RST_ON gpio_bit_set(RST_PORT, RST_PIN);
- #define RST_OFF gpio_bit_reset(RST_PORT, RST_PIN);
- #define RST_TOGGLE gpio_bit_toggle(RST_PORT, RST_PIN);
- #define INT_RCU RCU_GPIOD
- #define INT_PORT GPIOD
- #define INT_PIN GPIO_PIN_11
- #define INT_ON gpio_bit_set(INT_PORT, INT_PIN);
- #define INT_OFF gpio_bit_reset(INT_PORT, INT_PIN);
- #define INT_TOGGLE gpio_bit_toggle(INT_PORT, INT_PIN);
- /* I2C command definitions */
- #define FT_CMD_WR 0X70 /**< FT5206 write command */
- #define FT_CMD_RD 0X71 /**< FT5206 read command */
- /* FT5206 register definitions */
- #define FT_DEVIDE_MODE 0x00 /**< Mode control register */
- #define FT_REG_NUM_FINGER 0x02 /**< Touch status register */
- #define FT_TP1_REG 0x03 /**< Touch point 1 data */
- #define FT_TP2_REG 0x09 /**< Touch point 2 data */
- #define FT_TP3_REG 0x0F /**< Touch point 3 data */
- #define FT_TP4_REG 0x15 /**< Touch point 4 data */
- #define FT_TP5_REG 0x1B /**< Touch point 5 data */
- #define FT_ID_G_LIB_VERSION 0xA1 /**< Firmware version */
- #define FT_ID_G_MODE 0xA4 /**< Interrupt mode control */
- #define FT_ID_G_THGROUP 0x80 /**< Touch sensitivity */
- #define FT_ID_G_PERIODACTIVE 0x88 /**< Active period register */
- #define TP_PRES_DOWN 0x80 /**< Touch pressed flag */
- #define TP_CATH_PRES 0x40 /**< Key press detected flag */
- #define CT_MAX_TOUCH 5 /**< Maximum number of supported touch points */
- /**
- * @brief Touch point device structure.
- */
- typedef struct
- {
- uint16_t x[CT_MAX_TOUCH]; /**< X coordinates of touch points */
- uint16_t y[CT_MAX_TOUCH]; /**< Y coordinates of touch points */
- uint8_t sta; /**< Touch status flag */
- float xfac; /**< X axis scaling factor */
- float yfac; /**< Y axis scaling factor */
- short xoff; /**< X axis offset */
- short yoff; /**< Y axis offset */
- uint8_t touchtype; /**< Touch type flag */
- } _m_tp_dev;
- extern _m_tp_dev tp_dev;
- /**
- * @brief Initialize I2C GPIO lines.
- */
- void CT_IIC_Init(void);
- /**
- * @brief Generate I2C start condition.
- */
- void CT_IIC_Start(void);
- /**
- * @brief Generate I2C stop condition.
- */
- void CT_IIC_Stop(void);
- /**
- * @brief Send a byte over I2C.
- *
- * @param txd Byte to send.
- */
- void CT_IIC_Send_Byte(uint8_t txd);
- /**
- * @brief Read a byte over I2C.
- *
- * @param ack 1 to send ACK after read, 0 for NACK.
- *
- * @return The received byte.
- */
- uint8_t CT_IIC_Read_Byte(unsigned char ack);
- /**
- * @brief Wait for I2C ACK.
- *
- * @return 0 on success, non-zero on timeout.
- */
- uint8_t CT_IIC_Wait_Ack(void);
- /**
- * @brief Generate I2C ACK.
- */
- void CT_IIC_Ack(void);
- /**
- * @brief Generate I2C NACK.
- */
- void CT_IIC_NAck(void);
- /**
- * @brief Write data to FT5206 register.
- *
- * @param reg Register address.
- * @param buf Pointer to data.
- * @param len Number of bytes to write.
- *
- * @return 0 if success, non-zero otherwise.
- */
- uint8_t FT5206_WR_Reg(uint16_t reg, uint8_t *buf, uint8_t len);
- /**
- * @brief Read data from FT5206 register.
- *
- * @param reg Register address.
- * @param buf Buffer to store data.
- * @param len Number of bytes to read.
- */
- void FT5206_RD_Reg(uint16_t reg, uint8_t *buf, uint8_t len);
- /**
- * @brief Initialize the FT5206 touch controller.
- *
- * @return 0 if successful.
- */
- uint8_t FT5206_Init(void);
- /**
- * @brief Poll the FT5206 for touch input.
- *
- * @param mode Scan mode.
- *
- * @return 1 if touch detected, 0 otherwise.
- */
- uint8_t FT5206_Scan(uint8_t mode);
- /**
- * @brief Wait until touch contact leaves specified area.
- *
- * @param contact Touch point index.
- * @param sx Start X coordinate.
- * @param sy Start Y coordinate.
- * @param ex End X coordinate.
- * @param ey End Y coordinate.
- */
- void letgo_scan(uint16_t contact, uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey);
- #endif
|