summaryrefslogtreecommitdiff
path: root/third_party/TouchSense/STMTouch_Driver/src/tsl_dxs.c
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2023-03-05 20:20:45 +0300
committerOxore <oxore@protonmail.com>2023-03-05 20:20:45 +0300
commitea807de65b0485ac58b6eae576209c64d4d5c4e9 (patch)
treeb4264d20e1d700cfd9e0ece9d847a825dd1dfc03 /third_party/TouchSense/STMTouch_Driver/src/tsl_dxs.c
parentdd01e7ed22cea652061f0d12cecf929e04b285e9 (diff)
Split app code and third party libraries
Diffstat (limited to 'third_party/TouchSense/STMTouch_Driver/src/tsl_dxs.c')
-rw-r--r--third_party/TouchSense/STMTouch_Driver/src/tsl_dxs.c181
1 files changed, 181 insertions, 0 deletions
diff --git a/third_party/TouchSense/STMTouch_Driver/src/tsl_dxs.c b/third_party/TouchSense/STMTouch_Driver/src/tsl_dxs.c
new file mode 100644
index 0000000..c721b80
--- /dev/null
+++ b/third_party/TouchSense/STMTouch_Driver/src/tsl_dxs.c
@@ -0,0 +1,181 @@
+/**
+ ******************************************************************************
+ * @file tsl_dxs.c
+ * @author MCD Application Team
+ * @version V1.4.4
+ * @date 31-March-2014
+ * @brief This file contains all functions to manage the
+ * Detection Exclusion System (DxS) algorithm.
+ ******************************************************************************
+ * @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.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "tsl_dxs.h"
+#include "tsl_globals.h"
+
+/* Private typedefs ----------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
+
+#define THIS_OBJ_TYPE TSL_Globals.This_Obj->Type
+
+#define THIS_TKEY TSL_Globals.This_TKey
+#define THIS_TKEY_STATEID TSL_Globals.This_TKey->p_Data->StateId
+#define THIS_TKEY_DXSLOCK TSL_Globals.This_TKey->p_Data->DxSLock
+#define THIS_TKEY_CHANGE TSL_Globals.This_TKey->p_Data->Change
+
+#define THIS_LINROT TSL_Globals.This_LinRot
+#define THIS_LINROT_STATEID TSL_Globals.This_LinRot->p_Data->StateId
+#define THIS_LINROT_DXSLOCK TSL_Globals.This_LinRot->p_Data->DxSLock
+#define THIS_LINROT_CHANGE TSL_Globals.This_LinRot->p_Data->Change
+
+/* Private macros ------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* Private functions prototype -----------------------------------------------*/
+
+/**
+ * @brief Detection Exclusion System on the first object in detect state
+ * @param[in] objgrp Pointer to the objects group to process
+ * @retval None
+ */
+void TSL_dxs_FirstObj(CONST TSL_ObjectGroup_T *objgrp)
+{
+#if TSLPRM_USE_DXS > 0
+
+ TSL_tIndex_T idx_obj;
+ CONST TSL_Object_T *pobj;
+ CONST TSL_Object_T *pobj_candidate = 0; // Candidate object for being in Detect state + DxSLock flag
+ TSL_tIndex_T obj_locked = 0; // Object with Lock flag
+
+ // Exit if no object are in DETECT state.
+ if ((objgrp->StateMask & TSL_STATE_DETECT_BIT_MASK) == 0)
+ {
+ return;
+ }
+
+ pobj = objgrp->p_Obj; // First object in the group
+
+ // Process all objects
+ for (idx_obj = 0; idx_obj < objgrp->NbObjects; idx_obj++)
+ {
+
+ // Assign global object
+ TSL_obj_SetGlobalObj(pobj);
+
+ //--------------------------------------------------------------------------
+#if TSLPRM_TOTAL_TKEYS > 0
+ if ((THIS_OBJ_TYPE == TSL_OBJ_TOUCHKEY) || (THIS_OBJ_TYPE == TSL_OBJ_TOUCHKEYB))
+ {
+ if (THIS_TKEY_STATEID == TSL_STATEID_DETECT)
+ {
+ if (THIS_TKEY_DXSLOCK == TSL_TRUE)
+ {
+ if (!obj_locked)
+ {
+ obj_locked = 1;
+ pobj_candidate = 0;
+ }
+ else
+ {
+ THIS_TKEY_STATEID = TSL_STATEID_TOUCH;
+ THIS_TKEY_CHANGE = TSL_STATE_CHANGED;
+ }
+ }
+ else
+ {
+ THIS_TKEY_STATEID = TSL_STATEID_TOUCH;
+ THIS_TKEY_CHANGE = TSL_STATE_CHANGED;
+ if ((!pobj_candidate) && (!obj_locked))
+ {
+ pobj_candidate = pobj;
+ }
+ }
+ }
+ }
+#endif // TSLPRM_TOTAL_TKEYS > 0
+
+ //--------------------------------------------------------------------------
+#if TSLPRM_TOTAL_LNRTS > 0
+ if ((THIS_OBJ_TYPE == TSL_OBJ_LINEAR) || (THIS_OBJ_TYPE == TSL_OBJ_LINEARB) ||
+ (THIS_OBJ_TYPE == TSL_OBJ_ROTARY) || (THIS_OBJ_TYPE == TSL_OBJ_ROTARYB))
+ {
+ if (THIS_LINROT_STATEID == TSL_STATEID_DETECT)
+ {
+ if (THIS_LINROT_DXSLOCK == TSL_TRUE)
+ {
+ if (!obj_locked)
+ {
+ obj_locked = 1;
+ pobj_candidate = 0;
+ }
+ else
+ {
+ THIS_LINROT_STATEID = TSL_STATEID_TOUCH;
+ THIS_LINROT_CHANGE = TSL_STATE_CHANGED;
+ }
+ }
+ else
+ {
+ THIS_LINROT_STATEID = TSL_STATEID_TOUCH;
+ THIS_LINROT_CHANGE = TSL_STATE_CHANGED;
+ if ((!pobj_candidate) && (!obj_locked))
+ {
+ pobj_candidate = pobj;
+ }
+ }
+ }
+ }
+#endif // TSLPRM_TOTAL_LNRTS > 0
+
+ pobj++; // Next object
+
+ } // // for all objects
+
+ // Change state from TOUCH to DETECT + DxSLock flag on the candidate object only
+ if (pobj_candidate)
+ {
+
+ // Assign global object
+ TSL_obj_SetGlobalObj(pobj_candidate);
+
+#if TSLPRM_TOTAL_TKEYS > 0
+ if ((THIS_OBJ_TYPE == TSL_OBJ_TOUCHKEY) || (THIS_OBJ_TYPE == TSL_OBJ_TOUCHKEYB))
+ {
+ THIS_TKEY_STATEID = TSL_STATEID_DETECT;
+ THIS_TKEY_CHANGE = TSL_STATE_CHANGED;
+ THIS_TKEY_DXSLOCK = TSL_TRUE;
+ }
+#endif // TSLPRM_TOTAL_TKEYS > 0
+
+#if TSLPRM_TOTAL_LNRTS > 0
+ if ((THIS_OBJ_TYPE == TSL_OBJ_LINEAR) || (THIS_OBJ_TYPE == TSL_OBJ_LINEARB) ||
+ (THIS_OBJ_TYPE == TSL_OBJ_ROTARY) || (THIS_OBJ_TYPE == TSL_OBJ_ROTARYB))
+ {
+ THIS_LINROT_STATEID = TSL_STATEID_DETECT;
+ THIS_LINROT_CHANGE = TSL_STATE_CHANGED;
+ THIS_LINROT_DXSLOCK = TSL_TRUE;
+ }
+#endif // TSLPRM_TOTAL_LNRTS > 0
+
+ }
+
+#endif // TSLPRM_USE_DXS > 0
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/