Files
edgetx-gx12/radio/src/targets/horus/tp_gt911.h
T
2020-04-25 14:59:51 +02:00

160 lines
5.3 KiB
C

/*
* Copyright (C) OpenTX
*
* Based on code named
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef _FT5X06_H_
#define _FT5X06_H_
#include "opentx.h"
#include "touch.h"
#define HAS_TOUCH_PANEL() touchGT911Flag == true
#define TOUCH_INT_STATUS() (GPIO_ReadInputDataBit(TOUCH_INT_GPIO, TOUCH_INT_GPIO_PIN))
bool touchPanelInit();
void touchPanelDeInit();
extern uint8_t touchGT911Flag;
extern uint8_t TOUCH_SCAN_MODE;
extern uint8_t touchPanelEvent;
uint8_t gt911WriteRegister(uint16_t reg, uint8_t * buf, uint8_t len);
void gt911ReadRegister(uint16_t reg, uint8_t * buf, uint8_t len);
void touchPanelRead();
//GT911 param table
const uint8_t GT911_Cfg[]= //
{
0x69, // ver 0x68
0xE0,0x01, // 0x8049 X output map : x 480
0x10,0x01, // 0x8040 Y ouptut max : y 272
0x05, // 0x804C Touch number : GT911_MAX_TOUCH_POINTS
0x38, // 0x804D Module switch 1 : bit4= xy change Int mode
0x00, // 0x804E Module switch 2
0x02, // 0x804F Shake_Count
0x48, // 0x8050 Filter
0x28, // 0x8051 Larger touch
0x0D, // 0x8052 Noise reduction
0x50, // 0x8053 Screen touch level
0x32, // 0x8054 Screen touch leave
0x03, // 0x8055 Low power control
0x05, // 0x8056 Refresh rate
0x00, // 0x8057 X threshold
0x00, // 0x8058 Y threshold
0x00, // 0x8059 Reserved
0x00, // 0x805A Reserved
0x00, // 0x805B Space (top, bottom)
0x00, // 0x805B Space (left, right)
0x00, // 0x805D Mini filter
0x18, // 0x805E Strech R0
0x1A, // 0x805F Strech R1
0x1E, // 0x8060 Strech R2
0x14, // 0x8061 Strech RM
0x8A, // 0x8062 Drv groupA num
0x2A, // 0x8063 Drv groupB num
0x0C, // 0x8064 Sensor num
0x30, // 0x8065 FreqA factor
0x38, // 0x8065 FreqB factor
0x31,0x0D,0x00,0x00,0x02,0xB9,0x03,0x2D,
0x00,0x00,0x00,0x00,0x00,0x03,0x64,0x32,0x00,0x00,
0x00,0x1D,0x41,0x94,0xC5,0x02,0x07,0x00,0x00,0x04,
0xA5,0x1F,0x00,0x94,0x25,0x00,0x88,0x2B,0x00,0x7D,
0x33,0x00,0x74,0x3C,0x00,0x74,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,0x18,0x16,0x14,0x12,0x10,0x0E,0x0C,0x0A,
0x08,0x06,0x04,0x02,0xFF,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x24,0x22,0x21,0x20,0x1F,0x1E,0x1D,0x1C,
0x18,0x16,0x13,0x12,0x10,0x0F,0x0A,0x08,0x06,0x04,
0x02,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
};
//I2C
#define GT_CMD_WR 0X28 //write
#define GT_CMD_RD 0X29 //read
#define SLAVE_Write_Address 0X28
//GT9147
#define GT_CTRL_REG 0X8040
#define GT_CFGS_REG 0X8047
#define GT_CHECK_REG 0X80FF
#define GT_PID_REG 0X8140 //ID
#define GT_GSTID_REG 0X814E //
#define GT_TP1_REG 0X8150 //
#define GT_TP2_REG 0X8158 //
#define GT_TP3_REG 0X8160 //
#define GT_TP4_REG 0X8168 //
#define GT_TP5_REG 0X8170 //
#define GT911_READ_XY_REG 0x814E
#define GT911_CLEARBUF_REG 0x814E
#define GT911_CONFIG_REG 0x8047
#define GT911_COMMAND_REG 0x8040
#define GT911_PRODUCT_ID_REG 0x8140
#define GT911_VENDOR_ID_REG 0x814A
#define GT911_CONFIG_VERSION_REG 0x8047
#define GT911_CONFIG_CHECKSUM_REG 0x80FF
#define GT911_FIRMWARE_VERSION_REG 0x8144
#define GT911_MAX_TOUCH_POINTS 5
PACK(typedef struct
{
uint8_t track;
uint16_t x;
uint16_t y;
uint16_t size;
uint8_t reserved;
}) TouchPoint;
PACK(struct TouchData
{
uint8_t pointsCount;
union
{
TouchPoint points[GT911_MAX_TOUCH_POINTS];
uint8_t data[GT911_MAX_TOUCH_POINTS * sizeof(TouchPoint)];
};
});
extern struct TouchData touchData;
#define TPRST_LOW() do { TOUCH_RST_GPIO->BSRRH = TOUCH_RST_GPIO_PIN; } while(0)
#define TPRST_HIGH() do { TOUCH_RST_GPIO->BSRRL = TOUCH_RST_GPIO_PIN; } while(0)
#define TPINT_LOW() do { TOUCH_INT_GPIO->BSRRH = TOUCH_INT_GPIO_PIN; } while(0)
#define TPINT_HIGH() do { TOUCH_INT_GPIO->BSRRL = TOUCH_INT_GPIO_PIN; } while(0)
#define I2C_SCL_L() do { I2C_GPIO->BSRRH = I2C_SCL_GPIO_PIN; } while(0)
#define I2C_SCL_H() do { I2C_GPIO->BSRRL = I2C_SCL_GPIO_PIN; } while(0)
#define I2C_SDA_L() do { I2C_GPIO->BSRRH = I2C_SDA_GPIO_PIN; } while(0)
#define I2C_SDA_H() do { I2C_GPIO->BSRRL = I2C_SDA_GPIO_PIN; } while(0)
#define READ_SDA GPIO_ReadInputDataBit(I2C_GPIO, I2C_SDA_GPIO_PIN)
#endif // _FT5X06_H_