mcu_hi3321_watch/tjd/driver/tp/ft6146/tp_drv_ft6146.h
2025-05-26 20:15:20 +08:00

138 lines
3.5 KiB
C

/*----------------------------------------------------------------------------
* Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved.
*
* Description: ft6146_touch1.h
*
* Author: luziquan@ss-tjd.com
*
* Create: 2024-04-18
*--------------------------------------------------------------------------*/
#ifndef TP_DRV_FT6146_H
#define TP_DRV_FT6146_H
#include "soc_osal.h"
#include "touch_screen_def.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif
/* ft6146 definitions */
#define TP_FIRMWARE_VERSION 0xA6 /* 版本 */
#define TP_FIRMWARE_VERSION_LEN 2
#define FT6146_DEVICE_MODE 0X00 /* 模式控制寄存器 */
#define FT6146_STATUS 0x02 /* 触摸状态寄存器 */
#define FT6146_TP_REG_X1 0x03 /* 第一个触摸点数据地址 */
#define FT6146_INTC_MODE 0xA4 /* 中断模式控制寄存器 */
#define FT6146_THGROUP 0x80 /* 触摸有效值设置寄存器 */
#define FT6146_PERIODACTIVE 0x88 /* 激活状态周期设置寄存器 */
#define FT6146_POWER_MODE 0xA5 /* 电源管理设置 */
#define FT6146_ESD_CHECK 0x91 /* ESD检测设置 */
#define FT6146_REG_LEN 1
#define TP_DATA_LEN 1
#define TP_CHIP_ID 0x6456
#define TP_CHIP_ID_HIGH 0xA3 /* 芯片ID */
#define TP_CHIP_ID_LOW 0x9F /* 芯片ID */
#define TP_CHIP_ID_LEN 2
#define TP_RAWDATA 0x80 /* 触摸检测阈值 */
#define FT6146_POINT1_INDEX 0
#define FT6146_MAX_SUPPORTED_FINGER_NUM 1
#define FT6146_POINTINFO_LEN 4
#define FT6146_TOUCHINFO_LEN (FT6146_POINTINFO_LEN * FT6146_MAX_SUPPORTED_FINGER_NUM)
/* max wait time */
#define FT6146_OPERATER_MUTEX_WAIT_TIME 3000 /* operater tp mutex timeout ms */
#define TP_POWERON_DELAY 100
#define TP_POWEROFF_DELAY 100
#define TP_RESETHIGH_DELAY 20
#define TP_RESETLOW_DELAY 100
#define TP_RESET_DELAY 300
#define TP_INIT_RETRY_TIMERS 3
#define FT6146_REGDATA_SHIFT 8
#define FT6146_GENERAL_DELAY_5 5
#define FT6146_GENERAL_DELAY_10 10
#define FT6146_GENERAL_RETRY_4 4
#define FT6146_EVENT_OFFSET 0
#define FT6146_XH_OFFSET 0
#define FT6146_XL_OFFSET 1
#define FT6146_YH_OFFSET 2
#define FT6146_YL_OFFSET 3
/* define gesture macro */
#define FT6146_GESTURE_WAKEUP 0
/* host peripheral typedef */
// typedef ext_errno (*tp_irq_callback)(void);
/* FT6146 driver typedef */
enum FT6146_POWER_MODE_ENUM {
WORK_MODE = 0X00,
MONITOR_MODE = 0X01,
SLEEP_MODE = 0X03
};
typedef enum {
PRESS_DOWN = 0x00,
LIFT_UP = 0x40,
CONTACT = 0x80,
NO_EVENT = 0xC0,
} ft6146_event_status;
typedef enum {
FT6146_NOT_READY = 0,
FT6146_READY,
} ft6146_device_status;
typedef enum {
FT6146_GESTURE_NONE = 0,
FT6146_GESTURE_SIGNAL_CLICK = 1,
FT6146_GESTURE_DOUBLE_CLICK = 2,
FT6146_GESTURE_SLIDE_UP = 4,
FT6146_GESTURE_SLIDE_DOWN = 5,
} ft6146_gesture_event;
typedef struct {
uint16_t chip_id;
uint16_t firmware_version;
osal_mutex ops_mux;
bool fw_upgrade_flag;
bool gesture_wakeup;
uint8_t work_status;
ft6146_device_status chip_status;
input_event_info touch_msg;
uint32_t tp_event;
} ft6146_drv_data;
ext_errno ft6146_irq_callback(uint8_t *data_buf, uint8_t data_len);
ext_errno ft6146_init(void);
ext_errno ft6146_deinit(void);
ext_errno ft6146_resume(void);
ext_errno ft6146_suspend(void);
ext_errno ft6146_sleep(void);
ext_errno ft6146_set_power_mode(uint8_t power_mode);
ext_errno ft6146_get_rawdata(uint8_t *ret_buf);
ext_errno ft6146_get_chip_id(uint16_t *ret_buf);
ext_errno ft6146_get_version(uint16_t *ret_buf);
int fts_fwupg_auto_upgrade(void);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif