/** ****************************************************************************** * @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 * *

© 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. * ****************************************************************************** */ /* 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 } #else (void) objgrp; #endif // TSLPRM_USE_DXS > 0 } /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/