1 /*! 2 * @file tsc_dxs.c 3 * 4 * @brief This file contains all functions to manage the 5 * Detection Exclusion System (Dxs) algorithm 6 7 * @version V1.0.1 8 * 9 * @date 2022-09-20 10 * 11 * @attention 12 * 13 * Copyright (C) 2020-2022 Geehy Semiconductor 14 * 15 * You may not use this file except in compliance with the 16 * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). 17 * 18 * The program is only for reference, which is distributed in the hope 19 * that it will be useful and instructional for customers to develop 20 * their software. Unless required by applicable law or agreed to in 21 * writing, the program is distributed on an "AS IS" BASIS, WITHOUT 22 * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. 23 * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions 24 * and limitations under the License. 25 */ 26 27 /* Includes */ 28 #include "tsc.h" 29 #include "tsc_dxs.h" 30 31 /** @addtogroup TSC_Driver_Library TSC Driver Library 32 @{ 33 */ 34 35 /** @addtogroup TSC_DXS_Driver TSC DXS Driver 36 @{ 37 */ 38 39 /** @defgroup TSC_DXS_Macros Macros 40 @{ 41 */ 42 43 /**@} end of group TSC_DXS_Macros */ 44 45 /** @defgroup TSC_DXS_Enumerations Enumerations 46 @{ 47 */ 48 49 /**@} end of group TSC_DXS_Enumerations */ 50 51 /** @defgroup TSC_DXS_Structures Structures 52 @{ 53 */ 54 55 /**@} end of group TSC_DXS_Structures */ 56 57 /** @defgroup TSC_DXS_Variables Variables 58 @{ 59 */ 60 61 /**@} end of group TSC_DXS_Variables */ 62 63 /** @defgroup TSC_DXS_Functions Functions 64 @{ 65 */ 66 67 /*! 68 * @brief Detection Exclusion System on the first object in detect state 69 * 70 * @param objgrp: Pointer to the objects group to process 71 * 72 * @retval None 73 */ TSC_Dxs_FirstObj(CONST TSC_ObjectGroup_T * objgrp)74void TSC_Dxs_FirstObj(CONST TSC_ObjectGroup_T* objgrp) 75 { 76 #if TOUCH_USE_DXS > 0 77 78 TSC_tIndex_T idxObj; 79 TSC_tIndex_T objLock = 0; 80 CONST TSC_Object_T* pObj; 81 CONST TSC_Object_T* pObjadd = 0; 82 83 /* Exit if no object are in DETECT state */ 84 if ((objgrp->StateMask & TSC_STATE_DETECT_BIT_MASK) == 0) 85 { 86 return; 87 } 88 89 pObj = objgrp->p_Obj; 90 91 /* Process all objects */ 92 for (idxObj = 0; idxObj < objgrp->NbObjects; idxObj++) 93 { 94 TSC_Obj_ConfigGlobalObj(pObj); 95 96 switch (FOR_OBJ_TYPE) 97 { 98 #if TOUCH_TOTAL_KEYS > 0 99 case TSC_OBJ_TOUCHKEY: 100 case TSC_OBJ_TOUCHKEYB: 101 if (FOR_KEY_STATEID == TSC_STATEID_DETECT) 102 { 103 if (FOR_KEY_DXSLOCK == TSC_FALSE) 104 { 105 FOR_KEY_STATEID = TSC_STATEID_TOUCH; 106 FOR_KEY_CHANGE = TSC_STATE_CHANGED; 107 if ((!pObjadd) && (!objLock)) 108 { 109 pObjadd = pObj; 110 } 111 } 112 else 113 { 114 if (objLock) 115 { 116 FOR_KEY_STATEID = TSC_STATEID_TOUCH; 117 FOR_KEY_CHANGE = TSC_STATE_CHANGED; 118 } 119 else 120 { 121 objLock = 1; 122 pObjadd = 0; 123 } 124 } 125 } 126 break; 127 #endif 128 129 #if TOUCH_TOTAL_LNRTS > 0 130 case TSC_OBJ_LINEAR: 131 case TSC_OBJ_LINEARB: 132 case TSC_OBJ_ROTARY: 133 case TSC_OBJ_ROTARYB: 134 if (FOR_LINROT_STATEID == TSC_STATEID_DETECT) 135 { 136 if (FOR_LINROT_DXSLOCK == TSC_FALSE) 137 { 138 FOR_LINROT_STATEID = TSC_STATEID_TOUCH; 139 FOR_LINROT_CHANGE = TSC_STATE_CHANGED; 140 if ((!pObjadd) && (!objLock)) 141 { 142 pObjadd = pObj; 143 } 144 } 145 else 146 { 147 if (objLock) 148 { 149 FOR_LINROT_STATEID = TSC_STATEID_TOUCH; 150 FOR_LINROT_CHANGE = TSC_STATE_CHANGED; 151 } 152 else 153 { 154 objLock = 1; 155 pObjadd = 0; 156 } 157 } 158 } 159 break; 160 #endif 161 default: 162 break; 163 } 164 pObj++; 165 } 166 167 /* Change state from TOUCH to DETECT + DxsLock flag on the candidate object only */ 168 if (pObjadd) 169 { 170 TSC_Obj_ConfigGlobalObj(pObjadd); 171 172 switch (FOR_OBJ_TYPE) 173 { 174 #if TOUCH_TOTAL_KEYS > 0 175 case TSC_OBJ_TOUCHKEY: 176 case TSC_OBJ_TOUCHKEYB: 177 FOR_KEY_STATEID = TSC_STATEID_DETECT; 178 FOR_KEY_CHANGE = TSC_STATE_CHANGED; 179 FOR_KEY_DXSLOCK = TSC_TRUE; 180 break; 181 #endif 182 183 #if TOUCH_TOTAL_LNRTS > 0 184 case TSC_OBJ_LINEAR: 185 case TSC_OBJ_LINEARB: 186 case TSC_OBJ_ROTARY: 187 case TSC_OBJ_ROTARYB: 188 FOR_LINROT_STATEID = TSC_STATEID_DETECT; 189 FOR_LINROT_CHANGE = TSC_STATE_CHANGED; 190 FOR_LINROT_DXSLOCK = TSC_TRUE; 191 break; 192 #endif 193 default: 194 break; 195 } 196 } 197 #endif /*!< TOUCH_USE_DXS > 0 */ 198 } 199 200 /**@} end of group TSC_DXS_Functions */ 201 /**@} end of group TSC_DXS_Driver */ 202 /**@} end of group TSC_Driver_Library */ 203