]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_STM32L152_Discovery_IAR/ST_Code/Libraries/STMTouch_Driver/src/tsl_dxs.c
Add STM32L Discovery board project as a starting point to adapt to an RTOS demo.
[freertos] / FreeRTOS / Demo / CORTEX_STM32L152_Discovery_IAR / ST_Code / Libraries / STMTouch_Driver / src / tsl_dxs.c
1 /**\r
2   ******************************************************************************\r
3   * @file    tsl_dxs.c\r
4   * @author  MCD Application Team\r
5   * @version V1.3.2\r
6   * @date    22-January-2013\r
7   * @brief   This file contains all functions to manage the\r
8   *          Detection Exclusion System (DxS) algorithm.\r
9   ******************************************************************************\r
10   * @attention\r
11   *\r
12   * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>\r
13   *\r
14   * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");\r
15   * You may not use this file except in compliance with the License.\r
16   * You may obtain a copy of the License at:\r
17   *\r
18   *        http://www.st.com/software_license_agreement_liberty_v2\r
19   *\r
20   * Unless required by applicable law or agreed to in writing, software\r
21   * distributed under the License is distributed on an "AS IS" BASIS,\r
22   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
23   * See the License for the specific language governing permissions and\r
24   * limitations under the License.\r
25   *\r
26   ******************************************************************************\r
27   */\r
28 \r
29 /* Includes ------------------------------------------------------------------*/\r
30 #include "tsl_dxs.h"\r
31 #include "tsl_globals.h"\r
32 \r
33 /* Private typedefs ----------------------------------------------------------*/\r
34 /* Private defines -----------------------------------------------------------*/\r
35 \r
36 #define THIS_OBJ_TYPE       TSL_Globals.This_Obj->Type\r
37 \r
38 #define THIS_TKEY           TSL_Globals.This_TKey\r
39 #define THIS_TKEY_STATEID   TSL_Globals.This_TKey->p_Data->StateId\r
40 #define THIS_TKEY_DXSLOCK   TSL_Globals.This_TKey->p_Data->DxSLock\r
41 #define THIS_TKEY_CHANGE    TSL_Globals.This_TKey->p_Data->Change\r
42 \r
43 #define THIS_LINROT         TSL_Globals.This_LinRot\r
44 #define THIS_LINROT_STATEID TSL_Globals.This_LinRot->p_Data->StateId\r
45 #define THIS_LINROT_DXSLOCK TSL_Globals.This_LinRot->p_Data->DxSLock\r
46 #define THIS_LINROT_CHANGE  TSL_Globals.This_LinRot->p_Data->Change\r
47 \r
48 /* Private macros ------------------------------------------------------------*/\r
49 /* Private variables ---------------------------------------------------------*/\r
50 /* Private functions prototype -----------------------------------------------*/\r
51 \r
52 /**\r
53   * @brief Detection Exclusion System on the first object in detect state\r
54   * @param[in] objgrp  Pointer to the objects group to process\r
55   * @retval None\r
56   */\r
57 void TSL_dxs_FirstObj(CONST TSL_ObjectGroup_T *objgrp)\r
58 {\r
59 #if TSLPRM_USE_DXS > 0\r
60 \r
61   TSL_tIndex_T idx_obj;\r
62   CONST TSL_Object_T *pobj;\r
63   CONST TSL_Object_T *pobj_candidate = 0; // Candidate object for being in Detect state + DxSLock flag\r
64   TSL_tIndex_T obj_locked = 0; // Object with Lock flag\r
65 \r
66   // Exit if no object are in DETECT state.\r
67   if ((objgrp->StateMask & TSL_STATE_DETECT_BIT_MASK) == 0)\r
68   {\r
69     return;\r
70   }\r
71 \r
72   pobj = objgrp->p_Obj; // First object in the group\r
73 \r
74   // Process all objects\r
75   for (idx_obj = 0; idx_obj < objgrp->NbObjects; idx_obj++)\r
76   {\r
77 \r
78     // Assign global object\r
79     TSL_obj_SetGlobalObj(pobj);\r
80 \r
81     //--------------------------------------------------------------------------\r
82 #if TSLPRM_TOTAL_TKEYS > 0\r
83     if ((THIS_OBJ_TYPE == TSL_OBJ_TOUCHKEY) || (THIS_OBJ_TYPE == TSL_OBJ_TOUCHKEYB))\r
84     {\r
85       if (THIS_TKEY_STATEID == TSL_STATEID_DETECT)\r
86       {\r
87         if (THIS_TKEY_DXSLOCK == TSL_TRUE)\r
88         {\r
89           if (!obj_locked)\r
90           {\r
91             obj_locked = 1;\r
92             pobj_candidate = 0;\r
93           }\r
94           else\r
95           {\r
96             THIS_TKEY_STATEID = TSL_STATEID_TOUCH;\r
97             THIS_TKEY_CHANGE = TSL_STATE_CHANGED;\r
98           }\r
99         }\r
100         else\r
101         {\r
102           THIS_TKEY_STATEID = TSL_STATEID_TOUCH;\r
103           THIS_TKEY_CHANGE = TSL_STATE_CHANGED;\r
104           if ((!pobj_candidate) && (!obj_locked))\r
105           {\r
106             pobj_candidate = pobj;\r
107           }\r
108         }\r
109       }\r
110     }\r
111 #endif // TSLPRM_TOTAL_TKEYS > 0\r
112 \r
113     //--------------------------------------------------------------------------\r
114 #if TSLPRM_TOTAL_LNRTS > 0\r
115     if ((THIS_OBJ_TYPE == TSL_OBJ_LINEAR) || (THIS_OBJ_TYPE == TSL_OBJ_LINEARB) ||\r
116         (THIS_OBJ_TYPE == TSL_OBJ_ROTARY) || (THIS_OBJ_TYPE == TSL_OBJ_ROTARYB))\r
117     {\r
118       if (THIS_LINROT_STATEID == TSL_STATEID_DETECT)\r
119       {\r
120         if (THIS_LINROT_DXSLOCK == TSL_TRUE)\r
121         {\r
122           if (!obj_locked)\r
123           {\r
124             obj_locked = 1;\r
125             pobj_candidate = 0;\r
126           }\r
127           else\r
128           {\r
129             THIS_LINROT_STATEID = TSL_STATEID_TOUCH;\r
130             THIS_LINROT_CHANGE = TSL_STATE_CHANGED;\r
131           }\r
132         }\r
133         else\r
134         {\r
135           THIS_LINROT_STATEID = TSL_STATEID_TOUCH;\r
136           THIS_LINROT_CHANGE = TSL_STATE_CHANGED;\r
137           if ((!pobj_candidate) && (!obj_locked))\r
138           {\r
139             pobj_candidate = pobj;\r
140           }\r
141         }\r
142       }\r
143     }\r
144 #endif // TSLPRM_TOTAL_LNRTS > 0\r
145 \r
146     pobj++; // Next object\r
147 \r
148   } // // for all objects\r
149 \r
150   // Change state from TOUCH to DETECT + DxSLock flag on the candidate object only\r
151   if (pobj_candidate)\r
152   {\r
153 \r
154     // Assign global object\r
155     TSL_obj_SetGlobalObj(pobj_candidate);\r
156 \r
157 #if TSLPRM_TOTAL_TKEYS > 0\r
158     if ((THIS_OBJ_TYPE == TSL_OBJ_TOUCHKEY) || (THIS_OBJ_TYPE == TSL_OBJ_TOUCHKEYB))\r
159     {\r
160       THIS_TKEY_STATEID = TSL_STATEID_DETECT;\r
161       THIS_TKEY_CHANGE = TSL_STATE_CHANGED;\r
162       THIS_TKEY_DXSLOCK = TSL_TRUE;\r
163     }\r
164 #endif // TSLPRM_TOTAL_TKEYS > 0\r
165 \r
166 #if TSLPRM_TOTAL_LNRTS > 0\r
167     if ((THIS_OBJ_TYPE == TSL_OBJ_LINEAR) || (THIS_OBJ_TYPE == TSL_OBJ_LINEARB) ||\r
168         (THIS_OBJ_TYPE == TSL_OBJ_ROTARY) || (THIS_OBJ_TYPE == TSL_OBJ_ROTARYB))\r
169     {\r
170       THIS_LINROT_STATEID = TSL_STATEID_DETECT;\r
171       THIS_LINROT_CHANGE = TSL_STATE_CHANGED;\r
172       THIS_LINROT_DXSLOCK = TSL_TRUE;\r
173     }\r
174 #endif // TSLPRM_TOTAL_LNRTS > 0\r
175 \r
176   }\r
177 \r
178 #endif // TSLPRM_USE_DXS > 0\r
179 }\r
180 \r
181 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r