1 /*!
2  * @file        tsc_types.h
3  *
4  * @brief       This file contains all general structures definition.
5  *
6  * @version     V1.0.1
7  *
8  * @date        2022-09-20
9  *
10  * @attention
11  *
12  *  Copyright (C) 2020-2022 Geehy Semiconductor
13  *
14  *  You may not use this file except in compliance with the
15  *  GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE).
16  *
17  *  The program is only for reference, which is distributed in the hope
18  *  that it will be useful and instructional for customers to develop
19  *  their software. Unless required by applicable law or agreed to in
20  *  writing, the program is distributed on an "AS IS" BASIS, WITHOUT
21  *  ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied.
22  *  See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions
23  *  and limitations under the License.
24  */
25 
26 /* Define to prevent recursive inclusion */
27 #ifndef __TSC_TYPES_H
28 #define __TSC_TYPES_H
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 /** @addtogroup TSC_Driver_Library TSC Driver Library
35   @{
36 */
37 
38 /** @addtogroup TSC_Types_Driver TSC Types Driver
39   @{
40 */
41 
42 /** @defgroup TSC_Types_Macros Macros
43   @{
44 */
45 
46 #define TSC_ACQ_STATUS_ERROR_MASK (0x02) /*!< Associated to TSC_ACQ_STATUS_T */
47 
48 #define TSC_OBJ_STATUS_ACQ_MASK   (0x01) /*!< Associated to TSC_OBJ_STATUS_T */
49 #define TSC_OBJ_STATUS_BURST_MASK (0x02) /*!< Associated to TSC_OBJ_STATUS_T */
50 
51 
52 #define TSC_STATE_ERROR_BIT_MASK    (0x80) /*!< Associated to TSC_STATEMASK_T */
53 #define TSC_STATE_OFF_BIT_MASK      (0x40) /*!< Associated to TSC_STATEMASK_T */
54 #define TSC_STATE_DEBOUNCE_BIT_MASK (0x20) /*!< Associated to TSC_STATEMASK_T */
55 #define TSC_STATE_CALIB_BIT_MASK    (0x10) /*!< Associated to TSC_STATEMASK_T */
56 #define TSC_STATE_TOUCH_BIT_MASK    (0x08) /*!< Associated to TSC_STATEMASK_T */
57 #define TSC_STATE_DETECT_BIT_MASK   (0x04) /*!< Associated to TSC_STATEMASK_T */
58 #define TSC_STATE_PROX_BIT_MASK     (0x02) /*!< Associated to TSC_STATEMASK_T */
59 #define TSC_STATE_RELEASE_BIT_MASK  (0x01) /*!< Associated to TSC_STATEMASK_T */
60 
61 /**@} end of group TSC_Types_Macros */
62 
63 /** @defgroup TSC_Types_Enumerations Enumerations
64   @{
65 */
66 
67 /**
68  * @brief    Generic Boolean status
69  */
70 typedef enum
71 {
72     TSC_FALSE = 0, /*!< A False value */
73     TSC_TRUE  = 1  /*!< A True value */
74 } TSC_BOOL_T;
75 
76 /**
77  * @brief    Generic status returned by functions
78  */
79 typedef enum
80 {
81     TSC_STATUS_OK      = 0, /*!< The function has been executed correctly */
82     TSC_STATUS_BUSY    = 1, /*!< The function is in a Busy state */
83     TSC_STATUS_ERROR   = 2  /*!< The function has been executed not correctly */
84 } TSC_STATUS_T;
85 
86 /**
87  * @brief    DataReady status : 1 bit
88  *           Used by acquisition to indicate if a new measurement is ready or not.
89  */
90 typedef enum
91 {
92     TSC_DATA_NOT_READY = 0, /*!< No new measurement or measurement treated */
93     TSC_DATA_READY     = 1  /*!< A new measurement is ready */
94 } TSC_DATA_T;
95 
96 /**
97  * @brief    State change status
98  */
99 typedef enum
100 {
101     TSC_STATE_NOT_CHANGED = 0, /*!< The object has the same state */
102     TSC_STATE_CHANGED     = 1  /*!< The object has changed of state */
103 } TSC_STATE_T;
104 
105 
106 /**
107  * @brief    Acquisition status
108  */
109 typedef enum
110 {
111     TSC_ACQ_STATUS_OK        = 0,                                   /*!< The acquisition is correct */
112     TSC_ACQ_STATUS_NOISE     = 1,                                   /*!< Noise detected during the acquisition */
113     TSC_ACQ_STATUS_ERROR_MIN = TSC_ACQ_STATUS_ERROR_MASK,           /*!< The measure is below the minimum threshold */
114     TSC_ACQ_STATUS_ERROR_MAX = (TSC_ACQ_STATUS_ERROR_MASK | 0x01)   /*!< The measure is above the maximum threshold */
115 } TSC_ACQ_STATUS_T;
116 
117 /**
118  * @brief    Block status
119  */
120 typedef enum
121 {
122     TSC_BLOCK_STATUS_DISABLED = 0, /*!< The block is disabled */
123     TSC_BLOCK_STATUS_ENABLED  = 1  /*!< The block is enabled */
124 } TSC_BLOCK_STATUS_T;
125 
126 /**
127  * @brief    Zone status
128  */
129 typedef enum
130 {
131     TSC_ZONE_STATUS_DISABLED = 0, /*!< The zone is disabled */
132     TSC_ZONE_STATUS_ENABLED  = 1  /*!< The zone is enabled */
133 } TSC_ZONE_STATUS_T;
134 
135 /**
136  * @brief    Object status
137  */
138 typedef enum
139 {
140     TSC_OBJ_STATUS_OFF        = 0,                                                    /*!< No burst and no acquisition */
141     TSC_OBJ_STATUS_BURST_ONLY = TSC_OBJ_STATUS_BURST_MASK,                            /*!< Burst only */
142     TSC_OBJ_STATUS_ON         = (TSC_OBJ_STATUS_BURST_MASK | TSC_OBJ_STATUS_ACQ_MASK) /*!< Burst and acquisition */
143 } TSC_OBJ_STATUS_T;
144 
145 /**
146  * @brief    Object state masks
147  */
148 typedef enum
149 {
150     /* Calibration states */
151     TSC_STATEMASK_CALIB              = TSC_STATE_CALIB_BIT_MASK,                                                               /*!< 0x10 */
152     TSC_STATEMASK_DEB_CALIB          = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_CALIB_BIT_MASK),                               /*!< 0x30 */
153     /* Release states */
154     TSC_STATEMASK_RELEASE            = TSC_STATE_RELEASE_BIT_MASK,                                                             /*!< 0x01 */
155     TSC_STATEMASK_DEB_RELEASE_PROX   = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_RELEASE_BIT_MASK | TSC_STATE_PROX_BIT_MASK),   /*!< 0x23 */
156     TSC_STATEMASK_DEB_RELEASE_DETECT = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_RELEASE_BIT_MASK | TSC_STATE_DETECT_BIT_MASK), /*!< 0x25 */
157     TSC_STATEMASK_DEB_RELEASE_TOUCH  = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_RELEASE_BIT_MASK | TSC_STATE_TOUCH_BIT_MASK),  /*!< 0x29 */
158     /* Proximity states */
159     TSC_STATEMASK_PROX               = TSC_STATE_PROX_BIT_MASK,                                                                /*!< 0x02 */
160     TSC_STATEMASK_DEB_PROX           = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_PROX_BIT_MASK),                                /*!< 0x22 */
161     TSC_STATEMASK_DEB_PROX_DETECT    = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_PROX_BIT_MASK | TSC_STATE_DETECT_BIT_MASK),    /*!< 0x26 */
162     TSC_STATEMASK_DEB_PROX_TOUCH     = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_PROX_BIT_MASK | TSC_STATE_TOUCH_BIT_MASK),     /*!< 0x2A */
163     /* Detect states */
164     TSC_STATEMASK_DETECT             = TSC_STATE_DETECT_BIT_MASK,                                                              /*!< 0x04 */
165     TSC_STATEMASK_DEB_DETECT         = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_DETECT_BIT_MASK),                              /*!< 0x24 */
166     /* Touch state */
167     TSC_STATEMASK_TOUCH              = TSC_STATE_TOUCH_BIT_MASK,                                                               /*!< 0x08 */
168     /* Error states */
169     TSC_STATEMASK_ERROR              = TSC_STATE_ERROR_BIT_MASK,                                                               /*!< 0x80 */
170     TSC_STATEMASK_DEB_ERROR_CALIB    = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_ERROR_BIT_MASK | TSC_STATE_CALIB_BIT_MASK),    /*!< 0xB0 */
171     TSC_STATEMASK_DEB_ERROR_RELEASE  = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_ERROR_BIT_MASK | TSC_STATE_RELEASE_BIT_MASK),  /*!< 0xA1 */
172     TSC_STATEMASK_DEB_ERROR_PROX     = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_ERROR_BIT_MASK | TSC_STATE_PROX_BIT_MASK),     /*!< 0xA2 */
173     TSC_STATEMASK_DEB_ERROR_DETECT   = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_ERROR_BIT_MASK | TSC_STATE_DETECT_BIT_MASK),   /*!< 0xA4 */
174     TSC_STATEMASK_DEB_ERROR_TOUCH    = (TSC_STATE_DEBOUNCE_BIT_MASK | TSC_STATE_ERROR_BIT_MASK | TSC_STATE_TOUCH_BIT_MASK),    /*!< 0xA8 */
175     /* OFF state */
176     TSC_STATEMASK_OFF                = TSC_STATE_OFF_BIT_MASK,                                                                 /*!< 0x40 */
177     /* Other states not associated to a state id */
178     TSC_STATEMASK_ACTIVE             = (TSC_STATE_PROX_BIT_MASK | TSC_STATE_DETECT_BIT_MASK | TSC_STATE_TOUCH_BIT_MASK | TSC_STATE_CALIB_BIT_MASK | TSC_STATE_DEBOUNCE_BIT_MASK), /*!< 0x3E */
179     TSC_STATEMASK_UNKNOWN            = 0                                                                                       /*!< 0x00 */
180 } TSC_STATEMASK_T;
181 
182 /**
183  * @brief    Object state identifiers
184  */
185 typedef enum
186 {
187     /* Calibration states */
188     TSC_STATEID_CALIB              = 0,  /*!<  0 - Object is in Calibration */
189     TSC_STATEID_DEB_CALIB          = 1,  /*!<  1 - Object is in Debounce Calibration */
190     /* Release states */
191     TSC_STATEID_RELEASE            = 2,  /*!<  2 - Object is released */
192     TSC_STATEID_DEB_RELEASE_PROX   = 3,  /*!<  3 - Object is in Debounce Release from Proximity state */
193     TSC_STATEID_DEB_RELEASE_DETECT = 4,  /*!<  4 - Object is in Debounce Release from Detect state */
194     TSC_STATEID_DEB_RELEASE_TOUCH  = 5,  /*!<  5 - Object is in Debounce Release from Touch state */
195     /* Proximity states */
196     TSC_STATEID_PROX               = 6,  /*!<  6 - Object is in Proximity */
197     TSC_STATEID_DEB_PROX           = 7,  /*!<  7 - Object is in Debounce Proximity from Release state */
198     TSC_STATEID_DEB_PROX_DETECT    = 8,  /*!<  8 - Object is in Debounce Proximity from Detect state */
199     TSC_STATEID_DEB_PROX_TOUCH     = 9,  /*!<  9 - Object is in Debounce Proximity from Detect state */
200     /* Detect states */
201     TSC_STATEID_DETECT             = 10, /*!< 10 - Object is in Detect */
202     TSC_STATEID_DEB_DETECT         = 11, /*!< 11 - Object is in Debounce Detect */
203     /* Touch state */
204     TSC_STATEID_TOUCH              = 12, /*!< 12 - Object is in Touch */
205     /* Error states */
206     TSC_STATEID_ERROR              = 13, /*!< 13 - Object is in Error */
207     TSC_STATEID_DEB_ERROR_CALIB    = 14, /*!< 14 - Object is in Debounce Error from Calibration */
208     TSC_STATEID_DEB_ERROR_RELEASE  = 15, /*!< 15 - Object is in Debounce Error from Release */
209     TSC_STATEID_DEB_ERROR_PROX     = 16, /*!< 16 - Object is in Debounce Error from Proximity */
210     TSC_STATEID_DEB_ERROR_DETECT   = 17, /*!< 17 - Object is in Debounce Error from Detect */
211     TSC_STATEID_DEB_ERROR_TOUCH    = 18, /*!< 18 - Object is in Debounce Error from Touch */
212     /* Other states */
213     TSC_STATEID_OFF                = 19  /*!< 19 - Object is OFF (no burst, no acquisition) */
214 } TSC_STATEID_T;
215 
216 /**@} end of group TSC_Types_Enumerations */
217 
218 /** @defgroup TSC_Types_Structures Structures
219   @{
220 */
221 
222 /**
223  * @brief    Object state
224  */
225 typedef struct
226 {
227     TSC_STATEMASK_T StateMask; /*!< Current state mask */
228     void(* StateFunc)(void);   /*!< Function executed in the state */
229 } TSC_State_T;
230 
231 /**
232  * @brief    Touchkey methods
233  */
234 typedef struct
235 {
236     void(* Config)(void);  /*!< Used to configure the TouchKey sensor */
237     void(* Process)(void); /*!< Used to execute the TouchKey sensor state machine */
238 } TSC_TouchKeyMethods_T;
239 
240 /**
241  * @brief    Linear/Rotary methods
242  */
243 typedef struct
244 {
245     void(* Config)(void);               /*!< Used to configure the Linear/Rotary sensor */
246     void(* Process)(void);              /*!< Used to execute the Linear/Rotary sensor state machine */
247     TSC_STATUS_T(* CalcPosition)(void); /*!< Used to calculate the Linear/Rotary sensor position */
248 } TSC_LinRotMethods_T;
249 
250 /**@} end of group TSC_Types_Structures */
251 
252 /** @defgroup TSC_Types_Variables Variables
253   @{
254 */
255 
256 /**@} end of group TSC_Types_Variables */
257 
258 /** @defgroup TSC_Types_Functions Functions
259   @{
260 */
261 
262 /**@} end of group TSC_Types_Functions */
263 
264 #ifdef __cplusplus
265 }
266 #endif
267 
268 #endif /* __TSC_TYPES_H */
269 
270 /**@} end of group TSC_Types_Driver */
271 /**@} end of group TSC_Driver_Library */
272