bl_mcu_sdk/bsp/common/touch/gt911_i2c.h
jzlv 356f258e83 [sync] sync from internal repo
* use nuttx libc, disable system libc
* use tlsf as default
* update lhal flash driver
* add example readme
* add flash ini for new flash tool
* add fw header for new flash tool
2023-01-17 21:04:07 +08:00

255 lines
12 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file gt911_i2c.h
* @brief
*
* Copyright (c) 2022 Bouffalolab team
*
* 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.
*
*/
#ifndef _GT911_I2C_H
#define _GT911_I2C_H
#include "bflb_core.h"
#include "touch.h"
#define GT911_CUSTOM_CFG (1)
#define GT911_I2C_SLAVE_ADDR (0xBA >> 1) // #define GT911_ADDR (0xBA) //(0x28) /* slave addr */
#define GT911_READ_XY_REG (0x4E81) //(0x814E) /* 坐标寄存器 */
#define GT911_CLEARBUF_REG (0x4E81) //(0x814E) /* 清除坐标寄存器 */
#define GT911_POINT1_REG (0x4F81) //(0x814f) /* point 1 reg */
#define GT911_POINT2_REG (0x5781) //(0x8157) /* point 2 reg */
#define GT911_POINT3_REG (0x5F81) //(0x815f) /* point 3 reg */
#define GT911_POINT4_REG (0x6781) //(0x8167) /* point 4 reg */
#define GT911_POINT5_REG (0x6F81) //(0x816f) /* point 5 reg */
#define GT911_CONFIG_REG (0x4780) //(0x8047) /* 配置参数寄存器 */
#define GT911_COMMAND_REG (0x4080) //(0x8040) /* 实时命令 */
#define GT911_PRODUCT_ID_REG (0x4081) //(0x8140) /* 芯片ID */
#define GT911_VENDOR_ID_REG (0x4A81) //(0x814A) /* 当前模组选项信息 */
#define GT911_CONFIG_VERSION_REG (0x4780) //(0x8047) /* 配置文件版本号 */
#define GT911_CONFIG_CHECKSUM_REG (0xFF80) //(0x80FF) /* 配置文件校验码 */
#define GT911_FIRMWARE_VERSION_REG (0x4481) //(0x8144) /* 固件版本号 */
#define GT911_X_RESOLUTION (0x4681) //(0x8146) /* x 坐标分辨率 */
#define GT911_Y_RESOLUTION (0x4881) //(0x8148) /* y 坐标分辨率 */
#define GT911_PRODUCT_ID (0x00313139)
/* Maximum border values of the touchscreen pad that the chip can handle */
#if GT911_CUSTOM_CFG
#define GT911_MAX_WIDTH ((uint16_t)320)
#define GT911_MAX_HEIGHT ((uint16_t)480)
#define GT911_INT_TRIGGER (0)
#else
#define GT911_MAX_WIDTH ((uint16_t)4096)
#define GT911_MAX_HEIGHT ((uint16_t)4096)
#define GT911_INT_TRIGGER (1)
#endif
/* Max detectable simultaneous touch points */
#define GT911_I2C_MAX_POINT 5
/* GT911 配置参数,一次性写入 */
static const uint8_t g_gt911_cfg_params[] = {
#if 1
/*KDC CFG*/
0x00, 0x40, 0x01, 0xE0, 0x01, 0x0A, 0x05, 0x00,
0x01, 0x08, 0x28, 0x05, 0x50, 0x32, 0x03, 0x05,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x86, 0x26, 0x07, 0x17, 0x15,
0x31, 0x0D, 0x00, 0x00, 0x01, 0xBA, 0x03, 0x1D,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x64, 0x32,
0x00, 0x00, 0x00, 0x0F, 0x4B, 0x94, 0xC5, 0x02,
0x07, 0x00, 0x00, 0x04, 0x9B, 0x11, 0x00, 0x72,
0x18, 0x00, 0x57, 0x21, 0x00, 0x42, 0x2E, 0x00,
0x35, 0x40, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x12, 0x10, 0x0E, 0x0C, 0x0A, 0x08, 0x06, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x21,
0x20, 0x1F, 0x1E, 0x1D, 0x00, 0x02, 0x04, 0x06,
0x08, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xDC, 0x01
#else
0x00, //0x8047 版本号 发送 0x00 初始化为 A
0x40, 0x01, //0x8048/8049 X坐标输出最大值 320
0xE0, 0x01, //0x804a/804b Y坐标输出最大值 480
0x0A, //0x804c 输出触点个数上限
0x05, //0x804d x2y 坐标交换,软件降噪,下降沿触发
0x00, //0x804e reserved
0x01, //0x804f 手指按下去抖动次数
0x08, //0x8050 原始坐标窗口滤波值
0x28, //0x8051 大面积触点个数
0x05, //0x8052 噪声消除值
0x50, //0x8053 屏上触摸点从无到有的阈值
0x32, //0x8054 屏上触摸点从有到无的阈值
0x03, //0x8055 进低功耗时间 s
0x05, //0x8056 坐标上报率
0x00, //0x8057 X坐标输出门上限
0x00, //0x8058 Y坐标输出门上限
0x00, 0X00, //0x8059-0x805a reserved
0x00, //0x805b reserved
0x00, //0x805c reserved
0x00, //0x805d 划线过程中小filter设置
0x00, //0x805e 拉伸区间 1 系数
0x00, //0x805f 拉伸区间 2 系数
0x00, //0x8060 拉伸区间 3 系数
0x00, //0x8061 各拉伸区间基数
0x00, //0x8062 Driver Group A number
0x00, //0x8063 Driver Group B number
0x00, //0x8064 Sensor Group B | A number
0x00, //0x8065 驱动组A的驱动频率倍频系数
0x00, //0x8066 驱动组B的驱动频率倍频系数
0x00, //0x8067 驱动组A、B的基频
0x04, //0x8068
0x00, //0x8069 相邻两次驱动信号输出时间间隔
0x00, //0x806a
0x00, //0x806b 、、
0x02, //0x806c 、、
0x03, //0x806d 原始值放大系数
0x1D, //0x806e 、、
0x00, //0x806f reserved
0x01, //0x8070 、、
0x00, 0x00, //reserved
0x00, //0x8073 、、
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x8071 - 0x8079 reserved
0x50, //0x807a 跳频范围的起点频率
0xA0, //0x807b 跳频范围的终点频率
0x94, //0x807c 多次噪声检测后确定噪声量1-63有效
0xD5, //0x807d 噪声检测超时时间
0x02, //0x807e 、、
0x07, //0x807f 判别有干扰的门限
0x00, 0x00, //0x8081 reserved
0x04, //0x8082 跳频检测区间频段1中心点基频适用于驱动A、B
0xA4, //0x8083
0x55, //0x8084 跳频检测区间频段1中心点倍频系数
0x00, //0x8085 跳频检测区间频段2中心点基频(驱动A、B在此基础上换算)
0x91, //0x8086
0x62, //0x8087 跳频检测区间频段2中心点倍频系数
0x00, //0x8088 跳频检测区间频段3中心点基频适用于驱动A、B
0x80, //0x8089
0x71, //0x808a 跳频检测区间频段3中心点倍频系数
0x00, //0x808b 跳频检测区间频段4中心点基频适用于驱动A、B
0x71, //0x808c
0x82, //0x808d 跳频检测区间频段4中心点倍频系数
0x00, //0x808e 跳频检测区间频段5中心点基频适用于驱动A、B
0x65, //0x808f
0x95, //0x8090 跳频检测区间频段5中心点倍频系数
0x00, 0x65, //reserved
0x00, //0x8093 key1位置 0无按键
0x00, //0x8094 key2位置 0无按键
0x00, //0x8095 key3位置 0无按键
0x00, //0x8096 key4位置 0无按键
0x00, //0x8097 reserved
0x00, //0x8098 reserved
0x00, //0x8099 reserved
0x00, //0x809a reserved
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x809b-0x80b2 reserved
0x00, //0x80b3 合框距离
0x00, //0x80b4
0x00, 0x00, //0x80b6 reserved
0x06, //0x80b7
0x08, //0x80b8
0x0A, //0x80b9
0x0C, //0x80ba
0x0E, //0x80bb
0x10, //0x80bc
0x12, //0x80bd
0x14, //0x80be
0x16, //0x80bf
0x18, //0x80c0
0x1A, //0x80c1
0x1C, //0x80c2
0xFF, //0x80c3
0xFF, //0x80c4
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x80c5-0x80d4 reserved
0x00, //0x80d5
0x02, //0x80d6
0x04, //0x80d7
0x06, //0x80d8
0x08, //0x80d9
0x0A, //0x80da
0x0C, //0x80db
0x0F, //0x80dc
0x10, //0x80dd
0x12, //0x80de
0x13, //0x80df
0x14, //0x80e0
0x16, //0x80e1
0x18, //0x80e2
0x1C, //0x80e3
0x1D, //0x80e4
0x1E, //0x80e5
0x1F, //0x80e6
0x20, //0x80e7
0x21, //0x80e8
0xFF, //0x80e9
0xFF, //0x80ea
0xFF, //0x80eb
0xFF, //0x80ec
0xFF, //0x80ed
0xFF, //0x80ee
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x80ef-0x80fe reserved
0x0B, //0x80ff 配置信息校验
0x01 //0x8100 配置以更新标记
#endif
};
typedef struct
{
uint8_t touch_point_flag;
uint8_t touch_key_sts;
uint16_t x0;
uint16_t y0;
uint16_t p0;
uint16_t x1;
uint16_t y1;
uint16_t p1;
uint16_t x2;
uint16_t y2;
uint16_t p2;
uint16_t x3;
uint16_t y3;
uint16_t p3;
uint16_t x4;
uint16_t y4;
uint16_t p4;
} gt911_point_t;
int gt911_i2c_init(touch_coord_t *max_value);
int gt911_i2c_get_gesture_id();
int gt911_i2c_read(uint8_t *point_num, touch_coord_t *touch_coord, uint8_t max_num);
#endif /* __gt911_H */