EFM32GG_DK3750, Touch panel driver. More...
#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 <math.h>
#include "calibrate.h"
#include "bsp.h"
#include "i2cdrv.h"
#include "eeprom.h"
Go to the source code of this file.
Defines | |
#define | ADC_X adcSingleInpCh1 |
Input channel 1. | |
#define | ADC_Y adcSingleInpCh4 |
Input channel 4. | |
#define | TOUCH_X1 gpioPortD, 5 |
Port D5. | |
#define | TOUCH_X2 gpioPortD, 4 |
Port D4. | |
#define | TOUCH_Y1 gpioPortD, 3 |
Port D3. | |
#define | TOUCH_Y2 gpioPortD, 1 |
Port D2. | |
Enumerations | |
enum | TOUCH_State_TypeDef { TOUCH_INIT, TOUCH_CHECK_PRESS, TOUCH_MEASURE_X, TOUCH_MEASURE_Y } |
touch driver states More... | |
Functions | |
void | TOUCH_RecalculatePosition (volatile TOUCH_Pos_TypeDef *pos) |
Convert ADC readings into XY position. | |
void | TOUCH_CallUpcall (void) |
Function that calls registered upcall. | |
int | TOUCH_StateChanged (void) |
Check if cursor state changed (down or move). | |
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_IsBusy (void) |
Check status of the touch panel. | |
void | TOUCH_Init (TOUCH_Config_TypeDef *config) |
Initialize touch panel driver. | |
TOUCH_Pos_TypeDef * | TOUCH_GetPos (void) |
Returns current touch position and state. | |
void | TOUCH_RegisterUpcall (TOUCH_Upcall_TypeDef *new_upcall) |
Register upcall which will be call every position or state change. | |
int | TOUCH_CalibrationTable (POINT *displayPtr, POINT *screenPtr) |
Set calibration table. | |
Variables | |
MATRIX | calibrationMatrix = { 103800, 2048, -8184704, -384, 102144, -16424640, 287650 } |
Calibration table. |
EFM32GG_DK3750, Touch panel driver.
(C) Copyright 2014 Silicon Labs, http://www.silabs.com
This file is licensensed 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.
#define ADC_X adcSingleInpCh1 |
#define ADC_Y adcSingleInpCh4 |
Input channel 4.
Definition at line 38 of file touch.c.
Referenced by ADC0_IRQHandler(), and TOUCH_Init().
#define TOUCH_X1 gpioPortD, 5 |
#define TOUCH_X2 gpioPortD, 4 |
Port D4.
Definition at line 42 of file touch.c.
Referenced by ADC0_IRQHandler(), and TOUCH_IsBusy().
#define TOUCH_Y1 gpioPortD, 3 |
#define TOUCH_Y2 gpioPortD, 1 |
enum TOUCH_State_TypeDef |
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.
Definition at line 215 of file touch.c.
References ADC_X, ADC_Y, TOUCH_Pos_TypeDef::adcx, TOUCH_Pos_TypeDef::adcy, TOUCH_Pos_TypeDef::pen, TOUCH_CallUpcall(), TOUCH_RecalculatePosition(), TOUCH_StateChanged(), TOUCH_X1, TOUCH_X2, TOUCH_Y1, TOUCH_Y2, TOUCH_Pos_TypeDef::x, and TOUCH_Pos_TypeDef::y.
void TOUCH_CallUpcall | ( | void | ) |
Function that calls registered upcall.
Definition at line 181 of file touch.c.
Referenced by ADC0_IRQHandler().
void TOUCH_RecalculatePosition | ( | volatile TOUCH_Pos_TypeDef * | pos | ) |
Convert ADC readings into XY position.
[in] | pos | Pointer to position structure |
Definition at line 154 of file touch.c.
References TOUCH_Pos_TypeDef::adcx, TOUCH_Pos_TypeDef::adcy, 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).
Definition at line 194 of file touch.c.
References TOUCH_Pos_TypeDef::pen, TOUCH_Pos_TypeDef::x, and TOUCH_Pos_TypeDef::y.
Referenced by ADC0_IRQHandler().
MATRIX calibrationMatrix = { 103800, 2048, -8184704, -384, 102144, -16424640, 287650 } |