diff options
Diffstat (limited to 'third_party/TouchSense/tsl_user.c')
-rw-r--r-- | third_party/TouchSense/tsl_user.c | 292 |
1 files changed, 292 insertions, 0 deletions
diff --git a/third_party/TouchSense/tsl_user.c b/third_party/TouchSense/tsl_user.c new file mode 100644 index 0000000..b7d50ef --- /dev/null +++ b/third_party/TouchSense/tsl_user.c @@ -0,0 +1,292 @@ +/** + ****************************************************************************** + * @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 + * + * <h2><center>© COPYRIGHT 2014 STMicroelectronics</center></h2> + * + * 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****/ |