Based on PR #408 ff34616 that according to @rcvideoreviews on Discord works.

Added:
* @olliw42 PR #415 STOP condition fix.
* @raphaelcoeffic EXTI_Trigger_Rising
* fixed some uint8_t bool confusions
* added volatile to touchEventOccured that is set from ISR and accessed from main code
* changed to upload GT911 config also if config version is the same
This commit is contained in:
rotorman
2021-07-11 13:04:13 +02:00
committed by Raphael Coeffic
parent 2eef807fba
commit 2c65b21355
3 changed files with 27 additions and 16 deletions
+1 -1
View File
@@ -728,7 +728,7 @@
#define I2C_SCL_GPIO_PinSource GPIO_PinSource8
#define I2C_SDA_GPIO_PinSource GPIO_PinSource9
#endif
#define I2C_SPEED 400000
#define I2C_SPEED 100000
// Haptic
#define HAPTIC_PWM
+25 -14
View File
@@ -230,9 +230,9 @@ const uint8_t TOUCH_GT911_Cfg[] =
0x5A, // 0x8053 Screen touch level
0x3C, // 0x8054 Screen touch leave
0x03, // 0x8055 Low power control
0x05, // 0x8056 Refresh rate
0x00, // 0x8057 X threshold
0x00, // 0x8058 Y threshold
0x0F, // 0x8056 Refresh rate
0x0A, // 0x8057 X threshold
0x0A, // 0x8058 Y threshold
0x00, // 0x8059 Reserved
0x00, // 0x805A Reserved
0x11, // 0x805B Space (top, bottom)
@@ -403,8 +403,8 @@ const uint8_t TOUCH_GT911_Cfg[] =
#endif
uint8_t touchGT911Flag = 0;
uint8_t touchEventOccured = 0;
bool touchGT911Flag = false;
volatile bool touchEventOccured = false;
struct TouchData touchData;
static void TOUCH_AF_ExtiStop(void)
@@ -415,7 +415,7 @@ static void TOUCH_AF_ExtiStop(void)
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_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = DISABLE;
EXTI_Init(&EXTI_InitStructure);
@@ -436,7 +436,7 @@ static void TOUCH_AF_ExtiConfig(void)
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_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
@@ -581,6 +581,11 @@ bool I2C_GT911_ReadRegister(u16 reg, uint8_t * buf, uint8_t len)
if (!I2C_WaitEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED))
return false;
// see GP911 data sheet, chapter 6.1.c, page 12, diagram for reading data
I2C_GenerateSTOP(I2C, ENABLE);
if (!I2C_WaitEventCleared(I2C_FLAG_BUSY))
return false;
I2C_GenerateSTART(I2C, ENABLE);
if (!I2C_WaitEvent(I2C_EVENT_MASTER_MODE_SELECT))
return false;
@@ -607,7 +612,7 @@ bool I2C_GT911_ReadRegister(u16 reg, uint8_t * buf, uint8_t len)
return true;
}
uint8_t I2C_GT911_SendConfig(uint8_t mode)
void I2C_GT911_SendConfig(uint8_t mode)
{
uint8_t buf[2];
uint8_t i = 0;
@@ -619,12 +624,12 @@ uint8_t I2C_GT911_SendConfig(uint8_t mode)
buf[0] = (~buf[0]) + 1;
I2C_GT911_WriteRegister(GT_CFGS_REG, (uint8_t *) TOUCH_GT911_Cfg, sizeof(TOUCH_GT911_Cfg));//
I2C_GT911_WriteRegister(GT_CHECK_REG, buf, 2);//write checksum
return 0;
}
void touchPanelDeInit(void)
{
TOUCH_AF_ExtiStop();
touchGT911Flag = false;
}
bool touchPanelInit(void)
@@ -666,7 +671,7 @@ bool touchPanelInit(void)
I2C_GT911_ReadRegister(GT_CFGS_REG, tmp, 1);
TRACE("Chip config Ver:%x\r\n", tmp[0]);
if (tmp[0] < GT911_CFG_NUMER) //Config ver
if (tmp[0] <= GT911_CFG_NUMER) //Config ver
{
TRACE("Sending new config %d", GT911_CFG_NUMER);
I2C_GT911_SendConfig(1);
@@ -713,12 +718,15 @@ void touchPanelRead()
if (!touchEventOccured)
return;
touchEventOccured = 0;
touchEventOccured = false;
uint32_t startReadStatus = RTOS_GET_MS();
do {
if (!I2C_GT911_ReadRegister(GT911_READ_XY_REG, &state, 1)) {
TRACE("GT911 I2C read error");
ledRed();
TRACE("GT911 I2C read XY error");
touchPanelDeInit();
touchPanelInit();
return;
}
@@ -736,7 +744,10 @@ void touchPanelRead()
if (pointsCount > 0 && pointsCount <= GT911_MAX_TP) {
if (!I2C_GT911_ReadRegister(GT911_READ_XY_REG + 1, touchData.data,
pointsCount * sizeof(TouchPoint))) {
TRACE("GT911 I2C read error");
ledRed();
TRACE("GT911 I2C data read error");
touchPanelDeInit();
touchPanelInit();
return;
}
if (touchState.event == TE_NONE || touchState.event == TE_UP ||
@@ -779,7 +790,7 @@ extern "C" void TOUCH_INT_EXTI_IRQHandler1(void)
// on touch turn the light on
resetBacklightTimeout();
}
touchEventOccured = 1;
touchEventOccured = true;
EXTI_ClearITPendingBit(TOUCH_INT_EXTI_LINE1);
}
}
+1 -1
View File
@@ -22,7 +22,7 @@
#define HAS_TOUCH_PANEL() touchGT911Flag == true
extern uint8_t touchGT911Flag;
extern bool touchGT911Flag;
extern bool touchPanelInit();
void touchPanelRead();