TP test started (untested)

This commit is contained in:
3djc
2020-04-07 09:53:47 +02:00
parent 86e3b26e3b
commit ccbbd413de
7 changed files with 355 additions and 85 deletions
+8 -3
View File
@@ -19,7 +19,7 @@
*/
#include "opentx.h"
#include "ft5x06.h"
#include "tp_gt911.h"
bool menuRadioDiagTouch(event_t event)
{
@@ -28,10 +28,11 @@ bool menuRadioDiagTouch(event_t event)
SIMPLE_SUBMENU(STR_MENU_RADIO_TOUCH, ICON_MODEL_SETUP, 1);
if (event == EVT_ENTRY || event == EVT_ENTRY_UP) {
touchAvailable = touchInit();
touchAvailable = touchPanelInit();
touchEventFlag = 0;
}
else if (menuEvent) {
touchDeInit();
//touchDeInit();
return false;
}
@@ -42,5 +43,9 @@ bool menuRadioDiagTouch(event_t event)
lcdDrawText(LCD_W / 2, LCD_H / 2, STR_TOUCH_NOTFOUND, CENTERED);
}
if (touchEventFlag) {
touchPanelDeInit();
popMenu();
}
return true;
}
+1 -1
View File
@@ -209,7 +209,7 @@ set(TARGET_SRC
)
if(HARDWARE_TOUCH)
set(TARGET_SRC ${TARGET_SRC} ft5x06.cpp)
set(TARGET_SRC ${TARGET_SRC} tp_gt911.cpp)
set(GUI_SRC ${GUI_SRC} radio_diagtouch.cpp)
add_definitions(-DHARDWARE_TOUCH)
endif()
-31
View File
@@ -1,31 +0,0 @@
/*
* 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.
*/
#include "ft5x06.h"
void toucDehInit(void)
{
}
bool touchInit(void)
{
return false;
}
-27
View File
@@ -1,27 +0,0 @@
/*
* 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_
bool touchInit(void);
void touchDeInit(void);
#endif // _FT5X06_H_
+19 -23
View File
@@ -634,11 +634,26 @@
#define AUDIO_MUTE_DELAY 500 // ms
#endif
// Touch
#if defined(HARDWARE_TOUCH)
#define TOUCH_INT_RCC_AHB1Periph RCC_AHB1Periph_GPIOH
#define TOUCH_INT_GPIO GPIOH
#define TOUCH_INT_GPIO_PIN GPIO_Pin_2
#define TOUCH_RST_RCC_AHB1Periph RCC_AHB1Periph_GPIOF
#define TOUCH_RST_GPIO GPIOF
#define TOUCH_RST_GPIO_PIN GPIO_Pin_10
#define TOUCH_INT_EXTI_LINE1 EXTI_Line2
#define TOUCH_INT_EXTI_IRQn1 EXTI2_IRQn
#define TOUCH_INT_EXTI_IRQHandler1 EXTI2_IRQHandler
#define TOUCH_INT_EXTI_PortSource EXTI_PortSourceGPIOH
#define TOUCH_INT_EXTI_PinSource1 EXTI_PinSource2
#define TOUCH_INT_STAUS() (GPIO_ReadInputDataBit(TOUCH_INT_GPIO, TOUCH_INT_GPIO_PIN))
#endif
// I2C Bus
#if defined(RADIO_TX16S)
#define I2C_RCC_AHB1Periph 0
#define I2C_RCC_APB1Periph 0
#else
#define I2C_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
#define I2C_RCC_APB1Periph RCC_APB1Periph_I2C1
#define I2C I2C1
@@ -649,7 +664,6 @@
#define I2C_SCL_GPIO_PinSource GPIO_PinSource8
#define I2C_SDA_GPIO_PinSource GPIO_PinSource9
#define I2C_SPEED 400000
#endif
// Haptic
#define HAPTIC_PWM
@@ -842,24 +856,6 @@
#define TIMER_2MHz_RCC_APB1Periph RCC_APB1Periph_TIM7
#define TIMER_2MHz_TIMER TIM7
// Touch
#if defined(HARDWARE_TOUCH)
#define I2C_TOUCH_RCC_AHB1Periph RCC_AHB1Periph_GPIOB
#define I2C_TOUCH_RCC_APB1Periph RCC_APB1Periph_I2C1
#define I2C_TOUCH I2C1
#define I2C_TOUCH_GPIO GPIOB
#define I2C_TOUCH_SCL_GPIO_PIN GPIO_Pin_8 // PB.08
#define I2C_TOUCH_SDA_GPIO_PIN GPIO_Pin_7 // PB.07
#define I2C_TOUCH_RESET_GPIO GPIOF
#define I2C_TOUCH_RESET_GPIO_PIN GPIO_Pin_10 // PF.10
#define I2C_TOUCH_INT_GPIO GPIOH
#define I2C_TOUCH_INT_GPIO_PIN GPIO_Pin_2 // PH.02
#else
#define I2C_TOUCH_RCC_AHB1Periph 0
#define I2C_TOUCH_RCC_APB1Periph 0
#endif
// Bluetooth
#define STORAGE_BLUETOOTH
#if defined(BLUETOOTH)
+201
View File
@@ -0,0 +1,201 @@
/*
* 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.
*/
#include "tp_gt911.h"
uint8_t touchGT911Flag = 0;
uint8_t TOUCH_SCAN_MODE = 0;
uint8_t touchEventFlag = 0;
void GT911_INT_Change(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = TOUCH_INT_GPIO_PIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_Init(TOUCH_INT_GPIO, &GPIO_InitStructure);
}
uint8_t GT911_Send_Cfg(uint8_t mode)
{
u8 buf[2];
u8 i = 0;
buf[0] = 0;
buf[1] = mode; //
for (i = 0; i < sizeof(GT911_Cfg); i++)
buf[0] += GT911_Cfg[i];//check sum
buf[0] = (~buf[0]) + 1;
GT911_WR_Reg(GT_CFGS_REG, (u8 *) GT911_Cfg, sizeof(GT911_Cfg));//
GT911_WR_Reg(GT_CHECK_REG, buf, 2);//write checksum
return 0;
}
static void IIC_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//I2C_InitTypeDef I2C_InitStructure;
/* GPIO Peripheral clock enable */
RCC_AHB1PeriphClockCmd(I2C_RCC_AHB1Periph, ENABLE);
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
//PB6: I2C1_SCL PB7: I2C1_SDA
GPIO_InitStructure.GPIO_Pin = I2C_SCL_GPIO_PIN | I2C_SDA_GPIO_PIN;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(I2C_GPIO, &GPIO_InitStructure);
GPIO_SetBits(I2C_GPIO, I2C_SCL_GPIO_PIN | I2C_SDA_GPIO_PIN);
}
static void TOUCH_AF_ExtiStop(void)
{
SYSCFG_EXTILineConfig(TOUCH_INT_EXTI_PortSource, TOUCH_INT_EXTI_PinSource1);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_StructInit(&EXTI_InitStructure);
EXTI_InitStructure.EXTI_Line = TOUCH_INT_EXTI_LINE1;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
EXTI_InitStructure.EXTI_LineCmd = DISABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TOUCH_INT_EXTI_IRQn1;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 9;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /* Not used as 4 bits are used for the pre-emption priority. */;
NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
NVIC_Init(&NVIC_InitStructure);
}
static void TOUCH_AF_ExtiConfig(void)
{
SYSCFG_EXTILineConfig(TOUCH_INT_EXTI_PortSource, TOUCH_INT_EXTI_PinSource1);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_StructInit(&EXTI_InitStructure);
EXTI_InitStructure.EXTI_Line = TOUCH_INT_EXTI_LINE1;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TOUCH_INT_EXTI_IRQn1;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 9;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /* Not used as 4 bits are used for the pre-emption priority. */;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
static void TOUCH_AF_GPIOConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = TOUCH_RST_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(TOUCH_RST_GPIO, &GPIO_InitStructure);
GPIO_ResetBits(TOUCH_RST_GPIO, TOUCH_RST_GPIO_PIN);
GPIO_InitStructure.GPIO_Pin = TOUCH_INT_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(TOUCH_INT_GPIO, &GPIO_InitStructure);
GPIO_ResetBits(TOUCH_INT_GPIO, TOUCH_INT_GPIO_PIN);
}
void touchPanelDeInit(void)
{
TOUCH_AF_ExtiStop();
}
bool touchPanelInit(void)
{
uint8_t tmp[4] = {0};
TRACE("Touchpanel init start ...");
TOUCH_AF_GPIOConfig(); //SET RST=OUT INT=OUT INT=LOW
IIC_Config();
TPRST_LOW();
TPINT_HIGH();
delay_us(200); //DELAY 200US
TPRST_HIGH();
delay_ms(6); //DELAY 6MS
TPINT_LOW();
delay_ms(55); //DELAY 55MS
GT911_INT_Change(); //Set INT INPUT INT=LOW
delay_ms(50); //DELAY 55MS
GT911_RD_Reg(GT_PID_REG, tmp, 4);
if (strcmp((char *) tmp, "911") == 0)//ID==9147
{
tmp[0] = 0X02;
GT911_WR_Reg(GT_CTRL_REG, tmp, 1);//
GT911_RD_Reg(GT_CFGS_REG, tmp, 1);//
if (tmp[0] < 0X69)//ver
{
//printf("Default Ver:%x\r\n",temp[0]);
GT911_Send_Cfg(1); //
}
delay_ms(10);
tmp[0] = 0X00;
GT911_WR_Reg(GT_CTRL_REG, tmp, 1);//end reset
touchGT911Flag = true;
TOUCH_AF_ExtiConfig();
return true;
}
return false;
}
extern "C" void TOUCH_INT_EXTI_IRQHandler1(void)
{
if (EXTI_GetITStatus(TOUCH_INT_EXTI_LINE1) != RESET) {
TRACE("TOUCH INTERUPT");
touchEventFlag = 1;
EXTI_ClearITPendingBit(TOUCH_INT_EXTI_LINE1);
}
}
+126
View File
@@ -0,0 +1,126 @@
/*
* 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"
#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 touchEventFlag;
uint8_t GT911_WR_Reg(uint16_t reg, uint8_t * buf, uint8_t len);
void GT911_RD_Reg(uint16_t reg, uint8_t * buf, uint8_t len);
//GT911 param table
const uint8_t GT911_Cfg[]= //
{
0x69, //ver 0x68
0xE0,0x01, //x 480 480X272
0x10,0x01, //y 272
0x05, //pass max count
0x38, //bit4= xy change Int mode
0x00,
0x02, //press ct
0x48,
0x28,0x0D,0x50,0x32,0x03,0x05,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x18,0x1A,0x1E,0x14,0x8A,0x2A,0x0C,
0x30,0x38,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
typedef struct{
uint16_t x;
uint16_t y;
}POINT;
typedef struct{
uint16_t cnt;
POINT points[5];
}GT911_POINT_DATA;
#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 IIC_SCL_L() do { I2C_GPIO->BSRRH = I2C_SCL_GPIO_PIN; } while(0)
#define IIC_SCL_H() do { I2C_GPIO->BSRRL = I2C_SCL_GPIO_PIN; } while(0)
#define IIC_SDA_L() do { I2C_GPIO->BSRRH = I2C_SDA_GPIO_PIN; } while(0)
#define IIC_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_