summaryrefslogtreecommitdiff
path: root/Libraries/TouchSense/STMTouch_Driver/inc/tsl_linrot.h
blob: e0571b7562b7ecb45d425521aa1ba73756f6a4eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
/**
  ******************************************************************************
  * @file    tsl_linrot.h
  * @author  MCD Application Team
  * @version V1.4.4
  * @date    31-March-2014
  * @brief   This file contains external declarations of the tsl_linrot.c file.
  ******************************************************************************
  * @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.
  *
  ******************************************************************************
  */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __TSL_LINROT_H
#define __TSL_LINROT_H

/* Includes ------------------------------------------------------------------*/
#include "tsl_acq.h"
#include "tsl_time.h"

/* Exported types ------------------------------------------------------------*/

/** Contains all data related to Linear and Rotary sensor.
  * Variables of this structure type must be placed in RAM only.
  */
typedef struct
{
  TSL_StateId_enum_T     StateId;              /**< Current state identifier */
  TSL_tPosition_T        RawPosition;          /**< Raw position */
  TSL_tPosition_T        Position;             /**< Scaled position */
  TSL_tCounter_T         CounterDebounce;      /**< Counter for debounce and calibration management */ 
  unsigned int           CounterDTO       : 6; /**< Counter for DTO management (TSL_tCounter_T) */
  unsigned int           Change           : 1; /**< The State is different from the previous one (TSL_StateChange_enum_T) */
  unsigned int           PosChange        : 1; /**< The RawPosition/Position is different from the previous one (TSL_StateChange_enum_T) */
  unsigned int           CounterDirection : 6; /**< Counter for direction debounce management (TSL_tCounter_T) */
  unsigned int           DxSLock          : 1; /**< The State is locked by the DxS (TSL_Bool_enum_T) */
  unsigned int           Direction        : 1; /**< Movement direction (TSL_Bool_enum_T) */
}
TSL_LinRotData_T;

/** Contains all parameters related to Linear and Rotary sensor.
  * Variables of this structure type can be placed in RAM or ROM.
  */
typedef struct
{
  // Thresholds
#if TSLPRM_USE_PROX > 0
  TSL_tThreshold_T  ProxInTh;            /**< Proximity state in threshold */
  TSL_tThreshold_T  ProxOutTh;           /**< Proximity state out threshold */
#endif
  TSL_tThreshold_T  DetectInTh;          /**< Detection state in threshold */
  TSL_tThreshold_T  DetectOutTh;         /**< Detection state out threshold */
  TSL_tThreshold_T  CalibTh;             /**< Calibration state threshold */
  // Debounce counters
  TSL_tCounter_T    CounterDebCalib;     /**< Debounce counter to enter in Calibration state */
#if TSLPRM_USE_PROX > 0
  TSL_tCounter_T    CounterDebProx;      /**< Debounce counter to enter in Proximity state */
#endif
  TSL_tCounter_T    CounterDebDetect;    /**< Debounce counter to enter in Detect state */
  TSL_tCounter_T    CounterDebRelease;   /**< Debounce counter to enter in Release state */
  TSL_tCounter_T    CounterDebError;     /**< Debounce counter to enter in Error state */
  TSL_tCounter_T    CounterDebDirection; /**< Debounce counter for the direction change */
  // Other parameters
  TSL_tCounter_T    Resolution;          /**< Position resolution */
  TSL_tPosition_T   DirChangePos;        /**< Direction change position threshold */
}
TSL_LinRotParam_T;

/** Contains definition of a Linear and Rotary sensor.
  * Variables of this structure type can be placed in RAM or ROM.
  */
typedef struct
{
  TSL_LinRotData_T          *p_Data;    /**< Data (state id, counter, flags, ...) */
  TSL_LinRotParam_T         *p_Param;   /**< Parameters (thresholds, debounce, ...) */
  TSL_ChannelData_T         *p_ChD;     /**< First Channel Data (Meas, Ref, Delta, ...) */
  TSL_tNb_T                 NbChannels; /**< Number of channels */
  CONST uint16_t            *p_DeltaCoeff; /**< Coefficient to apply on Delta */
  CONST TSL_tsignPosition_T *p_PosOff;  /**< Position offset table */
  TSL_tNb_T                 SctComp;    /**< Sector Computation */
  TSL_tNb_T                 PosCorr;    /**< Position Correction */
  CONST TSL_State_T         *p_SM;      /**< State Machine */
  CONST TSL_LinRotMethods_T *p_Methods; /**< Methods */
}
TSL_LinRot_T;

