summaryrefslogtreecommitdiff
path: root/Libraries/TouchSense/tsl_user.c
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/TouchSense/tsl_user.c')
-rw-r--r--Libraries/TouchSense/tsl_user.c292
1 files changed, 292 insertions, 0 deletions
diff --git a/Libraries/TouchSense/tsl_user.c b/Libraries/TouchSense/tsl_user.c
new file mode 100644
index 0000000..b7d50ef
--- /dev/null
+++ b/Libraries/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>&copy; 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****/