Touchscreen driver POC
Example documentation
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
#include "GT1151.h"
|
||||
|
||||
GT1151_Dev Dev_Now, Dev_Old;
|
||||
UBYTE GT_Gesture_Mode = 0;
|
||||
|
||||
void GT_Reset(void)
|
||||
{
|
||||
TRST_1;
|
||||
DEV_Delay_ms(100);
|
||||
TRST_0;
|
||||
DEV_Delay_ms(100);
|
||||
TRST_1;
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
|
||||
void GT_Write(UWORD Reg, char *Data, UBYTE len)
|
||||
{
|
||||
I2C_Write_Byte(Reg, Data, len);
|
||||
}
|
||||
|
||||
void GT_Read(UWORD Reg, char *Data, UBYTE len)
|
||||
{
|
||||
I2C_Read_Byte(Reg, Data, len);
|
||||
}
|
||||
|
||||
void GT_ReadVersion(void)
|
||||
{
|
||||
char buf[4];
|
||||
GT_Read(0x8140, buf, 4);
|
||||
printf("Product ID is %c %c %c %c \r\n", buf[0], buf[1], buf[2] ,buf[3]);
|
||||
}
|
||||
|
||||
void GT_Init(void)
|
||||
{
|
||||
GT_Reset();
|
||||
GT_ReadVersion();
|
||||
}
|
||||
|
||||
void GT_Gesture(void)
|
||||
{
|
||||
char buf[3] ={0x08, 0x00, 0xf8};
|
||||
GT_Write(0x8040, &buf[0], 1);
|
||||
GT_Write(0x8041, &buf[1], 1);
|
||||
GT_Write(0x8042, &buf[2], 1);
|
||||
GT_Gesture_Mode = 1;
|
||||
printf("into gesture mode \r\n");
|
||||
DEV_Delay_ms(1);
|
||||
}
|
||||
|
||||
void GT_Gesture_Scan(void)
|
||||
{
|
||||
char buf;
|
||||
GT_Read(0x814c, &buf, 1);
|
||||
if(buf == 0xcc)
|
||||
{
|
||||
printf("gesture mode exiting \r\n");
|
||||
GT_Gesture_Mode = 0;
|
||||
GT_Reset();
|
||||
Dev_Old.X[0] = Dev_Now.X[0];
|
||||
Dev_Old.Y[0] = Dev_Now.Y[0];
|
||||
Dev_Old.S[0] = Dev_Now.S[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
buf = 0x00;
|
||||
GT_Write(0x814c, &buf, 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
UBYTE GT_Scan(void)
|
||||
{
|
||||
char buf[100];
|
||||
char mask[1] = {0x00};
|
||||
|
||||
if (Dev_Now.Touch == 1) {
|
||||
// Dev_Now.Touch = 0;
|
||||
if(GT_Gesture_Mode == 1)
|
||||
{
|
||||
GT_Gesture_Scan();
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
GT_Read(0x814E, buf, 1);
|
||||
if ((buf[0]&0x80) == 0x00) { //No new touch
|
||||
GT_Write(0x814E, mask, 1);
|
||||
DEV_Delay_ms(1);
|
||||
// printf("buffers status is 0 \r\n");
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
Dev_Now.TouchpointFlag = buf[0]&0x80;
|
||||
Dev_Now.TouchCount = buf[0]&0x0f;
|
||||
if (Dev_Now.TouchCount > 5 || Dev_Now.TouchCount < 1) {
|
||||
GT_Write(0x814E, mask, 1);
|
||||
// printf("TouchCount number is wrong \r\n");
|
||||
return 1;
|
||||
}
|
||||
GT_Read(0x814F, &buf[1], Dev_Now.TouchCount*8);
|
||||
GT_Write(0x814E, mask, 1);
|
||||
|
||||
Dev_Old.X[0] = Dev_Now.X[0];
|
||||
Dev_Old.Y[0] = Dev_Now.Y[0];
|
||||
Dev_Old.S[0] = Dev_Now.S[0];
|
||||
|
||||
for(UBYTE i=0; i<Dev_Now.TouchCount; i++) {
|
||||
Dev_Now.Touchkeytrackid[i] = buf[1 + 8*i];
|
||||
Dev_Now.X[i] = ((UWORD)buf[3+8*i] << 8) + buf[2+8*i];
|
||||
Dev_Now.Y[i] = ((UWORD)buf[5+8*i] << 8) + buf[4+8*i];
|
||||
Dev_Now.S[i] = ((UWORD)buf[7+8*i] << 8) + buf[6+8*i];
|
||||
}
|
||||
|
||||
for(UBYTE i=0; i<Dev_Now.TouchCount; i++)
|
||||
printf("Point %d: X is %d, Y is %d, Size is %d \r\n", i+1, Dev_Now.X[i], Dev_Now.Y[i], Dev_Now.S[i]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
#include "DEV_Config.h"
|
||||
|
||||
#ifndef __GT1151_H
|
||||
#define __GT1151_H
|
||||
|
||||
#define CT_MAX_TOUCH 5
|
||||
|
||||
typedef struct{
|
||||
UBYTE Touch;
|
||||
UBYTE TouchpointFlag;
|
||||
UBYTE TouchCount;
|
||||
|
||||
UBYTE Touchkeytrackid[CT_MAX_TOUCH];
|
||||
UWORD X[CT_MAX_TOUCH];
|
||||
UWORD Y[CT_MAX_TOUCH];
|
||||
UWORD S[CT_MAX_TOUCH];
|
||||
}GT1151_Dev;
|
||||
|
||||
void GT_Reset(void);
|
||||
void GT_Write(UWORD Reg, char *Data, UBYTE len);
|
||||
void GT_Read(UWORD Reg, char *Data, UBYTE len);
|
||||
void GT_ReadVersion(void);
|
||||
UBYTE GT_Scan(void);
|
||||
void GT_Init(void);
|
||||
void GT_Gesture(void);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,80 @@
|
||||
#include "ICNT86X.h"
|
||||
|
||||
ICNT86_Dev ICNT86_Dev_Now, ICNT86_Dev_Old;
|
||||
|
||||
void ICNT_Reset(void)
|
||||
{
|
||||
TRST_1;
|
||||
DEV_Delay_ms(100);
|
||||
TRST_0;
|
||||
DEV_Delay_ms(100);
|
||||
TRST_1;
|
||||
DEV_Delay_ms(100);
|
||||
}
|
||||
|
||||
void ICNT_Write(UWORD Reg, char *Data, UBYTE len)
|
||||
{
|
||||
I2C_Write_Byte(Reg, Data, len);
|
||||
}
|
||||
|
||||
void ICNT_Read(UWORD Reg, char *Data, UBYTE len)
|
||||
{
|
||||
I2C_Read_Byte(Reg, Data, len);
|
||||
}
|
||||
|
||||
void ICNT_ReadVersion(void)
|
||||
{
|
||||
char buf[4];
|
||||
ICNT_Read(0x000a, buf, 4);
|
||||
printf("IC Version is %x %x \r\n", buf[0], buf[1]);
|
||||
printf("FW Version is %x %x \r\n", buf[2], buf[3]);
|
||||
}
|
||||
|
||||
void ICNT_Init(void)
|
||||
{
|
||||
ICNT_Reset();
|
||||
ICNT_ReadVersion();
|
||||
}
|
||||
|
||||
UBYTE ICNT_Scan(void)
|
||||
{
|
||||
char buf[100];
|
||||
char mask[1] = {0x00};
|
||||
if (ICNT86_Dev_Now.Touch == 1) {
|
||||
// ICNT86_Dev_Now.Touch = 0;
|
||||
ICNT_Read(0x1001, buf, 1);
|
||||
if (buf[0] == 0x00) { //No new touch
|
||||
ICNT_Write(0x1001, mask, 1);
|
||||
DEV_Delay_ms(1);
|
||||
// printf("buffers status is 0 \r\n");
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
ICNT86_Dev_Now.TouchCount = buf[0];
|
||||
if (ICNT86_Dev_Now.TouchCount > 5 || ICNT86_Dev_Now.TouchCount < 1) {
|
||||
ICNT_Write(0x1001, mask, 1);
|
||||
ICNT86_Dev_Now.TouchCount = 0;
|
||||
// printf("TouchCount number is wrong \r\n");
|
||||
return 1;
|
||||
}
|
||||
ICNT_Read(0x1002, buf, ICNT86_Dev_Now.TouchCount*7);
|
||||
ICNT_Write(0x1001, mask, 1);
|
||||
|
||||
ICNT86_Dev_Old.X[0] = ICNT86_Dev_Now.X[0];
|
||||
ICNT86_Dev_Old.Y[0] = ICNT86_Dev_Now.Y[0];
|
||||
ICNT86_Dev_Old.P[0] = ICNT86_Dev_Now.P[0];
|
||||
|
||||
for(UBYTE i=0; i<ICNT86_Dev_Now.TouchCount; i++) {
|
||||
ICNT86_Dev_Now.X[i] = ((UWORD)buf[2+7*i] << 8) + buf[1+7*i];
|
||||
ICNT86_Dev_Now.Y[i] = ((UWORD)buf[4+7*i] << 8) + buf[3+7*i];
|
||||
ICNT86_Dev_Now.P[i] = buf[5+7*i];
|
||||
ICNT86_Dev_Now.TouchEvenid[i] = buf[6 + 7*i];
|
||||
}
|
||||
|
||||
for(UBYTE i=0; i<ICNT86_Dev_Now.TouchCount; i++)
|
||||
printf("Point %d: X is %d, Y is %d, Pressure is %d \r\n", i+1, ICNT86_Dev_Now.X[i], ICNT86_Dev_Now.Y[i], ICNT86_Dev_Now.P[i]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
#include "DEV_Config.h"
|
||||
|
||||
#ifndef __ICNT86X_H
|
||||
#define __ICNT86X_H
|
||||
|
||||
#define ICNT_MAX_TOUCH 5
|
||||
|
||||
typedef struct{
|
||||
UBYTE Touch;
|
||||
UBYTE TouchCount;
|
||||
UBYTE TouchGestureid;
|
||||
|
||||
UBYTE TouchEvenid[ICNT_MAX_TOUCH];
|
||||
UWORD X[ICNT_MAX_TOUCH];
|
||||
UWORD Y[ICNT_MAX_TOUCH];
|
||||
UBYTE P[ICNT_MAX_TOUCH];
|
||||
}ICNT86_Dev;
|
||||
|
||||
void ICNT_Reset(void);
|
||||
void ICNT_Write(UWORD Reg, char *Data, UBYTE len);
|
||||
void ICNT_Read(UWORD Reg, char *Data, UBYTE len);
|
||||
void ICNT_ReadVersion(void);
|
||||
UBYTE ICNT_Scan(void);
|
||||
void ICNT_Init(void);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user