/** Contains definition of a Basic Linear and Rotary sensor.
  * Variables of this structure type can be placed in RAM or ROM.
  * Basic sensor does not contain its own state machine and methods. It used
  * default ones instead to gain memory space.
  */
typedef struct
{
  TSL_LinRotData_T          *p_Data;    /**< Data (state id, counter, flags, ...) */
  TSL_LinRotParam_T         *p_Param;   /**< Parameters (thresholds, debounce, ...) */
  TSL_ChannelData_T         *p_ChD;     /**< First Channel Data (Meas, Ref, Delta, ...) */
  TSL_tNb_T                 NbChannels; /**< Number of channels */
  CONST uint16_t            *p_DeltaCoeff; /**< Coefficient to apply on Delta */
  CONST TSL_tsignPosition_T *p_PosOff;  /**< Position offset table */
  TSL_tNb_T                 SctComp;    /**< Sector Computation */
  TSL_tNb_T                 PosCorr;    /**< Position Correction */
}
TSL_LinRotB_T;

/* Exported variables --------------------------------------------------------*/
/* Exported macros -----------------------------------------------------------*/

/* Exported functions --------------------------------------------------------*/

// "Object methods" functions
void TSL_linrot_Init(void);
void TSL_linrot_Process(void);
TSL_Status_enum_T TSL_linrot_CalcPos(void);

// Utility functions
void TSL_linrot_SetStateCalibration(TSL_tCounter_T delay);
void TSL_linrot_SetStateOff(void);
#if !defined(TSLPRM_STM8TL5X) && !defined(STM8TL5X)
void TSL_linrot_SetStateBurstOnly(void);
#endif
TSL_StateId_enum_T TSL_linrot_GetStateId(void);
TSL_StateMask_enum_T TSL_linrot_GetStateMask(void);
TSL_tNb_T TSL_linrot_IsChanged(void);

// State machine functions
void TSL_linrot_CalibrationStateProcess(void);
void TSL_linrot_DebCalibrationStateProcess(void);
void TSL_linrot_ReleaseStateProcess(void);
void TSL_linrot_DebReleaseProxStateProcess(void);
void TSL_linrot_DebReleaseDetectStateProcess(void);
void TSL_linrot_DebReleaseTouchStateProcess(void);
void TSL_linrot_ProxStateProcess(void);
void TSL_linrot_DebProxStateProcess(void);
void TSL_linrot_DebProxDetectStateProcess(void);
void TSL_linrot_DebProxTouchStateProcess(void);
void TSL_linrot_DetectStateProcess(void);
void TSL_linrot_DebDetectStateProcess(void);
void TSL_linrot_TouchStateProcess(void);
void TSL_linrot_DebTouchStateProcess(void);
void TSL_linrot_ErrorStateProcess(void);
void TSL_linrot_DebErrorStateProcess(void);
void TSL_linrot_OffStateProcess(void);

// Position offset constant tables and corrections

extern CONST TSL_tsignPosition_T TSL_POSOFF_3CH_LIN_M1[3][3];
extern CONST TSL_tsignPosition_T TSL_POSOFF_3CH_LIN_M2[3][3];
extern CONST TSL_tsignPosition_T TSL_POSOFF_3CH_LIN_H[3][3];
extern CONST TSL_tsignPosition_T TSL_POSOFF_3CH_ROT_M[3][3];

extern CONST TSL_tsignPosition_T TSL_POSOFF_4CH_LIN_M1[4][4];
extern CONST TSL_tsignPosition_T TSL_POSOFF_4CH_LIN_M2[4][4];
extern CONST TSL_tsignPosition_T TSL_POSOFF_4CH_LIN_H[4][4];
extern CONST TSL_tsignPosition_T TSL_POSOFF_4CH_ROT_M[4][4];

