touch example added
This commit is contained in:
parent
7407d78d09
commit
800bc41e0e
|
@ -0,0 +1,85 @@
|
||||||
|
/*
|
||||||
|
Touch example for STM32F476 Discvery
|
||||||
|
|
||||||
|
June 2017, ChrisMicro
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Wire.h>
|
||||||
|
#include "stm32_ub_touch_480x272.h"
|
||||||
|
#include "LTDC_F746_Discovery.h"
|
||||||
|
|
||||||
|
LTDC_F746_Discovery tft;
|
||||||
|
|
||||||
|
uint8_t UB_I2C3_ReadByte(uint8_t addressI2cDevice, uint8_t registerId)
|
||||||
|
{
|
||||||
|
uint8_t result;
|
||||||
|
addressI2cDevice = addressI2cDevice >> 1;
|
||||||
|
|
||||||
|
Wire.beginTransmission( addressI2cDevice );
|
||||||
|
Wire.write( registerId );
|
||||||
|
uint8_t error;
|
||||||
|
error = Wire.endTransmission();
|
||||||
|
|
||||||
|
Wire.requestFrom( addressI2cDevice, (uint8_t) 1 , (uint8_t) true );
|
||||||
|
|
||||||
|
while ( Wire.available() < 1 );
|
||||||
|
|
||||||
|
result = Wire.read() ;
|
||||||
|
|
||||||
|
if (error)Serial.println("I2C error");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
Wire.stm32SetInstance(I2C3);
|
||||||
|
Wire.stm32SetSDA(PH8);
|
||||||
|
Wire.stm32SetSCL(PH7);
|
||||||
|
|
||||||
|
Wire.begin();
|
||||||
|
|
||||||
|
UB_Touch_Init();
|
||||||
|
|
||||||
|
// The buffer is memory mapped
|
||||||
|
// You can directly draw on the display by writing to the buffer
|
||||||
|
uint16_t *buffer = (uint16_t *)malloc(LTDC_F746_ROKOTECH.width * LTDC_F746_ROKOTECH.height);
|
||||||
|
|
||||||
|
tft.begin((uint16_t *)buffer);
|
||||||
|
tft.fillScreen(LTDC_BLACK);
|
||||||
|
//tft.setRotation(0);
|
||||||
|
tft.setCursor(0, 0);
|
||||||
|
tft.setTextColor(LTDC_GREEN); tft.setTextSize(3);
|
||||||
|
tft.println("STM32F746 Discovery");
|
||||||
|
delay(3000);
|
||||||
|
tft.setTextColor(LTDC_YELLOW); tft.setTextSize(2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
if (UB_Touch_Read() == SUCCESS)
|
||||||
|
{
|
||||||
|
tft.setCursor(0, 0);
|
||||||
|
|
||||||
|
tft.print(Touch_Data.xp); tft.print(" , "); tft.print(Touch_Data.yp);
|
||||||
|
tft.print(" contacts: "); tft.println( P_Touch_GetContacts() );
|
||||||
|
|
||||||
|
if( P_Touch_GetContacts() )
|
||||||
|
{
|
||||||
|
tft.setCursor(Touch_Data.xp, Touch_Data.yp);
|
||||||
|
tft.print("touched");
|
||||||
|
}
|
||||||
|
|
||||||
|
//delay(100);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
tft.print(".");
|
||||||
|
delay(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
delay(100);
|
||||||
|
tft.fillScreen(LTDC_BLACK);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,263 @@
|
||||||
|
// driver found at
|
||||||
|
// http://mikrocontroller.bplaced.net/wordpress/?page_id=5329
|
||||||
|
// datasheet:
|
||||||
|
// https://www.newhavendisplay.com/appnotes/datasheets/touchpanel/FT5336.pdf
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// File : stm32_ub_touch_480x272.c
|
||||||
|
// Datum : 15.07.2015
|
||||||
|
// Version : 1.1
|
||||||
|
// Autor : UB
|
||||||
|
// EMail : mc-4u(@)t-online.de
|
||||||
|
// Web : www.mikrocontroller-4u.de
|
||||||
|
// CPU : STM32F746
|
||||||
|
// IDE : OpenSTM32
|
||||||
|
// GCC : 4.9 2015q2
|
||||||
|
// Module : CubeHAL, STM32_UB_I2C3
|
||||||
|
// Funktion : Touch-Funktionen
|
||||||
|
// Touch-Controller (Chip = FT5336GQQ)
|
||||||
|
//
|
||||||
|
// Hinweis : Settings :
|
||||||
|
// I2C-Slave-ADR = [0x70]
|
||||||
|
// FRQ-Max = 400 kHz
|
||||||
|
// I2C-3 [SCL=PH7, SDA=PH8]
|
||||||
|
// Interrupt-Pin = PI13 (wird nicht benutzt)
|
||||||
|
//
|
||||||
|
// im H-File einstellen ob Single- oder Multitouch
|
||||||
|
// benutzt werden soll
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Includes
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#include "stm32_ub_touch_480x272.h"
|
||||||
|
//#include "stm32_ub_i2c3.h"
|
||||||
|
|
||||||
|
MultiTouch_Data_t MultiTouch_Data;
|
||||||
|
Touch_Data_t Touch_Data;
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// interne Funktionen
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
uint8_t P_Touch_ReadID(void);
|
||||||
|
uint8_t P_Touch_GetContacts(void);
|
||||||
|
uint8_t P_Touch_GetPositions(void);
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
uint8_t FT5336_TOUCH_REG[5][4]; // fuer Register Adressen
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Init vom Touch
|
||||||
|
// Return_wert :
|
||||||
|
// -> ERROR , wenn Touch nicht gefunden wurde
|
||||||
|
// -> SUCCESS , wenn Touch OK
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
ErrorStatus UB_Touch_Init(void)
|
||||||
|
{
|
||||||
|
uint8_t touch_id=0,n;
|
||||||
|
|
||||||
|
Touch_Data.status=TOUCH_RELEASED;
|
||||||
|
Touch_Data.xp=0;
|
||||||
|
Touch_Data.yp=0;
|
||||||
|
|
||||||
|
MultiTouch_Data.cnt=0;
|
||||||
|
for(n=0;n<TOUCH_MAX_CONTACT;n++) {
|
||||||
|
MultiTouch_Data.p[n].xp=0;
|
||||||
|
MultiTouch_Data.p[n].yp=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// init der Touch Register Adressen
|
||||||
|
FT5336_TOUCH_REG[0][0]=FT5336_P1_XL_REG;
|
||||||
|
FT5336_TOUCH_REG[0][1]=FT5336_P1_XH_REG;
|
||||||
|
FT5336_TOUCH_REG[0][2]=FT5336_P1_YL_REG;
|
||||||
|
FT5336_TOUCH_REG[0][3]=FT5336_P1_YH_REG;
|
||||||
|
|
||||||
|
FT5336_TOUCH_REG[1][0]=FT5336_P2_XL_REG;
|
||||||
|
FT5336_TOUCH_REG[1][1]=FT5336_P2_XH_REG;
|
||||||
|
FT5336_TOUCH_REG[1][2]=FT5336_P2_YL_REG;
|
||||||
|
FT5336_TOUCH_REG[1][3]=FT5336_P2_YH_REG;
|
||||||
|
|
||||||
|
FT5336_TOUCH_REG[2][0]=FT5336_P3_XL_REG;
|
||||||
|
FT5336_TOUCH_REG[2][1]=FT5336_P3_XH_REG;
|
||||||
|
FT5336_TOUCH_REG[2][2]=FT5336_P3_YL_REG;
|
||||||
|
FT5336_TOUCH_REG[2][3]=FT5336_P3_YH_REG;
|
||||||
|
|
||||||
|
FT5336_TOUCH_REG[3][0]=FT5336_P4_XL_REG;
|
||||||
|
FT5336_TOUCH_REG[3][1]=FT5336_P4_XH_REG;
|
||||||
|
FT5336_TOUCH_REG[3][2]=FT5336_P4_YL_REG;
|
||||||
|
FT5336_TOUCH_REG[3][3]=FT5336_P4_YH_REG;
|
||||||
|
|
||||||
|
FT5336_TOUCH_REG[4][0]=FT5336_P5_XL_REG;
|
||||||
|
FT5336_TOUCH_REG[4][1]=FT5336_P5_XH_REG;
|
||||||
|
FT5336_TOUCH_REG[4][2]=FT5336_P5_YL_REG;
|
||||||
|
FT5336_TOUCH_REG[4][3]=FT5336_P5_YH_REG;
|
||||||
|
|
||||||
|
// init vom I2C
|
||||||
|
// UB_I2C3_Init();
|
||||||
|
|
||||||
|
// kleine Pause
|
||||||
|
HAL_Delay(TOUCH_INIT_DELAY);
|
||||||
|
|
||||||
|
touch_id=P_Touch_ReadID();
|
||||||
|
if(touch_id!=FT5336_ID) return ERROR;
|
||||||
|
|
||||||
|
return(SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// auslesen vom Touch-Status und der Touch-Koordinaten
|
||||||
|
//
|
||||||
|
// es kann entweder der Single-Touch "Touch_Data"
|
||||||
|
// oder der Multi-Touch "MultiTouch_Data" benutzt werden
|
||||||
|
//
|
||||||
|
// Return_wert :
|
||||||
|
// -> ERROR , wenn Touch nicht gefunden wurde
|
||||||
|
// -> SUCCESS , wenn Touch OK
|
||||||
|
//
|
||||||
|
// Touch_Data.status : [TOUCH_PRESSED, TOUCH_RELEASED]
|
||||||
|
// Touch_Data.xp : [0...479]
|
||||||
|
// Touch_Data.yp : [0...271]
|
||||||
|
//
|
||||||
|
// MultiTouch_Data.cnt : [0...5]
|
||||||
|
// MultiTouch_Data.p[0..4].xp : [0...479]
|
||||||
|
// MultiTouch_Data.p[0..4].yp : [0...271]
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
ErrorStatus UB_Touch_Read(void)
|
||||||
|
{
|
||||||
|
uint8_t check,n;
|
||||||
|
|
||||||
|
// init
|
||||||
|
Touch_Data.status=TOUCH_RELEASED;
|
||||||
|
Touch_Data.xp=0;
|
||||||
|
Touch_Data.yp=0;
|
||||||
|
|
||||||
|
MultiTouch_Data.cnt=0;
|
||||||
|
for(n=0;n<TOUCH_MAX_CONTACT;n++) {
|
||||||
|
MultiTouch_Data.p[n].xp=0;
|
||||||
|
MultiTouch_Data.p[n].yp=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
check=P_Touch_GetContacts();
|
||||||
|
if(check>TOUCH_MAX_CONTACT) return ERROR;
|
||||||
|
|
||||||
|
if(check>0) {
|
||||||
|
// wenn touch betaetigt
|
||||||
|
MultiTouch_Data.cnt=check;
|
||||||
|
Touch_Data.status=TOUCH_PRESSED;
|
||||||
|
check=P_Touch_GetPositions();
|
||||||
|
if(check>TOUCH_MAX_CONTACT) {
|
||||||
|
// fehler beim lesen
|
||||||
|
Touch_Data.status=TOUCH_RELEASED;
|
||||||
|
Touch_Data.xp=0;
|
||||||
|
Touch_Data.yp=0;
|
||||||
|
|
||||||
|
MultiTouch_Data.cnt=0;
|
||||||
|
for(n=0;n<TOUCH_MAX_CONTACT;n++) {
|
||||||
|
MultiTouch_Data.p[n].xp=0;
|
||||||
|
MultiTouch_Data.p[n].yp=0;
|
||||||
|
}
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
// erste koordinate fuer single touch speichern
|
||||||
|
Touch_Data.xp=MultiTouch_Data.p[0].xp;
|
||||||
|
Touch_Data.yp=MultiTouch_Data.p[0].yp;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// interne Funktion
|
||||||
|
// ID auslesen (mehrmals versuchen)
|
||||||
|
// bei Fehler -> return = 0
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
uint8_t P_Touch_ReadID(void)
|
||||||
|
{
|
||||||
|
int16_t i2c_wert;
|
||||||
|
uint8_t n;
|
||||||
|
|
||||||
|
for(n=0;n<5;n++) {
|
||||||
|
i2c_wert=UB_I2C3_ReadByte(FT5336_I2C_ADDR, FT5336_ID_REG);
|
||||||
|
if(i2c_wert>0) {
|
||||||
|
if((i2c_wert&0xFF)==FT5336_ID) return(FT5336_ID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// interne Funktion
|
||||||
|
// anzahl der Touch Kontakte ermitteln
|
||||||
|
// ret_wert : 0...5 = Anzahl der Kontakte
|
||||||
|
// 99 = Error
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
uint8_t P_Touch_GetContacts(void)
|
||||||
|
{
|
||||||
|
uint8_t ret_wert=0;
|
||||||
|
int16_t i2c_wert;
|
||||||
|
|
||||||
|
i2c_wert=UB_I2C3_ReadByte(FT5336_I2C_ADDR, FT5336_STATUS_REG);
|
||||||
|
if(i2c_wert<0) return 99;
|
||||||
|
|
||||||
|
// wert maskieren
|
||||||
|
ret_wert = (uint8_t)(i2c_wert & FT5336_STATUS_MASK);
|
||||||
|
|
||||||
|
if(ret_wert>TOUCH_MAX_CONTACT) return 0;
|
||||||
|
|
||||||
|
#if USE_MULTITOUCH==0
|
||||||
|
// bei Singletouch maximal ein Kontakt
|
||||||
|
if(ret_wert>1) ret_wert=1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return(ret_wert);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// interne Funktion
|
||||||
|
// die Touch positionen von allen Kontakten ermitteln
|
||||||
|
// ret_wert : 0 = OK
|
||||||
|
// 99 = Error
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// interne Funktion
|
||||||
|
uint8_t P_Touch_GetPositions(void)
|
||||||
|
{
|
||||||
|
uint8_t n,adr,wert_lo,wert_hi;
|
||||||
|
int16_t i2c_wert;
|
||||||
|
uint16_t position;
|
||||||
|
|
||||||
|
if(MultiTouch_Data.cnt==0) return 0;
|
||||||
|
|
||||||
|
// alle daten einlesen
|
||||||
|
for(n=0;n<MultiTouch_Data.cnt;n++) {
|
||||||
|
// x_lo
|
||||||
|
adr=FT5336_TOUCH_REG[n][0];
|
||||||
|
i2c_wert=UB_I2C3_ReadByte(FT5336_I2C_ADDR, adr);
|
||||||
|
if(i2c_wert<0) return 99;
|
||||||
|
wert_lo = i2c_wert & FT5336_LO_MASK;
|
||||||
|
// x_hi
|
||||||
|
adr=FT5336_TOUCH_REG[n][1];
|
||||||
|
i2c_wert=UB_I2C3_ReadByte(FT5336_I2C_ADDR, adr);
|
||||||
|
if(i2c_wert<0) return 99;
|
||||||
|
wert_hi = i2c_wert & FT5336_HI_MASK;
|
||||||
|
position=(wert_hi<<8)|wert_lo;
|
||||||
|
if(position>=TOUCH_MAXY) position=(TOUCH_MAXY-1);
|
||||||
|
MultiTouch_Data.p[n].yp=position;
|
||||||
|
// y_lo
|
||||||
|
adr=FT5336_TOUCH_REG[n][2];
|
||||||
|
i2c_wert=UB_I2C3_ReadByte(FT5336_I2C_ADDR, adr);
|
||||||
|
if(i2c_wert<0) return 99;
|
||||||
|
wert_lo = i2c_wert & FT5336_LO_MASK;
|
||||||
|
// y_hi
|
||||||
|
adr=FT5336_TOUCH_REG[n][3];
|
||||||
|
i2c_wert=UB_I2C3_ReadByte(FT5336_I2C_ADDR, adr);
|
||||||
|
if(i2c_wert<0) return 99;
|
||||||
|
wert_hi = i2c_wert & FT5336_HI_MASK;
|
||||||
|
position=(wert_hi<<8)|wert_lo;
|
||||||
|
if(position>=TOUCH_MAXX) position=(TOUCH_MAXX-1);
|
||||||
|
MultiTouch_Data.p[n].xp=position;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,144 @@
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// File : stm32_ub_touch_480x272.h
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#ifndef __STM32F7_UB_TOUCH_480x272_H
|
||||||
|
#define __STM32F7_UB_TOUCH_480x272_H
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Includes
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
//#include "stm32_ub_system.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
//#include "stm32_ub_i2c3.h"
|
||||||
|
#include "Arduino.h"
|
||||||
|
|
||||||
|
uint8_t UB_I2C3_ReadByte(uint8_t addressI2cDevice, uint8_t registerId);
|
||||||
|
/*
|
||||||
|
typedef enum {
|
||||||
|
TOUCH_PRESSED = 0, // Touch ist betaetigt
|
||||||
|
TOUCH_RELEASED = 1 // Touch ist nicht betaetigt
|
||||||
|
}ErrorStatus;
|
||||||
|
*/
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// define ob Multitouch benutzt werden soll oder nicht
|
||||||
|
// 1 = bis zu 5 Touch-Positionen gleichzeitig
|
||||||
|
// 0 = nur eine Touchposition
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
//#define USE_MULTITOUCH 1 // mit Multitouch
|
||||||
|
#define USE_MULTITOUCH 0 // nur Single-Touch
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#define TOUCH_INIT_DELAY 200 // 200ms
|
||||||
|
#define TOUCH_MAX_CONTACT 5 // Multitouch
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#define TOUCH_MAXX 480 // Pixel in X
|
||||||
|
#define TOUCH_MAXY 272 // Pixel in Y
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// I2C-Adresse
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#define FT5336_I2C_ADDR 0x70
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Register Adressen
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#define FT5336_STATUS_REG ((uint8_t)0x02)
|
||||||
|
|
||||||
|
#define FT5336_P1_XH_REG ((uint8_t)0x03)
|
||||||
|
#define FT5336_P1_XL_REG ((uint8_t)0x04)
|
||||||
|
#define FT5336_P1_YH_REG ((uint8_t)0x05)
|
||||||
|
#define FT5336_P1_YL_REG ((uint8_t)0x06)
|
||||||
|
|
||||||
|
#define FT5336_P2_XH_REG ((uint8_t)0x09)
|
||||||
|
#define FT5336_P2_XL_REG ((uint8_t)0x0A)
|
||||||
|
#define FT5336_P2_YH_REG ((uint8_t)0x0B)
|
||||||
|
#define FT5336_P2_YL_REG ((uint8_t)0x0C)
|
||||||
|
|
||||||
|
#define FT5336_P3_XH_REG ((uint8_t)0x0F)
|
||||||
|
#define FT5336_P3_XL_REG ((uint8_t)0x10)
|
||||||
|
#define FT5336_P3_YH_REG ((uint8_t)0x11)
|
||||||
|
#define FT5336_P3_YL_REG ((uint8_t)0x12)
|
||||||
|
|
||||||
|
#define FT5336_P4_XH_REG ((uint8_t)0x15)
|
||||||
|
#define FT5336_P4_XL_REG ((uint8_t)0x16)
|
||||||
|
#define FT5336_P4_YH_REG ((uint8_t)0x17)
|
||||||
|
#define FT5336_P4_YL_REG ((uint8_t)0x18)
|
||||||
|
|
||||||
|
#define FT5336_P5_XH_REG ((uint8_t)0x1B)
|
||||||
|
#define FT5336_P5_XL_REG ((uint8_t)0x1C)
|
||||||
|
#define FT5336_P5_YH_REG ((uint8_t)0x1D)
|
||||||
|
#define FT5336_P5_YL_REG ((uint8_t)0x1E)
|
||||||
|
|
||||||
|
#define FT5336_ID_REG ((uint8_t)0xA8)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Status-ID
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#define FT5336_ID 0x51
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Masken
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#define FT5336_STATUS_MASK 0x0F
|
||||||
|
#define FT5336_LO_MASK 0xFF
|
||||||
|
#define FT5336_HI_MASK 0x0F
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------
|
||||||
|
// Touch-Status
|
||||||
|
//-----------------------------------------
|
||||||
|
typedef enum {
|
||||||
|
TOUCH_PRESSED = 0, // Touch ist betaetigt
|
||||||
|
TOUCH_RELEASED = 1 // Touch ist nicht betaetigt
|
||||||
|
}Touch_Status_t;
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------
|
||||||
|
// Globale Struktur der Touch-Daten
|
||||||
|
//-----------------------------------------
|
||||||
|
typedef struct {
|
||||||
|
Touch_Status_t status;
|
||||||
|
uint16_t xp;
|
||||||
|
uint16_t yp;
|
||||||
|
}Touch_Data_t;
|
||||||
|
extern Touch_Data_t Touch_Data;
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------
|
||||||
|
// Touch-Position
|
||||||
|
//-----------------------------------------
|
||||||
|
typedef struct {
|
||||||
|
uint16_t xp;
|
||||||
|
uint16_t yp;
|
||||||
|
}TP_Point_t;
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------
|
||||||
|
// Globale Struktur der Multi-Touch-Daten
|
||||||
|
//-----------------------------------------
|
||||||
|
typedef struct {
|
||||||
|
uint16_t cnt;
|
||||||
|
TP_Point_t p[TOUCH_MAX_CONTACT];
|
||||||
|
}MultiTouch_Data_t;
|
||||||
|
//MultiTouch_Data_t MultiTouch_Data;
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Globale Funktionen
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
ErrorStatus UB_Touch_Init(void);
|
||||||
|
ErrorStatus UB_Touch_Read(void);
|
||||||
|
uint8_t P_Touch_GetContacts(void);
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
#endif // __STM32F7_UB_TOUCH_480x272_H
|
||||||
|
|
Loading…
Reference in New Issue