Create stm32f429i_discovery_ts.c
This commit is contained in:
parent
c4e12c1573
commit
57776833ac
|
@ -0,0 +1,255 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* @file stm32f429i_discovery_ts.c
|
||||
* @author MCD Application Team
|
||||
* @version V2.1.4
|
||||
* @date 06-May-2016
|
||||
* @brief This file provides a set of functions needed to manage Touch
|
||||
* screen available with STMPE811 IO Expander device mounted on
|
||||
* STM32F429I-Discovery Kit.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32f429i_discovery_ts.h"
|
||||
#include "stm32f429i_discovery_io.h"
|
||||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32F429I_DISCOVERY
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32F429I_DISCOVERY_TS STM32F429I DISCOVERY TS
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @defgroup STM32F429I_DISCOVERY_TS_Private_Types_Definitions STM32F429I DISCOVERY TS Private Types Definitions
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32F429I_DISCOVERY_TS_Private_Defines STM32F429I DISCOVERY TS Private Defines
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32F429I_DISCOVERY_TS_Private_Macros STM32F429I DISCOVERY TS Private Macros
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32F429I_DISCOVERY_TS_Private_Variables STM32F429I DISCOVERY TS Private Variables
|
||||
* @{
|
||||
*/
|
||||
static TS_DrvTypeDef *TsDrv;
|
||||
static uint16_t TsXBoundary, TsYBoundary;
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32F429I_DISCOVERY_TS_Private_Function_Prototypes STM32F429I DISCOVERY TS Private Function Prototypes
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** @defgroup STM32F429I_DISCOVERY_TS_Private_Functions STM32F429I DISCOVERY TS Private Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initializes and configures the touch screen functionalities and
|
||||
* configures all necessary hardware resources (GPIOs, clocks..).
|
||||
* @param XSize: The maximum X size of the TS area on LCD
|
||||
* @param YSize: The maximum Y size of the TS area on LCD
|
||||
* @retval TS_OK: if all initializations are OK. Other value if error.
|
||||
*/
|
||||
uint8_t BSP_TS_Init(uint16_t XSize, uint16_t YSize)
|
||||
{
|
||||
uint8_t ret = TS_ERROR;
|
||||
|
||||
/* Initialize x and y positions boundaries */
|
||||
TsXBoundary = XSize;
|
||||
TsYBoundary = YSize;
|
||||
|
||||
/* Read ID and verify if the IO expander is ready */
|
||||
if(stmpe811_ts_drv.ReadID(TS_I2C_ADDRESS) == STMPE811_ID)
|
||||
{
|
||||
/* Initialize the TS driver structure */
|
||||
TsDrv = &stmpe811_ts_drv;
|
||||
|
||||
ret = TS_OK;
|
||||
}
|
||||
|
||||
if(ret == TS_OK)
|
||||
{
|
||||
/* Initialize the LL TS Driver */
|
||||
TsDrv->Init(TS_I2C_ADDRESS);
|
||||
TsDrv->Start(TS_I2C_ADDRESS);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Configures and enables the touch screen interrupts.
|
||||
* @retval TS_OK: if ITconfig is OK. Other value if error.
|
||||
*/
|
||||
uint8_t BSP_TS_ITConfig(void)
|
||||
{
|
||||
/* Enable the TS ITs */
|
||||
TsDrv->EnableIT(TS_I2C_ADDRESS);
|
||||
|
||||
return TS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Gets the TS IT status.
|
||||
* @retval Interrupt status.
|
||||
*/
|
||||
uint8_t BSP_TS_ITGetStatus(void)
|
||||
{
|
||||
/* Return the TS IT status */
|
||||
return (TsDrv->GetITStatus(TS_I2C_ADDRESS));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns status and positions of the touch screen.
|
||||
* @param TsState: Pointer to touch screen current state structure
|
||||
*/
|
||||
void BSP_TS_GetState(TS_StateTypeDef* TsState)
|
||||
{
|
||||
static uint32_t _x = 0, _y = 0;
|
||||
uint16_t xDiff, yDiff , x , y, xr, yr;
|
||||
|
||||
TsState->TouchDetected = TsDrv->DetectTouch(TS_I2C_ADDRESS);
|
||||
|
||||
if(TsState->TouchDetected)
|
||||
{
|
||||
TsDrv->GetXY(TS_I2C_ADDRESS, &x, &y);
|
||||
|
||||
/* Y value first correction */
|
||||
y -= 360;
|
||||
|
||||
/* Y value second correction */
|
||||
yr = y / 11;
|
||||
|
||||
/* Return y position value */
|
||||
if(yr <= 0)
|
||||
{
|
||||
yr = 0;
|
||||
}
|
||||
else if (yr > TsYBoundary)
|
||||
{
|
||||
yr = TsYBoundary - 1;
|
||||
}
|
||||
else
|
||||
{}
|
||||
y = yr;
|
||||
|
||||
/* X value first correction */
|
||||
if(x <= 3000)
|
||||
{
|
||||
x = 3870 - x;
|
||||
}
|
||||
else
|
||||
{
|
||||
x = 3800 - x;
|
||||
}
|
||||
|
||||
/* X value second correction */
|
||||
xr = x / 15;
|
||||
|
||||
/* Return X position value */
|
||||
if(xr <= 0)
|
||||
{
|
||||
xr = 0;
|
||||
}
|
||||
else if (xr > TsXBoundary)
|
||||
{
|
||||
xr = TsXBoundary - 1;
|
||||
}
|
||||
else
|
||||
{}
|
||||
|
||||
x = xr;
|
||||
xDiff = x > _x? (x - _x): (_x - x);
|
||||
yDiff = y > _y? (y - _y): (_y - y);
|
||||
|
||||
if (xDiff + yDiff > 5)
|
||||
{
|
||||
_x = x;
|
||||
_y = y;
|
||||
}
|
||||
|
||||
/* Update the X position */
|
||||
TsState->X = _x;
|
||||
|
||||
/* Update the Y position */
|
||||
TsState->Y = _y;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Clears all touch screen interrupts.
|
||||
*/
|
||||
void BSP_TS_ITClear(void)
|
||||
{
|
||||
/* Clear TS IT pending bits */
|
||||
TsDrv->ClearIT(TS_I2C_ADDRESS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
Loading…
Reference in New Issue