/**
******************************************************************************
* @file STM32F072B_Ex01_2TKeys_EVAL\src\tsl_user.c
* @author MCD Application Team
* @version V1.1.0
* @date 04-April-2014
* @brief Touch-Sensing user configuration and api file.
******************************************************************************
* @attention
*
*
© COPYRIGHT 2014 STMicroelectronics
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
#include "tsl_user.h"
//==============================================================================
// Channels
//==============================================================================
// Source and Configuration (ROM)
CONST TSL_ChannelSrc_T MyChannels_Src[TSLPRM_TOTAL_CHANNELS] =
{
{ CHANNEL_0_SRC, CHANNEL_0_IO_MSK, CHANNEL_0_GRP_MSK },
{ CHANNEL_1_SRC, CHANNEL_1_IO_MSK, CHANNEL_1_GRP_MSK }
};
// Destination (ROM)
CONST TSL_ChannelDest_T MyChannels_Dest[TSLPRM_TOTAL_CHANNELS] =
{
{ CHANNEL_0_DEST },
{ CHANNEL_1_DEST }
};
// Data (RAM)
TSL_ChannelData_T MyChannels_Data[TSLPRM_TOTAL_CHANNELS];
//==============================================================================
// Banks
//==============================================================================
// List (ROM)
CONST TSL_Bank_T MyBanks[TSLPRM_TOTAL_BANKS] = {
{&MyChannels_Src[0], &MyChannels_Dest[0], MyChannels_Data, BANK_0_NBCHANNELS, BANK_0_MSK_CHANNELS, BANK_0_MSK_GROUPS},
{&MyChannels_Src[1], &MyChannels_Dest[1], MyChannels_Data, BANK_1_NBCHANNELS, BANK_1_MSK_CHANNELS, BANK_1_MSK_GROUPS}
};
//==============================================================================
// TouchKeys
//==============================================================================
// Data (RAM)
TSL_TouchKeyData_T MyTKeys_Data[TSLPRM_TOTAL_TKEYS];
// Parameters (RAM)
TSL_TouchKeyParam_T MyTKeys_Param[TSLPRM_TOTAL_TKEYS];
// State Machine (ROM)
void MyTKeys_ErrorStateProcess(void);
void MyTKeys_OffStateProcess(void);
CONST TSL_State_T MyTKeys_StateMachine[] =
{
// Calibration states
/* 0 */ { TSL_STATEMASK_CALIB, TSL_tkey_CalibrationStateProcess },
/* 1 */ { TSL_STATEMASK_DEB_CALIB, TSL_tkey_DebCalibrationStateProcess },
// Release states
/* 2 */ { TSL_STATEMASK_RELEASE, TSL_tkey_ReleaseStateProcess },
#if TSLPRM_USE_PROX > 0
/* 3 */ { TSL_STATEMASK_DEB_RELEASE_PROX, TSL_tkey_DebReleaseProxStateProcess },
#else
/* 3 */ { TSL_STATEMASK_DEB_RELEASE_PROX, 0 },
#endif
/* 4 */ { TSL_STATEMASK_DEB_RELEASE_DETECT, TSL_tkey_DebReleaseDetectStateProcess },
/* 5 */ { TSL_STATEMASK_DEB_RELEASE_TOUCH, TSL_tkey_DebReleaseTouchStateProcess },
#if TSLPRM_USE_PROX > 0
// Proximity states
/* 6 */ { TSL_STATEMASK_PROX, TSL_tkey_ProxStateProcess },
/* 7 */ { TSL_STATEMASK_DEB_PROX, TSL_tkey_DebProxStateProcess },
/* 8 */ { TSL_STATEMASK_DEB_PROX_DETECT, TSL_tkey_DebProxDetectStateProcess },
/* 9 */ { TSL_STATEMASK_DEB_PROX_TOUCH, TSL_tkey_DebProxTouchStateProcess },
#else
/* 6 */ { TSL_STATEMASK_PROX, 0 },
/* 7 */ { TSL_STATEMASK_DEB_PROX, 0 },
/* 8 */ { TSL_STATEMASK_DEB_PROX_DETECT, 0 },
/* 9 */ { TSL_STATEMASK_DEB_PROX_TOUCH, 0 },
#endif
// Detect states
/* 10 */ { TSL_STATEMASK_DETECT, TSL_tkey_DetectStateProcess },
/* 11 */ { TSL_STATEMASK_DEB_DETECT, TSL_tkey_DebDetectStateProcess },
// Touch state
/* 12 */ { TSL_STATEMASK_TOUCH, TSL_tkey_TouchStateProcess },
// Error states
/* 13 */ { TSL_STATEMASK_ERROR, MyTKeys_ErrorStateProcess },
/* 14 */ { TSL_STATEMASK_DEB_ERROR_CALIB, TSL_tkey_DebErrorStateProcess },
/* 15 */ { TSL_STATEMASK_DEB_ERROR_RELEASE, TSL_tkey_DebErrorStateProcess },
/* 16 */ { TSL_STATEMASK_DEB_ERROR_PROX, TSL_tkey_DebErrorStateProcess },
/* 17 */ { TSL_STATEMASK_DEB_ERROR_DETECT, TSL_tkey_DebErrorStateProcess },
/* 18 */ { TSL_STATEMASK_DEB_ERROR_TOUCH, TSL_tkey_DebErrorStateProcess },
// Other states
/* 19 */ { TSL_STATEMASK_OFF, MyTKeys_OffStateProcess }
};
// Methods for "extended" type (ROM)
CONST TSL_TouchKeyMethods_T MyTKeys_Methods =
{
TSL_tkey_Init,
TSL_tkey_Process
};
// TouchKeys list (ROM)
CONST TSL_TouchKey_T MyTKeys[TSLPRM_TOTAL_TKEYS] =
{
{ &MyTKeys_Data[0], &MyTKeys_Param[0], &MyChannels_Data[CHANNEL_0_DEST], MyTKeys_StateMachine, &MyTKeys_Methods },
{ &MyTKeys_Data[1], &MyTKeys_Param[1], &MyChannels_Data[CHANNEL_1_DEST], MyTKeys_StateMachine, &MyTKeys_Methods }
};
//==============================================================================
// Generic Objects
//==============================================================================
// List (ROM)
CONST TSL_Object_T MyObjects[TSLPRM_TOTAL_OBJECTS] =
{
{ TSL_OBJ_TOUCHKEY, (TSL_TouchKey_T *)&MyTKeys[0] },
{ TSL_OBJ_TOUCHKEY, (TSL_TouchKey_T *)&MyTKeys[1] }
};
// Group (RAM)
TSL_ObjectGroup_T MyObjGroup =
{
&MyObjects[0], // First object
TSLPRM_TOTAL_OBJECTS, // Number of objects
0x00, // State mask reset value
TSL_STATE_NOT_CHANGED,// Current state
0, 0, 0 // ECS flags
};
//==============================================================================
// TSL Common Parameters placed in RAM or ROM
// --> external declaration in tsl_conf.h
//==============================================================================
TSL_Params_T TSL_Params =
{
TSLPRM_ACQ_MIN,
TSLPRM_ACQ_MAX,
TSLPRM_CALIB_SAMPLES,
TSLPRM_DTO,
#if TSLPRM_TOTAL_TKEYS > 0
MyTKeys_StateMachine, // Default state machine for TKeys
&MyTKeys_Methods, // Default methods for TKeys
#endif
#if TSLPRM_TOTAL_LNRTS > 0
MyLinRots_StateMachine, // Default state machine for LinRots
&MyLinRots_Methods // Default methods for LinRots
#endif
};
/* Private functions prototype -----------------------------------------------*/
/* Global variables ----------------------------------------------------------*/
__IO TSL_tTick_ms_T Gv_ECS_last_tick; // Hold the last time value for ECS
__IO uint32_t Gv_EOA; // Set by TS interrupt routine to indicate the End Of Acquisition
/**
* @brief Initialize the STMTouch Driver
* @param None
* @retval None
*/
void TSL_user_Init(void)
{
#if TSLPRM_TSC_GPIO_CONFIG == 0
// Automatic GPIO configuration not selected:
// This function must be created by the user to initialize the Touch Sensing GPIOs.
TSL_user_InitGPIOs();
#endif
TSL_obj_GroupInit(&MyObjGroup); // Init Objects
TSL_Init(MyBanks); // Init timing and acquisition modules
TSL_user_SetThresholds(); // Init thresholds for each object individually
}
/**
* @brief Execute STMTouch Driver main State machine
* @param None
* @retval status Return TSL_STATUS_OK if the acquisition is done
*/
TSL_Status_enum_T TSL_user_Action(void)
{
static uint32_t idx_bank = 0;
static uint32_t config_done = 0;
TSL_Status_enum_T status;
// Configure bank
if (!config_done)
{
TSL_acq_BankConfig(idx_bank); // Configure Bank
TSL_acq_BankStartAcq(); // Start Bank acquisition
config_done = 1;
#if TSLPRM_USE_ACQ_INTERRUPT > 0
Gv_EOA = 0; // Will be set by the TS interrupt routine
#endif
}
// Check end of acquisition
#if TSLPRM_USE_ACQ_INTERRUPT > 0
if (Gv_EOA) // Set by the TS interrupt routine
#else
if (TSL_acq_BankWaitEOC() == TSL_STATUS_OK)
#endif
{
STMSTUDIO_LOCK;
TSL_acq_BankGetResult(idx_bank, 0, 0); // Get Bank Result
STMSTUDIO_UNLOCK;
idx_bank++; // Next bank
config_done = 0;
}
// Process objects, DxS and ECS
// Check if all banks have been acquired
if (idx_bank > TSLPRM_TOTAL_BANKS-1)
{
// Reset flags for next banks acquisition
idx_bank = 0;
config_done = 0;
// Process Objects
TSL_obj_GroupProcess(&MyObjGroup);
// DxS processing (if TSLPRM_USE_DXS option is set)
TSL_dxs_FirstObj(&MyObjGroup);
// ECS every 100ms
if (TSL_tim_CheckDelay_ms(100, &Gv_ECS_last_tick) == TSL_STATUS_OK)
{
if (TSL_ecs_Process(&MyObjGroup) == TSL_STATUS_OK)
{
//LED4_TOGGLE;
//GPIOB->ODR ^= GPIO_Pin_2;
}
else
{
//LED4_OFF;
//GPIOB->ODR ^= GPIO_Pin_2;
}
}
status = TSL_STATUS_OK; // All banks have been acquired and sensors processed
}
else
{
status = TSL_STATUS_BUSY;
}
return status;
}
/**
* @brief Set thresholds for each object (optional).
* @param None
* @retval None
*/
void TSL_user_SetThresholds(void)
{
// Example: Decrease the Detect thresholds for the TKEY 0
//MyTKeys_Param[0].DetectInTh -= 10;
//MyTKeys_Param[0].DetectOutTh -= 10;
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/