touch.c File Reference

EFM32GG_DK3750, Touch panel driver.

Version
5.4.0

License

Copyright 2015 Silicon Labs, Inc. http://www.silabs.com

This file is licensed under the Silabs License Agreement. See the file "Silabs_License_Agreement.txt" for details. Before using this software for any purpose, you must agree to the terms of that agreement.

Definition in file touch.c .

#include <stdlib.h>
#include <string.h>
#include " em_device.h "
#include " em_adc.h "
#include " em_gpio.h "
#include " em_cmu.h "
#include " touch.h "
#include "calibrate.h"
#include " bsp.h "
#include " i2cspm.h "
#include " eeprom.h "

Macros

#define ADC_X adcSingleInpCh1
#define ADC_Y adcSingleInpCh4
#define TOUCH_X1_PIN 5
#define TOUCH_X1_PORT gpioPortD
#define TOUCH_X2_PIN 4
#define TOUCH_X2_PORT gpioPortD
#define TOUCH_Y1_PIN 3
#define TOUCH_Y1_PORT gpioPortD
#define TOUCH_Y2_PIN 1
#define TOUCH_Y2_PORT gpioPortD

Enumerations

enum TOUCH_State_TypeDef {
TOUCH_INIT ,
TOUCH_CHECK_PRESS ,
TOUCH_MEASURE_X ,
TOUCH_MEASURE_Y
}

Functions

void ADC0_IRQHandler (void)
Interrupt handler is executed with frequency ~28Hz when panel is not pressed and with frequency ~140Hz when panel is pressed - this will give ~50 readings per second.
int TOUCH_CalibrationTable (POINT *displayPtr, POINT *screenPtr)
Set calibration table.
void TOUCH_CallUpcall (void)
Function that calls registered upcall.
TOUCH_Pos_TypeDef * TOUCH_GetPos (void)
Returns current touch position and state.
void TOUCH_Init ( TOUCH_Config_TypeDef *config)
Initialize touch panel driver.
int TOUCH_IsBusy (void)
Check status of the touch panel.
void TOUCH_RecalculatePosition (volatile TOUCH_Pos_TypeDef *pos)
Convert ADC readings into XY position.
void TOUCH_RegisterUpcall ( TOUCH_Upcall_TypeDef *new_upcall)
Register upcall which will be call every position or state change.
int TOUCH_StateChanged (void)
Check if cursor state changed (down or move)

Variables

MATRIX calibrationMatrix = { 103800, 2048, -8184704, -384, 102144, -16424640, 287650 }

Macro Definition Documentation

#define ADC_X   adcSingleInpCh1

Input channel 1

Definition at line 36 of file touch.c .

Referenced by ADC0_IRQHandler() .

#define ADC_Y   adcSingleInpCh4

Input channel 4

Definition at line 37 of file touch.c .

Referenced by ADC0_IRQHandler() , and TOUCH_Init() .

#define TOUCH_X1_PIN   5

Pin 5

Definition at line 41 of file touch.c .

Referenced by ADC0_IRQHandler() .

#define TOUCH_X1_PORT   gpioPortD

Port D

Definition at line 40 of file touch.c .

Referenced by ADC0_IRQHandler() .

#define TOUCH_X2_PIN   4

Pin 4

Definition at line 43 of file touch.c .

Referenced by ADC0_IRQHandler() , and TOUCH_IsBusy() .

#define TOUCH_X2_PORT   gpioPortD

Port D

Definition at line 42 of file touch.c .

Referenced by ADC0_IRQHandler() , and TOUCH_IsBusy() .

#define TOUCH_Y1_PIN   3

Pin 3

Definition at line 45 of file touch.c .

Referenced by ADC0_IRQHandler() .

#define TOUCH_Y1_PORT   gpioPortD

Port D

Definition at line 44 of file touch.c .

Referenced by ADC0_IRQHandler() .

#define TOUCH_Y2_PIN   1

Pin 1

Definition at line 47 of file touch.c .

Referenced by ADC0_IRQHandler() .

#define TOUCH_Y2_PORT   gpioPortD

Port D

Definition at line 46 of file touch.c .

Referenced by ADC0_IRQHandler() .

Enumeration Type Documentation

touch driver states

Definition at line 50 of file touch.c .

Function Documentation

void TOUCH_RecalculatePosition ( volatile TOUCH_Pos_TypeDef * pos )

Convert ADC readings into XY position.

Parameters
[in] pos Pointer to position structure

Definition at line 158 of file touch.c .

References TOUCH_Pos_TypeDef::adcx , TOUCH_Pos_TypeDef::adcy , calibrationMatrix , TOUCH_Pos_TypeDef::pen , TOUCH_Pos_TypeDef::x , and TOUCH_Pos_TypeDef::y .

Referenced by ADC0_IRQHandler() .

int TOUCH_StateChanged ( void )

Check if cursor state changed (down or move)

Returns
1 if the cursor state has changed

Definition at line 201 of file touch.c .

References TOUCH_Pos_TypeDef::pen , TOUCH_Pos_TypeDef::x , and TOUCH_Pos_TypeDef::y .

Referenced by ADC0_IRQHandler() .

Variable Documentation

MATRIX calibrationMatrix = { 103800, 2048, -8184704, -384, 102144, -16424640, 287650 }

Calibration table

Definition at line 70 of file touch.c .

Referenced by TOUCH_CalibrationTable() , and TOUCH_RecalculatePosition() .