extern CONST TSL_tsignPosition_T TSL_POSOFF_5CH_LIN_M1[5][5];
extern CONST TSL_tsignPosition_T TSL_POSOFF_5CH_LIN_M2[5][5];
extern CONST TSL_tsignPosition_T TSL_POSOFF_5CH_LIN_H[5][5];
extern CONST TSL_tsignPosition_T TSL_POSOFF_5CH_ROT_M[5][5];
extern CONST TSL_tsignPosition_T TSL_POSOFF_5CH_ROT_D[5][5];

extern CONST TSL_tsignPosition_T TSL_POSOFF_6CH_LIN_M1[6][6];
extern CONST TSL_tsignPosition_T TSL_POSOFF_6CH_LIN_M2[6][6];
extern CONST TSL_tsignPosition_T TSL_POSOFF_6CH_LIN_H[6][6];
extern CONST TSL_tsignPosition_T TSL_POSOFF_6CH_ROT_M[6][6];

#define TSL_SCTCOMP_3CH_LIN_M1 ((TSL_tNb_T)(128))
#define TSL_POSCORR_3CH_LIN_M1 ((TSL_tNb_T)( 64))
#define TSL_SCTCOMP_3CH_LIN_M2 ((TSL_tNb_T)(256))
#define TSL_POSCORR_3CH_LIN_M2 ((TSL_tNb_T)(256))

#define TSL_SCTCOMP_3CH_LIN_H  ((TSL_tNb_T)(128))
#define TSL_POSCORR_3CH_LIN_H  ((TSL_tNb_T)(128))

#define TSL_SCTCOMP_3CH_ROT_M  ((TSL_tNb_T)( 85))

#define TSL_SCTCOMP_4CH_LIN_M1 ((TSL_tNb_T)( 85))
#define TSL_POSCORR_4CH_LIN_M1 ((TSL_tNb_T)( 43))
#define TSL_SCTCOMP_4CH_LIN_M2 ((TSL_tNb_T)(128))
#define TSL_POSCORR_4CH_LIN_M2 ((TSL_tNb_T)(128))

#define TSL_SCTCOMP_4CH_LIN_H  ((TSL_tNb_T)( 85))
#define TSL_POSCORR_4CH_LIN_H  ((TSL_tNb_T)( 85))

#define TSL_SCTCOMP_4CH_ROT_M  ((TSL_tNb_T)( 64))

#define TSL_SCTCOMP_5CH_LIN_M1 ((TSL_tNb_T)( 64))
#define TSL_POSCORR_5CH_LIN_M1 ((TSL_tNb_T)( 32))
#define TSL_SCTCOMP_5CH_LIN_M2 ((TSL_tNb_T)( 85))
#define TSL_POSCORR_5CH_LIN_M2 ((TSL_tNb_T)( 85))

#define TSL_SCTCOMP_5CH_LIN_H  ((TSL_tNb_T)( 64))
#define TSL_POSCORR_5CH_LIN_H  ((TSL_tNb_T)( 64))

#define TSL_SCTCOMP_5CH_ROT_M  ((TSL_tNb_T)( 51))

#define TSL_SCTCOMP_5CH_ROT_D  ((TSL_tNb_T)( 26))

#define TSL_SCTCOMP_6CH_LIN_M1 ((TSL_tNb_T)( 51))
#define TSL_POSCORR_6CH_LIN_M1 ((TSL_tNb_T)( 25))
#define TSL_SCTCOMP_6CH_LIN_M2 ((TSL_tNb_T)( 64))
#define TSL_POSCORR_6CH_LIN_M2 ((TSL_tNb_T)( 64))

#define TSL_SCTCOMP_6CH_LIN_H  ((TSL_tNb_T)( 51))
#define TSL_POSCORR_6CH_LIN_H  ((TSL_tNb_T)( 51))

#define TSL_SCTCOMP_6CH_ROT_M  ((TSL_tNb_T)( 43))

#endif /* __TSL_LINROT_H */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/