summaryrefslogtreecommitdiff
path: root/Libraries/TouchSense/STMTouch_Driver/src
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/TouchSense/STMTouch_Driver/src')
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl.c61
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_acq.c373
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32f0xx.c1012
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32f3xx.c1148
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32l1xx_hw.c862
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32l1xx_sw.c996
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm8l_hw.c888
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm8l_sw.c1426
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm8tl5x.c906
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_dxs.c181
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_ecs.c332
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_filter.c137
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_globals.c33
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_linrot.c2103
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_object.c258
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_time.c174
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm32f0xx.c107
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm32f3xx.c55
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm32l1xx.c55
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm8l.c108
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm8tl5x.c104
-rw-r--r--Libraries/TouchSense/STMTouch_Driver/src/tsl_touchkey.c1089
22 files changed, 0 insertions, 12408 deletions
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl.c
deleted file mode 100644
index 45ab841..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains the STMTouch Driver main functions.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-/* Private macros ------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Private functions prototype -----------------------------------------------*/
-
-/**
- * @brief Initializes the TS interface.
- * @param bank Array holding all the banks
- * @retval Status
- */
-TSL_Status_enum_T TSL_Init(CONST TSL_Bank_T *bank)
-{
- TSL_Status_enum_T retval;
-
- // Get banks array
- TSL_Globals.Bank_Array = bank;
-
- // Initialization of the timing module
- retval = TSL_tim_Init();
-
- if (retval == TSL_STATUS_OK)
- {
- // Initialization of the acquisition module
- retval = TSL_acq_Init();
- }
-
- return retval;
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq.c
deleted file mode 100644
index 85156ec..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq.c
+++ /dev/null
@@ -1,373 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_acq.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the acquisition in general.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_acq.h"
-#include "tsl_globals.h"
-#include "stm32f0xx_conf.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-
-/* Private macros ------------------------------------------------------------*/
-#define IS_BANK_INDEX_OK(INDEX) (((INDEX) == 0) || (((INDEX) > 0) && ((INDEX) < TSLPRM_TOTAL_BANKS)))
-
-/* Private variables ---------------------------------------------------------*/
-/* Private functions prototype -----------------------------------------------*/
-
-/**
- * @brief Read all channels measurement of a Bank, calculate Delta
- * @param[in] idx_bk Index of the Bank to access
- * @param[in] mfilter Pointer to the Measure filter function
- * @param[in] dfilter Pointer to the Delta filter function
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_BankGetResult(TSL_tIndex_T idx_bk, TSL_pFuncMeasFilter_T mfilter, TSL_pFuncDeltaFilter_T dfilter)
-{
- TSL_Status_enum_T retval = TSL_STATUS_OK;
- TSL_tIndex_T idx_ch;
- TSL_tIndexDest_T idx_dest;
- TSL_tMeas_T old_meas, new_meas;
- TSL_tDelta_T new_delta;
- CONST TSL_Bank_T *bank = &(TSL_Globals.Bank_Array[idx_bk]);
- CONST TSL_ChannelDest_T *pchDest = bank->p_chDest;
- CONST TSL_ChannelSrc_T *pchSrc = bank->p_chSrc;
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-
- // For all channels in the bank copy the measure + calculate delta and store them.
- for (idx_ch = 0; idx_ch < bank->NbChannels; idx_ch++)
- {
-
- // Get the Destination Index of the current channel
- idx_dest = pchDest->IdxDest;
-
- if (bank->p_chData[idx_dest].Flags.ObjStatus == TSL_OBJ_STATUS_ON)
- {
-
- // Initialize flag to inform the Object of that a new data is ready
- bank->p_chData[idx_dest].Flags.DataReady = TSL_DATA_READY;
-
- // Get the new measure (the access is different between acquisitions)
- new_meas = TSL_acq_GetMeas(pchSrc->IdxSrc);
-
- // Store last measure for the filter below
-#if TSLPRM_USE_MEAS > 0
- old_meas = bank->p_chData[idx_dest].Meas;
-#else
- old_meas = new_meas;
-#endif
-
- // Store the new measure
-#if TSLPRM_USE_MEAS > 0
- bank->p_chData[idx_dest].Meas = new_meas;
-#endif
-
- // Check acquisition value min/max and set acquisition status flag
- if (new_meas < TSL_Params.AcqMin)
- {
- bank->p_chData[idx_dest].Flags.AcqStatus = TSL_ACQ_STATUS_ERROR_MIN;
- bank->p_chData[idx_dest].Delta = 0;
- retval = TSL_STATUS_ERROR;
- }
- else
- {
- if (new_meas > TSL_Params.AcqMax)
- {
- bank->p_chData[idx_dest].Flags.AcqStatus = TSL_ACQ_STATUS_ERROR_MAX;
- bank->p_chData[idx_dest].Delta = 0;
- retval = TSL_STATUS_ERROR;
- }
- else // The measure is OK
- {
- if (TSL_acq_UseFilter(&bank->p_chData[idx_dest]))
- {
- // Apply Measure filter if it exists
- if (mfilter)
- {
- new_meas = mfilter(old_meas, new_meas);
- // Store the measure (optional - used for debug purpose)
-#if TSLPRM_USE_MEAS > 0
- bank->p_chData[idx_dest].Meas = new_meas;
-#endif
- }
-
- // Calculate the new Delta
- new_delta = TSL_acq_ComputeDelta(bank->p_chData[idx_dest].Ref, new_meas);
-
- // Check Noise (TSL_ACQ_STATUS_OK if no Noise or if Noise detection is not supported)
- bank->p_chData[idx_dest].Flags.AcqStatus = TSL_acq_CheckNoise();
-
- // Apply Delta filter if it exists
- if (dfilter)
- {
- bank->p_chData[idx_dest].Delta = dfilter(new_delta);
- }
- else
- {
- bank->p_chData[idx_dest].Delta = new_delta;
- }
- }
- else
- {
- // Calculate the new Delta
- bank->p_chData[idx_dest].Delta = TSL_acq_ComputeDelta(bank->p_chData[idx_dest].Ref, new_meas);
-
- // Check Noise (TSL_ACQ_STATUS_OK if no Noise or if Noise detection is not supported)
- bank->p_chData[idx_dest].Flags.AcqStatus = TSL_acq_CheckNoise();
- }
- }
- }
- }
-
- // Next channel
- pchDest++;
- pchSrc++;
-
- }
-
- return retval;
-}
-
-
-/**
- * @brief Calibrate a Bank
- * @param[in] idx_bk Index of the Bank to access
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_BankCalibrate(TSL_tIndex_T idx_bk)
-{
- TSL_Status_enum_T retval;
- TSL_Status_enum_T acq_status;
- TSL_tIndex_T idx_ch;
- TSL_tIndexDest_T idx_dest;
- TSL_tMeas_T new_meas;
- static TSL_tIndex_T calibration_ongoing = 0;
- static TSL_tNb_T calibration_done = 0;
- static TSL_tNb_T div;
- CONST TSL_Bank_T *bank;
- CONST TSL_ChannelDest_T *pchDest; // Pointer to the current channel
- CONST TSL_ChannelSrc_T *pchSrc; // Pointer to the current channel
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-
- bank = &(TSL_Globals.Bank_Array[idx_bk]);
-
- if (calibration_ongoing == 0)
- {
- switch (TSL_Params.NbCalibSamples)
- {
- case 4:
- div = 2;
- break;
- case 16:
- div = 4;
- break;
- default:
- TSL_Params.NbCalibSamples = 8;
- div = 3;
- break;
- }
- // Clear data for all channels of the bank
- TSL_acq_BankClearData(idx_bk);
- // Configure bank
- if (TSL_acq_BankConfig(idx_bk) == TSL_STATUS_OK)
- {
- // Start acquisition
- TSL_acq_BankStartAcq();
- calibration_ongoing = 1; // Calibration started
- calibration_done = TSL_Params.NbCalibSamples;
- retval = TSL_STATUS_BUSY;
- }
- else
- {
- // Stop calibration
- // Clear data for all channels of the bank
- TSL_acq_BankClearData(idx_bk);
- calibration_ongoing = 0;
- retval = TSL_STATUS_ERROR;
- }
-
- }
- else // Calibration is on-going
- {
- // Check End of Acquisition
- acq_status = TSL_acq_BankWaitEOC();
- if (acq_status == TSL_STATUS_OK)
- {
-
- // Get the first channel of the bank
- pchDest = bank->p_chDest;
- pchSrc = bank->p_chSrc;
-
- // Get new measurement for all channels of the bank
- for (idx_ch = 0; idx_ch < bank->NbChannels; idx_ch++)
- {
-
- // Get index of the current channel
- idx_dest = pchDest->IdxDest;
-
- // Get the new measure (the access is different between acquisitions)
- new_meas = TSL_acq_GetMeas(pchSrc->IdxSrc);
-
- // Check min/max and set status flag
- if ((new_meas < TSL_Params.AcqMin) || (new_meas > TSL_Params.AcqMax))
- {
- // Stop calibration
- // Clear data for all channels of the bank
- TSL_acq_BankClearData(idx_bk);
- calibration_ongoing = 0;
- return TSL_STATUS_ERROR;
- }
- else
- {
- // Add the measure
- bank->p_chData[idx_dest].Ref += new_meas;
- }
-
- // Next channel
- pchDest++;
- pchSrc++;
- }
-
- // Check that we have all the needed measurements
- calibration_done--;
- if (calibration_done == 0)
- {
-
- // Get the first channel of the bank
- pchDest = bank->p_chDest;
-
- // Calculate the Reference for all channels of the bank
- for (idx_ch = 0; idx_ch < bank->NbChannels; idx_ch++)
- {
- // Get index of the current channel
- idx_dest = pchDest->IdxDest;
- // Divide the Reference by the number of samples
- bank->p_chData[idx_dest].Ref >>= div;
- // Next channel
- pchDest++;
- }
-
- // End
- calibration_ongoing = 0;
- retval = TSL_STATUS_OK;
- }
- else // Restart a new measurement on the bank
- {
- TSL_acq_BankStartAcq();
- retval = TSL_STATUS_BUSY;
- }
- }
- else
- if (acq_status == TSL_STATUS_ERROR)
- {
- // Stop calibration
- // Clear data for all channels of the bank
- TSL_acq_BankClearData(idx_bk);
- calibration_ongoing = 0;
- retval = TSL_STATUS_ERROR;
- }
- else
- {
- retval = TSL_STATUS_BUSY;
- }
- }
-
- return retval;
-}
-
-
-/**
- * @brief Clear Reference and Delta on all channels of a Bank
- * @param[in] idx_bk Index of the Bank to access
- * @retval None
- */
-void TSL_acq_BankClearData(TSL_tIndex_T idx_bk)
-{
- TSL_tIndex_T idx_ch;
- TSL_tIndexDest_T idx_Dest;
- CONST TSL_Bank_T *bank = &(TSL_Globals.Bank_Array[idx_bk]);
- CONST TSL_ChannelDest_T *pchDest = bank->p_chDest;
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-
- // For all channels of the bank
- for (idx_ch = 0; idx_ch < bank->NbChannels; idx_ch++)
- {
- idx_Dest = pchDest->IdxDest;
- bank->p_chData[idx_Dest].Ref = 0;
- bank->p_chData[idx_Dest].Delta = 0;
- pchDest++; // Next channel
- }
-}
-
-
-#if TSLPRM_USE_ZONE > 0
-
-/**
- * @brief Configures a Zone.
- * @param[in] zone Zone to configure
- * @param[in] idx_bk Bank index in the zone to configure
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_ZoneConfig(CONST TSL_Zone_T *zone, TSL_tIndex_T idx_bk)
-{
- TSL_Status_enum_T retval;
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-
- TSL_Globals.This_Zone = zone;
-
- do
- {
- retval = TSL_acq_BankConfig(zone->BankIndex[idx_bk]);
- TSL_Globals.This_Bank = zone->BankIndex[idx_bk];
- idx_bk++;
- }
- while ((idx_bk < zone->NbBanks) && (retval == TSL_STATUS_ERROR));
-
- TSL_Globals.Index_In_This_Zone = idx_bk;
-
-#if TSLPRM_PXS_LOW_POWER_MODE > 0
- if (idx_bk < zone->NbBanks)
- {
- resetPXSLowPower();
- }
-#endif
-
- return(retval);
-
-}
-
-#endif
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32f0xx.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32f0xx.c
deleted file mode 100644
index 24271de..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32f0xx.c
+++ /dev/null
@@ -1,1012 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_acq_stm32f0xx.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the TSC acquisition
- * on STM32F0xx products.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_acq_stm32f0xx.h"
-#include "tsl_globals.h"
-#include "stm32f0xx_it.h"
-#include "stm32f0xx_gpio.h"
-#include "stm32f0xx_conf.h"
-#include "stm32f0xx_misc.h"
-#include "stm32f0xx_rtc.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-
-#define NU (0) // Not Used IO
-#define CHANNEL (1) // Channel IO
-#define SHIELD (2) // Shield IO (= Channel IO but not acquired)
-#define SAMPCAP (3) // Sampling Capacitor IO
-
-/* Private macros ------------------------------------------------------------*/
-
-// Used by assert
-#define IS_BANK_INDEX_OK(INDEX) (((INDEX) == 0) || (((INDEX) > 0) && ((INDEX) < TSLPRM_TOTAL_BANKS)))
-#define IS_SRC_INDEX_0_5_OK(INDEX) (((INDEX) == 0) || (((INDEX) > 0) && ((INDEX) < 6)))
-#define IS_SRC_INDEX_0_7_OK(INDEX) (((INDEX) == 0) || (((INDEX) > 0) && ((INDEX) < 8)))
-
-/* Private variables ---------------------------------------------------------*/
-uint32_t DelayDischarge;
-
-/* Private functions prototype -----------------------------------------------*/
-void SoftDelay(uint32_t val);
-
-/**
- * @brief Initializes the TouchSensing GPIOs.
- * @param None
- * @retval None
- */
-void TSL_acq_InitGPIOs(void)
-{
-
- GPIO_InitTypeDef GPIO_InitStructure;
- uint32_t tmp_value_0;
- uint32_t tmp_value_1;
-
- //====================
- // GPIOs configuration
- //====================
-
- // Enable GPIOs clocks
- RCC->AHBENR |= (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN
-#if (TSC_GROUP7_ENABLED > 0) || (TSC_GROUP8_ENABLED > 0)
- | RCC_AHBENR_GPIODEN | RCC_AHBENR_GPIOEEN
-#endif
- );
-
- // Alternate function Output Open-Drain for Sampling Capacitor IOs
- //----------------------------------------------------------------
-
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
-
- // GPIOA
- GPIO_InitStructure.GPIO_Pin = 0;
-#if TSLPRM_TSC_GROUP1_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_0;
-#endif
-#if TSLPRM_TSC_GROUP1_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_1;
-#endif
-#if TSLPRM_TSC_GROUP1_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_2;
-#endif
-#if TSLPRM_TSC_GROUP1_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if TSLPRM_TSC_GROUP2_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if TSLPRM_TSC_GROUP2_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_5;
-#endif
-#if TSLPRM_TSC_GROUP2_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_6;
-#endif
-#if TSLPRM_TSC_GROUP2_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_7;
-#endif
-#if TSLPRM_TSC_GROUP4_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_9;
-#endif
-#if TSLPRM_TSC_GROUP4_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_10;
-#endif
-#if TSLPRM_TSC_GROUP4_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_11;
-#endif
-#if TSLPRM_TSC_GROUP4_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_12;
-#endif
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- // GPIOB
- GPIO_InitStructure.GPIO_Pin = 0;
-#if TSLPRM_TSC_GROUP3_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_0;
-#endif
-#if TSLPRM_TSC_GROUP3_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_1;
-#endif
-#if TSLPRM_TSC_GROUP3_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_2;
-#endif
-#if TSLPRM_TSC_GROUP5_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if TSLPRM_TSC_GROUP5_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if TSLPRM_TSC_GROUP5_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_6;
-#endif
-#if TSLPRM_TSC_GROUP5_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_7;
-#endif
-#if TSLPRM_TSC_GROUP6_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_11;
-#endif
-#if TSLPRM_TSC_GROUP6_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_12;
-#endif
-#if TSLPRM_TSC_GROUP6_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_13;
-#endif
-#if TSLPRM_TSC_GROUP6_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_14;
-#endif
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- // GPIOC
-#if TSLPRM_TSC_GROUP3_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-#endif
-
-#if (TSC_GROUP8_ENABLED > 0)
- // GPIOD
- GPIO_InitStructure.GPIO_Pin = 0;
-#if TSLPRM_TSC_GROUP8_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_12;
-#endif
-#if TSLPRM_TSC_GROUP8_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_13;
-#endif
-#if TSLPRM_TSC_GROUP8_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_14;
-#endif
-#if TSLPRM_TSC_GROUP8_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_15;
-#endif
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-#endif // TSC_GROUP8_ENABLED
-
-#if (TSC_GROUP7_ENABLED > 0)
-// GPIOE
- GPIO_InitStructure.GPIO_Pin = 0;
-#if TSLPRM_TSC_GROUP7_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_2;
-#endif
-#if TSLPRM_TSC_GROUP7_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if TSLPRM_TSC_GROUP7_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if TSLPRM_TSC_GROUP7_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_5;
-#endif
- GPIO_Init(GPIOE, &GPIO_InitStructure);
-#endif // TSC_GROUP7_ENABLED
-
- // Alternate function Output Push-Pull for Channel and Shield IOs
- //---------------------------------------------------------------
-
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-
- // GPIOA
- GPIO_InitStructure.GPIO_Pin = 0;
-#if (TSLPRM_TSC_GROUP1_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP1_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_0;
-#endif
-#if (TSLPRM_TSC_GROUP1_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP1_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_1;
-#endif
-#if (TSLPRM_TSC_GROUP1_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP1_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_2;
-#endif
-#if (TSLPRM_TSC_GROUP1_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP1_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if (TSLPRM_TSC_GROUP2_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP2_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if (TSLPRM_TSC_GROUP2_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP2_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_5;
-#endif
-#if (TSLPRM_TSC_GROUP2_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP2_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_6;
-#endif
-#if (TSLPRM_TSC_GROUP2_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP2_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_7;
-#endif
-#if (TSLPRM_TSC_GROUP4_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP4_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_9;
-#endif
-#if (TSLPRM_TSC_GROUP4_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP4_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_10;
-#endif
-#if (TSLPRM_TSC_GROUP4_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP4_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_11;
-#endif
-#if (TSLPRM_TSC_GROUP4_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP4_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_12;
-#endif
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- // GPIOB
- GPIO_InitStructure.GPIO_Pin = 0;
-#if (TSLPRM_TSC_GROUP3_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP3_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_0;
-#endif
-#if (TSLPRM_TSC_GROUP3_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP3_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_1;
-#endif
-#if (TSLPRM_TSC_GROUP3_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP3_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_2;
-#endif
-#if (TSLPRM_TSC_GROUP5_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP5_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if (TSLPRM_TSC_GROUP5_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP5_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if (TSLPRM_TSC_GROUP5_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP5_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_6;
-#endif
-#if (TSLPRM_TSC_GROUP5_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP5_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_7;
-#endif
-#if (TSLPRM_TSC_GROUP6_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP6_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_11;
-#endif
-#if (TSLPRM_TSC_GROUP6_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP6_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_12;
-#endif
-#if (TSLPRM_TSC_GROUP6_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP6_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_13;
-#endif
-#if (TSLPRM_TSC_GROUP6_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP6_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_14;
-#endif
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- // GPIOC
-#if (TSLPRM_TSC_GROUP3_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP3_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-#endif
-
-#if (TSC_GROUP8_ENABLED > 0)
- // GPIOD
- GPIO_InitStructure.GPIO_Pin = 0;
-#if (TSLPRM_TSC_GROUP8_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP8_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_12;
-#endif
-#if (TSLPRM_TSC_GROUP8_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP8_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_13;
-#endif
-#if (TSLPRM_TSC_GROUP8_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP8_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_14;
-#endif
-#if (TSLPRM_TSC_GROUP8_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP8_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_15;
-#endif
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-#endif // TSC_GROUP8_ENABLED
-
-#if (TSC_GROUP7_ENABLED > 0)
- // GPIOE
- GPIO_InitStructure.GPIO_Pin = 0;
-#if (TSLPRM_TSC_GROUP7_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP7_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_2;
-#endif
-#if (TSLPRM_TSC_GROUP7_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP7_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if (TSLPRM_TSC_GROUP7_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP7_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if (TSLPRM_TSC_GROUP7_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP7_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_5;
-#endif
- GPIO_Init(GPIOE, &GPIO_InitStructure);
-#endif // TSC_GROUP7_ENABLED
-
- // Set Alternate-Function AF3 for GPIOA and GPIOB
- //-----------------------------------------------
-
- // GPIOA
- tmp_value_0 = 0;
- tmp_value_1 = 0;
-#if TSLPRM_TSC_GROUP1_IO1 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (0 * 4));
-#endif
-#if TSLPRM_TSC_GROUP1_IO2 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (1 * 4));
-#endif
-#if TSLPRM_TSC_GROUP1_IO3 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (2 * 4));
-#endif
-#if TSLPRM_TSC_GROUP1_IO4 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (3 * 4));
-#endif
-#if TSLPRM_TSC_GROUP2_IO1 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (4 * 4));
-#endif
-#if TSLPRM_TSC_GROUP2_IO2 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (5 * 4));
-#endif
-#if TSLPRM_TSC_GROUP2_IO3 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (6 * 4));
-#endif
-#if TSLPRM_TSC_GROUP2_IO4 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (7 * 4));
-#endif
-#if TSLPRM_TSC_GROUP4_IO1 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (1 * 4));
-#endif
-#if TSLPRM_TSC_GROUP4_IO2 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (2 * 4));
-#endif
-#if TSLPRM_TSC_GROUP4_IO3 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (3 * 4));
-#endif
-#if TSLPRM_TSC_GROUP4_IO4 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (4 * 4));
-#endif
- GPIOA->AFR[0] |= tmp_value_0;
- GPIOA->AFR[1] |= tmp_value_1;
-
- // GPIOB
- tmp_value_0 = 0;
- tmp_value_1 = 0;
-#if TSLPRM_TSC_GROUP3_IO2 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (0 * 4));
-#endif
-#if TSLPRM_TSC_GROUP3_IO3 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (1 * 4));
-#endif
-#if TSLPRM_TSC_GROUP3_IO4 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (2 * 4));
-#endif
-#if TSLPRM_TSC_GROUP5_IO1 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (3 * 4));
-#endif
-#if TSLPRM_TSC_GROUP5_IO2 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (4 * 4));
-#endif
-#if TSLPRM_TSC_GROUP5_IO3 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (6 * 4));
-#endif
-#if TSLPRM_TSC_GROUP5_IO4 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (7 * 4));
-#endif
-#if TSLPRM_TSC_GROUP6_IO1 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (3 * 4));
-#endif
-#if TSLPRM_TSC_GROUP6_IO2 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (4 * 4));
-#endif
-#if TSLPRM_TSC_GROUP6_IO3 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (5 * 4));
-#endif
-#if TSLPRM_TSC_GROUP6_IO4 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (6 * 4));
-#endif
- GPIOB->AFR[0] |= tmp_value_0;
- GPIOB->AFR[1] |= tmp_value_1;
-
- // Set Alternate-Function AF1 for GPIOD and GPIOE
- //-----------------------------------------------
-
-#if (TSC_GROUP8_ENABLED > 0)
- // GPIOD
- tmp_value_1 = 0;
-#if TSLPRM_TSC_GROUP8_IO1 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)1 << (4 * 4));
-#endif
-#if TSLPRM_TSC_GROUP8_IO2 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)1 << (5 * 4));
-#endif
-#if TSLPRM_TSC_GROUP8_IO3 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)1 << (6 * 4));
-#endif
-#if TSLPRM_TSC_GROUP8_IO4 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)1 << (7 * 4));
-#endif
- GPIOD->AFR[1] |= tmp_value_1;
-#endif // TSC_GROUP8_ENABLED
-
-#if (TSC_GROUP7_ENABLED > 0)
- // GPIOE
- tmp_value_0 = 0;
-#if TSLPRM_TSC_GROUP7_IO1 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)1 << (2 * 4));
-#endif
-#if TSLPRM_TSC_GROUP7_IO2 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)1 << (3 * 4));
-#endif
-#if TSLPRM_TSC_GROUP7_IO3 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)1 << (4 * 4));
-#endif
-#if TSLPRM_TSC_GROUP7_IO4 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)1 << (5 * 4));
-#endif
- GPIOE->AFR[0] |= tmp_value_0;
-#endif // TSC_GROUP7_ENABLED
-
- //==================
- // TSC configuration
- //==================
-
- // Enable TSC clock
- RCC->AHBENR |= RCC_AHBENR_TSEN;
-
- // Disable Schmitt trigger hysteresis on all used TS IOs (Channel, Shield and Sampling IOs)
- //-----------------------------------------------------------------------------------------
-
- tmp_value_0 = 0xFFFFFFFF;
-#if TSLPRM_TSC_GROUP1_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 0);
-#endif
-#if TSLPRM_TSC_GROUP1_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 1);
-#endif
-#if TSLPRM_TSC_GROUP1_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 2);
-#endif
-#if TSLPRM_TSC_GROUP1_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 3);
-#endif
-#if TSLPRM_TSC_GROUP2_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 4);
-#endif
-#if TSLPRM_TSC_GROUP2_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 5);
-#endif
-#if TSLPRM_TSC_GROUP2_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 6);
-#endif
-#if TSLPRM_TSC_GROUP2_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 7);
-#endif
-#if TSLPRM_TSC_GROUP3_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 8);
-#endif
-#if TSLPRM_TSC_GROUP3_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 9);
-#endif
-#if TSLPRM_TSC_GROUP3_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 10);
-#endif
-#if TSLPRM_TSC_GROUP3_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 11);
-#endif
-#if TSLPRM_TSC_GROUP4_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 12);
-#endif
-#if TSLPRM_TSC_GROUP4_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 13);
-#endif
-#if TSLPRM_TSC_GROUP4_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 14);
-#endif
-#if TSLPRM_TSC_GROUP4_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 15);
-#endif
-#if TSLPRM_TSC_GROUP5_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 16);
-#endif
-#if TSLPRM_TSC_GROUP5_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 17);
-#endif
-#if TSLPRM_TSC_GROUP5_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 18);
-#endif
-#if TSLPRM_TSC_GROUP5_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 19);
-#endif
-#if TSLPRM_TSC_GROUP6_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 20);
-#endif
-#if TSLPRM_TSC_GROUP6_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 21);
-#endif
-#if TSLPRM_TSC_GROUP6_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 22);
-#endif
-#if TSLPRM_TSC_GROUP6_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 23);
-#endif
-
-#if (TSC_GROUP7_ENABLED > 0)
-#if TSLPRM_TSC_GROUP7_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 24);
-#endif
-#if TSLPRM_TSC_GROUP7_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 25);
-#endif
-#if TSLPRM_TSC_GROUP7_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 26);
-#endif
-#if TSLPRM_TSC_GROUP7_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 27);
-#endif
-#endif // TSC_GROUP7_ENABLED
-
-#if (TSC_GROUP8_ENABLED > 0)
-#if TSLPRM_TSC_GROUP8_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 28);
-#endif
-#if TSLPRM_TSC_GROUP8_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 29);
-#endif
-#if TSLPRM_TSC_GROUP8_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 30);
-#endif
-#if TSLPRM_TSC_GROUP8_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 31);
-#endif
-#endif // TSC_GROUP8_ENABLED
-
- TSC->IOHCR &= tmp_value_0;
-
- // Set Sampling Capacitor IOs
- //---------------------------
-
- tmp_value_0 = 0;
-#if TSLPRM_TSC_GROUP1_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 0);
-#endif
-#if TSLPRM_TSC_GROUP1_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 1);
-#endif
-#if TSLPRM_TSC_GROUP1_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 2);
-#endif
-#if TSLPRM_TSC_GROUP1_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 3);
-#endif
-#if TSLPRM_TSC_GROUP2_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 4);
-#endif
-#if TSLPRM_TSC_GROUP2_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 5);
-#endif
-#if TSLPRM_TSC_GROUP2_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 6);
-#endif
-#if TSLPRM_TSC_GROUP2_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 7);
-#endif
-#if TSLPRM_TSC_GROUP3_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 8);
-#endif
-#if TSLPRM_TSC_GROUP3_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 9);
-#endif
-#if TSLPRM_TSC_GROUP3_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 10);
-#endif
-#if TSLPRM_TSC_GROUP3_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 11);
-#endif
-#if TSLPRM_TSC_GROUP4_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 12);
-#endif
-#if TSLPRM_TSC_GROUP4_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 13);
-#endif
-#if TSLPRM_TSC_GROUP4_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 14);
-#endif
-#if TSLPRM_TSC_GROUP4_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 15);
-#endif
-#if TSLPRM_TSC_GROUP5_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 16);
-#endif
-#if TSLPRM_TSC_GROUP5_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 17);
-#endif
-#if TSLPRM_TSC_GROUP5_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 18);
-#endif
-#if TSLPRM_TSC_GROUP5_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 19);
-#endif
-#if TSLPRM_TSC_GROUP6_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 20);
-#endif
-#if TSLPRM_TSC_GROUP6_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 21);
-#endif
-#if TSLPRM_TSC_GROUP6_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 22);
-#endif
-#if TSLPRM_TSC_GROUP6_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 23);
-#endif
-
-#if (TSC_GROUP7_ENABLED > 0)
-#if TSLPRM_TSC_GROUP7_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 24);
-#endif
-#if TSLPRM_TSC_GROUP7_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 25);
-#endif
-#if TSLPRM_TSC_GROUP7_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 26);
-#endif
-#if TSLPRM_TSC_GROUP7_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 27);
-#endif
-#endif // TSC_GROUP7_ENABLED
-
-#if (TSC_GROUP8_ENABLED > 0)
-#if TSLPRM_TSC_GROUP8_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 28);
-#endif
-#if TSLPRM_TSC_GROUP8_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 29);
-#endif
-#if TSLPRM_TSC_GROUP8_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 30);
-#endif
-#if TSLPRM_TSC_GROUP8_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 31);
-#endif
-#endif // TSC_GROUP8_ENABLED
-
- TSC->IOSCR |= tmp_value_0;
-
-}
-
-
-/**
- * @brief Initializes the acquisition module.
- * @param None
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_Init(void)
-{
-
-#if TSLPRM_TSC_GPIO_CONFIG > 0
- TSL_acq_InitGPIOs();
-#endif
-
- // Enable TSC clock
- RCC->AHBENR |= RCC_AHBENR_TSEN;
-
- // TSC enabled
- TSC->CR = 0x01;
-
- // Set CTPH
-#if TSLPRM_TSC_CTPH > 0
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_CTPH << 28) & 0xF0000000;
-#endif
-
- // Set CTPL
-#if TSLPRM_TSC_CTPL > 0
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_CTPL << 24) & 0x0F000000;
-#endif
-
- // Set SpreadSpectrum
-#if TSLPRM_TSC_USE_SS > 0
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_USE_SS << 16) & 0x00010000;
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_SSD << 17) & 0x00FE0000;
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_SSPSC << 15) & 0x00008000;
-#endif
-
- // Set Prescaler
-#if TSLPRM_TSC_PGPSC > 0
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_PGPSC << 12) & 0x00007000;
-#endif
-
- // Set Max Count
-#if TSLPRM_TSC_MCV > 0
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_MCV << 5) & 0x000000E0;
-#endif
-
- // Set IO default in Output PP Low to discharge all capacitors
- TSC->CR &= (uint32_t)(~(1 << 4));
-
- // Set Synchronization Mode
-#if TSLPRM_TSC_AM > 0
-
- // Set Synchronization Pin in Alternate-Function mode
- RCC->AHBENR |= RCC_AHBENR_GPIOBEN; // Set GPIOB clock
-
-#if TSLPRM_TSC_SYNC_PIN == 0 // PB08
- GPIOB->MODER &= 0xFFFCFFFF;
- GPIOB->MODER |= 0x00020000;
- GPIOB->AFR[1] |= 0x00000003;
-#else // PB10
- GPIOB->MODER &= 0xFFCFFFFF;
- GPIOB->MODER |= 0x00200000;
- GPIOB->AFR[1] |= 0x00000300;
-#endif
-
- // Set Synchronization Polarity
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_SYNC_POL << 3) & 0x00000008;
-
- // Set acquisition mode
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_AM << 2) & 0x00000004;
-
-#endif
-
-#if TSLPRM_USE_ACQ_INTERRUPT > 0
-
- // Set both EOA and MCE interrupts
- TSC->IER |= 0x03;
-
- // Configure NVIC
- NVIC_SetPriority(TSC_IRQn, 0);
- NVIC_EnableIRQ(TSC_IRQn);
-
-#endif
-
- // Initialize the delay that will be used to discharge the capacitors
- DelayDischarge = (uint32_t)((TSLPRM_DELAY_DISCHARGE_ALL * (uint32_t)(SystemCoreClock/1000000)) / 48);
-
- return TSL_STATUS_OK;
-
-}
-
-
-/**
- * @brief Configures a Bank.
- * @param[in] idx_bk Index of the Bank to configure
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_BankConfig(TSL_tIndex_T idx_bk)
-{
- uint32_t idx_ch;
- uint32_t objs; /* bit field of TSL_ObjStatus_enum_T type */
- uint32_t gx;
- uint32_t ioy;
- CONST TSL_Bank_T *bank = &(TSL_Globals.Bank_Array[idx_bk]);
- CONST TSL_ChannelSrc_T *pchSrc = bank->p_chSrc;
- CONST TSL_ChannelDest_T *pchDest = bank->p_chDest;
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-
- // Mark the current bank processed
- TSL_Globals.This_Bank = idx_bk;
-
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- // Enable the Gx_IOy used as channels (channels + shield)
- TSC->IOCCR = bank->msk_IOCCR_channels;
- // Enable acquisition on selected Groups
- TSC->IOGCSR = bank->msk_IOGCSR_groups;
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- // For all channels of the bank check if they are OFF or BURST_ONLY
- // and set acquisition status flag
- for (idx_ch = 0; idx_ch < bank->NbChannels; idx_ch++)
- {
-
- // Check Object status flag
- objs = bank->p_chData[pchDest->IdxDest].Flags.ObjStatus;
-
- if (objs != TSL_OBJ_STATUS_ON)
- {
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- // Get the Channel Group mask
- gx = pchSrc->msk_IOGCSR_group;
- // Stop acquisition of the Group
- TSC->IOGCSR &= (uint32_t)~gx;
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- if (objs == TSL_OBJ_STATUS_OFF)
- {
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- // Get the Channel IO mask
- ioy = pchSrc->msk_IOCCR_channel;
- // Stop Burst of the Channel
- TSC->IOCCR &= (uint32_t)~ioy;
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- }
- }
-
- // Next channel
- pchSrc++;
- pchDest++;
- }
-
- return TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Start acquisition on a previously configured bank
- * @param None
- * @retval None
- */
-void TSL_acq_BankStartAcq(void)
-{
- // Clear both EOAIC and MCEIC flags
- TSC->ICR |= 0x03;
-
- // Wait capacitors discharge
- SoftDelay(DelayDischarge);
-
-#if TSLPRM_TSC_IODEF > 0 // Default = Input Floating
- // Set IO default in Input Floating
- TSC->CR |= (1 << 4);
-#endif
-
- // Start acquisition
- TSC->CR |= 0x02;
-}
-
-
-/**
- * @brief Wait end of acquisition
- * @param None
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_BankWaitEOC(void)
-{
- TSL_Status_enum_T retval = TSL_STATUS_BUSY;
-
- // Check EOAF flag
- if (TSC->ISR & 0x01)
- {
-
-#if TSLPRM_TSC_IODEF > 0 // Default = Input Floating
- // Set IO default in Output PP Low to discharge all capacitors
- TSC->CR &= (uint32_t)(~(1 << 4));
-#endif
-
- // Check MCEF flag
- if (TSC->ISR & 0x02)
- {
- retval = TSL_STATUS_ERROR;
- }
- else
- {
- retval = TSL_STATUS_OK;
- }
- }
-
- return retval;
-}
-
-
-/**
- * @brief Return the current measure
- * @param[in] index Index of the measure source
- * @retval Measure
- */
-TSL_tMeas_T TSL_acq_GetMeas(TSL_tIndex_T index)
-{
- // Check parameters (if USE_FULL_ASSERT is defined)
-#if (TSC_GROUP7_ENABLED > 0) || (TSC_GROUP8_ENABLED > 0)
- assert_param(IS_SRC_INDEX_0_7_OK(idx_bk));
-#else
- assert_param(IS_SRC_INDEX_0_5_OK(idx_bk));
-#endif
- return((TSL_tMeas_T)(TSC->IOGXCR[index]));
-}
-
-
-/**
- * @brief Compute the Delta value
- * @param[in] ref Reference value
- * @param[in] meas Last Measurement value
- * @retval Delta value
- */
-TSL_tDelta_T TSL_acq_ComputeDelta(TSL_tRef_T ref, TSL_tMeas_T meas)
-{
- return((TSL_tDelta_T)(ref - meas));
-}
-
-
-/**
- * @brief Compute the Measurement value
- * @param[in] ref Reference value
- * @param[in] delta Delta value
- * @retval Measurement value
- */
-TSL_tMeas_T TSL_acq_ComputeMeas(TSL_tRef_T ref, TSL_tDelta_T delta)
-{
- return((TSL_tMeas_T)(ref - delta));
-}
-
-
-/**
- * @brief Check noise (not used)
- * @param None
- * @retval Status
- */
-TSL_AcqStatus_enum_T TSL_acq_CheckNoise(void)
-{
- return TSL_ACQ_STATUS_OK;
-}
-
-
-/**
- * @brief Check if a filter must be used on the current channel (not used)
- * @param[in] pCh Pointer on the channel data information
- * @retval Result TRUE if a filter can be applied
- */
-TSL_Bool_enum_T TSL_acq_UseFilter(TSL_ChannelData_T *pCh)
-{
- return TSL_TRUE;
-}
-
-
-/**
- * @brief Test if the Reference is incorrect (not used)
- * @param[in] pCh Pointer on the channel data information
- * @retval Result TRUE if the Reference is out of range
- */
-TSL_Bool_enum_T TSL_acq_TestReferenceOutOfRange(TSL_ChannelData_T *pCh)
-{
- return TSL_FALSE;
-}
-
-
-/**
- * @brief Test if the measure has crossed the reference target (not used)
- * @param[in] pCh Pointer on the channel data information
- * @param[in] new_meas Measure of the last acquisition on this channel
- * @retval Result TRUE if the Reference is valid
- */
-TSL_Bool_enum_T TSL_acq_TestFirstReferenceIsValid(TSL_ChannelData_T *pCh, TSL_tMeas_T new_meas)
-{
- return TSL_TRUE;
-}
-
-
-#if defined(__IAR_SYSTEMS_ICC__) // IAR/EWARM
-#pragma optimize=low
-#elif defined(__CC_ARM) // Keil/MDK-ARM
-#pragma O1
-#pragma Ospace
-#elif defined(__TASKING__) // Altium/Tasking
-#pragma optimize O0
-#elif defined(__GNUC__) // Atollic/True Studio + Raisonance/RKit
-#pragma GCC push_options
-#pragma GCC optimize ("O0")
-#endif
-/**
- * @brief Software delay (private routine)
- * @param val Wait delay
- * @retval None
- * @note Measurements done with HCLK=48MHz and Keil/MDK-ARM compiler
- * val = 500: ~ 53µs
- * val = 1000: ~106µs
- * val = 2000: ~210µs
- */
-void SoftDelay(uint32_t val)
-{
- uint32_t idx;
- for (idx = val; idx > 0; idx--)
- {}
-}
-#if defined(__TASKING__)
-#pragma endoptimize
-#endif
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32f3xx.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32f3xx.c
deleted file mode 100644
index c75a791..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32f3xx.c
+++ /dev/null
@@ -1,1148 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_acq_stm32f3xx.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the TSC acquisition
- * on STM32F3xx products.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_acq_stm32f3xx.h"
-#include "tsl_globals.h"
-#if defined(STM32F30X)
-#include "stm32f30x_it.h"
-#endif
-#if defined(STM32F37X)
-#include "stm32f37x_it.h"
-#endif
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-
-#define NU (0) // Not Used IO
-#define CHANNEL (1) // Channel IO
-#define SHIELD (2) // Shield IO (= Channel IO but not acquired)
-#define SAMPCAP (3) // Sampling Capacitor IO
-
-/* Private macros ------------------------------------------------------------*/
-
-// Used by assert
-#define IS_BANK_INDEX_OK(INDEX) (((INDEX) == 0) || (((INDEX) > 0) && ((INDEX) < TSLPRM_TOTAL_BANKS)))
-#define IS_SRC_INDEX_0_7_OK(INDEX) (((INDEX) == 0) || (((INDEX) > 0) && ((INDEX) < 8)))
-
-/* Private variables ---------------------------------------------------------*/
-uint32_t DelayDischarge;
-
-/* Private functions prototype -----------------------------------------------*/
-void SoftDelay(uint32_t val);
-
-/**
- * @brief Initializes the TouchSensing GPIOs.
- * @param None
- * @retval None
- */
-void TSL_acq_InitGPIOs(void)
-{
-
- GPIO_InitTypeDef GPIO_InitStructure;
- uint32_t tmp_value_0;
- uint32_t tmp_value_1;
-
- //====================
- // GPIOs configuration
- //====================
-
- // Enable GPIOs clocks
- RCC->AHBENR |= (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN |
- RCC_AHBENR_GPIODEN | RCC_AHBENR_GPIOEEN);
-
- // Alternate function Output Open-Drain for Sampling Capacitor IOs
- //----------------------------------------------------------------
-
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
-
- // GPIOA
- GPIO_InitStructure.GPIO_Pin = 0;
-#if TSLPRM_TSC_GROUP1_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_0;
-#endif
-#if TSLPRM_TSC_GROUP1_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_1;
-#endif
-#if TSLPRM_TSC_GROUP1_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_2;
-#endif
-#if TSLPRM_TSC_GROUP1_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if TSLPRM_TSC_GROUP2_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if TSLPRM_TSC_GROUP2_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_5;
-#endif
-#if TSLPRM_TSC_GROUP2_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_6;
-#endif
-#if TSLPRM_TSC_GROUP2_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_7;
-#endif
-#if TSLPRM_TSC_GROUP4_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_9;
-#endif
-#if TSLPRM_TSC_GROUP4_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_10;
-#endif
-#if TSLPRM_TSC_GROUP4_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_13;
-#endif
-#if TSLPRM_TSC_GROUP4_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_14;
-#endif
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- // GPIOB
- GPIO_InitStructure.GPIO_Pin = 0;
-
-#if defined(STM32F30X)
-#if TSLPRM_TSC_GROUP3_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_0;
-#endif
-#if TSLPRM_TSC_GROUP3_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_1;
-#endif
-#if TSLPRM_TSC_GROUP3_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_2;
-#endif
-#if TSLPRM_TSC_GROUP5_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if TSLPRM_TSC_GROUP5_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if TSLPRM_TSC_GROUP5_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_6;
-#endif
-#if TSLPRM_TSC_GROUP5_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_7;
-#endif
-#if TSLPRM_TSC_GROUP6_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_11;
-#endif
-#if TSLPRM_TSC_GROUP6_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_12;
-#endif
-#if TSLPRM_TSC_GROUP6_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_13;
-#endif
-#if TSLPRM_TSC_GROUP6_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_14;
-#endif
-#endif // STM32F30X
-
-#if defined(STM32F37X)
-#if TSLPRM_TSC_GROUP3_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_0;
-#endif
-#if TSLPRM_TSC_GROUP3_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_1;
-#endif
-#if TSLPRM_TSC_GROUP5_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if TSLPRM_TSC_GROUP5_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if TSLPRM_TSC_GROUP5_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_6;
-#endif
-#if TSLPRM_TSC_GROUP5_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_7;
-#endif
-#if TSLPRM_TSC_GROUP6_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_14;
-#endif
-#if TSLPRM_TSC_GROUP6_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_15;
-#endif
-#endif // STM32F37X
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- // GPIOC
-#if defined(STM32F30X)
-#if TSLPRM_TSC_GROUP3_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-#endif
-#endif // STM32F30X
-
-#if defined(STM32F37X)
- GPIO_InitStructure.GPIO_Pin = 0;
-#if TSLPRM_TSC_GROUP3_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if TSLPRM_TSC_GROUP3_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_5;
-#endif
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-#endif // STM32F37X
-
- // GPIOD
- GPIO_InitStructure.GPIO_Pin = 0;
-
-#if defined(STM32F37X)
-#if TSLPRM_TSC_GROUP6_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
-#endif
-#if TSLPRM_TSC_GROUP6_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
-#endif
-#endif // STM32F37X
-
-#if TSLPRM_TSC_GROUP8_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
-#endif
-#if TSLPRM_TSC_GROUP8_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
-#endif
-#if TSLPRM_TSC_GROUP8_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
-#endif
-#if TSLPRM_TSC_GROUP8_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
-#endif
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- // GPIOE
- GPIO_InitStructure.GPIO_Pin = 0;
-#if TSLPRM_TSC_GROUP7_IO1 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
-#endif
-#if TSLPRM_TSC_GROUP7_IO2 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
-#endif
-#if TSLPRM_TSC_GROUP7_IO3 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
-#endif
-#if TSLPRM_TSC_GROUP7_IO4 == SAMPCAP
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
-#endif
- GPIO_Init(GPIOE, &GPIO_InitStructure);
-
- // Alternate function Output Push-Pull for Channel and Shield IOs
- //---------------------------------------------------------------
-
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-
- // GPIOA
- GPIO_InitStructure.GPIO_Pin = 0;
-#if (TSLPRM_TSC_GROUP1_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP1_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_0;
-#endif
-#if (TSLPRM_TSC_GROUP1_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP1_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_1;
-#endif
-#if (TSLPRM_TSC_GROUP1_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP1_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_2;
-#endif
-#if (TSLPRM_TSC_GROUP1_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP1_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if (TSLPRM_TSC_GROUP2_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP2_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if (TSLPRM_TSC_GROUP2_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP2_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_5;
-#endif
-#if (TSLPRM_TSC_GROUP2_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP2_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_6;
-#endif
-#if (TSLPRM_TSC_GROUP2_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP2_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_7;
-#endif
-#if (TSLPRM_TSC_GROUP4_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP4_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_9;
-#endif
-#if (TSLPRM_TSC_GROUP4_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP4_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_10;
-#endif
-#if (TSLPRM_TSC_GROUP4_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP4_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_13;
-#endif
-#if (TSLPRM_TSC_GROUP4_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP4_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_14;
-#endif
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- // GPIOB
- GPIO_InitStructure.GPIO_Pin = 0;
-
-#if defined(STM32F30X)
-#if (TSLPRM_TSC_GROUP3_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP3_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_0;
-#endif
-#if (TSLPRM_TSC_GROUP3_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP3_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_1;
-#endif
-#if (TSLPRM_TSC_GROUP3_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP3_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_2;
-#endif
-#if (TSLPRM_TSC_GROUP5_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP5_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if (TSLPRM_TSC_GROUP5_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP5_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if (TSLPRM_TSC_GROUP5_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP5_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_6;
-#endif
-#if (TSLPRM_TSC_GROUP5_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP5_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_7;
-#endif
-#if (TSLPRM_TSC_GROUP6_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP6_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_11;
-#endif
-#if (TSLPRM_TSC_GROUP6_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP6_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_12;
-#endif
-#if (TSLPRM_TSC_GROUP6_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP6_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_13;
-#endif
-#if (TSLPRM_TSC_GROUP6_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP6_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_14;
-#endif
-#endif // STM32F30X
-
-#if defined(STM32F37X)
-#if (TSLPRM_TSC_GROUP3_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP3_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_0;
-#endif
-#if (TSLPRM_TSC_GROUP3_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP3_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_1;
-#endif
-#if (TSLPRM_TSC_GROUP5_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP5_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if (TSLPRM_TSC_GROUP5_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP5_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if (TSLPRM_TSC_GROUP5_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP5_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_6;
-#endif
-#if (TSLPRM_TSC_GROUP5_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP5_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_7;
-#endif
-#if (TSLPRM_TSC_GROUP6_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP6_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_14;
-#endif
-#if (TSLPRM_TSC_GROUP6_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP6_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_15;
-#endif
-#endif // STM32F37X
-
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- // GPIOC
-
-#if defined(STM32F30X)
-#if (TSLPRM_TSC_GROUP3_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP3_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-#endif
-#endif // STM32F30X
-
-#if defined(STM32F37X)
- GPIO_InitStructure.GPIO_Pin = 0;
-#if (TSLPRM_TSC_GROUP3_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP3_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if (TSLPRM_TSC_GROUP3_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP3_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_5;
-#endif
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-#endif // STM32F37X
-
- // GPIOD
- GPIO_InitStructure.GPIO_Pin = 0;
-
-#if defined(STM32F37X)
-#if (TSLPRM_TSC_GROUP6_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP6_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_8;
-#endif
-#if (TSLPRM_TSC_GROUP6_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP6_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_9;
-#endif
-#endif // STM32F37X
-
-#if (TSLPRM_TSC_GROUP8_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP8_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_12;
-#endif
-#if (TSLPRM_TSC_GROUP8_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP8_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_13;
-#endif
-#if (TSLPRM_TSC_GROUP8_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP8_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_14;
-#endif
-#if (TSLPRM_TSC_GROUP8_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP8_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_15;
-#endif
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- // GPIOE
- GPIO_InitStructure.GPIO_Pin = 0;
-#if (TSLPRM_TSC_GROUP7_IO1 == CHANNEL) || (TSLPRM_TSC_GROUP7_IO1 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_2;
-#endif
-#if (TSLPRM_TSC_GROUP7_IO2 == CHANNEL) || (TSLPRM_TSC_GROUP7_IO2 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_3;
-#endif
-#if (TSLPRM_TSC_GROUP7_IO3 == CHANNEL) || (TSLPRM_TSC_GROUP7_IO3 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_4;
-#endif
-#if (TSLPRM_TSC_GROUP7_IO4 == CHANNEL) || (TSLPRM_TSC_GROUP7_IO4 == SHIELD)
- GPIO_InitStructure.GPIO_Pin |= GPIO_Pin_5;
-#endif
- GPIO_Init(GPIOE, &GPIO_InitStructure);
-
- // Set Alternate-Function AF3 on used TSC IOs
- //-------------------------------------------
-
- // GPIOA
- tmp_value_0 = 0;
- tmp_value_1 = 0;
-#if TSLPRM_TSC_GROUP1_IO1 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (0 * 4));
-#endif
-#if TSLPRM_TSC_GROUP1_IO2 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (1 * 4));
-#endif
-#if TSLPRM_TSC_GROUP1_IO3 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (2 * 4));
-#endif
-#if TSLPRM_TSC_GROUP1_IO4 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (3 * 4));
-#endif
-#if TSLPRM_TSC_GROUP2_IO1 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (4 * 4));
-#endif
-#if TSLPRM_TSC_GROUP2_IO2 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (5 * 4));
-#endif
-#if TSLPRM_TSC_GROUP2_IO3 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (6 * 4));
-#endif
-#if TSLPRM_TSC_GROUP2_IO4 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (7 * 4));
-#endif
-#if TSLPRM_TSC_GROUP4_IO1 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (1 * 4));
-#endif
-#if TSLPRM_TSC_GROUP4_IO2 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (2 * 4));
-#endif
-#if TSLPRM_TSC_GROUP4_IO3 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (5 * 4));
-#endif
-#if TSLPRM_TSC_GROUP4_IO4 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (6 * 4));
-#endif
- GPIOA->AFR[0] |= tmp_value_0;
- GPIOA->AFR[1] |= tmp_value_1;
-
- // GPIOB
- tmp_value_0 = 0;
- tmp_value_1 = 0;
-
-#if defined(STM32F30X)
-#if TSLPRM_TSC_GROUP3_IO2 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (0 * 4));
-#endif
-#if TSLPRM_TSC_GROUP3_IO3 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (1 * 4));
-#endif
-#if TSLPRM_TSC_GROUP3_IO4 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (2 * 4));
-#endif
-#if TSLPRM_TSC_GROUP5_IO1 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (3 * 4));
-#endif
-#if TSLPRM_TSC_GROUP5_IO2 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (4 * 4));
-#endif
-#if TSLPRM_TSC_GROUP5_IO3 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (6 * 4));
-#endif
-#if TSLPRM_TSC_GROUP5_IO4 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (7 * 4));
-#endif
-#if TSLPRM_TSC_GROUP6_IO1 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (3 * 4));
-#endif
-#if TSLPRM_TSC_GROUP6_IO2 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (4 * 4));
-#endif
-#if TSLPRM_TSC_GROUP6_IO3 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (5 * 4));
-#endif
-#if TSLPRM_TSC_GROUP6_IO4 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (6 * 4));
-#endif
-#endif // STM32F30X
-
-#if defined(STM32F37X)
-#if TSLPRM_TSC_GROUP3_IO3 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (0 * 4));
-#endif
-#if TSLPRM_TSC_GROUP3_IO4 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (1 * 4));
-#endif
-#if TSLPRM_TSC_GROUP5_IO1 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (3 * 4));
-#endif
-#if TSLPRM_TSC_GROUP5_IO2 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (4 * 4));
-#endif
-#if TSLPRM_TSC_GROUP5_IO3 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (6 * 4));
-#endif
-#if TSLPRM_TSC_GROUP5_IO4 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (7 * 4));
-#endif
-#if TSLPRM_TSC_GROUP6_IO1 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (6 * 4));
-#endif
-#if TSLPRM_TSC_GROUP6_IO2 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (7 * 4));
-#endif
-#endif // STM32F37X
-
- GPIOB->AFR[0] |= tmp_value_0;
- GPIOB->AFR[1] |= tmp_value_1;
-
- // GPIOC
-#if defined(STM32F30X)
-#if TSLPRM_TSC_GROUP3_IO1 != NU
- GPIOC->AFR[0] |= (uint32_t)((uint32_t)3 << (5 * 4));
-#endif
-#endif // STM32F30X
-
-#if defined(STM32F37X)
-#if TSLPRM_TSC_GROUP3_IO1 != NU
- GPIOC->AFR[0] |= (uint32_t)((uint32_t)3 << (4 * 4));
-#endif
-#if TSLPRM_TSC_GROUP3_IO2 != NU
- GPIOC->AFR[0] |= (uint32_t)((uint32_t)3 << (5 * 4));
-#endif
-#endif // STM32F37X
-
- // GPIOD
- tmp_value_1 = 0;
-
-#if defined(STM32F37X)
-#if TSLPRM_TSC_GROUP6_IO3 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (0 * 4));
-#endif
-#if TSLPRM_TSC_GROUP6_IO4 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (1 * 4));
-#endif
-#endif // STM32F37X
-
-#if TSLPRM_TSC_GROUP8_IO1 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (4 * 4));
-#endif
-#if TSLPRM_TSC_GROUP8_IO2 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (5 * 4));
-#endif
-#if TSLPRM_TSC_GROUP8_IO3 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (6 * 4));
-#endif
-#if TSLPRM_TSC_GROUP8_IO4 != NU
- tmp_value_1 |= (uint32_t)((uint32_t)3 << (7 * 4));
-#endif
- GPIOD->AFR[1] |= tmp_value_1;
-
- // GPIOE
- tmp_value_0 = 0;
-#if TSLPRM_TSC_GROUP7_IO1 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (2 * 4));
-#endif
-#if TSLPRM_TSC_GROUP7_IO2 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (3 * 4));
-#endif
-#if TSLPRM_TSC_GROUP7_IO3 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (4 * 4));
-#endif
-#if TSLPRM_TSC_GROUP7_IO4 != NU
- tmp_value_0 |= (uint32_t)((uint32_t)3 << (5 * 4));
-#endif
- GPIOE->AFR[0] |= tmp_value_0;
-
- //==================
- // TSC configuration
- //==================
-
- // Enable TSC clock
- RCC->AHBENR |= RCC_AHBENR_TSEN;
-
- // Disable Schmitt trigger hysteresis on all used TS IOs (Channel, Shield and Sampling IOs)
- //-----------------------------------------------------------------------------------------
-
- tmp_value_0 = 0xFFFFFFFF;
-#if TSLPRM_TSC_GROUP1_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 0);
-#endif
-#if TSLPRM_TSC_GROUP1_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 1);
-#endif
-#if TSLPRM_TSC_GROUP1_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 2);
-#endif
-#if TSLPRM_TSC_GROUP1_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 3);
-#endif
-#if TSLPRM_TSC_GROUP2_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 4);
-#endif
-#if TSLPRM_TSC_GROUP2_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 5);
-#endif
-#if TSLPRM_TSC_GROUP2_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 6);
-#endif
-#if TSLPRM_TSC_GROUP2_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 7);
-#endif
-#if TSLPRM_TSC_GROUP3_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 8);
-#endif
-#if TSLPRM_TSC_GROUP3_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 9);
-#endif
-#if TSLPRM_TSC_GROUP3_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 10);
-#endif
-#if TSLPRM_TSC_GROUP3_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 11);
-#endif
-#if TSLPRM_TSC_GROUP4_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 12);
-#endif
-#if TSLPRM_TSC_GROUP4_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 13);
-#endif
-#if TSLPRM_TSC_GROUP4_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 14);
-#endif
-#if TSLPRM_TSC_GROUP4_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 15);
-#endif
-#if TSLPRM_TSC_GROUP5_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 16);
-#endif
-#if TSLPRM_TSC_GROUP5_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 17);
-#endif
-#if TSLPRM_TSC_GROUP5_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 18);
-#endif
-#if TSLPRM_TSC_GROUP5_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 19);
-#endif
-#if TSLPRM_TSC_GROUP6_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 20);
-#endif
-#if TSLPRM_TSC_GROUP6_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 21);
-#endif
-#if TSLPRM_TSC_GROUP6_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 22);
-#endif
-#if TSLPRM_TSC_GROUP6_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 23);
-#endif
-#if TSLPRM_TSC_GROUP7_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 24);
-#endif
-#if TSLPRM_TSC_GROUP7_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 25);
-#endif
-#if TSLPRM_TSC_GROUP7_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 26);
-#endif
-#if TSLPRM_TSC_GROUP7_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 27);
-#endif
-#if TSLPRM_TSC_GROUP8_IO1 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 28);
-#endif
-#if TSLPRM_TSC_GROUP8_IO2 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 29);
-#endif
-#if TSLPRM_TSC_GROUP8_IO3 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 30);
-#endif
-#if TSLPRM_TSC_GROUP8_IO4 != NU
- tmp_value_0 &= (uint32_t)~((uint32_t)1 << 31);
-#endif
- TSC->IOHCR &= tmp_value_0;
-
- // Set Sampling Capacitor IOs
- //---------------------------
-
- tmp_value_0 = 0;
-#if TSLPRM_TSC_GROUP1_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 0);
-#endif
-#if TSLPRM_TSC_GROUP1_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 1);
-#endif
-#if TSLPRM_TSC_GROUP1_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 2);
-#endif
-#if TSLPRM_TSC_GROUP1_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 3);
-#endif
-#if TSLPRM_TSC_GROUP2_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 4);
-#endif
-#if TSLPRM_TSC_GROUP2_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 5);
-#endif
-#if TSLPRM_TSC_GROUP2_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 6);
-#endif
-#if TSLPRM_TSC_GROUP2_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 7);
-#endif
-#if TSLPRM_TSC_GROUP3_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 8);
-#endif
-#if TSLPRM_TSC_GROUP3_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 9);
-#endif
-#if TSLPRM_TSC_GROUP3_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 10);
-#endif
-#if TSLPRM_TSC_GROUP3_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 11);
-#endif
-#if TSLPRM_TSC_GROUP4_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 12);
-#endif
-#if TSLPRM_TSC_GROUP4_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 13);
-#endif
-#if TSLPRM_TSC_GROUP4_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 14);
-#endif
-#if TSLPRM_TSC_GROUP4_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 15);
-#endif
-#if TSLPRM_TSC_GROUP5_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 16);
-#endif
-#if TSLPRM_TSC_GROUP5_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 17);
-#endif
-#if TSLPRM_TSC_GROUP5_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 18);
-#endif
-#if TSLPRM_TSC_GROUP5_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 19);
-#endif
-#if TSLPRM_TSC_GROUP6_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 20);
-#endif
-#if TSLPRM_TSC_GROUP6_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 21);
-#endif
-#if TSLPRM_TSC_GROUP6_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 22);
-#endif
-#if TSLPRM_TSC_GROUP6_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 23);
-#endif
-#if TSLPRM_TSC_GROUP7_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 24);
-#endif
-#if TSLPRM_TSC_GROUP7_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 25);
-#endif
-#if TSLPRM_TSC_GROUP7_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 26);
-#endif
-#if TSLPRM_TSC_GROUP7_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 27);
-#endif
-#if TSLPRM_TSC_GROUP8_IO1 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 28);
-#endif
-#if TSLPRM_TSC_GROUP8_IO2 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 29);
-#endif
-#if TSLPRM_TSC_GROUP8_IO3 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 30);
-#endif
-#if TSLPRM_TSC_GROUP8_IO4 == SAMPCAP
- tmp_value_0 |= (uint32_t)((uint32_t)1 << 31);
-#endif
- TSC->IOSCR |= tmp_value_0;
-
-}
-
-
-/**
- * @brief Initializes the acquisition module.
- * @param None
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_Init(void)
-{
-
-#if TSLPRM_TSC_GPIO_CONFIG > 0
- TSL_acq_InitGPIOs();
-#endif
-
- // Enable TSC clock
- RCC->AHBENR |= RCC_AHBENR_TSEN;
-
- // TSC enabled
- TSC->CR = 0x01;
-
- // Set CTPH
-#if TSLPRM_TSC_CTPH > 0
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_CTPH << 28) & 0xF0000000;
-#endif
-
- // Set CTPL
-#if TSLPRM_TSC_CTPL > 0
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_CTPL << 24) & 0x0F000000;
-#endif
-
- // Set SpreadSpectrum
-#if TSLPRM_TSC_USE_SS > 0
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_USE_SS << 16) & 0x00010000;
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_SSD << 17) & 0x00FE0000;
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_SSPSC << 15) & 0x00008000;
-#endif
-
- // Set Prescaler
-#if TSLPRM_TSC_PGPSC > 0
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_PGPSC << 12) & 0x00007000;
-#endif
-
- // Set Max Count
-#if TSLPRM_TSC_MCV > 0
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_MCV << 5) & 0x000000E0;
-#endif
-
- // Set IO default in Output PP Low to discharge all capacitors
- TSC->CR &= (uint32_t)(~(1 << 4));
-
- // Set Synchronization Mode
-#if TSLPRM_TSC_AM > 0
-
- // Set Synchronization Pin in Alternate-Function mode
-#if TSLPRM_TSC_SYNC_PIN == 0 // PB08
- RCC->AHBENR |= RCC_AHBENR_GPIOBEN; // Set GPIOB clock
- GPIOB->MODER &= 0xFFFCFFFF;
- GPIOB->MODER |= 0x00020000;
- GPIOB->AFR[1] |= 0x00000003;
-#endif
-#if TSLPRM_TSC_SYNC_PIN == 1 // PB10
- RCC->AHBENR |= RCC_AHBENR_GPIOBEN; // Set GPIOB clock
- GPIOB->MODER &= 0xFFCFFFFF;
- GPIOB->MODER |= 0x00200000;
- GPIOB->AFR[1] |= 0x00000300;
-#endif
-#if TSLPRM_TSC_SYNC_PIN == 2 // PA15
- RCC->AHBENR |= RCC_AHBENR_GPIOAEN; // Set GPIOA clock
- GPIOA->MODER &= 0x3FFFFFFF;
- GPIOA->MODER |= 0x80000000;
- GPIOA->AFR[1] |= 0x30000000;
-#endif
-
- // Set Synchronization Polarity
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_SYNC_POL << 3) & 0x00000008;
-
- // Set acquisition mode
- TSC->CR |= (uint32_t)((uint32_t)TSLPRM_TSC_AM << 2) & 0x00000004;
-
-#endif
-
-#if TSLPRM_USE_ACQ_INTERRUPT > 0
-
- // Set both EOA and MCE interrupts
- TSC->IER |= 0x03;
-
- // Configure NVIC
- NVIC_SetPriority(EXTI2_TS_IRQn, 0);
- NVIC_EnableIRQ(EXTI2_TS_IRQn);
-
-#endif
-
- // Initialize the delay that will be used to discharge the capacitors
- DelayDischarge = (uint32_t)((TSLPRM_DELAY_DISCHARGE_ALL * (uint32_t)(SystemCoreClock/1000000)) / 72);
-
- return TSL_STATUS_OK;
-
-}
-
-
-/**
- * @brief Configures a Bank.
- * @param[in] idx_bk Index of the Bank to configure
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_BankConfig(TSL_tIndex_T idx_bk)
-{
- uint32_t idx_ch;
- uint32_t objs; /* bit field of TSL_ObjStatus_enum_T type */
- uint32_t gx;
- uint32_t ioy;
- CONST TSL_Bank_T *bank = &(TSL_Globals.Bank_Array[idx_bk]);
- CONST TSL_ChannelSrc_T *pchSrc = bank->p_chSrc;
- CONST TSL_ChannelDest_T *pchDest = bank->p_chDest;
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-
- // Mark the current bank processed
- TSL_Globals.This_Bank = idx_bk;
-
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- // Enable the Gx_IOy used as channels (channels + shield)
- TSC->IOCCR = bank->msk_IOCCR_channels;
- // Enable acquisition on selected Groups
- TSC->IOGCSR = bank->msk_IOGCSR_groups;
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- // For all channels of the bank check if they are OFF or BURST_ONLY
- // and set acquisition status flag
- for (idx_ch = 0; idx_ch < bank->NbChannels; idx_ch++)
- {
-
- // Check Object status flag
- objs = bank->p_chData[pchDest->IdxDest].Flags.ObjStatus;
-
- if (objs != TSL_OBJ_STATUS_ON)
- {
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- // Get the Channel Group mask
- gx = pchSrc->msk_IOGCSR_group;
- // Stop acquisition of the Group
- TSC->IOGCSR &= (uint32_t)~gx;
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- if (objs == TSL_OBJ_STATUS_OFF)
- {
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- // Get the Channel IO mask
- ioy = pchSrc->msk_IOCCR_channel;
- // Stop Burst of the Channel
- TSC->IOCCR &= (uint32_t)~ioy;
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- }
- }
-
- // Next channel
- pchSrc++;
- pchDest++;
- }
-
- return TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Start acquisition on a previously configured bank
- * @param None
- * @retval None
- */
-void TSL_acq_BankStartAcq(void)
-{
- // Clear both EOAIC and MCEIC flags
- TSC->ICR |= 0x03;
-
- // Wait capacitors discharge
- SoftDelay(DelayDischarge);
-
-#if TSLPRM_TSC_IODEF > 0 // Default = Input Floating
- // Set IO default in Input Floating
- TSC->CR |= (1 << 4);
-#endif
-
- // Start acquisition
- TSC->CR |= 0x02;
-}
-
-
-/**
- * @brief Wait end of acquisition
- * @param None
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_BankWaitEOC(void)
-{
- TSL_Status_enum_T retval = TSL_STATUS_BUSY;
-
- // Check EOAF flag
- if (TSC->ISR & 0x01)
- {
-
-#if TSLPRM_TSC_IODEF > 0 // Default = Input Floating
- // Set IO default in Output PP Low to discharge all capacitors
- TSC->CR &= (uint32_t)(~(1 << 4));
-#endif
-
- // Check MCEF flag
- if (TSC->ISR & 0x02)
- {
- retval = TSL_STATUS_ERROR;
- }
- else
- {
- retval = TSL_STATUS_OK;
- }
- }
-
- return retval;
-}
-
-
-/**
- * @brief Return the current measure
- * @param[in] index Index of the measure source
- * @retval Measure
- */
-TSL_tMeas_T TSL_acq_GetMeas(TSL_tIndex_T index)
-{
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_SRC_INDEX_0_7_OK(idx_bk));
- return((TSL_tMeas_T)(TSC->IOGXCR[index]));
-}
-
-
-/**
- * @brief Compute the Delta value
- * @param[in] ref Reference value
- * @param[in] meas Last Measurement value
- * @retval Delta value
- */
-TSL_tDelta_T TSL_acq_ComputeDelta(TSL_tRef_T ref, TSL_tMeas_T meas)
-{
- return((TSL_tDelta_T)(ref - meas));
-}
-
-
-/**
- * @brief Compute the Measurement value
- * @param[in] ref Reference value
- * @param[in] delta Delta value
- * @retval Measurement value
- */
-TSL_tMeas_T TSL_acq_ComputeMeas(TSL_tRef_T ref, TSL_tDelta_T delta)
-{
- return((TSL_tMeas_T)(ref - delta));
-}
-
-
-/**
- * @brief Check noise (not used)
- * @param None
- * @retval Status
- */
-TSL_AcqStatus_enum_T TSL_acq_CheckNoise(void)
-{
- return TSL_ACQ_STATUS_OK;
-}
-
-
-/**
- * @brief Check if a filter must be used on the current channel (not used)
- * @param[in] pCh Pointer on the channel data information
- * @retval Result TRUE if a filter can be applied
- */
-TSL_Bool_enum_T TSL_acq_UseFilter(TSL_ChannelData_T *pCh)
-{
- return TSL_TRUE;
-}
-
-
-/**
- * @brief Test if the Reference is incorrect (not used)
- * @param[in] pCh Pointer on the channel data information
- * @retval Result TRUE if the Reference is out of range
- */
-TSL_Bool_enum_T TSL_acq_TestReferenceOutOfRange(TSL_ChannelData_T *pCh)
-{
- return TSL_FALSE;
-}
-
-
-/**
- * @brief Test if the measure has crossed the reference target (not used)
- * @param[in] pCh Pointer on the channel data information
- * @param[in] new_meas Measure of the last acquisition on this channel
- * @retval Result TRUE if the Reference is valid
- */
-TSL_Bool_enum_T TSL_acq_TestFirstReferenceIsValid(TSL_ChannelData_T *pCh, TSL_tMeas_T new_meas)
-{
- return TSL_TRUE;
-}
-
-
-#if defined(__IAR_SYSTEMS_ICC__) // IAR/EWARM
-#pragma optimize=low
-#elif defined(__CC_ARM) // Keil/MDK-ARM
-#pragma O1
-#pragma Ospace
-#elif defined(__TASKING__) // Altium/Tasking
-#pragma optimize O0
-#elif defined(__GNUC__) // Atollic/True Studio + Raisonance/RKit
-#pragma GCC push_options
-#pragma GCC optimize ("O0")
-#endif
-/**
- * @brief Software delay (private routine)
- * @param val Wait delay
- * @retval None
- * @note Measurements done with HCLK=72MHz and Keil/MDK-ARM compiler
- * val = 500: ~ 63µs
- * val = 1000: ~126µs
- * val = 2000: ~251µs
- */
-void SoftDelay(uint32_t val)
-{
- uint32_t idx;
- for (idx = val; idx > 0; idx--)
- {}
-}
-#if defined(__TASKING__)
-#pragma endoptimize
-#endif
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32l1xx_hw.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32l1xx_hw.c
deleted file mode 100644
index dd7048f..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32l1xx_hw.c
+++ /dev/null
@@ -1,862 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_acq_stm32l1xx_hw.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the acquisition
- * on STM32l1xx products using the Hardware mode (with Timers).
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_acq_stm32l1xx_hw.h"
-#include "tsl_globals.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-
-// Register configuration
-typedef struct
-{
- unsigned int RI_ASCR : 3;
- unsigned int RI_ASCR_bit : 5;
-} TSL_RIConf_t;
-
-/* Private defines -----------------------------------------------------------*/
-
-/* Private macros ------------------------------------------------------------*/
-
-#define IS_BANK_INDEX_OK(INDEX) (((INDEX) == 0) || (((INDEX) > 0) && ((INDEX) < TSLPRM_TOTAL_BANKS)))
-
-// Acquisition pulses period
-/** Master timer reload value for HW acquisition only (range=4..65534, even number)
- --> Period for Charge/Transfer cycle = ((TSLPRM_TIM_RELOAD*2)/FTimer)
-*/
-#define TIM_RELOAD ((TSLPRM_CT_PERIOD * TSLPRM_TIMER_FREQ) / 2)
-#define TIM9_PWM_CH1_WIDTH ((TIM_RELOAD >> 1) + 1) // Configure channel 1 Pulse Width
-#define TIM9_PWM_CH2_WIDTH ((TIM_RELOAD >> 1) - 1) // Configure channel 2 Pulse Width
-
-#define TSL_CHANNEL_PORT(channel) (channel >> 4)
-#define TSL_CHANNEL_IO(channel) (channel & 0x0F)
-
-#define TSL_GPIO_AFR(channel) ((TSL_CHANNEL_IO(channel) < 8) ? 0 : 1)
-#define TSL_GPIO_AFR_Shift(channel) ((TSL_CHANNEL_IO(channel) < 8) ? (4 * TSL_CHANNEL_IO(channel)) : (4 * (TSL_CHANNEL_IO(channel) - 8)))
-
-#define TSL_RI_HYSCR_MASK(channel) (1 << TSL_CHANNEL_IO(channel))
-#define TSL_RI_ASMR_MASK(channel) (1 << TSL_CHANNEL_IO(channel))
-#define TSL_RI_CMR_MASK(channel) (1 << TSL_CHANNEL_IO(channel))
-#define TSL_RI_CICR_MASK(channel) (1 << TSL_CHANNEL_IO(channel))
-
-#define TSL_RCC_AHBENR_Config(channel) (RCC->AHBENR |= TSL_GPIO_Clock_LookUpTable[TSL_CHANNEL_PORT(channel)])
-
-#define TSL_RI_ASCR_Config(channel) (*TSL_RI_ASCR_LookUpTable[TSL_RI_Conf_LookUpTable[channel].RI_ASCR] |= (1 << (TSL_RI_Conf_LookUpTable[channel].RI_ASCR_bit)))
-#define TSL_RI_HYSCR_Config(channel) (*TSL_RI_HYSCR_LookUpTable[TSL_CHANNEL_PORT(channel)] |= TSL_RI_HYSCR_MASK(channel))
-#define TSL_RI_ASMR_Config(channel) (*TSL_RI_ASMR_LookUpTable[TSL_CHANNEL_PORT(channel)] |= TSL_RI_ASMR_MASK(channel))
-#define TSL_RI_ASMR_Config_Clear(channel) (*TSL_RI_ASMR_LookUpTable[TSL_CHANNEL_PORT(channel)] &= (uint32_t)(~TSL_RI_ASMR_MASK(channel)))
-#define TSL_RI_CMR_Config(channel) (*TSL_RI_CMR_LookUpTable[TSL_CHANNEL_PORT(channel)] |= TSL_RI_CMR_MASK(channel))
-#define TSL_RI_CMR_Config_Clear(channel) (*TSL_RI_CMR_LookUpTable[TSL_CHANNEL_PORT(channel)] &= (uint32_t)(~TSL_RI_CMR_MASK(channel)))
-#define TSL_RI_CICR_Config(channel) (*TSL_RI_CICR_LookUpTable[TSL_CHANNEL_PORT(channel)] |= TSL_RI_CICR_MASK(channel))
-#define TSL_RI_CICR_Config_Clear(channel) (*TSL_RI_CICR_LookUpTable[TSL_CHANNEL_PORT(channel)] &= (uint32_t)(~TSL_RI_CICR_MASK(channel)))
-
-#define TSL_GPIO_MODER_IN_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->MODER &= (uint32_t)(~(3 << (2 * TSL_CHANNEL_IO(channel)))))
-#define TSL_GPIO_MODER_AF_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->MODER = (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->MODER & (uint32_t)(~(3 << (2 * TSL_CHANNEL_IO(channel))))) | (2 << (2 * TSL_CHANNEL_IO(channel))))
-#define TSL_GPIO_MODER_OUT_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->MODER = (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->MODER & (uint32_t)(~(3 << (2 * TSL_CHANNEL_IO(channel))))) | (1 << (2 * TSL_CHANNEL_IO(channel))))
-#define TSL_GPIO_PUPDR_NO_PUPD_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->PUPDR &= (uint32_t)(~(3 << (2 * TSL_CHANNEL_IO(channel)))))
-#define TSL_GPIO_OTYPER_PP_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->OTYPER &= (uint32_t)(~(1 << TSL_CHANNEL_IO(channel))))
-#define TSL_GPIO_OSPEEDR_VL_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->OSPEEDR &= (uint32_t)~(3 << (2 * TSL_CHANNEL_IO(channel))))
-#define TSL_GPIO_AFR_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->AFR[TSL_GPIO_AFR(channel)] |= (0x0E << (TSL_GPIO_AFR_Shift(channel))))
-#define TSL_GPIO_BS_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->BSRRL = (uint16_t)(1 << (TSL_CHANNEL_IO(channel))))
-#define TSL_GPIO_BR_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->BSRRH = (uint16_t)(1 << (TSL_CHANNEL_IO(channel))))
-
-#define TSL_GPIO_AFR_NOAF_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->AFR[TSL_GPIO_AFR(channel)] &= (uint32_t)(~(0x0F << (TSL_GPIO_AFR_Shift(channel)))))
-
-#define TSL_GPIO_IDR_XOR_RI_CMR(channel) ((TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->IDR)^(*TSL_RI_CMR_LookUpTable[TSL_CHANNEL_PORT(channel)]))
-#define TSL_GPIO_IDR_AND_RI_CMR(channel) ((TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->IDR)&(*TSL_RI_CMR_LookUpTable[TSL_CHANNEL_PORT(channel)]))
-
-/* Private variables ---------------------------------------------------------*/
-CONST TSL_Bank_T *bank;
-TSL_tIndex_T NumberOfChannelOn = 0;
-TSL_tNb_T NumberOfChannels = 0;
-uint32_t tab_MeasurementCounter[11];
-TSL_Status_enum_T TSL_Acq_Status = TSL_STATUS_BUSY;
-static uint16_t GroupToCheck = 0;
-static TSL_tIndex_T NumberOfChannelChecked = 0;
-
-uint32_t TSL_GPIO_Clock_LookUpTable[] = {RCC_AHBPeriph_GPIOA, RCC_AHBPeriph_GPIOB, RCC_AHBPeriph_GPIOC, RCC_AHBPeriph_GPIOD, RCC_AHBPeriph_GPIOE, RCC_AHBPeriph_GPIOF, RCC_AHBPeriph_GPIOG, RCC_AHBPeriph_GPIOH};
-GPIO_TypeDef *TSL_GPIO_LookUpTable[] = {GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH};
-
-uint32_t *TSL_RI_ASCR_LookUpTable[] = {(uint32_t *)&RI->ASCR1, (uint32_t *)&RI->ASCR2};
-
-uint16_t *TSL_RI_HYSCR_LookUpTable[] =
-{
- (uint16_t *)&RI->HYSCR1, (uint16_t *)&RI->HYSCR1 + 1,
- (uint16_t *)&RI->HYSCR2, (uint16_t *)&RI->HYSCR2 + 1,
- (uint16_t *)&RI->HYSCR3, (uint16_t *)&RI->HYSCR3 + 1,
- (uint16_t *)&RI->HYSCR4, (uint16_t *)&RI->HYSCR4 + 1
-};
-
-uint32_t *TSL_RI_ASMR_LookUpTable[] = {(uint32_t *)&RI->ASMR1, (uint32_t *)&RI->ASMR2, (uint32_t *)&RI->ASMR3, 0, 0, (uint32_t *)&RI->ASMR4, (uint32_t *)&RI->ASMR5};
-uint32_t *TSL_RI_CMR_LookUpTable[] = {(uint32_t *)&RI->CMR1, (uint32_t *)&RI->CMR2, (uint32_t *)&RI->CMR3, 0, 0, (uint32_t *)&RI->CMR4, (uint32_t *)&RI->CMR5};
-uint32_t *TSL_RI_CICR_LookUpTable[] = {(uint32_t *)&RI->CICR1, (uint32_t *)&RI->CICR2, (uint32_t *)&RI->CICR3, 0, 0, (uint32_t *)&RI->CICR4, (uint32_t *)&RI->CICR5};
-
-CONST TSL_RIConf_t TSL_RI_Conf_LookUpTable[101] =
-{
- {0, 0},
- {0, 1},
- {0, 2},
- {0, 3},
- {0, 0},//padding
- {0, 0},//padding
- {0, 6},
- {0, 7},
- {1, 9},
- {1, 10},
- {1, 11},
- {1, 15},
- {0, 0},//padding
- {1, 6},
- {1, 7},
- {1, 8},
-
- {0, 8},
- {0, 9},
- {1, 16},
- {0, 0},//padding
- {1, 4},
- {1, 5},
- {1, 27},
- {1, 28},
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 18},
- {0, 19},
- {0, 20},
- {0, 21},
-
- {0, 10},
- {0, 11},
- {0, 12},
- {0, 13},
- {0, 14},
- {0, 15},
- {1, 0},
- {1, 1},
- {1, 2},
- {1, 3},
- {1, 29},
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
-
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
-
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
-
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 27},
- {0, 28},
- {0, 29},
- {0, 30},
- {0, 16},
- {1, 17},
- {1, 18},
- {1, 19},
- {1, 20},
- {1, 21},
-
- {1, 22},
- {1, 23},
- {1, 24},
- {1, 25},
- {1, 26}
-};
-
-/* Private functions prototype -----------------------------------------------*/
-void TSL_Init_GPIOs(void);
-void TSL_Init_TIMs(void);
-void TSL_Init_RI(void);
-uint8_t TSL_Check_GPIO_IDR(uint8_t sample);
-void SoftDelay(uint16_t val);
-
-
-/**
- * @brief Initializes the TouchSensing GPIOs.
- * @param None
- * @retval None
- */
-void TSL_Init_GPIOs(void)
-{
- CONST TSL_Bank_T *LocalBank = &(TSL_Globals.Bank_Array[0]);
- TSL_tNb_T NumberOfBanks = TSLPRM_TOTAL_BANKS;
- TSL_tNb_T LocalNumberOfChannels = 0;
- TSL_tIndex_T idx_bk;
- TSL_tIndex_T idx_ch;
- CONST TSL_ChannelSrc_T *p_chSrc = LocalBank->p_chSrc; // Pointer to the current channel
-
- for (idx_bk = 0; idx_bk < NumberOfBanks; idx_bk++)
- {
- LocalBank = &(TSL_Globals.Bank_Array[idx_bk]);
- p_chSrc = LocalBank->p_chSrc;
-
-#if (TSLPRM_USE_SHIELD > 0)
- // Enables GPIOs clock
- TSL_RCC_AHBENR_Config(LocalBank->shield_sample);
-
- // Bank shield configuration
- TSL_GPIO_OTYPER_PP_Config(LocalBank->shield_channel);
- TSL_GPIO_OSPEEDR_VL_Config(LocalBank->shield_channel);
- TSL_GPIO_PUPDR_NO_PUPD_Config(LocalBank->shield_channel);
- TSL_GPIO_AFR_Config(LocalBank->shield_channel);
-
- TSL_GPIO_OSPEEDR_VL_Config(LocalBank->shield_sample);
- TSL_GPIO_BR_Config(LocalBank->shield_sample);
- TSL_GPIO_OTYPER_PP_Config(LocalBank->shield_sample);
- TSL_GPIO_PUPDR_NO_PUPD_Config(LocalBank->shield_sample);
-
- TSL_GPIO_MODER_OUT_Config(LocalBank->shield_sample);
- TSL_GPIO_MODER_OUT_Config(LocalBank->shield_channel);
-#endif
-
- LocalNumberOfChannels = LocalBank->NbChannels;
-
- for (idx_ch = 0;
- idx_ch < LocalNumberOfChannels;
- idx_ch++)
- {
- TSL_RCC_AHBENR_Config(p_chSrc->t_sample);
- TSL_RCC_AHBENR_Config(p_chSrc->t_channel);
-
- TSL_GPIO_OTYPER_PP_Config(p_chSrc->t_channel);
- TSL_GPIO_OSPEEDR_VL_Config(p_chSrc->t_channel);
- TSL_GPIO_PUPDR_NO_PUPD_Config(p_chSrc->t_channel);
- TSL_GPIO_AFR_Config(p_chSrc->t_channel);
-
- TSL_GPIO_OSPEEDR_VL_Config(p_chSrc->t_sample);
- TSL_GPIO_BR_Config(p_chSrc->t_sample);
- TSL_GPIO_OTYPER_PP_Config(p_chSrc->t_sample);
- TSL_GPIO_PUPDR_NO_PUPD_Config(p_chSrc->t_sample);
-
- TSL_GPIO_MODER_OUT_Config(p_chSrc->t_sample);
- TSL_GPIO_MODER_OUT_Config(p_chSrc->t_channel);
-
- p_chSrc++;
- }
- }
-}
-
-/**
- * @brief Initializes the TouchSensing timers.
- * @param None
- * @retval None
- */
-// Acquisition pulses period
-/** Master timer reload value for HW acquisition only (range=4..65534, even number)
- --> Period for Charge/Transfer cycle = ((TSLPRM_TIM_RELOAD*2)/FTimer)
-*/
-void TSL_Init_TIMs(void)
-{
- // Enable Timers clocks
- RCC->APB2ENR |= ((1 << 4) | (1 << 2)); // TIM11, TIM9
-
- //==============================
- // TIMER 9 configuration: Master
- //==============================
- // Set the option register to redirect RI_tim9_itr_O to TIM9_itr
- TIM9->OR |= 4;
- // Set the Autoreload value (signal frequency)
- //TIM9->ARR = 64; // freq = (64*2)*31.25ns = 1us
- TIM9->ARR = TIM_RELOAD; // freq = (64*2)*31.25ns = 1us
- // Set the Prescaler value
- //TIM9->PSC = 0; // fCK_CNT = 32MHz/(0+1) = 32MHz --> T=31.25ns
- //TIM9->PSC = TSLPRM_TIM_PRESCALER; // fCK_CNT = 32MHz/(1+1) = 32MHz --> T=31.25ns
- TIM9->PSC = 0; // fCK_CNT = 32MHz/(1+1) = 32MHz --> T=31.25ns
- // Set UP counter, Center-Aligned mode 1
- TIM9->CR1 = 0x20;
- // OC1REF used as TRGO
- TIM9->CR2 |= 0x40; // MMS=100
- // Select Master mode
- TIM9->SMCR = 0x95;
- // Set Update generation
- TIM9->EGR |= 0x01;
-
- // Channel 1 PWM configuration
- // Set the Output Compare Mode, PWM2
- TIM9->CCMR1 |= 0x0070;
- // Set the Pulse value
- //TIM9->CCR1 = 34; // duty cycle
- TIM9->CCR1 = TIM9_PWM_CH1_WIDTH; // duty cycle
- // Compare output enable, active high
- TIM9->CCER |= 0x01;
-
- // Channel 2 PWM configuration
- // Set the Output Compare Mode, PWM2
- TIM9->CCMR1 |= 0x6000;
- // Set the Pulse value
- //TIM9->CCR2 = 30;
- TIM9->CCR2 = TIM9_PWM_CH2_WIDTH;
- // Compare output enable, active high
- TIM9->CCER |= 0x10;
-
- //==============================
- // TIMER 11 configuration: slave
- //==============================
- // Set the option register to redirect TIM11_ic_o to TIM11_ti
- TIM11->OR |= 8;
- // Set the option register to redirect TIM9_tgo_cktim to TIM11_etri
- TIM11->OR |= 4;
- // Set the Prescaler value
- TIM11->PSC = 0;
- // Set UP counter, edge-aligned mode
- TIM11->CR1 = 0;
- // Select Slave mode, Internal Trigger 2 (ITR2 = TIM9), External clock mode 1
- TIM11->SMCR = 0x4000; // ECE bit
- // Channel 1 configured in Input capture mode
- TIM11->CCMR1 = 0x01; // No prescaler, no filter
- // Channel 1 capture enable (CCE1 = 1)
- TIM11->CCER = 0x01;
- // Set auto reload regarding the max count
-#if (TSLPRM_ACQ_MAX < 16534)
- TIM11->ARR = TSLPRM_ACQ_MAX+1;
-#endif
- // Interrupt Enable, active high, Enable interrupt when counter reaches max count (ARR)
- TIM11->DIER |= 0x03;
- // Start slave timer
- TIM11->CR1 |= 0x01;
-}
-
-
-/**
- * @brief Init TS routing interface.
- * @param None
- * @retval None
- */
-void TSL_Init_RI(void)
-{
- CONST TSL_Bank_T *LocalBank;
- TSL_tNb_T NumberOfBanks = TSLPRM_TOTAL_BANKS;
- TSL_tNb_T LocalNumberOfChannels = 0;
- TSL_tIndex_T idx_bk;
- TSL_tIndex_T idx_ch;
- CONST TSL_ChannelSrc_T *p_chSrc; // Pointer to the current channel
-
- RCC->APB1ENR |= (uint32_t)((uint32_t)1 << 31); // COMP enable
-
- for (idx_bk = 0; idx_bk < NumberOfBanks; idx_bk++)
- {
- LocalBank = &(TSL_Globals.Bank_Array[idx_bk]);
-
-#if (TSLPRM_USE_SHIELD > 0)
- TSL_RI_HYSCR_Config(LocalBank->shield_sample);
- TSL_RI_CICR_Config(LocalBank->shield_sample);
- TSL_RI_CICR_Config_Clear(LocalBank->shield_channel);
-
- TSL_RI_ASCR_Config(LocalBank->shield_sample);
-#endif
-
- LocalNumberOfChannels = LocalBank->NbChannels;
-
- p_chSrc = LocalBank->p_chSrc;
- for (idx_ch = 0; idx_ch < LocalNumberOfChannels; idx_ch++)
- {
- TSL_RI_HYSCR_Config(p_chSrc->t_sample);
- TSL_RI_CICR_Config(p_chSrc->t_sample);
- TSL_RI_CICR_Config_Clear(p_chSrc->t_channel);
- TSL_RI_ASCR_Config(p_chSrc->t_sample);
- p_chSrc++;
- }
- }
-
- // Reset TSUSP bit, TIM9 ITR enabled to suspend OC TIM9 generation
- COMP->CSR &= (uint32_t)(~0x80000000);
-
-}
-
-
-/**
- * @brief Initializes the acquisition module.
- * @param None
- * @retval retval
- */
-TSL_Status_enum_T TSL_acq_Init(void)
-{
- NVIC_InitTypeDef NVIC_InitStructure;
-
- NVIC_InitStructure.NVIC_IRQChannel = TIM11_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- TSL_Init_GPIOs();
- TSL_Init_TIMs();
- TSL_Init_RI();
-
- return TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Configures a Bank.
- * @param[in] idx_bk Index of the Bank to configure
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_BankConfig(TSL_tIndex_T idx_bk)
-{
- TSL_tIndex_T idx_dest;
- TSL_tIndex_T idx_ch;
- CONST TSL_ChannelDest_T *p_chDest; // Pointer to the current channel
- CONST TSL_ChannelSrc_T *p_chSrc; // Pointer to the current channel
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-
- bank = &(TSL_Globals.Bank_Array[idx_bk]);
-
- NumberOfChannels = bank->NbChannels;
-
- GroupToCheck = 0;//init group to check
- NumberOfChannelOn = 0;//init number of channel on
-
- // init RI ASMR
- RI->ASMR1 = 0;
- RI->ASMR2 = 0;
- RI->ASMR3 = 0;
- RI->ASMR4 = 0;
- RI->ASMR5 = 0;
-
- p_chDest = bank->p_chDest;
- p_chSrc = bank->p_chSrc;
- for (idx_ch = 0; idx_ch < NumberOfChannels; idx_ch++)
- {
- // Get index in the result array associated to the current channel
- idx_dest = p_chDest->IdxDest;
- if (bank->p_chData[idx_dest].Flags.ObjStatus != TSL_OBJ_STATUS_OFF)
- {
- TSL_RI_CMR_Config(p_chSrc->t_sample);
- TSL_RI_ASMR_Config(p_chSrc->t_channel);
- GroupToCheck |= (1 << (p_chSrc->IdxSrc));
- NumberOfChannelOn++;
- }
- p_chDest++;
- p_chSrc++;
- }
-
- return TSL_STATUS_OK;
-
-}
-
-
-/**
- * @brief Start acquisition on a previously configured bank
- * @param None
- * @retval None
- */
-void TSL_acq_BankStartAcq(void)
-{
-#if (TSLPRM_IODEF > 0)
- CONST TSL_Bank_T *LocalBank = &(TSL_Globals.Bank_Array[0]);
- TSL_tNb_T NumberOfBanks = TSLPRM_TOTAL_BANKS;
- TSL_tNb_T LocalNumberOfChannels = 0;
- TSL_tIndex_T BankIndex;
-#endif
- CONST TSL_ChannelSrc_T *p_chSrc;
- CONST TSL_ChannelDest_T *p_chDest;
- TSL_tIndex_T idx_dest;
- TSL_tIndex_T idx_ch;
-
- if (NumberOfChannelOn)
- {
-#if (TSLPRM_IODEF > 0)
- //============================
- // All GPIOs in Input floating
- //============================
- for (BankIndex = 0; BankIndex < NumberOfBanks; BankIndex++)
- {
- LocalBank = &(TSL_Globals.Bank_Array[BankIndex]);
- p_chSrc = LocalBank->p_chSrc;
-
-#if (TSLPRM_USE_SHIELD > 0)
- TSL_GPIO_MODER_IN_Config(LocalBank->shield_sample);
- TSL_GPIO_MODER_IN_Config(LocalBank->shield_channel);
-#endif
-
- LocalNumberOfChannels = LocalBank->NbChannels;
-
- for (idx_ch = 0;
- idx_ch < LocalNumberOfChannels;
- idx_ch++)
- {
- TSL_GPIO_MODER_IN_Config(p_chSrc->t_sample);
- TSL_GPIO_MODER_IN_Config(p_chSrc->t_channel);
-
- p_chSrc++;
- }
- }
-#endif
-
-
- // Reset count
- TIM11->CNT = 0;
-
- // Discharge sample capacitors
- p_chDest = bank->p_chDest;
- p_chSrc = bank->p_chSrc;
- for (idx_ch = 0; idx_ch < NumberOfChannels; idx_ch++)
- {
- // Get index in the result array associated to the current channel
- idx_dest = p_chDest->IdxDest;
- if (bank->p_chData[idx_dest].Flags.ObjStatus != TSL_OBJ_STATUS_OFF)
- {
- TSL_GPIO_MODER_OUT_Config(p_chSrc->t_sample);
- }
- p_chDest++;
- p_chSrc++;
- }
-
-#if (TSLPRM_USE_SHIELD > 0)
- // Discharge shield sample capacitor
- TSL_GPIO_MODER_OUT_Config(bank->shield_sample);
-#endif
-
- // Wait for capa discharge
- SoftDelay(0x80);
-
-#if (TSLPRM_USE_SHIELD > 0)
- // Init sample shield in floating input
- TSL_GPIO_MODER_IN_Config(bank->shield_sample);
- TSL_GPIO_MODER_AF_Config(bank->shield_channel);
-
- TSL_RI_ASMR_Config(bank->shield_channel);
-#endif
-
- // Init samples in floating input and channels in alternate
- p_chDest = bank->p_chDest;
- p_chSrc = bank->p_chSrc;
- for (idx_ch = 0; idx_ch < NumberOfChannels; idx_ch++)
- {
- // Get index in the result array associated to the current channel
- idx_dest = p_chDest->IdxDest;
-
- if (bank->p_chData[idx_dest].Flags.ObjStatus != TSL_OBJ_STATUS_OFF)
- {
- TSL_GPIO_MODER_IN_Config(p_chSrc->t_sample);
- TSL_GPIO_MODER_AF_Config(p_chSrc->t_channel);
- }
-
- p_chDest++;
- p_chSrc++;
- }
-
- /* Start acquisition */
- TSL_Acq_Status = TSL_STATUS_BUSY;
- TIM9 ->CR1 |= 0x01; // Master
- }
- else
- {
- TSL_Acq_Status = TSL_STATUS_OK;
- }
-}
-
-
-/**
- * @brief Wait end of acquisition
- * @param None
- * @retval status
- */
-TSL_Status_enum_T TSL_acq_BankWaitEOC(void)
-{
- return TSL_Acq_Status;
-}
-
-
-/**
- * @brief Return the current measure
- * @param[in] index Index of the measure source
- * @retval Measure
- */
-TSL_tMeas_T TSL_acq_GetMeas(TSL_tIndex_T index)
-{
- return(tab_MeasurementCounter[index]);
-}
-
-
-/**
- * @brief Check noise (not used)
- * @param None
- * @retval Status
- */
-TSL_AcqStatus_enum_T TSL_acq_CheckNoise(void)
-{
- return TSL_ACQ_STATUS_OK;
-}
-
-
-/**
- * @brief Check GPIO IDR for the sample
- * @param[in] sample
- * @retval Status
- */
-uint8_t TSL_Check_GPIO_IDR(uint8_t sample)
-{
- GPIO_TypeDef *GPIO;
- uint32_t GPIO_IDR_Mask = 0;
-
- GPIO = TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(sample)];
-
- GPIO_IDR_Mask = (1 << (sample & 0x0F));
-
- if (((GPIO->IDR) & GPIO_IDR_Mask) == GPIO_IDR_Mask)
- {
- return 1;
- }
- else
- {
- return 0;
- }
-}
-
-
-/**
- * @brief Process the TS Interrupt routine
- * @param None
- * @retval None
- */
-void TSL_acq_ProcessIT(void)
-{
- CONST TSL_Bank_T *LocalBank = &(TSL_Globals.Bank_Array[0]);
- TSL_tNb_T NumberOfBanks = TSLPRM_TOTAL_BANKS;
- TSL_tNb_T LocalNumberOfChannels = 0;
- TSL_tIndex_T BankIndex;
-
- CONST TSL_ChannelSrc_T *p_chSrc;
- CONST TSL_ChannelDest_T *p_chDest;
- TSL_tIndex_T idx_dest;
- TSL_tIndex_T idx_ch;
- TSL_tNb_T CounterOverflowFlag = 0;
-
- CounterOverflowFlag = TIM11->SR & TIM_SR_UIF;
-
- // Reset flags
- TIM11->SR = 0;
- idx_ch = 0;
-
- p_chDest = bank->p_chDest;
- p_chSrc = bank->p_chSrc;
- do
- {
- // Get index in the result array associated to the current channel
- idx_dest = p_chDest->IdxDest;
-
- if (bank->p_chData[idx_dest].Flags.ObjStatus != TSL_OBJ_STATUS_OFF)
- {
- if ((TSL_Check_GPIO_IDR(p_chSrc->t_sample)) &&
- ((GroupToCheck & (1 << (p_chSrc->IdxSrc))) == (1 << (p_chSrc->IdxSrc))))
- {
- tab_MeasurementCounter[p_chSrc->IdxSrc] = TIM11->CCR1;
- NumberOfChannelChecked++;
- GroupToCheck &= (uint32_t)(~(1 << (p_chSrc->IdxSrc)));
-
- // Reset CMR register to restart the timer
- TSL_RI_CMR_Config_Clear(p_chSrc->t_sample);
- }
- // Manage Overflow
- else if((CounterOverflowFlag) &&
- ((GroupToCheck & (1 << (p_chSrc->IdxSrc))) == (1 << (p_chSrc->IdxSrc))))
- {
- tab_MeasurementCounter[p_chSrc->IdxSrc] = TSLPRM_ACQ_MAX + 1;
- GroupToCheck &= (uint32_t)(~(1 << (p_chSrc->IdxSrc)));
-
- // Reset CMR register to restart the timer
- TSL_RI_CMR_Config_Clear(p_chSrc->t_sample);
- }
- }
- p_chDest++;
- p_chSrc++;
- idx_ch++;
- }
- while (idx_ch < NumberOfChannels);
-
- if (NumberOfChannelChecked >= NumberOfChannelOn)
- {
- NumberOfChannelOn = 0;
- NumberOfChannelChecked = 0;
-
- // Disable master counter
- TIM9->CR1 &= (uint16_t)(~0x01);
-
- //====================
- // All GPIOs in PP Low
- //====================
- for (BankIndex = 0; BankIndex < NumberOfBanks; BankIndex++)
- {
- LocalBank = &(TSL_Globals.Bank_Array[BankIndex]);
- p_chSrc = LocalBank->p_chSrc;
-
-#if (TSLPRM_USE_SHIELD > 0)
- TSL_GPIO_BR_Config(LocalBank->shield_sample);
- TSL_GPIO_BR_Config(LocalBank->shield_channel);
- TSL_GPIO_MODER_OUT_Config(LocalBank->shield_sample);
- TSL_GPIO_MODER_OUT_Config(LocalBank->shield_channel);
-#endif
-
- LocalNumberOfChannels = LocalBank->NbChannels;
-
- for (idx_ch = 0;
- idx_ch < LocalNumberOfChannels;
- idx_ch++)
- {
- TSL_GPIO_BR_Config(p_chSrc->t_sample);
- TSL_GPIO_BR_Config(p_chSrc->t_channel);
- TSL_GPIO_MODER_OUT_Config(p_chSrc->t_sample);
- TSL_GPIO_MODER_OUT_Config(p_chSrc->t_channel);
-
- p_chSrc++;
- }
- }
- TSL_Acq_Status = TSL_STATUS_OK;
- }
-}
-
-
-/**
- * @brief Check if a filter must be used on the current channel (not used)
- * @param[in] pCh Pointer on the channel data information
- * @retval Result TRUE if a filter can be applied
- */
-TSL_Bool_enum_T TSL_acq_UseFilter(TSL_ChannelData_T *pCh)
-{
- return TSL_TRUE;
-}
-
-
-/**
- * @brief Compute the Delta value
- * @param[in] ref Reference value
- * @param[in] meas Last Measurement value
- * @retval Delta value
- */
-TSL_tDelta_T TSL_acq_ComputeDelta(TSL_tRef_T ref, TSL_tMeas_T meas)
-{
- return((TSL_tDelta_T)(ref - meas));
-}
-
-
-/**
- * @brief Compute the Measurement value
- * @param[in] ref Reference value
- * @param[in] delta Delta value
- * @retval Measurement value
- */
-TSL_tMeas_T TSL_acq_ComputeMeas(TSL_tRef_T ref, TSL_tDelta_T delta)
-{
- return((TSL_tMeas_T)(ref - delta));
-}
-
-
-/**
- * @brief Test if the Reference is incorrect (not used)
- * @param[in] pCh Pointer on the channel data information
- * @retval Result TRUE if the Reference is out of range
- */
-TSL_Bool_enum_T TSL_acq_TestReferenceOutOfRange(TSL_ChannelData_T *pCh)
-{
- return TSL_FALSE;
-}
-
-
-/**
- * @brief Test if the measure has crossed the reference target (not used)
- * @param[in] pCh Pointer on the channel data information
- * @param[in] new_meas Measure of the last acquisition on this channel
- * @retval Result TRUE if the Reference is valid
- */
-TSL_Bool_enum_T TSL_acq_TestFirstReferenceIsValid(TSL_ChannelData_T *pCh, TSL_tMeas_T new_meas)
-{
- return TSL_TRUE;
-}
-
-
-#if defined(__IAR_SYSTEMS_ICC__) // IAR/EWARM
-#pragma optimize=medium
-#elif defined(__CC_ARM) // Keil/MDK-ARM
-#pragma O1
-#pragma Ospace
-#elif defined(__TASKING__) // Altium/Tasking
-#pragma optimize O0
-#elif defined(__GNUC__) // Atollic/True Studio + Raisonance/RKit
-#pragma GCC push_options
-#pragma GCC optimize ("O0")
-#endif
-/**
- * @brief Software delay (private routine)
- * @param val Wait delay
- * With fHCLK = 32MHz: 1 = ~1µs, 50 = ~14µs, 100 = ~25µs, 200 = ~50µs
- * @retval None
- */
-void SoftDelay(uint16_t val)
-{
- __IO uint16_t idx;
- for (idx = val; idx > 0; idx--)
- {}
-}
-#if defined(__TASKING__)
-#pragma endoptimize
-#endif
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32l1xx_sw.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32l1xx_sw.c
deleted file mode 100644
index 98e6792..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm32l1xx_sw.c
+++ /dev/null
@@ -1,996 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_acq_stm32l1xx_sw.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the acquisition
- * on STM32l1xx products using the software mode.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_acq_stm32l1xx_sw.h"
-#include "tsl_globals.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-
-// Register configuration
-typedef struct
-{
- unsigned int RI_ASCR : 3;
- unsigned int RI_ASCR_bit : 5;
-} TSL_RIConf_t;
-
-/* Private defines -----------------------------------------------------------*/
-#define SIZEOFBANKCONF (17) //2 mask RIRs + 5 ports x 3 mask registers(MODER input, output, ODR) => 17 registers
-
-/* Private macros ------------------------------------------------------------*/
-#define IS_BANK_INDEX_OK(INDEX) (((INDEX) == 0) || (((INDEX) > 0) && ((INDEX) < TSLPRM_TOTAL_BANKS)))
-
-#define TSL_CHANNEL_PORT(channel) (channel >> 4)
-#define TSL_CHANNEL_IO(channel) (channel & 0x0F)
-
-
-#define TSL_RI_HYSCR_MASK(channel) (1 << TSL_CHANNEL_IO(channel))
-
-#define TSL_RCC_AHBENR_Config(channel) (RCC->AHBENR |= TSL_GPIO_Clock_LookUpTable[TSL_CHANNEL_PORT(channel)])
-
-#define TSL_RI_HYSCR_Config(channel) (*TSL_RI_HYSCR_LookUpTable[TSL_CHANNEL_PORT(channel)] |= TSL_RI_HYSCR_MASK(channel))
-
-#define TSL_GPIO_MODER_IN_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->MODER &= (uint32_t)(~(3 << (2 * TSL_CHANNEL_IO(channel)))))
-#define TSL_GPIO_MODER_OUT_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->MODER = (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->MODER & (uint32_t)(~(3 << (2 * TSL_CHANNEL_IO(channel))))) | (1 << (2 * TSL_CHANNEL_IO(channel))))
-#define TSL_GPIO_PUPDR_NO_PUPD_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->PUPDR &= (uint32_t)(~(3 << (2 * TSL_CHANNEL_IO(channel)))))
-#define TSL_GPIO_OTYPER_PP_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->OTYPER &= (uint32_t)(~(1 << TSL_CHANNEL_IO(channel))))
-#define TSL_GPIO_OSPEEDR_VL_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->OSPEEDR &= (uint32_t)~(3 << (2 * TSL_CHANNEL_IO(channel))))
-#define TSL_GPIO_BS_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->BSRRL = (uint16_t)(1 << (TSL_CHANNEL_IO(channel))))
-#define TSL_GPIO_BR_Config(channel) (TSL_GPIO_LookUpTable[TSL_CHANNEL_PORT(channel)]->BSRRH = (uint16_t)(1 << (TSL_CHANNEL_IO(channel))))
-
-
-/* Private variables ---------------------------------------------------------*/
-uint32_t TSL_BankSampleConf[SIZEOFBANKCONF];
-uint32_t TSL_BankChannelConf[SIZEOFBANKCONF];
-uint32_t tab_MeasurementCounter[11];
-extern TSL_Params_T TSL_Params;
-
-CONST TSL_Bank_T *bank;
-TSL_tIndex_T NumberOfChannelOn = 0;
-TSL_tNb_T NumberOfChannels = 0;
-TSL_Status_enum_T TSL_Acq_Status = TSL_STATUS_BUSY;
-uint16_t GroupToCheck = 0;
-
-uint32_t TSL_GPIO_Clock_LookUpTable[] = {RCC_AHBPeriph_GPIOA, RCC_AHBPeriph_GPIOB, RCC_AHBPeriph_GPIOC, RCC_AHBPeriph_GPIOD, RCC_AHBPeriph_GPIOE, RCC_AHBPeriph_GPIOF, RCC_AHBPeriph_GPIOG, RCC_AHBPeriph_GPIOH};
-GPIO_TypeDef *TSL_GPIO_LookUpTable[] = {GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH};
-
-uint16_t *TSL_RI_HYSCR_LookUpTable[] =
-{
- (uint16_t *)&RI->HYSCR1, (uint16_t *)&RI->HYSCR1 + 1,
- (uint16_t *)&RI->HYSCR2, (uint16_t *)&RI->HYSCR2 + 1,
- (uint16_t *)&RI->HYSCR3, (uint16_t *)&RI->HYSCR3 + 1,
- (uint16_t *)&RI->HYSCR4, (uint16_t *)&RI->HYSCR4 + 1
-};
-
-CONST TSL_RIConf_t TSL_RI_Conf_LookUpTable[101] =
-{
- {0, 0},
- {0, 1},
- {0, 2},
- {0, 3},
- {0, 0},//padding
- {0, 0},//padding
- {0, 6},
- {0, 7},
- {1, 9},
- {1, 10},
- {1, 11},
- {1, 15},
- {0, 0},//padding
- {1, 6},
- {1, 7},
- {1, 8},
-
- {0, 8},
- {0, 9},
- {1, 16},
- {0, 0},//padding
- {1, 4},
- {1, 5},
- {1, 27},
- {1, 28},
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 18},
- {0, 19},
- {0, 20},
- {0, 21},
-
- {0, 10},
- {0, 11},
- {0, 12},
- {0, 13},
- {0, 14},
- {0, 15},
- {1, 0},
- {1, 1},
- {1, 2},
- {1, 3},
- {1, 29},
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
-
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
-
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
-
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 0},//padding
- {0, 27},
- {0, 28},
- {0, 29},
- {0, 30},
- {0, 16},
- {1, 17},
- {1, 18},
- {1, 19},
- {1, 20},
- {1, 21},
-
- {1, 22},
- {1, 23},
- {1, 24},
- {1, 25},
- {1, 26}
-};
-
-#if (TSLPRM_USE_GPIOA)
-uint32_t GPIOA_IDR_Mask = 0;
-#endif
-#if (TSLPRM_USE_GPIOB)
-uint32_t GPIOB_IDR_Mask = 0;
-#endif
-#if (TSLPRM_USE_GPIOC)
-uint32_t GPIOC_IDR_Mask = 0;
-#endif
-#if (TSLPRM_USE_GPIOF)
-uint32_t GPIOF_IDR_Mask = 0;
-#endif
-#if (TSLPRM_USE_GPIOG)
-uint32_t GPIOG_IDR_Mask = 0;
-#endif
-
-#if (TSLPRM_USE_SPREAD_SPECTRUM > 0)
-uint8_t SpreadCounter = TSLPRM_SPREAD_MIN;
-#endif
-
-/* Private functions prototype -----------------------------------------------*/
-void SoftDelay(uint16_t val);
-#if (TSLPRM_USE_SPREAD_SPECTRUM > 0)
-__INLINE void SwSpreadSpectrum(void);
-#endif
-void TSL_BankConf(uint32_t * BankConf, TSL_Conf_t Conf);
-void TSL_acq_GroupDone(uint16_t EndedGroup);
-
-/**
- * @brief Configures the acquisition module.
- * @param[in] BankConf Pointer to the bank to configure
- * @param[in] Conf Configuration
- * @retval None
- */
-void TSL_BankConf(uint32_t *BankConf, TSL_Conf_t Conf)
-{
- BankConf[TSL_RI_Conf_LookUpTable[Conf].RI_ASCR] |= (1 << (TSL_RI_Conf_LookUpTable[Conf].RI_ASCR_bit));
-
- switch (TSL_CHANNEL_PORT(Conf))
- {
- case TSL_BANK_GPIOA: BankConf[2] |= (3 << (2 * (TSL_CHANNEL_IO(Conf)))); //MODER input
- BankConf[3] |= (1 << (2 * (TSL_CHANNEL_IO(Conf)))); //MODER output
- BankConf[4] |= (1 << (TSL_CHANNEL_IO(Conf))); //ODR
- break;
- case TSL_BANK_GPIOB: BankConf[5] |= (3 << (2 * (TSL_CHANNEL_IO(Conf)))); //MODER input
- BankConf[6] |= (1 << (2 * (TSL_CHANNEL_IO(Conf)))); //MODER output
- BankConf[7] |= (1 << (TSL_CHANNEL_IO(Conf))); //ODR
- break;
- case TSL_BANK_GPIOC: BankConf[8] |= (3 << (2 * (TSL_CHANNEL_IO(Conf)))); //MODER input
- BankConf[9] |= (1 << (2 * (TSL_CHANNEL_IO(Conf)))); //MODER output
- BankConf[10] |= (1 << (TSL_CHANNEL_IO(Conf))); //ODR
- break;
- case TSL_BANK_GPIOF: BankConf[11] |= (3 << (2 * (TSL_CHANNEL_IO(Conf)))); //MODER input
- BankConf[12] |= (1 << (2 * (TSL_CHANNEL_IO(Conf)))); //MODER output
- BankConf[13] |= (1 << (TSL_CHANNEL_IO(Conf))); //ODR
- break;
- case TSL_BANK_GPIOG: BankConf[14] |= (3 << (2 * (TSL_CHANNEL_IO(Conf)))); //MODER input
- BankConf[15] |= (1 << (2 * (TSL_CHANNEL_IO(Conf)))); //MODER output
- BankConf[16] |= (1 << (TSL_CHANNEL_IO(Conf))); //ODR
- break;
- default: break;
- }
-}
-
-
-/**
- * @brief Initializes the acquisition module.
- * @param None
- * @retval None
- */
-TSL_Status_enum_T TSL_acq_Init(void)
-{
- CONST TSL_Bank_T *LocalBank = &(TSL_Globals.Bank_Array[0]);
- TSL_tNb_T NumberOfBanks = TSLPRM_TOTAL_BANKS;
- TSL_tNb_T LocalNumberOfChannels = 0;
- TSL_tIndex_T idx_bk;
- TSL_tIndex_T idx_ch;
- CONST TSL_ChannelSrc_T *p_chSrc = LocalBank->p_chSrc; // Pointer to the current channel
-
- /* Enables the comparator interface clock */
- RCC->APB1ENR |= RCC_APB1Periph_COMP;
-
- //====================
- // GPIOs configuration
- //====================
- for (idx_bk = 0; idx_bk < NumberOfBanks; idx_bk++)
- {
- LocalBank = &(TSL_Globals.Bank_Array[idx_bk]);
- p_chSrc = LocalBank->p_chSrc;
-
-#if (TSLPRM_USE_SHIELD > 0)
- // Enables GPIOs clock
- TSL_RCC_AHBENR_Config(LocalBank->shield_sample);
-
- // Bank shield configuration
- /* Disables Hysteresis Register */
- TSL_RI_HYSCR_Config(LocalBank->shield_sample);
-
- /* Output PP config */
- TSL_GPIO_OTYPER_PP_Config(p_chSrc->t_sample);
- TSL_GPIO_OTYPER_PP_Config(p_chSrc->t_channel);
- /* 400kHz config */
- TSL_GPIO_OSPEEDR_VL_Config(p_chSrc->t_sample);
- TSL_GPIO_OSPEEDR_VL_Config(p_chSrc->t_channel);
- /* No pull up/pull down config */
- TSL_GPIO_PUPDR_NO_PUPD_Config(LocalBank->shield_sample);
- TSL_GPIO_PUPDR_NO_PUPD_Config(LocalBank->shield_channel);
- /* Set ODR */
- TSL_GPIO_BR_Config(LocalBank->shield_sample);
- TSL_GPIO_BR_Config(LocalBank->shield_channel);
- /* Output mode */
- TSL_GPIO_MODER_OUT_Config(LocalBank->shield_sample);
- TSL_GPIO_MODER_OUT_Config(LocalBank->shield_channel);
-#endif
-
- LocalNumberOfChannels = LocalBank->NbChannels;
-
- for (idx_ch = 0;
- idx_ch < LocalNumberOfChannels;
- idx_ch++)
- {
- /* Enables GPIOs clock */
- TSL_RCC_AHBENR_Config(p_chSrc->t_sample);
- TSL_RCC_AHBENR_Config(p_chSrc->t_channel);
-
- // Bank/channel configuration
- /* Disables Hysteresis Register */
- TSL_RI_HYSCR_Config(p_chSrc->t_sample);
- /* Output PP config */
- TSL_GPIO_OTYPER_PP_Config(p_chSrc->t_sample);
- TSL_GPIO_OTYPER_PP_Config(p_chSrc->t_channel);
- /* 400kHz config */
- TSL_GPIO_OSPEEDR_VL_Config(p_chSrc->t_sample);
- TSL_GPIO_OSPEEDR_VL_Config(p_chSrc->t_channel);
- /* No pull up/pull down config */
- TSL_GPIO_PUPDR_NO_PUPD_Config(p_chSrc->t_sample);
- TSL_GPIO_PUPDR_NO_PUPD_Config(p_chSrc->t_channel);
- /* Set ODR */
- TSL_GPIO_BR_Config(p_chSrc->t_sample);
- TSL_GPIO_BR_Config(p_chSrc->t_channel);
- /* Output mode */
- TSL_GPIO_MODER_OUT_Config(p_chSrc->t_sample);
- TSL_GPIO_MODER_OUT_Config(p_chSrc->t_channel);
-
- p_chSrc++;
- }
- }
-
- /* Enable RI Switch */
- RI->ASCR1 &= (uint32_t)(~0x80000000); // ADC analog switches open !!!
-
- return TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Configures a Bank.
- * @param[in] idx_bk Index of the Bank to configure
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_BankConfig(TSL_tIndex_T idx_bk)
-{
- TSL_tIndex_T index;
- TSL_tIndex_T idx_dest;
- TSL_tIndex_T idx_ch;
- CONST TSL_ChannelDest_T *p_chDest; // Pointer to the current channel
- CONST TSL_ChannelSrc_T *p_chSrc; // Pointer to the current channel
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-
- bank = &(TSL_Globals.Bank_Array[idx_bk]);
-
- for (index = 0;index < SIZEOFBANKCONF;index++)
- {
- TSL_BankSampleConf[index] = 0x00000000;
- TSL_BankChannelConf[index] = 0x00000000;
- }
-
- NumberOfChannels = bank->NbChannels;
- NumberOfChannelOn = 0;
- GroupToCheck = 0;//init group to check
-
- p_chDest = bank->p_chDest;
- p_chSrc = bank->p_chSrc;
- for (idx_ch = 0; idx_ch < NumberOfChannels; idx_ch++)
- {
- // Get index in the result array associated to the current channel
- idx_dest = p_chDest->IdxDest;
-
- if (bank->p_chData[idx_dest].Flags.ObjStatus != TSL_OBJ_STATUS_OFF)
- {
- TSL_BankConf(TSL_BankSampleConf, p_chSrc->t_sample);
- TSL_BankConf(TSL_BankChannelConf, p_chSrc->t_channel);
- GroupToCheck |= (1 << (p_chSrc->IdxSrc));
- NumberOfChannelOn++;
- }
-
- p_chSrc++;
- p_chDest++;
- }
-
-#if (TSLPRM_USE_GPIOA)
- GPIOA_IDR_Mask = TSL_BankSampleConf[4];
-#endif
-
-#if (TSLPRM_USE_GPIOB)
- GPIOB_IDR_Mask = TSL_BankSampleConf[7];
-#endif
-
-#if (TSLPRM_USE_GPIOC)
- GPIOC_IDR_Mask = TSL_BankSampleConf[10];
-#endif
-
-#if (TSLPRM_USE_GPIOF)
- GPIOF_IDR_Mask = TSL_BankSampleConf[13];
-#endif
-
-#if (TSLPRM_USE_GPIOG)
- GPIOG_IDR_Mask = TSL_BankSampleConf[16];
-#endif
-
-
-#if (TSLPRM_USE_SHIELD > 0)
- if (NumberOfChannelOn != 0)
- {
- TSL_BankConf(TSL_BankSampleConf, bank->shield_sample);
- TSL_BankConf(TSL_BankChannelConf, bank->shield_channel);
- }
-#endif
-
- return TSL_STATUS_OK;
-
-}
-
-
-/**
- * @brief Check which group is not over
- * @param[in] EndedGroup
- * @retval None
- */
-void TSL_acq_GroupDone(uint16_t EndedGroup)
-{
- uint16_t i;
-
- for (i = 0;i < 11;i++)
- {
- if ((EndedGroup & (1 << i)) != (1 << i))
- {
- tab_MeasurementCounter[i] = TSL_Params.AcqMax + 1;
- }
- }
-
-}
-
-
-/**
- * @brief Start acquisition on a previously configured bank
- * @param None
- * @retval None
- */
-void TSL_acq_BankStartAcq(void)
-{
- CONST TSL_Bank_T *LocalBank = &(TSL_Globals.Bank_Array[0]);
- TSL_tNb_T NumberOfBanks = TSLPRM_TOTAL_BANKS;
- TSL_tNb_T LocalNumberOfChannels = 0;
- TSL_tIndex_T BankIndex;
-
- uint16_t MeasurementCounter = 0;
- CONST TSL_ChannelSrc_T *p_chSrc;
- TSL_tIndex_T idx_ch;
- uint16_t GroupToCheckMask = 0;
- uint32_t GPIO_IDR_Mask = 0;
- uint8_t Check_Input = 0;
-
-#if (TSLPRM_USE_GPIOA)
- uint16_t TSL_GPIOA_IDR = 0;
-#endif
-#if (TSLPRM_USE_GPIOB)
- uint16_t TSL_GPIOB_IDR = 0;
-#endif
-#if (TSLPRM_USE_GPIOC)
- uint16_t TSL_GPIOC_IDR = 0;
-#endif
-#if (TSLPRM_USE_GPIOF)
- uint16_t TSL_GPIOF_IDR = 0;
-#endif
-#if (TSLPRM_USE_GPIOG)
- uint16_t TSL_GPIOG_IDR = 0;
-#endif
- uint16_t GPIO_IDR = 0;
-
-#if (TSLPRM_PROTECT_IO_ACCESS > 0)
- __disable_irq();
-#endif
-#if (TSLPRM_IODEF > 0)
- //============================
- // All GPIOs in Input floating
- //============================
- for (BankIndex = 0; BankIndex < NumberOfBanks; BankIndex++)
- {
- LocalBank = &(TSL_Globals.Bank_Array[BankIndex]);
- p_chSrc = LocalBank->p_chSrc;
-
-#if (TSLPRM_USE_SHIELD > 0)
- TSL_GPIO_MODER_IN_Config(LocalBank->shield_sample);
- TSL_GPIO_MODER_IN_Config(LocalBank->shield_channel);
-#endif
-
- LocalNumberOfChannels = LocalBank->NbChannels;
-
- for (idx_ch = 0;
- idx_ch < LocalNumberOfChannels;
- idx_ch++)
- {
- TSL_GPIO_MODER_IN_Config(p_chSrc->t_sample);
- TSL_GPIO_MODER_IN_Config(p_chSrc->t_channel);
-
- p_chSrc++;
- }
- }
-#endif
-#if (TSLPRM_PROTECT_IO_ACCESS > 0)
- __enable_irq();
-#endif
-
- /* Open the analog switches */
- RI->ASCR1 &= (uint32_t)(~(TSL_BankSampleConf[0] | TSL_BankChannelConf[0]));
- RI->ASCR2 &= (uint32_t)(~(TSL_BankSampleConf[1] | TSL_BankChannelConf[1]));
-
- /* All IO to pushpull LOW for discharging all capacitors (Ctouch and Csense) */
-#if (TSLPRM_PROTECT_IO_ACCESS > 0)
- __disable_irq();
-#endif
- /* Discharging sampling capacitor and CTouch */
-#if (TSLPRM_USE_GPIOA)
- GPIOA->ODR &= (uint32_t)(~(TSL_BankSampleConf[4] | TSL_BankChannelConf[4]));
- GPIOA->MODER = (GPIOA->MODER & (uint32_t)(~(TSL_BankSampleConf[2] | TSL_BankChannelConf[2]))) | (TSL_BankSampleConf[3] | TSL_BankChannelConf[3]);
-#endif
-#if (TSLPRM_USE_GPIOB)
- GPIOB->ODR &= (uint32_t)(~(TSL_BankSampleConf[7] | TSL_BankChannelConf[7]));
- GPIOB->MODER = (GPIOB->MODER & (uint32_t)(~(TSL_BankSampleConf[5] | TSL_BankChannelConf[5]))) | (TSL_BankSampleConf[6] | TSL_BankChannelConf[6]);
-#endif
-#if (TSLPRM_USE_GPIOC)
- GPIOC->ODR &= (uint32_t)(~(TSL_BankSampleConf[10] | TSL_BankChannelConf[10]));
- GPIOC->MODER = (GPIOC->MODER & (uint32_t)(~(TSL_BankSampleConf[8] | TSL_BankChannelConf[8]))) | (TSL_BankSampleConf[9] | TSL_BankChannelConf[9]);
-#endif
-#if (TSLPRM_USE_GPIOF)
- GPIOF->ODR &= (uint32_t)(~(TSL_BankSampleConf[13] | TSL_BankChannelConf[13]));
- GPIOF->MODER = (GPIOF->MODER & (uint32_t)(~(TSL_BankSampleConf[11] | TSL_BankChannelConf[11]))) | (TSL_BankSampleConf[12] | TSL_BankChannelConf[12]);
-#endif
-#if (TSLPRM_USE_GPIOG)
- GPIOG->ODR &= (uint32_t)(~(TSL_BankSampleConf[16] | TSL_BankChannelConf[16]));
- GPIOG->MODER = (GPIOG->MODER & (uint32_t)(~(TSL_BankSampleConf[14] | TSL_BankChannelConf[14]))) | (TSL_BankSampleConf[15] | TSL_BankChannelConf[15]);
-#endif
-
-
-
-#if (TSLPRM_PROTECT_IO_ACCESS > 0)
- __enable_irq();
-#endif
-
- /* Wait a while for a good discharging of all capacitors */
- SoftDelay(50); // ~14µs with fHCLK = 32MHz
- //this time depends of the size of the sampling capacitor
-
-#if (TSLPRM_PROTECT_IO_ACCESS > 0)
- __disable_irq();
-#endif
- /* All IO in input floating */
-#if (TSLPRM_USE_GPIOA)
- GPIOA->MODER &= (uint32_t)(~(TSL_BankSampleConf[2] | TSL_BankChannelConf[2]));
-#endif
-#if (TSLPRM_USE_GPIOB)
- GPIOB->MODER &= (uint32_t)(~(TSL_BankSampleConf[5] | TSL_BankChannelConf[5]));
-#endif
-#if (TSLPRM_USE_GPIOC)
- GPIOC->MODER &= (uint32_t)(~(TSL_BankSampleConf[8] | TSL_BankChannelConf[8]));
-#endif
-#if (TSLPRM_USE_GPIOF)
- GPIOF->MODER &= (uint32_t)(~(TSL_BankSampleConf[11] | TSL_BankChannelConf[11]));
-#endif
-#if (TSLPRM_USE_GPIOG)
- GPIOG->MODER &= (uint32_t)(~(TSL_BankSampleConf[14] | TSL_BankChannelConf[14]));
-#endif
-
- /* set the IO to Vdd (io in push-pull HIGH when in output mode) */
-#if (TSLPRM_USE_GPIOA)
- GPIOA->ODR |= (TSL_BankSampleConf[4] | TSL_BankChannelConf[4]); /* HIGH level */
-#endif
-#if (TSLPRM_USE_GPIOB)
- GPIOB->ODR |= (TSL_BankSampleConf[7] | TSL_BankChannelConf[7]); /* HIGH level */
-#endif
-#if (TSLPRM_USE_GPIOC)
- GPIOC->ODR |= (TSL_BankSampleConf[10] | TSL_BankChannelConf[10]); /* HIGH level */
-#endif
-#if (TSLPRM_USE_GPIOF)
- GPIOF->ODR |= (TSL_BankSampleConf[13] | TSL_BankChannelConf[13]); /* HIGH level */
-#endif
-#if (TSLPRM_USE_GPIOG)
- GPIOG->ODR |= (TSL_BankSampleConf[16] | TSL_BankChannelConf[16]); /* HIGH level */
-#endif
-
-#if (TSLPRM_PROTECT_IO_ACCESS > 0)
- __enable_irq();
-#endif
-
- /* Close the sampling capacitor analog switch */
- RI->ASCR1 |= (TSL_BankSampleConf[0]);
- RI->ASCR2 |= (TSL_BankSampleConf[1]);
-
-
- /* Loop while all the 1st channel of each group have not reach the VIH level */
- do
- {
-
-#if (TSLPRM_PROTECT_IO_ACCESS > 0)
- __disable_irq();
-#endif
- /* Charging Ctouch by connecting the IO to Vdd (io in push-pull HIGH) */
-#if (TSLPRM_USE_GPIOA)
- GPIOA->MODER |= (TSL_BankChannelConf[3]); /* Output push pull config */
-#endif
-#if (TSLPRM_USE_GPIOB)
- GPIOB->MODER |= (TSL_BankChannelConf[6]); /* Output push pull config */
-#endif
-#if (TSLPRM_USE_GPIOC)
- GPIOC->MODER |= (TSL_BankChannelConf[9]); /* Output push pull config */
-#endif
-#if (TSLPRM_USE_GPIOF)
- GPIOF->MODER |= (TSL_BankChannelConf[12]); /* Output push pull config */
-#endif
-#if (TSLPRM_USE_GPIOG)
- GPIOG->MODER |= (TSL_BankChannelConf[15]); /* Output push pull config */
-#endif
-#if (TSLPRM_PROTECT_IO_ACCESS > 0)
- __enable_irq();
-#endif
-
- /* Wait a while for a good charging (programmable delay) */
-#if ( TSLPRM_DELAY_TRANSFER > 0 )
- SoftDelay(TSLPRM_DELAY_TRANSFER);
-#endif
-
- /* Spread Spectrum */
-#if (TSLPRM_USE_SPREAD_SPECTRUM > 0)
- SwSpreadSpectrum();
-#endif
-
- /* test GPIOx->IDR bit + group configuration for each channel */
-
-#if (TSLPRM_USE_GPIOA)
- TSL_GPIOA_IDR = GPIOA->IDR;
- if ((TSL_GPIOA_IDR & GPIOA_IDR_Mask) != 0)
- {
- Check_Input = 1;
- GPIOA_IDR_Mask &= (uint32_t)(~TSL_GPIOA_IDR);
- }
-#endif
-
-#if (TSLPRM_USE_GPIOB)
- TSL_GPIOB_IDR = GPIOB->IDR;
- if ((TSL_GPIOB_IDR & GPIOB_IDR_Mask) != 0)
- {
- Check_Input = (1 << 1);
- GPIOB_IDR_Mask &= (uint32_t)(~TSL_GPIOB_IDR);
- }
-#endif
-
-#if (TSLPRM_USE_GPIOC)
- TSL_GPIOC_IDR = GPIOC->IDR;
- if ((TSL_GPIOC_IDR & GPIOC_IDR_Mask) != 0)
- {
- Check_Input = (1 << 2);
- GPIOC_IDR_Mask &= (uint32_t)(~TSL_GPIOC_IDR);
- }
-#endif
-
-#if (TSLPRM_USE_GPIOF)
- TSL_GPIOF_IDR = GPIOF->IDR;
- if ((TSL_GPIOF_IDR & GPIOF_IDR_Mask) != 0)
- {
- Check_Input = (1 << 5);
- GPIOF_IDR_Mask &= (uint32_t)(~TSL_GPIOF_IDR);
- }
-#endif
-
-#if (TSLPRM_USE_GPIOG)
- TSL_GPIOG_IDR = GPIOG->IDR;
- if ((TSL_GPIOG_IDR & GPIOG_IDR_Mask) != 0)
- {
- Check_Input = (1 << 6);
- GPIOG_IDR_Mask &= (uint32_t)(~TSL_GPIOG_IDR);
- }
-#endif
-
-
- if (Check_Input)
- {
- p_chSrc = bank->p_chSrc;
- for (idx_ch = 0; idx_ch < NumberOfChannels; idx_ch++)
- {
- GroupToCheckMask = (1 << (p_chSrc->IdxSrc));
- if ((GroupToCheck & GroupToCheckMask) == (GroupToCheckMask))
- {
- GPIO_IDR_Mask = (1 << TSL_CHANNEL_IO(p_chSrc->t_sample));
-
- switch (TSL_CHANNEL_PORT(p_chSrc->t_sample))
- {
-#if (TSLPRM_USE_GPIOA)
- case 0: GPIO_IDR = TSL_GPIOA_IDR; break;
-#endif
-#if (TSLPRM_USE_GPIOB)
- case 1: GPIO_IDR = TSL_GPIOB_IDR; break;
-#endif
-#if (TSLPRM_USE_GPIOC)
- case 2: GPIO_IDR = TSL_GPIOC_IDR; break;
-#endif
-#if (TSLPRM_USE_GPIOF)
- case 5: GPIO_IDR = TSL_GPIOF_IDR; break;
-#endif
-#if (TSLPRM_USE_GPIOG)
- case 6: GPIO_IDR = TSL_GPIOG_IDR; break;
-#endif
- default: break;
- }
-
- if ((GPIO_IDR & GPIO_IDR_Mask) == GPIO_IDR_Mask)
- {
- tab_MeasurementCounter[p_chSrc->IdxSrc] = MeasurementCounter;
- GroupToCheck &= (uint32_t)(~(1 << (p_chSrc->IdxSrc)));
- Check_Input &= (uint32_t)(~(1 << TSL_CHANNEL_PORT(p_chSrc->t_sample)));
- }
- }
- p_chSrc++;
- }
- }
-
- MeasurementCounter++;
-
-#if (TSLPRM_PROTECT_IO_ACCESS > 0)
- __disable_irq();
-#endif
- /* Configure All channels in input floating */
-#if (TSLPRM_USE_GPIOA)
- GPIOA->MODER &= (uint32_t)(~(TSL_BankChannelConf[2]));
-#endif
-#if (TSLPRM_USE_GPIOB)
- GPIOB->MODER &= (uint32_t)(~(TSL_BankChannelConf[5]));
-#endif
-#if (TSLPRM_USE_GPIOC)
- GPIOC->MODER &= (uint32_t)(~(TSL_BankChannelConf[8]));
-#endif
-#if (TSLPRM_USE_GPIOF)
- GPIOF->MODER &= (uint32_t)(~(TSL_BankChannelConf[11]));
-#endif
-#if (TSLPRM_USE_GPIOG)
- GPIOG->MODER &= (uint32_t)(~(TSL_BankChannelConf[14]));
-#endif
-
-#if (TSLPRM_PROTECT_IO_ACCESS > 0)
- __enable_irq();
-#endif
-
- /* Charging the Csense cap with connecting it to Ctouch by closing the analog switch */
- RI->ASCR1 |= (TSL_BankChannelConf[0]);
- RI->ASCR2 |= (TSL_BankChannelConf[1]);
-
- /* Wait a while for a good charge transfering (programmable delay) */
-#if ( TSLPRM_DELAY_TRANSFER > 0 )
- SoftDelay(TSLPRM_DELAY_TRANSFER);
-#endif
-
- RI->ASCR1 &= (uint32_t)(~(TSL_BankChannelConf[0]));
- RI->ASCR2 &= (uint32_t)(~(TSL_BankChannelConf[1]));
-
- /*it's better to implement this like that because it's much more faster than to put this test in the "while test" below */
- if (MeasurementCounter > TSL_Params.AcqMax)
- {
- TSL_acq_GroupDone(GroupToCheck);
- __NOP();
- break;
- }
-
- }
- while (GroupToCheck != 0);
-
-
-#if (TSLPRM_PROTECT_IO_ACCESS > 0)
- __disable_irq();
-#endif
- //====================
- // All GPIOs in PP Low
- //====================
- for (BankIndex = 0; BankIndex < NumberOfBanks; BankIndex++)
- {
- LocalBank = &(TSL_Globals.Bank_Array[BankIndex]);
- p_chSrc = LocalBank->p_chSrc;
-
-#if (TSLPRM_USE_SHIELD > 0)
- TSL_GPIO_BR_Config(LocalBank->shield_sample);
- TSL_GPIO_BR_Config(LocalBank->shield_channel);
- TSL_GPIO_MODER_OUT_Config(LocalBank->shield_sample);
- TSL_GPIO_MODER_OUT_Config(LocalBank->shield_channel);
-#endif
-
- LocalNumberOfChannels = LocalBank->NbChannels;
-
- for (idx_ch = 0;
- idx_ch < LocalNumberOfChannels;
- idx_ch++)
- {
- TSL_GPIO_BR_Config(p_chSrc->t_sample);
- TSL_GPIO_BR_Config(p_chSrc->t_channel);
- TSL_GPIO_MODER_OUT_Config(p_chSrc->t_sample);
- TSL_GPIO_MODER_OUT_Config(p_chSrc->t_channel);
-
- p_chSrc++;
- }
- }
-#if (TSLPRM_PROTECT_IO_ACCESS > 0)
- __enable_irq();
-#endif
-
-
-}
-
-
-/**
- * @brief Wait end of acquisition
- * @param None
- * @retval status
- */
-TSL_Status_enum_T TSL_acq_BankWaitEOC(void)
-{
- TSL_Status_enum_T retval = TSL_STATUS_BUSY;
- retval = TSL_STATUS_OK;
- return retval;
-}
-
-
-/**
- * @brief Return the current measure
- * @param[in] index Index of the measure source
- * @retval Measure
- */
-TSL_tMeas_T TSL_acq_GetMeas(TSL_tIndex_T index)
-{
- return(tab_MeasurementCounter[index]);
-}
-
-
-/**
- * @brief Check noise (not used)
- * @param None
- * @retval Status
- */
-TSL_AcqStatus_enum_T TSL_acq_CheckNoise(void)
-{
- return TSL_ACQ_STATUS_OK;
-}
-
-
-/**
- * @brief Process the TS Interrupt routine
- * @param None
- * @retval None
- */
-void TSL_acq_ProcessIT(void)
-{
-}
-
-/**
- * @brief Check if a filter must be used on the current channel (not used)
- * @param[in] pCh Pointer on the channel data information
- * @retval Result TRUE if a filter can be applied
- */
-TSL_Bool_enum_T TSL_acq_UseFilter(TSL_ChannelData_T *pCh)
-{
- return TSL_TRUE;
-}
-
-
-/**
- * @brief Compute the Delta value
- * @param[in] ref Reference value
- * @param[in] meas Last Measurement value
- * @retval Delta value
- */
-TSL_tDelta_T TSL_acq_ComputeDelta(TSL_tRef_T ref, TSL_tMeas_T meas)
-{
- return((TSL_tDelta_T)(ref - meas));
-}
-
-
-/**
- * @brief Compute the Measurement value
- * @param[in] ref Reference value
- * @param[in] delta Delta value
- * @retval Measurement value
- */
-TSL_tMeas_T TSL_acq_ComputeMeas(TSL_tRef_T ref, TSL_tDelta_T delta)
-{
- return((TSL_tMeas_T)(ref - delta));
-}
-
-
-/**
- * @brief Test if the Reference is incorrect (not used)
- * @param[in] pCh Pointer on the channel data information
- * @retval Result TRUE if the Reference is out of range
- */
-TSL_Bool_enum_T TSL_acq_TestReferenceOutOfRange(TSL_ChannelData_T *pCh)
-{
- return TSL_FALSE;
-}
-
-
-/**
- * @brief Test if the measure has crossed the reference target (not used)
- * @param[in] pCh Pointer on the channel data information
- * @param[in] new_meas Measure of the last acquisition on this channel
- * @retval Result TRUE if the Reference is valid
- */
-TSL_Bool_enum_T TSL_acq_TestFirstReferenceIsValid(TSL_ChannelData_T *pCh, TSL_tMeas_T new_meas)
-{
- return TSL_TRUE;
-}
-
-
-#if defined(__IAR_SYSTEMS_ICC__) // IAR/EWARM
-#pragma optimize=medium
-#elif defined(__CC_ARM) // Keil/MDK-ARM
-#pragma O1
-#pragma Ospace
-#elif defined(__TASKING__) // Altium/Tasking
-#pragma optimize O0
-#elif defined(__GNUC__) // Atollic/True Studio + Raisonance/RKit
-#pragma GCC push_options
-#pragma GCC optimize ("O0")
-#endif
-/**
- * @brief Software delay (private routine)
- * @param val Wait delay
- * With fHCLK = 32MHz: 1 = ~1µs, 50 = ~14µs, 100 = ~25µs, 200 = ~50µs
- * @retval None
- */
-void SoftDelay(uint16_t val)
-{
- __IO uint16_t idx;
- for (idx = val; idx > 0; idx--)
- {}
-}
-#if defined(__TASKING__)
-#pragma endoptimize
-#endif
-
-#if (TSLPRM_USE_SPREAD_SPECTRUM > 0)
-#if defined(__IAR_SYSTEMS_ICC__) // IAR/EWARM
-#pragma optimize=medium
-#elif defined(__CC_ARM) // Keil/MDK-ARM
-#pragma O1
-#pragma Ospace
-#elif defined(__TASKING__) // Altium/Tasking
-#pragma optimize O0
-#elif defined(__GNUC__) // Atollic/True Studio + Raisonance/RKit
-#pragma GCC push_options
-#pragma GCC optimize ("O0")
-#endif
-/**
- * @brief Spread Spectrum using a variable software delay.
- * @param None
- * @retval None
- */
-__INLINE void SwSpreadSpectrum(void)
-{
- uint8_t idx;
-
- SpreadCounter++;
-
- if (SpreadCounter == TSLPRM_SPREAD_MAX)
- {
- SpreadCounter = TSLPRM_SPREAD_MIN;
- }
-
- idx = SpreadCounter;
-
- while (--idx) {}
-}
-#if defined(__TASKING__)
-#pragma endoptimize
-#endif
-#endif
-
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm8l_hw.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm8l_hw.c
deleted file mode 100644
index 007efa2..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm8l_hw.c
+++ /dev/null
@@ -1,888 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_acq_stm8l_hw.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the acquisition
- * on STM8L products using the hardware acquisition mode (with Timers).
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_acq_stm8l_hw.h"
-#include "tsl_globals.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-
-/** Structure containing RI IO informations according to GPIO.
- */
-typedef struct
-{
- unsigned int IO_Channel : 4; /**< Channel number from 1 to 4 in the Routing interface group */
- unsigned int IO_Group : 4; /**< Group number in the Routing interface */
-} TSL_IOConf_T;
-
-/* Private defines -----------------------------------------------------------*/
-
-#define MAX_CHANNEL_NUMBER_BY_GROUP (4)
-
-/* Private macros ------------------------------------------------------------*/
-
-#define GPIO_PORT(GPIO) (GPIO >> 3) /**< Get the GPIO port*/
-#define GPIO_BIT(GPIO) (GPIO & 0x07) /**< Get the GPIO pin number*/
-
-#define IS_BANK_INDEX_OK(INDEX) (((INDEX) == 0) || (((INDEX) > 0) && ((INDEX) < TSLPRM_TOTAL_BANKS))) /**< Check if the index have a good range*/
-
-#define GPIO_ODR_HIGH(GPIO) (p_GPIOx[GPIO_PORT(GPIO)]->ODR |= (uint8_t)(1 << GPIO_BIT(GPIO)))
-#define GPIO_ODR_LOW(GPIO) (p_GPIOx[GPIO_PORT(GPIO)]->ODR &= (uint8_t)(~(1 << GPIO_BIT(GPIO))))
-#define GPIO_DDR_IN(GPIO) (p_GPIOx[GPIO_PORT(GPIO)]->DDR &= (uint8_t)(~(1 << GPIO_BIT(GPIO))))
-#define GPIO_DDR_OUT(GPIO) (p_GPIOx[GPIO_PORT(GPIO)]->DDR |= (uint8_t)(1 << GPIO_BIT(GPIO)))
-#define GPIO_CR1_PP(GPIO) (p_GPIOx[GPIO_PORT(GPIO)]->CR1 |= (uint8_t)(1 << GPIO_BIT(GPIO)))
-#define GPIO_CR1_FLOATING(GPIO) (p_GPIOx[GPIO_PORT(GPIO)]->CR1 &= (uint8_t)(~(1 << GPIO_BIT(GPIO))))
-
-#define DISABLE_MASK(GPIO) (DisableMask[(GPIO_to_SW_Conf[GPIO].IO_Channel)-1] |= (uint8_t)(1 << GPIO_to_SW_Conf[GPIO].IO_Group)) /**< Create disable mask array to modify initial bank mask before acquisition (only for STATUS_OFF)*/
-#define DISABLE_SAMPLING(GPIO) (DisableSampling |= (uint8_t)(1 << GPIO_to_SW_Conf[GPIO].IO_Group)) /**< Create disable sampling mask to don't take sampling measurement of corresponding channels(for STATUS_BURST_ONLY and shield) */
-
-/* Private variables ---------------------------------------------------------*/
-
-__IO uint8_t *p_IOIRx; // Pointer to the IOIRx register (x from 1 to 4)
-__IO uint8_t *p_IOMRx; // Pointer to the IOMRx register (x from 1 to 4)
-uint8_t OldStatus; // Mask used to memorize the IOIRx bits processed during the acquisition
-uint8_t BankDone; // Control if all activate sampling reach the VIH level
-uint8_t CurrentSampling; // Mask to control IOGCR register
-uint8_t CurrentChannel; // Mask to control IOGCR register
-uint8_t ChannelSampling; // Contain the channel number where all sampling are connected
-uint8_t DisableSampling; // Disable sampling mask when the Burst Only mode is activated for one channel of the current bank(not get the measure)
-
-TSL_Bank_Config_Mask_T BankMask[TSLPRM_TOTAL_BANKS]; // Complete masks (channel and sampling) to configure IOCMRx and IOSRx registers for all banks
-uint8_t SamplingMask[TSLPRM_TOTAL_BANKS]; // Sampling mask to configure IOGCR register for all banks
-uint8_t ChannelMask[TSLPRM_TOTAL_BANKS]; // Channel mask to configure IOGCR register for all banks
-uint8_t DisableMask[MAX_CHANNEL_NUMBER_BY_GROUP]; // Complete disable mask(channel and sampling) when the Channel OFF mode is activated for one channel of the current bank(to modifie the Current_Bank)
-uint8_t CurrentBank[MAX_CHANNEL_NUMBER_BY_GROUP]; // Complete mask for the current bank
-uint16_t tab_MeasurementCounter[8] = {0}; // Measurement of each sampling of the current bank
-
-TSL_Status_enum_T TSL_Acq_Status = TSL_STATUS_BUSY;
-
-GPIO_TypeDef *p_GPIOx[] = {GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF};
-
-__IO uint8_t *RI_IOIRx_Register[MAX_CHANNEL_NUMBER_BY_GROUP] = {&(RI->IOIR1), &(RI->IOIR2), &(RI->IOIR3), &(RI->IOIR4)};
-__IO uint8_t *RI_IOMRx_Register[MAX_CHANNEL_NUMBER_BY_GROUP] = {&(RI->IOMR1), &(RI->IOMR2), &(RI->IOMR3), &(RI->IOMR4)};
-
-
-/* Table which do the link between GPIO and switch configuation:{x,y}
- x = channel number
- y = group number - 1
- Note: {0,0} = not connect to IO switch
-*/
-CONST TSL_IOConf_T GPIO_to_SW_Conf[40] =
-{
- // Port A definitions
- {0, 0}, // PA0
- {0, 0}, // PA1
- {0, 0}, // PA2
- {0, 0}, // PA3
- {3, 0}, // PA4 is channel 3 of Group 1
- {2, 0}, // PA5 is channel 2 of Group 1
- {1, 0}, // PA6 is channel 1 of Group 1
- {4, 0}, // PA7 is channel 4 of Group 1
- // Port B definitions
- {1, 6}, // PB0
- {3, 5},
- {2, 5},
- {1, 5},
- {3, 4},
- {2, 4},
- {1, 4},
- {3, 3}, // PB7
- // Port C definitions
- {0, 0}, // PC0
- {0, 0},
- {1, 2},
- {3, 1},
- {2, 1},
- {0, 0},
- {0, 0},
- {1, 1}, // PC7
- // Port D definitions
- {2, 7}, // PD0
- {1, 7},
- {3, 6},
- {2, 6},
- {2, 3},
- {1, 3},
- {3, 2},
- {2, 2}, // PD7
- // Port E definitions
- {0, 0}, // PE0
- {0, 0},
- {0, 0},
- {4, 6},
- {4, 7},
- {3, 7},
- {0, 0},
- {4, 1} // PE7
-};
-
-/* Private functions prototype -----------------------------------------------*/
-void SoftDelay(uint16_t val);
-void CreateMask(uint16_t idx_bk, uint8_t GPIO);
-void TSL_Init_GPIOs(void);
-void TSL_Init_TIMs(void);
-TSL_Status_enum_T TSL_Init_RI(void);
-
-
-/**
- * @brief Initializes the touch sensing GPIOs.
- * @param None
- * @retval None
- */
-void TSL_Init_GPIOs(void)
-{
- CONST TSL_Bank_T *p_bank = &(TSL_Globals.Bank_Array[0]); // Pointer to the first bank
- CONST TSL_ChannelSrc_T *p_chSrc = p_bank->p_chSrc; // Pointer to the source channel of the current bank
- uint16_t number_of_channels = 0;
- uint16_t idx_bk;
- uint16_t idx_ch;
-
- // Initializes each bank and configures the used GPIO
- for (idx_bk = 0; idx_bk < TSLPRM_TOTAL_BANKS; idx_bk++)
- {
-
- p_bank = &(TSL_Globals.Bank_Array[idx_bk]);
- p_chSrc = p_bank->p_chSrc;
-
- number_of_channels = p_bank->NbChannels;
-
-#if (TSLPRM_USE_SHIELD > 0)
- // GPIO in Output
- GPIO_DDR_OUT(p_bank->shield_sampling);
- GPIO_DDR_OUT(p_bank->shield_channel);
- // GPIO in PP
- GPIO_CR1_PP(p_bank->shield_sampling);
- GPIO_CR1_PP(p_bank->shield_channel);
- // Output in Low level
- GPIO_ODR_LOW(p_bank->shield_sampling);
- GPIO_ODR_LOW(p_bank->shield_channel);
-#endif
-
- // Initialize the mask for channel and sampling
- for (idx_ch = 0; idx_ch < number_of_channels; idx_ch++)
- {
- // GPIO are configured in PP Low mode when inactive
- // GPIO in Output
- GPIO_DDR_OUT(p_chSrc->sampling);
- GPIO_DDR_OUT(p_chSrc->channel);
- // GPIO in PP
- GPIO_CR1_PP(p_chSrc->sampling);
- GPIO_CR1_PP(p_chSrc->channel);
- // Output in Low level
- GPIO_ODR_LOW(p_chSrc->sampling);
- GPIO_ODR_LOW(p_chSrc->channel);
- // Next channel
- p_chSrc++;
- }
- }
-}
-
-
-/**
- * @brief Initializes the timers used for touch sensing hardware acquisition.
- * @param None
- * @retval None
- */
-void TSL_Init_TIMs(void)
-{
- CLK->PCKENR1 |= 0x03; // Enable TIM2 and TIM3 clocks
-
- //==============================
- // TIMER 2 configuration: Master
- //==============================
- // Channel 1 as output, set PWM mode 1
- TIM2->CCMR1 = 0x60;
- TIM2->CCMR2 = 0x60;
- // Main Output Enable
- TIM2->BKR |= 0x80; // MOE=1
- // Center-Aligned mode 3
- TIM2->CR1 |= 0x60; // CMS=11
- // OC2 polarity = active low
- TIM2->CCER1 |= 0x20; // CC2P=1
- // Enable OC2
- TIM2->CCER1 |= 0x10; // CC2E=1
- // Set the Prescaler value
- TIM2->PSCR = 0; // fCK_CNT = 16MHz/(0+1) = 16MHz --> T=62.5ns
- // Set the Autoreload value (signal frequency)
- TIM2->ARRH = (uint8_t)(TIM_RELOAD >> 8);
- TIM2->ARRL = (uint8_t)(TIM_RELOAD);
- // Set PWM1 duty cycle
- TIM2->CCR1H = (uint8_t)(TIM2_PWM_CH1_WIDTH >> 8);
- TIM2->CCR1L = (uint8_t)(TIM2_PWM_CH1_WIDTH);
- // Set PWM2 duty cycle
- TIM2->CCR2H = (uint8_t)(TIM2_PWM_CH2_WIDTH >> 8);
- TIM2->CCR2L = (uint8_t)(TIM2_PWM_CH2_WIDTH);
- // Select Master mode, Internal Trigger selection, Gated mode
- TIM2->SMCR = 0x35; // TS=011=ITR3(TIM2), SMS=101=Gated mode enabled
- // Map OC1REF to TRGO
- TIM2->CR2 = 0x40; // MMS=100
- // Enable OC1
- TIM2->CCER1 |= 0x01; // CC1E=1
- // Set Update generation
- TIM2->EGR |= 0x01; // UG=1
- // Set Break interrupt flag
- TIM2->SR1 |= 0x80;
-
- //==============================
- // TIMER 3 configuration: slave
- //==============================
- // Enable External Clock mode 2, external trigger filter, trigger on high level or rising edge
- TIM3->ETR = 0x42; // ETP=0, ECE=1, ETF=0010
- // Capture/Compare 1 configured as Input: h/w detection mapped on TI2FP1
- TIM3->CCMR1 = 0x02; // CC1S=10
- // Capture/Compare 2 configured as Output: MaxCount
- TIM3->CCMR2 = 0; // CC2S=00
- // Enable CC1 channel as Input for Capture function
- TIM3->CCER1 = 0x01; // CC1E=1
- // Enable counter (slave must be enabled first)
- TIM3->CR1 |= 0x01; // CEN=1
-}
-
-
-/**
- * @brief Init routing interface.
- * @param None
- * @retval None
- */
-TSL_Status_enum_T TSL_Init_RI(void)
-{
- CONST TSL_Bank_T *p_bank = &(TSL_Globals.Bank_Array[0]); // Pointer to the first bank
- CONST TSL_ChannelSrc_T *p_chSrc = p_bank->p_chSrc; // Pointer to the source channel of the current bank
- uint16_t number_of_channels = 0;
- uint16_t idx_bk;
- uint16_t idx_ch;
-
- // Enable comparator clock to activate the RI block
- CLK->PCKENR2 |= CLK_PCKENR2_COMP;
-
- // Enable H/W acquisition sequence
- RI->CR |= 0x04; // AM=1
-
- // Enable Channel Acquisition interrupt
- RI->CR |= 0x01; // TIE=1
-
- // Suspend Timer2 on h/w detection
- RI->CR |= 0x08; // THALT=1
-
- // Enable schmitt trigger required for H/W acq mode.
- COMP->CSR1 |= 0x04; // STE=1
-
- // Initializes each bank and configures the used GPIO
- for (idx_bk = 0; idx_bk < TSLPRM_TOTAL_BANKS; idx_bk++)
- {
-
- p_bank = &(TSL_Globals.Bank_Array[idx_bk]);
- p_chSrc = p_bank->p_chSrc;
-
- number_of_channels = p_bank->NbChannels;
-
- // Masks initialisation
- BankMask[idx_bk].ch1 = 0;
- BankMask[idx_bk].ch2 = 0;
- BankMask[idx_bk].ch3 = 0;
- BankMask[idx_bk].ch4 = 0;
-
- // Get which channel is used for sampling only one time because it's the same for each couple
- SamplingMask[idx_bk] = (uint8_t)GPIO_to_SW_Conf[p_chSrc->sampling].IO_Channel;
-
-#if (TSLPRM_USE_SHIELD > 0)
- // Create Mask per bank
- CreateMask(idx_bk,p_bank->shield_sampling);
- CreateMask(idx_bk,p_bank->shield_channel);
- ChannelMask[idx_bk] |= (uint8_t)(3 << (2 * ((GPIO_to_SW_Conf[p_bank->shield_channel].IO_Channel) - 1)));
- if ((SamplingMask[idx_bk] != (uint8_t)GPIO_to_SW_Conf[p_bank->shield_sampling].IO_Channel))
- {
- return TSL_STATUS_ERROR;
- }
-#endif
-
- // Initializes the mask for channel and sampling
- for (idx_ch = 0; idx_ch < number_of_channels; idx_ch++)
- {
- // Create Mask per bank
- CreateMask(idx_bk,p_chSrc->channel);
- CreateMask(idx_bk,p_chSrc->sampling);
- ChannelMask[idx_bk] |= (uint8_t)(3 << (2 * ((GPIO_to_SW_Conf[p_chSrc->channel].IO_Channel) - 1)));
- if ((SamplingMask[idx_bk] != (uint8_t)GPIO_to_SW_Conf[p_chSrc->sampling].IO_Channel))
- {
- return TSL_STATUS_ERROR;
- }
- // Next channel
- p_chSrc++;
- }
-
- // Unlock IO to RI register : IO controlled by GPIO
- RI->IOCMR1 &= (uint8_t)(~BankMask[idx_bk].ch1);
- RI->IOCMR2 &= (uint8_t)(~BankMask[idx_bk].ch2);
- RI->IOCMR3 &= (uint8_t)(~BankMask[idx_bk].ch3);
- RI->IOCMR4 &= (uint8_t)(~BankMask[idx_bk].ch4);
- }
- return TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Create Mask for all banks
- * @param[in] idx_bk Index of the Bank to configure
- * @param[in] GPIO Pin number
- * @retval None
- */
-void CreateMask(uint16_t idx_bk, uint8_t GPIO)
-{
- switch(GPIO_to_SW_Conf[GPIO].IO_Channel)
- {
- case 1:
- BankMask[idx_bk].ch1 |= (uint8_t)(1 << GPIO_to_SW_Conf[GPIO].IO_Group); // Mask for all first channel
- break;
- case 2:
- BankMask[idx_bk].ch2 |= (uint8_t)(1 << GPIO_to_SW_Conf[GPIO].IO_Group); // Mask for all second channel
- break;
- case 3:
- BankMask[idx_bk].ch3 |= (uint8_t)(1 << GPIO_to_SW_Conf[GPIO].IO_Group); // Mask fo all third channel
- break;
- case 4:
- BankMask[idx_bk].ch4 |= (uint8_t)(1 << GPIO_to_SW_Conf[GPIO].IO_Group); // Mask for all fourth channel
- break;
- default:
- break;
- }
-}
-
-
-/**
- * @brief Initializes the acquisition module.
- * @param None
- * @retval retval
- */
-TSL_Status_enum_T TSL_acq_Init(void)
-{
- TSL_Init_GPIOs();
- TSL_Init_TIMs();
- TSL_Init_RI();
- return TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Configures a Bank.
- * @param[in] idx_bk Index of the Bank to configure
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_BankConfig(TSL_tIndex_T idx_bk)
-{
- uint8_t idx;
- uint16_t idx_dest;
- uint16_t idx_ch;
- uint16_t number_of_channels = 0;
- CONST TSL_Bank_T *p_bank; // Pointer to the current bank
- CONST TSL_ChannelDest_T *p_chDest; // Pointer to the first destination channel of the current bank
- CONST TSL_ChannelSrc_T *p_chSrc; // Pointer to the fisrt source channel of the current bank
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-
- OldStatus = 0;
-
- TSL_Globals.This_Bank = idx_bk;
- p_bank = &(TSL_Globals.Bank_Array[idx_bk]);
- number_of_channels = p_bank->NbChannels;
- p_chDest = p_bank->p_chDest;
- p_chSrc = p_bank->p_chSrc;
-
- // Reset the disable mask
- DisableSampling = 0;
- for (idx = 0; idx < MAX_CHANNEL_NUMBER_BY_GROUP; idx++)
- {
- DisableMask[idx] = 0;
- }
-
-#if (TSLPRM_USE_SHIELD > 0)
- DISABLE_SAMPLING(p_bank->shield_sampling);
-#endif
-
- // Loop for each channel of this bank
- for (idx_ch = 0; idx_ch < number_of_channels; idx_ch++)
- {
-
- idx_dest = p_chDest->IdxDest;
-
- // Mode Status OFF
- if (p_bank->p_chData[idx_dest].Flags.ObjStatus == TSL_OBJ_STATUS_OFF)
- {
- // Update Mask if channels are disabled
- DISABLE_MASK(p_chSrc->channel);
- DISABLE_MASK(p_chSrc->sampling);
- }
-
- // Mode Status BURST ONLY
- if (p_bank->p_chData[idx_dest].Flags.ObjStatus == TSL_OBJ_STATUS_BURST_ONLY)
- {
- DISABLE_SAMPLING(p_chSrc->sampling);
- }
-
- tab_MeasurementCounter[GPIO_to_SW_Conf[p_chSrc->sampling].IO_Group] = 0;
-
- // Next channel
- p_chSrc++;
- p_chDest++;
- }
-
- // Get Mask for the current bank
- CurrentBank[0] = (uint8_t)(BankMask[idx_bk].ch1 & (~DisableMask[0])); // Mask for all 1st channel are used by channels and sampling for this bank
- CurrentBank[1] = (uint8_t)(BankMask[idx_bk].ch2 & (~DisableMask[1])); // Mask for all 2nd channel are used by channels and sampling for this bank
- CurrentBank[2] = (uint8_t)(BankMask[idx_bk].ch3 & (~DisableMask[2])); // Mask for all 3rd channel are used by channels and sampling for this bank
- CurrentBank[3] = (uint8_t)(BankMask[idx_bk].ch4 & (~DisableMask[3])); // Mask for all 4th channel are used by channels and sampling for this bank
-
- CurrentChannel = ChannelMask[idx_bk]; // Mask for channels
- CurrentSampling = (uint8_t)(3 << (2 * (SamplingMask[idx_bk] - 1))); // Mask for sampling
- ChannelSampling = SamplingMask[idx_bk]; // Mask for the channel used by sampling
-
- // Channel's state of the current bank
- BankDone = (uint8_t)(CurrentBank[ChannelSampling - 1] & (~DisableSampling));
-
- // Select the IO Input register corresponding to the channel sampling (to optimize the measurement)
- p_IOIRx = RI_IOIRx_Register[ChannelSampling - 1];
-
- // Select the IO Mask register corresponding to the channel sampling (to optimize the measurement)
- p_IOMRx = RI_IOMRx_Register[ChannelSampling - 1];
-
- return TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Start acquisition on a previously configured bank
- * @param None
- * @retval None
- */
-void TSL_acq_BankStartAcq(void)
-{
-#if (TSLPRM_IODEF > 0)
-
- CONST TSL_Bank_T *p_bank = &(TSL_Globals.Bank_Array[0]);
- CONST TSL_ChannelSrc_T *p_chSrc;
- TSL_tNb_T number_of_channels = 0;
- TSL_tIndex_T idx_bk;
- TSL_tIndex_T idx_ch;
-
- //============================
- // All GPIOs in Input floating
- //============================
- for (idx_bk = 0; idx_bk < TSLPRM_TOTAL_BANKS; idx_bk++)
- {
- p_bank = &(TSL_Globals.Bank_Array[idx_bk]);
- p_chSrc = p_bank->p_chSrc;
-
-#if (TSLPRM_USE_SHIELD > 0)
- // GPIO in Input
- GPIO_DDR_IN(p_bank->shield_sampling);
- GPIO_DDR_IN(p_bank->shield_channel);
- // GPIO in floating mode
- GPIO_CR1_FLOATING(p_bank->shield_sampling);
- GPIO_CR1_FLOATING(p_bank->shield_channel);
-#endif // TSLPRM_USE_SHIELD
-
- number_of_channels = p_bank->NbChannels;
-
- for (idx_ch = 0;
- idx_ch < number_of_channels;
- idx_ch++)
- {
- // GPIO in Input
- GPIO_DDR_IN(p_chSrc->sampling);
- GPIO_DDR_IN(p_chSrc->channel);
- // GPIO in floating mode
- GPIO_CR1_FLOATING(p_chSrc->sampling);
- GPIO_CR1_FLOATING(p_chSrc->channel);
- p_chSrc++;
- }
- }
-#endif // TSLPRM_IODEF
-
- // Test if this bank is not empty
- if (BankDone != 0)
- {
-
- // Set the AL bit to exit from WFI mode only on PXS interrupt
- CFG->GCR |= (uint8_t)CFG_GCR_AL;
-
- //--------------------------------------------
- // Configure Timer3 for the MaxCount detection
- //--------------------------------------------
-
- // Clear the Slave timer counter
- TIM3->CNTRH = 0;
- TIM3->CNTRL = 0;
-
- // Timer3 interruption routine to detect MaxCount
- // Warning: the high byte must be written before the low byte
- TIM3->CCR2H = (uint8_t)((TSL_Params.AcqMax+1) >> 8);
- TIM3->CCR2L = (uint8_t)(TSL_Params.AcqMax+1);
-
- // Clear all Timer3 flags...
- TIM3->SR1 = 0;
- TIM3->SR2 = 0;
-
- // Enable Capture/Compare 2 interrupt: MaxCount
- TIM3->IER |= 0x04; // CC2IE=1
-
- //--------------------------------------------
-
- // Enable necessary IOs
- RI->IOCMR1 |= (uint8_t)CurrentBank[0];
- RI->IOCMR2 |= (uint8_t)CurrentBank[1];
- RI->IOCMR3 |= (uint8_t)CurrentBank[2];
- RI->IOCMR4 |= (uint8_t)CurrentBank[3];
-
- // Discharge all capacitors
- RI->IOSR1 &= (uint8_t)(~CurrentBank[0]);
- RI->IOSR2 &= (uint8_t)(~CurrentBank[1]);
- RI->IOSR3 &= (uint8_t)(~CurrentBank[2]);
- RI->IOSR4 &= (uint8_t)(~CurrentBank[3]);
-
- // Wait a complete discharge
- SoftDelay(TSLPRM_DELAY_DISCHARGE_ALL);
-
- // Configure channel capacitors and sampling capacitors
- RI->IOGCR = (uint8_t)(0x55 & (~CurrentSampling));
-
- RI->IOSR1 |= (uint8_t)CurrentBank[0];
- RI->IOSR2 |= (uint8_t)CurrentBank[1];
- RI->IOSR3 |= (uint8_t)CurrentBank[2];
- RI->IOSR4 |= (uint8_t)CurrentBank[3];
-
- // Start acquisition
- TSL_Acq_Status = TSL_STATUS_BUSY;
-
- // Start the Master timer counter
- TIM2->CR1 |= 0x01; // CEN=1
- }
- else
- {
- TSL_Acq_Status = TSL_STATUS_OK;
- }
-}
-
-
-/**
- * @brief Wait end of acquisition
- * @param None
- * @retval status
- */
-TSL_Status_enum_T TSL_acq_BankWaitEOC(void)
-{
- return TSL_Acq_Status;
-}
-
-
-/**
- * @brief Return the current measure
- * @param[in] index Index of the measure source
- * @retval Measure
- */
-TSL_tMeas_T TSL_acq_GetMeas(TSL_tIndex_T index)
-{
- return(tab_MeasurementCounter[index]);
-}
-
-
-/**
- * @brief Check noise (not used)
- * @param None
- * @retval Status
- */
-TSL_AcqStatus_enum_T TSL_acq_CheckNoise(void)
-{
- return TSL_ACQ_STATUS_OK;
-}
-
-
-/**
- * @brief Used during HW acquisition mode.
- * @param None
- * @retval None
- * @note Must be called by the TIM3 Capture/Compare interrupt routine.
- */
-void TSL_CT_HWacq_TIM3(void)
-{
- uint8_t new_status;
- uint8_t idx = 0;
- uint16_t timer_count;
-
- TIM2->CR1 &= (uint8_t)(~0x01); // Stop master counter
-
- RI->IOMR1 = 0;
- RI->IOMR2 = 0;
- RI->IOMR3 = 0;
- RI->IOMR4 = 0;
-
- // Discharge all capacitors (electrode and sampling capacitor IOs)
- RI->IOSR1 &= (uint8_t)(~(CurrentBank[0]));
- RI->IOSR2 &= (uint8_t)(~(CurrentBank[1]));
- RI->IOSR3 &= (uint8_t)(~(CurrentBank[2]));
- RI->IOSR4 &= (uint8_t)(~(CurrentBank[3]));
-
- TSL_Acq_Status = TSL_STATUS_OK;
-
- // Clear all Timer3 flags...
- TIM3->SR1 = 0;
- TIM3->SR2 = 0;
-
- // Read capture counter
- timer_count = (uint16_t)(TIM3->CCR1H << 8);
- timer_count += TIM3->CCR1L;
-
- new_status = (uint8_t)(BankDone & (~(OldStatus)));
-
- while ((new_status != 0) && (idx < 8))
- {
- if ((new_status & (1 << idx)) != 0)
- {
- tab_MeasurementCounter[idx] = timer_count;
- new_status &= (uint8_t)(~(1 << idx));
- OldStatus |= (uint8_t)(1 << idx);
- *p_IOMRx |= (uint8_t)(1 << idx); // Mask IO which reach VIH
- }
- idx++;
- }
-}
-
-
-/**
- * @brief Used during HW acquisition mode.
- * @param None
- * @retval None
- * @note Must be called by the RI interrupt routine.
- * Timer 2 and 3 are halted during this interrupt but counter is not reset.
- */
-void TSL_CT_HWacq_RI(void)
-{
- CONST TSL_Bank_T *p_bank = &(TSL_Globals.Bank_Array[0]);
- CONST TSL_ChannelSrc_T *p_chSrc;
- TSL_tNb_T number_of_channels = 0;
- TSL_tIndex_T idx_bk;
- TSL_tIndex_T idx_ch;
-
- __IO uint8_t IOIRx;
- uint8_t new_status;
- uint8_t idx = 0;
- uint16_t timer_count;
-
- IOIRx = *p_IOIRx;
-
- // Test RI Input register corresponding to sampling capacitors
- if ((IOIRx & BankDone) != OldStatus)
- {
- // Read capture counter
- timer_count = (uint16_t)(TIM3->CCR1H << 8);
- timer_count += TIM3->CCR1L;
-
- new_status = (uint8_t)((BankDone & IOIRx) & (~(OldStatus)));
-
- while ((new_status != 0) && (idx < 8))
- {
- if ((new_status & (1 << idx)) != 0)
- {
- tab_MeasurementCounter[idx] = timer_count;
- new_status &= (uint8_t)(~(1 << idx));
- OldStatus |= (uint8_t)(1 << idx);
- *p_IOMRx |= (uint8_t)(1 << idx); // Mask IO which reach VIH
- }
- idx++;
- }
-
- // When Current bank is completed
- if ((OldStatus == BankDone))
- {
-
- // Disable master counter
- TIM2->CR1 &= (uint8_t)(~0x01); // Stop master counter
-
- // Reset IO Mask
- RI->IOMR1 = 0;
- RI->IOMR2 = 0;
- RI->IOMR3 = 0;
- RI->IOMR4 = 0;
-
- // Disable necessary IOs
- RI->IOSR1 &= (uint8_t)(~(CurrentBank[0]));
- RI->IOSR2 &= (uint8_t)(~(CurrentBank[1]));
- RI->IOSR3 &= (uint8_t)(~(CurrentBank[2]));
- RI->IOSR4 &= (uint8_t)(~(CurrentBank[3]));
-
- RI->IOCMR1 &= (uint8_t)(~(CurrentBank[0]));
- RI->IOCMR2 &= (uint8_t)(~(CurrentBank[1]));
- RI->IOCMR3 &= (uint8_t)(~(CurrentBank[2]));
- RI->IOCMR4 &= (uint8_t)(~(CurrentBank[3]));
-
- for (idx_bk = 0; idx_bk < TSLPRM_TOTAL_BANKS; idx_bk++)
- {
- p_bank = &(TSL_Globals.Bank_Array[idx_bk]);
- p_chSrc = p_bank->p_chSrc;
-
- number_of_channels = p_bank->NbChannels;
-
-#if (TSLPRM_USE_SHIELD > 0)
- // GPIO in Output
- GPIO_DDR_OUT(p_bank->shield_sampling);
- GPIO_DDR_OUT(p_bank->shield_channel);
- // GPIO in PP
- GPIO_CR1_PP(p_bank->shield_sampling);
- GPIO_CR1_PP(p_bank->shield_channel);
- // Output in Low level
- GPIO_ODR_LOW(p_bank->shield_sampling);
- GPIO_ODR_LOW(p_bank->shield_channel);
-#endif
- // Initialize the mask for channel and sampling
- for (idx_ch = 0; idx_ch < number_of_channels; idx_ch++)
- {
- // GPIO are configured in PP Low mode when inactive
- // GPIO in Output
- GPIO_DDR_OUT(p_chSrc->sampling);
- GPIO_DDR_OUT(p_chSrc->channel);
- // GPIO in PP
- GPIO_CR1_PP(p_chSrc->sampling);
- GPIO_CR1_PP(p_chSrc->channel);
- // Output in Low level
- GPIO_ODR_LOW(p_chSrc->sampling);
- GPIO_ODR_LOW(p_chSrc->channel);
- // Next channel
- p_chSrc++;
- }
- }
-
-#if TSLPRM_USE_ZONE > 0
-
- TSL_acq_BankGetResult(TSL_Globals.This_Bank, 0, 0); // Get Bank Result
-
- if ((TSL_Globals.This_Zone == 0) || (TSL_Globals.Index_In_This_Zone >= TSL_Globals.This_Zone->NbBanks))
- {
- CFG->GCR &= (uint8_t)(~CFG_GCR_AL); // Reset Activation level to resume main processing
- TSL_Globals.This_Bank = 0;
- }
- else
- {
- if (TSL_acq_ZoneConfig(TSL_Globals.This_Zone, TSL_Globals.Index_In_This_Zone) != TSL_STATUS_ERROR)
- {
- // Start Bank acquisition
- TSL_acq_BankStartAcq();
- }
- else
- {
- CFG->GCR &= (uint8_t)(~CFG_GCR_AL); // Reset Activation level to resume main processing
- TSL_Globals.This_Bank = 0;
- }
- }
-#else
- CFG->GCR &= (uint8_t)(~CFG_GCR_AL);
-#endif
- }
- }
-
- // Reset Interrupt flag
- RI->CR |= 0x02; // CAIF=1
- TSL_Acq_Status = TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Check if a filter must be used on the current channel (not used)
- * @param[in] pCh Pointer on the channel data information
- * @retval Result TRUE if a filter can be applied
- */
-TSL_Bool_enum_T TSL_acq_UseFilter(TSL_ChannelData_T *pCh)
-{
- return TSL_TRUE;
-}
-
-
-/**
- * @brief Compute the Delta value
- * @param[in] ref Reference value
- * @param[in] meas Last Measurement value
- * @retval Delta value
- */
-TSL_tDelta_T TSL_acq_ComputeDelta(TSL_tRef_T ref, TSL_tMeas_T meas)
-{
- return((TSL_tDelta_T)(ref - meas));
-}
-
-
-/**
- * @brief Compute the Measurement value
- * @param[in] ref Reference value
- * @param[in] delta Delta value
- * @retval Measurement value
- */
-TSL_tMeas_T TSL_acq_ComputeMeas(TSL_tRef_T ref, TSL_tDelta_T delta)
-{
- return((TSL_tMeas_T)(ref - delta));
-}
-
-
-/**
- * @brief Test if the Reference is incorrect (not used)
- * @param[in] pCh Pointer on the channel data information
- * @retval Result TRUE if the Reference is out of range
- */
-TSL_Bool_enum_T TSL_acq_TestReferenceOutOfRange(TSL_ChannelData_T *pCh)
-{
- return TSL_FALSE;
-}
-
-
-/**
- * @brief Test if the measure has crossed the reference target (not used)
- * @param[in] pCh Pointer on the channel data information
- * @param[in] new_meas Measure of the last acquisition on this channel
- * @retval Result TRUE if the Reference is valid
- */
-TSL_Bool_enum_T TSL_acq_TestFirstReferenceIsValid(TSL_ChannelData_T *pCh, TSL_tMeas_T new_meas)
-{
- return TSL_TRUE;
-}
-
-
-#if defined(__ICCSTM8__)
-#pragma optimize=low
-#endif
-/**
- * @brief Software delay (private routine)
- * @param val Wait delay
- * @retval None
- */
-void SoftDelay(uint16_t val)
-{
- uint16_t idx;
- for (idx = val; idx > 0; idx--)
- {
- nop();
- }
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm8l_sw.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm8l_sw.c
deleted file mode 100644
index 0334c22..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm8l_sw.c
+++ /dev/null
@@ -1,1426 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_acq_stm8l_sw.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the acquisition
- * on STM8L products using the software acquisition mode.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_acq_stm8l_sw.h"
-#include "tsl_globals.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-
-/** Structure containing RI IO informations according to GPIO.
- */
-typedef struct
-{
- unsigned int IO_Channel : 4; /**< Channel number from 1 to 4 in the Routing interface group */
- unsigned int IO_Group : 4; /**< Group number in the Routing interface */
-} TSL_IOConf_T;
-
-/* Private defines -----------------------------------------------------------*/
-
-/** Define if maximum channel number is 3 or 4 according to the Device Density
- */
-#if defined(STM8L15X_LD) || defined(STM8L10X)
-#define MAX_CHANNEL_NUMBER_BY_GROUP (4)
-#else
-#define MAX_CHANNEL_NUMBER_BY_GROUP (3)
-#endif // defined(STM8L15X_LD) || defined(STM8L10X)
-
-#if defined(_COSMIC_)
-#define INLINE @inline
-#elif defined(_RAISONANCE_)
-#define INLINE inline
-#elif defined(_IAR_)
-#define INLINE
-#else
-#error "Compiler not Supported"
-#endif
-
-/* Private macros ------------------------------------------------------------*/
-
-#if !defined(STM8L10X)
-#define GPIO_PORT(GPIO) (GPIO >> 3) /**< Get the GPIO port*/
-#define GPIO_BIT(GPIO) (GPIO & 0x07) /**< Get the GPIO pin number*/
-#else
-#define GPIO_PORT(GPIO) (GPIO >> 2) /**< Get the GPIO port*/
-#define GPIO_BIT(GPIO) (GPIO & 0x03) /**< Get the GPIO pin number*/
-#endif // !defined(STM8L10X)
-
-#define IS_BANK_INDEX_OK(INDEX) (((INDEX) == 0) || (((INDEX) > 0) && ((INDEX) < TSLPRM_TOTAL_BANKS))) /**< Check if the index have a good range*/
-
-#define GPIO_ODR_HIGH(GPIO) (p_GPIOx[GPIO_PORT(GPIO)]->ODR |= (uint8_t)(1 << GPIO_BIT(GPIO)))
-#define GPIO_ODR_LOW(GPIO) (p_GPIOx[GPIO_PORT(GPIO)]->ODR &= (uint8_t)(~(1 << GPIO_BIT(GPIO))))
-#define GPIO_DDR_IN(GPIO) (p_GPIOx[GPIO_PORT(GPIO)]->DDR &= (uint8_t)(~(1 << GPIO_BIT(GPIO))))
-#define GPIO_DDR_OUT(GPIO) (p_GPIOx[GPIO_PORT(GPIO)]->DDR |= (uint8_t)(1 << GPIO_BIT(GPIO)))
-#define GPIO_CR1_PP(GPIO) (p_GPIOx[GPIO_PORT(GPIO)]->CR1 |= (uint8_t)(1 << GPIO_BIT(GPIO)))
-#define GPIO_CR1_FLOATING(GPIO) (p_GPIOx[GPIO_PORT(GPIO)]->CR1 &= (uint8_t)(~(1 << GPIO_BIT(GPIO))))
-
-#define DISABLE_MASK(GPIO) (DisableMask[(GPIO_to_SW_Conf[GPIO].IO_Channel)-1] |= (uint8_t)(1 << GPIO_to_SW_Conf[GPIO].IO_Group)) /**< Create disable mask array to modify initial bank mask before acquisition (only for STATUS_OFF)*/
-#define DISABLE_SAMPLING(GPIO) (DisableSampling |= (uint8_t)(1 << GPIO_to_SW_Conf[GPIO].IO_Group)) /**< Create disable sampling mask to don't take sampling measurement of corresponding channels(for STATUS_BURST_ONLY and shield) */
-
-/* Private variables ---------------------------------------------------------*/
-
-uint8_t SpreadCounter = TSLPRM_SPREAD_MIN;
-
-uint16_t ChargeTransferCounter; // This variable count the charge transfer number in the acquisition loop
-uint8_t BankDone; // Control if all activate sampling reach the VIH level
-uint8_t CurrentSampling; // Mask to control IOGCR register
-uint8_t CurrentChannel; // Mask to control IOGCR register
-uint8_t ChannelSampling; // Contain the channel number where all sampling are connected
-uint8_t DisableSampling; // Disable sampling mask when the Burst Only mode is activated for one channel of the current bank(not get the measure)
-
-TSL_Bank_Config_Mask_T BankMask[TSLPRM_TOTAL_BANKS]; // Complete masks (channel and sampling) to configure IOCMRx and IOSRx registers for all banks
-uint8_t SamplingMask[TSLPRM_TOTAL_BANKS]; // Sampling mask to configure IOGCR register for all banks
-uint8_t DisableMask[MAX_CHANNEL_NUMBER_BY_GROUP]; // Complete disable mask(channel and sampling) when the Channel OFF mode is activated for one channel of the current bank(to modifie the CurrentBank)
-uint8_t CurrentBank[MAX_CHANNEL_NUMBER_BY_GROUP]; // Complete mask for the current bank
-
-#if !defined(STM8L10X)
-
-#if defined(STM8L15X_LD)
-__IO uint8_t *RI_IOIRx_Register[MAX_CHANNEL_NUMBER_BY_GROUP] = {&(RI->IOIR1), &(RI->IOIR2), &(RI->IOIR3), &(RI->IOIR4)};
-#else
-__IO uint8_t *RI_IOIRx_Register[MAX_CHANNEL_NUMBER_BY_GROUP] = {&(RI->IOIR1), &(RI->IOIR2), &(RI->IOIR3)};
-#endif // STM8L15X_LD
-
-__IO uint8_t *p_IOIRx; // Pointer to the IOIRx register (x from 1 to 4)
-GPIO_TypeDef *p_GPIOx[] = {GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF};
-
-uint16_t tab_MeasurementCounter[8] = {0}; // Measurement of each sampling of the current bank
-uint8_t ChannelMask[TSLPRM_TOTAL_BANKS]; // Channel mask to configure IOGCR register for all banks
-
-/* Table which do the link between GPIO and switch configuation:{x,y}
- x = channel number
- y = group number - 1
- Note: {0,0} = not connect to IO switch
-*/
-CONST TSL_IOConf_T GPIO_to_SW_Conf[40] =
-{
- // Port A definitions
- {0, 0}, // PA0
- {0, 0}, // PA1
- {0, 0}, // PA2
- {0, 0}, // PA3
- {3, 0}, // PA4 is channel 3 of Group 1
- {2, 0}, // PA5 is channel 2 of Group 1
- {1, 0}, // PA6 is channel 1 of Group 1
- {4, 0}, // PA7 is channel 4 of Group 1
- // Port B definitions
- {1, 6}, // PB0
- {3, 5},
- {2, 5},
- {1, 5},
- {3, 4},
- {2, 4},
- {1, 4},
- {3, 3}, // PB7
- // Port C definitions
- {0, 0}, // PC0
- {0, 0},
- {1, 2},
- {3, 1},
- {2, 1},
- {0, 0},
- {0, 0},
- {1, 1}, // PC7
- // Port D definitions
- {2, 7}, // PD0
- {1, 7},
- {3, 6},
- {2, 6},
- {2, 3},
- {1, 3},
- {3, 2},
- {2, 2}, // PD7
- // Port E definitions
- {0, 0}, // PE0
- {0, 0},
- {0, 0},
- {4, 6},
- {4, 7},
- {3, 7},
- {0, 0},
- {4, 1} // PE7
-};
-
-#else // STM8L10X
-
-__IO uint8_t *p_GPIOx_IDR;
-__IO uint8_t *GPIOx_IDR[2] = {&(GPIOB->IDR), &(GPIOD->IDR)};
-
-GPIO_TypeDef *p_GPIOx[] = {GPIOB, GPIOD};
-
-uint16_t tab_MeasurementCounter[2] = {0}; // Measurement of each sampling of the current bank
-uint8_t Bank_IO_CompMask[TSLPRM_TOTAL_BANKS]; // IO Mask for Comparator register to control SW
-uint8_t BankSamplingCompMask[TSLPRM_TOTAL_BANKS]; // Sampling Mask for Comparator register to control SW
-uint8_t Bank_IOShield_CompMask[TSLPRM_TOTAL_BANKS];
-uint8_t BankSamplingShieldCompMask[TSLPRM_TOTAL_BANKS];
-
-/* Table which do the link between GPIO and switch configuation:{x,y}
- x = channel number
- y = group number - 1
- Note: {0,0} = not connect to IO switch
-*/
-CONST TSL_IOConf_T GPIO_to_SW_Conf[8] =
-{
- // Port B definitions
- {1, 0}, // PB0 is channel 1 of Group 1
- {2, 0}, // PB1 is channel 2 of Group 1
- {1, 1}, // PB2 is channel 1 of Group 2
- {2, 1}, // PB3 is channel 2 of Group 2
- // Port D definitions
- {3, 0}, // PD0 is channel 3 of Group 1
- {4, 0}, // PD1 is channel 4 of Group 1
- {3, 1}, // PD2 is channel 3 of Group 2
- {4, 1} // PD3 is channel 4 of Group 2
-};
-
-#endif // !defined(STM8L10X)
-
-/* Private functions prototype -----------------------------------------------*/
-void SoftDelay(uint16_t val);
-void CreateMask(TSL_tIndex_T idx_bk, uint8_t GPIO);
-void GetCounter(__IO uint8_t *p_reg, uint8_t *p_old_status);
-INLINE void __Delay_Charge(void);
-void CreateIOMask(TSL_tIndex_T idx_bk, uint8_t GPIO);
-void CreateSamplingMask(TSL_tIndex_T idx_bk, uint8_t GPIO);
-#if (TSLPRM_USE_SPREAD_SPECTRUM > 0)
-INLINE void SwSpreadSpectrum(void);
-#endif
-
-
-/**
- * @brief Delay in NOPs to apply during charging time.
- * @param None
- * @retval None
- */
-INLINE void __Delay_Charge(void)
-{
-#if TSLPRM_DELAY_CHARGE > 0
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 1
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 2
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 3
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 4
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 5
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 6
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 7
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 8
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 9
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 10
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 11
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 12
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 13
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 14
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 15
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 16
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 17
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 18
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 19
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 20
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 21
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 22
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 23
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 24
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 25
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 26
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 27
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 28
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 29
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 30
- nop();
-#endif
-#if TSLPRM_DELAY_CHARGE > 31
- nop();
-#endif
-}
-
-
-/**
- * @brief Delay in NOPs to apply during transfering time.
- * @param None
- * @retval None
- */
-INLINE void __Delay_Transfer(void)
-{
-#if TSLPRM_DELAY_TRANSFER > 0
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 1
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 2
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 3
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 4
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 5
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 6
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 7
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 8
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 9
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 10
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 11
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 12
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 13
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 14
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 15
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 16
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 17
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 18
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 19
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 20
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 21
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 22
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 23
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 24
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 25
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 26
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 27
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 28
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 29
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 30
- nop();
-#endif
-#if TSLPRM_DELAY_TRANSFER > 31
- nop();
-#endif
-}
-
-
-/**
- * @brief Initialize the acquisition module.
- * @param None
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_Init(void)
-{
- CONST TSL_Bank_T *p_bank = &(TSL_Globals.Bank_Array[0]); // Pointer to the first bank
- CONST TSL_ChannelSrc_T *p_chSrc = p_bank->p_chSrc; // Pointer to the source channel of the current bank
- TSL_tNb_T number_of_channels = 0;
- TSL_tIndex_T idx_bk;
- TSL_tIndex_T idx_ch;
-
-#if !defined(STM8L10X)
- // Enable comparator clock to activate the RI block
- CLK->PCKENR2 |= CLK_PCKENR2_COMP;
-#endif // !defined(STM8L10X)
-
- // Enable mode software (bit AM)
-#if defined(STM8L15X_LD)
- RI->CR &= (uint8_t)(~0x04); // Mode SW
-#endif // STM8L15X_LD
-
- // Initializes each bank and configures the used GPIO
- for (idx_bk = 0; idx_bk < TSLPRM_TOTAL_BANKS; idx_bk++)
- {
- p_bank = &(TSL_Globals.Bank_Array[idx_bk]);
- p_chSrc = p_bank->p_chSrc;
- number_of_channels = p_bank->NbChannels;
-
-#if !defined(STM8L10X)
- // Mask Initialization
- BankMask[idx_bk].ch1 = 0;
- BankMask[idx_bk].ch2 = 0;
- BankMask[idx_bk].ch3 = 0;
- BankMask[idx_bk].ch4 = 0;
-#else
- // Mask Initialization
- BankMask[idx_bk].GPIOB_IO = 0;
- BankMask[idx_bk].GPIOB_Samp = 0;
- BankMask[idx_bk].GPIOD_IO = 0;
- BankMask[idx_bk].GPIOD_Samp = 0;
-#endif // !defined(STM8L10X)
-
- // Get which channel is used for sampling only one time because it's the same for each couple
- SamplingMask[idx_bk] = (uint8_t)GPIO_to_SW_Conf[p_chSrc->sampling].IO_Channel;
-
-#if (TSLPRM_USE_SHIELD > 0)
-
- // Create Mask per bank for shield
-#if !defined(STM8L10X)
- CreateMask(idx_bk, p_bank->shield_sampling);
- CreateMask(idx_bk, p_bank->shield_channel);
- ChannelMask[idx_bk] |= (uint8_t)(3 << (2 * ((GPIO_to_SW_Conf[p_bank->shield_channel].IO_Channel) - 1)));
-#else
- CreateIOMask(idx_bk, p_bank->shield_channel);
- CreateSamplingMask(idx_bk, p_bank->shield_sampling);
-#endif // !defined(STM8L10X)
-
- // Check if shield sampling capacitors are in the same number of channel for each group
- if ((SamplingMask[idx_bk] != (uint8_t)GPIO_to_SW_Conf[p_bank->shield_sampling].IO_Channel))
- {
- return TSL_STATUS_ERROR;
- }
-
- // GPIO in Output
- GPIO_DDR_OUT(p_bank->shield_sampling);
- GPIO_DDR_OUT(p_bank->shield_channel);
- // GPIO in PP
- GPIO_CR1_PP(p_bank->shield_sampling);
- GPIO_CR1_PP(p_bank->shield_channel);
- // Output in Low level
- GPIO_ODR_LOW(p_bank->shield_sampling);
- GPIO_ODR_LOW(p_bank->shield_channel);
-
- // Activate Comparator 1
- if (GPIO_to_SW_Conf[p_bank->shield_sampling].IO_Group == 0)
- {
- COMP->CR |= 0x02;
- }
- // Activate Comparator 2
- if (GPIO_to_SW_Conf[p_bank->shield_sampling].IO_Group == 1)
- {
- COMP->CR |= 0x04;
- }
-
-#endif // TSLPRM_USE_SHIELD
-
- // Initialize the mask for channel and sampling
- for (idx_ch = 0; idx_ch < number_of_channels; idx_ch++)
- {
-#if !defined(STM8L10X)
- // Create Mask per bank for channel and sampling
- CreateMask(idx_bk, p_chSrc->channel);
- CreateMask(idx_bk, p_chSrc->sampling);
- ChannelMask[idx_bk] |= (uint8_t)(3 << (2 * ((GPIO_to_SW_Conf[p_chSrc->channel].IO_Channel) - 1)));
- // Check if sampling capacitors are in the same number of channel for each group
- if ((SamplingMask[idx_bk] != (uint8_t)GPIO_to_SW_Conf[p_chSrc->sampling].IO_Channel))
- {
- return TSL_STATUS_ERROR;
- }
-#else
- // Activate Comparator 1
- if (p_chSrc->IdxSrc == 0)
- {
- COMP->CR |= 0x02;
- }
- // Activate Comparator 2
- if (p_chSrc->IdxSrc == 1)
- {
- COMP->CR |= 0x04;
- }
- // Create Mask per bank for channel and sampling
- CreateIOMask(idx_bk,p_chSrc->channel);
- Bank_IO_CompMask[idx_bk] |= (uint8_t)(1 << (GPIO_to_SW_Conf[p_chSrc->channel].IO_Channel - 1));
- Bank_IO_CompMask[idx_bk] = (uint8_t)(Bank_IO_CompMask[idx_bk] << (4 * GPIO_to_SW_Conf[p_chSrc->channel].IO_Group));
- CreateSamplingMask(idx_bk,p_chSrc->sampling);
- BankSamplingCompMask[idx_bk] |= (uint8_t)(1 << (GPIO_to_SW_Conf[p_chSrc->sampling].IO_Channel - 1));
- BankSamplingCompMask[idx_bk] = (uint8_t)(BankSamplingCompMask[idx_bk] << (4 * GPIO_to_SW_Conf[p_chSrc->sampling].IO_Group));
- if ((SamplingMask[idx_bk] != (uint8_t)GPIO_to_SW_Conf[p_chSrc->sampling].IO_Channel))
- {
- return TSL_STATUS_ERROR;
- }
-#if (TSLPRM_USE_SHIELD > 0)
- Bank_IOShield_CompMask[idx_bk] |= (uint8_t)(1 << (GPIO_to_SW_Conf[p_bank->shield_channel].IO_Channel - 1));
- Bank_IOShield_CompMask[idx_bk] = (uint8_t)(Bank_IOShield_CompMask[idx_bk] << (4 * GPIO_to_SW_Conf[p_bank->shield_channel].IO_Group));
- BankSamplingShieldCompMask[idx_bk] |= (uint8_t)(1 << (GPIO_to_SW_Conf[p_bank->shield_sampling].IO_Channel - 1));
- BankSamplingShieldCompMask[idx_bk] = (uint8_t)(BankSamplingShieldCompMask[idx_bk] << (4 * GPIO_to_SW_Conf[p_bank->shield_sampling].IO_Group));
- Bank_IO_CompMask[idx_bk] = (uint8_t)(Bank_IO_CompMask[idx_bk] | Bank_IOShield_CompMask[idx_bk]);
- BankSamplingCompMask[idx_bk] = (uint8_t)(BankSamplingCompMask[idx_bk] | BankSamplingShieldCompMask[idx_bk]);
-#endif
-#endif // !defined(STM8L10X)
-
- // GPIO are configured in PP Low mode when inactive
- // GPIO in Output
- GPIO_DDR_OUT(p_chSrc->sampling);
- GPIO_DDR_OUT(p_chSrc->channel);
- // GPIO in PP
- GPIO_CR1_PP(p_chSrc->sampling);
- GPIO_CR1_PP(p_chSrc->channel);
- // Output in Low level
- GPIO_ODR_LOW(p_chSrc->sampling);
- GPIO_ODR_LOW(p_chSrc->channel);
-
- p_chSrc++; // Next channel
- }
-
-#if !defined(STM8L10X)
- // Unlock IO to RI register: IO controlled by GPIO
- RI->IOCMR1 &= (uint8_t)(~BankMask[idx_bk].ch1);
- RI->IOCMR2 &= (uint8_t)(~BankMask[idx_bk].ch2);
- RI->IOCMR3 &= (uint8_t)(~BankMask[idx_bk].ch3);
-#if defined(STM8L15X_LD)
- RI->IOCMR4 &= (uint8_t)(~BankMask[idx_bk].ch4);
-#endif // STM8L15X_LD || STM8L10X
-#endif // !defined(STM8L10X)
- }
-
- return TSL_STATUS_OK;
-}
-
-
-#if !defined(STM8L10X)
-/**
- * @brief Create Mask for all banks
- * @param[in] idx_bk Index of the Bank to configure
- * @param[in] GPIO Pin number
- * @retval None
- */
-void CreateMask(TSL_tIndex_T idx_bk, uint8_t GPIO)
-{
- switch (GPIO_to_SW_Conf[GPIO].IO_Channel)
- {
- case 1:
- BankMask[idx_bk].ch1 |= (uint8_t)(1 << GPIO_to_SW_Conf[GPIO].IO_Group); // Mask for all first channel
- break;
- case 2:
- BankMask[idx_bk].ch2 |= (uint8_t)(1 << GPIO_to_SW_Conf[GPIO].IO_Group); // Mask for all second channel
- break;
- case 3:
- BankMask[idx_bk].ch3 |= (uint8_t)(1 << GPIO_to_SW_Conf[GPIO].IO_Group); // Mask fo all third channel
- break;
-#if defined(STM8L15X_LD) || defined(STM8L10X)
- case 4:
- BankMask[idx_bk].ch4 |= (uint8_t)(1 << GPIO_to_SW_Conf[GPIO].IO_Group); // Mask for all fourth channel
- break;
-#endif // STM8L15X_LD || STM8L10X
- default:
- break;
- }
-}
-
-#else
-
-/**
- * @brief Create IO Mask for all banks
- * @param[in] idx_bk Index of the Bank to configure
- * @param[in] GPIO Pin number
- * @retval None
- */
-void CreateIOMask(TSL_tIndex_T idx_bk, uint8_t GPIO)
-{
- switch (GPIO_PORT(GPIO))
- {
- case 0:
- BankMask[idx_bk].GPIOB_IO |= (uint8_t)(1 << GPIO_BIT(GPIO));
- break;
- case 1:
- BankMask[idx_bk].GPIOD_IO |= (uint8_t)(1 << GPIO_BIT(GPIO));
- break;
- default:
- break;
- }
-}
-
-
-/**
- * @brief Create Sampling Mask for all banks
- * @param[in] idx_bk Index of the Bank to configure
- * @param[in] GPIO Pin number
- * @retval None
- */
-void CreateSamplingMask(TSL_tIndex_T idx_bk, uint8_t GPIO)
-{
- switch (GPIO_PORT(GPIO))
- {
- case 0:
- BankMask[idx_bk].GPIOB_Samp |= (uint8_t)(1 << GPIO_BIT(GPIO));
- break;
- case 1:
- BankMask[idx_bk].GPIOD_Samp |= (uint8_t)(1 << GPIO_BIT(GPIO));
- break;
- default:
- break;
- }
-}
-
-#endif // !defined(STM8L10X)
-
-
-#if (TSLPRM_USE_SPREAD_SPECTRUM > 0)
-/**
- * @brief Spread Spectrum using a variable software delay.
- * @param None
- * @retval None
- */
-INLINE void SwSpreadSpectrum(void)
-{
- uint8_t idx;
-
- SpreadCounter++;
-
- if (SpreadCounter == TSLPRM_SPREAD_MAX)
- {
- SpreadCounter = TSLPRM_SPREAD_MIN;
- }
-
- idx = SpreadCounter;
-
- while (--idx) {}
-}
-#endif
-
-
-/**
- * @brief Bank configuration
- * @param[in] idx_bk Index of the Bank to configure
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_BankConfig(TSL_tIndex_T idx_bk)
-{
- uint8_t idx_i;
-#if defined(STM8L10X)
- uint8_t GroupUsed = 0;
-#endif
- TSL_tIndex_T idx_dest;
- TSL_tIndex_T idx_ch;
- TSL_tNb_T number_of_channels = 0;
- CONST TSL_Bank_T *p_bank; // Pointer to the current bank
- CONST TSL_ChannelDest_T *p_chDest; // Pointer to the first destination channel of the current bank
- CONST TSL_ChannelSrc_T *p_chSrc; // Pointer to the fisrt source channel of the current bank
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-
- p_bank = &(TSL_Globals.Bank_Array[idx_bk]);
- number_of_channels = p_bank->NbChannels;
- p_chDest = p_bank->p_chDest;
- p_chSrc = p_bank->p_chSrc;
-
- // Reset the disable mask
- DisableSampling = 0;
- for (idx_i = 0; idx_i < MAX_CHANNEL_NUMBER_BY_GROUP; idx_i++)
- {
- DisableMask[idx_i] = 0;
- }
-
- BankDone = 0;
-
-#if (TSLPRM_USE_SHIELD > 0)
- DISABLE_SAMPLING(p_bank->shield_sampling);
-#endif // TSLPRM_USE_SHIELD
-
- ChannelSampling = SamplingMask[idx_bk]; // Mask for the channel used by sampling
-
- // Loop for each channel of this bank
- for (idx_ch = 0; idx_ch < number_of_channels; idx_ch++)
- {
- idx_dest = p_chDest->IdxDest;
-#if defined(STM8L10X)
- if (p_chSrc->IdxSrc == 0)
- {
- GroupUsed |= 0x01;
- }
- if (p_chSrc->IdxSrc == 1)
- {
- GroupUsed |= 0x02;
- }
-#endif // defined(STM8L10X)
-
- // Mode Status OFF
- if (p_bank->p_chData[idx_dest].Flags.ObjStatus == TSL_OBJ_STATUS_OFF)
- {
-#if !defined(STM8L10X)
- // Update Mask if channels are disabled
- DISABLE_MASK(p_chSrc->channel);
- DISABLE_MASK(p_chSrc->sampling);
-#else
- // Update Mask if channels are disabled
- if (GPIO_to_SW_Conf[p_chSrc->channel].IO_Channel > 2)
- {
- DisableMask[2] |= (uint8_t)(1 << ((2 * GPIO_to_SW_Conf[p_chSrc->channel].IO_Group) + (GPIO_to_SW_Conf[p_chSrc->channel].IO_Channel - 3)));
- }
- else
- {
- DisableMask[0] |= (uint8_t)(1 << ((2 * GPIO_to_SW_Conf[p_chSrc->channel].IO_Group) + (GPIO_to_SW_Conf[p_chSrc->channel].IO_Channel - 1)));
- }
- if (GPIO_to_SW_Conf[p_chSrc->sampling].IO_Channel > 2)
- {
- DisableMask[3] |= (uint8_t)(1 << ((2 * GPIO_to_SW_Conf[p_chSrc->sampling].IO_Group) + (GPIO_to_SW_Conf[p_chSrc->sampling].IO_Channel - 3)));
- }
- else
- {
- DisableMask[1] |= (uint8_t)(1<<((2 * GPIO_to_SW_Conf[p_chSrc->sampling].IO_Group) + (GPIO_to_SW_Conf[p_chSrc->sampling].IO_Channel - 1)));
- }
-#endif // !defined(STM8L10X)
- }
-
- // Mode Status BURST ONLY
- if (p_bank->p_chData[idx_dest].Flags.ObjStatus == TSL_OBJ_STATUS_BURST_ONLY)
- {
-#if !defined(STM8L10X)
- DISABLE_SAMPLING(p_chSrc->sampling);
-#else
- if (p_chSrc->IdxSrc == 0)
- {
- GroupUsed &= (uint8_t)(~0x01);
- }
- if (p_chSrc->IdxSrc == 1)
- {
- GroupUsed &= (uint8_t)(~0x02);
- }
-#endif // !defined(STM8L10X)
- }
-
- tab_MeasurementCounter[GPIO_to_SW_Conf[p_chSrc->sampling].IO_Group] = 0;
-
- // Next channel
- p_chSrc++;
- p_chDest++;
- }
-
-#if !defined(STM8L10X)
- //Get Mask for the current bank
- CurrentBank[0] = (uint8_t)(BankMask[idx_bk].ch1 & (~DisableMask[0])); // Mask for all 1st channel are used by channels and sampling for this bank
- CurrentBank[1] = (uint8_t)(BankMask[idx_bk].ch2 & (~DisableMask[1])); // Mask for all 2nd channel are used by channels and sampling for this bank
- CurrentBank[2] = (uint8_t)(BankMask[idx_bk].ch3 & (~DisableMask[2])); // Mask for all 3rd channel are used by channels and sampling for this bank
-#if defined(STM8L15X_LD)
- CurrentBank[3] = (uint8_t)(BankMask[idx_bk].ch4 & (~DisableMask[3])); // Mask for all 4th channel are used by channels and sampling for this bank
-#endif // STM8L15X_LD
- CurrentChannel = ChannelMask[idx_bk]; // Mask for channels
- CurrentSampling = (uint8_t)(3 << (2 * (SamplingMask[idx_bk] - 1))); // Mask for sampling
-
- // Channel's state of the current bank
- BankDone = (uint8_t)(CurrentBank[ChannelSampling - 1] & (~DisableSampling));
-
- // Select the Input register corresponding to the channel sampling (to optimize the measurement)
- p_IOIRx = RI_IOIRx_Register[ChannelSampling - 1];
-
-#else
- //Get Mask for the current bank
- CurrentBank[0] = (uint8_t)(BankMask[idx_bk].GPIOB_IO & (~DisableMask[0]));
- CurrentBank[1] = (uint8_t)(BankMask[idx_bk].GPIOB_Samp & (~DisableMask[1]));
- CurrentBank[2] = (uint8_t)(BankMask[idx_bk].GPIOD_IO & (~DisableMask[2]));
- CurrentBank[3] = (uint8_t)(BankMask[idx_bk].GPIOD_Samp & (~DisableMask[3]));
-
- CurrentChannel = (uint8_t)(Bank_IO_CompMask[idx_bk]); // Mask for channels
- CurrentSampling = (uint8_t)(BankSamplingCompMask[idx_bk]); // Mask for sampling
-
- // Select the Input register corresponding to the channel sampling (to optimize the measurement) and update BankDone, which is the mask where there are sampling capacitors
- if (ChannelSampling > 2) // GPIOD
- {
- p_GPIOx_IDR = GPIOx_IDR[1];
- if ((GroupUsed & 0x01) == 1)
- {
- BankDone |= (uint8_t)(1 << (ChannelSampling - 3));
- }
- if((GroupUsed & 0x02) == 2)
- {
- BankDone |= (uint8_t)(1 << (2 + (ChannelSampling - 3)));
- }
-
- }
- else // GPIOB
- {
- p_GPIOx_IDR = GPIOx_IDR[0];
- if ((GroupUsed & 0x01) == 1)
- {
- BankDone |= (uint8_t)(1 << (ChannelSampling - 1));
- }
- if ((GroupUsed & 0x02) == 2)
- {
- BankDone |= (uint8_t)(1 << (2 + (ChannelSampling - 1)));
- }
- }
-
-#endif // !defined(STM8L10X)
-
- return TSL_STATUS_OK;
-}
-
-
-#if !defined(STM8L10X)
-
-/**
- * @brief Start acquisition
- * @param None
- * @retval None
- */
-void TSL_acq_BankStartAcq(void)
-{
- CONST TSL_Bank_T *p_bank = &(TSL_Globals.Bank_Array[0]);
- CONST TSL_ChannelSrc_T *p_chSrc;
- TSL_tNb_T number_of_channels = 0;
- TSL_tIndex_T idx_bk;
- TSL_tIndex_T idx_ch;
- uint8_t step3, step5, deadtime1, deadtime2; //intermediate variables to speed-up the acquisition loop
-
- uint8_t old_status = 0;
-
- ChargeTransferCounter = 0;
-
-#if (TSLPRM_IODEF > 0)
- //============================
- // All GPIOs in Input floating
- //============================
- for (idx_bk = 0; idx_bk < TSLPRM_TOTAL_BANKS; idx_bk++)
- {
- p_bank = &(TSL_Globals.Bank_Array[idx_bk]);
- p_chSrc = p_bank->p_chSrc;
-
-#if (TSLPRM_USE_SHIELD > 0)
- // GPIO in floating mode
- GPIO_CR1_FLOATING(p_bank->shield_sampling);
- GPIO_CR1_FLOATING(p_bank->shield_channel);
- // GPIO in Input
- GPIO_DDR_IN(p_bank->shield_sampling);
- GPIO_DDR_IN(p_bank->shield_channel);
-#endif // TSLPRM_USE_SHIELD
-
- number_of_channels = p_bank->NbChannels;
-
- for (idx_ch = 0;
- idx_ch < number_of_channels;
- idx_ch++)
- {
- // GPIO in floating mode
- GPIO_CR1_FLOATING(p_chSrc->sampling);
- GPIO_CR1_FLOATING(p_chSrc->channel);
- // GPIO in Input
- GPIO_DDR_IN(p_chSrc->sampling);
- GPIO_DDR_IN(p_chSrc->channel);
- p_chSrc++;
- }
- }
-#endif // TSLPRM_IODEF
-
- // Test if this bank is not empty
- if (BankDone != 0)
- {
- // Enable necessary IOs
- RI->IOCMR1 |= (uint8_t)CurrentBank[0];
- RI->IOCMR2 |= (uint8_t)CurrentBank[1];
- RI->IOCMR3 |= (uint8_t)CurrentBank[2];
-#if defined(STM8L15X_LD)
- RI->IOCMR4 |= (uint8_t)CurrentBank[3];
-#endif // STM8L15X_LD
-
- RI->IOSR1 |= (uint8_t)CurrentBank[0];
- RI->IOSR2 |= (uint8_t)CurrentBank[1];
- RI->IOSR3 |= (uint8_t)CurrentBank[2];
-#if defined(STM8L15X_LD)
- RI->IOSR4 |= (uint8_t)CurrentBank[3];
-#endif // STM8L15X_LD
-
- /* STEP1 : Discharging all capacitors
- ==> all IOs in Push-Pull LOW */
- RI->IOGCR &= (uint8_t)(~(CurrentChannel | CurrentSampling));
-
- /* STEP2: Waiting for complete discharge */
- SoftDelay(TSLPRM_DELAY_DISCHARGE_ALL);
- // Dead Time
- RI->IOGCR |= (uint8_t)(0xAA & (CurrentChannel | CurrentSampling));
-
- // Close switch sampling
- RI->IOGCR |= CurrentSampling;
-
- /* Copmpute RI->IOGCR for each step */
- /* STEP3: Charging C-Touch
- ==> Channels in Push-Pull HIGH
- ==> Sampling kept open */
- step3 = (uint8_t)(RI->IOGCR ^ CurrentChannel);
- /* Deadtime */
- deadtime1 = RI->IOGCR ; // equivalent to step3 ^ (uint8_t)CurrentChannel;
- /* STEP5: Transfering C-Touch charge in C-Sampling
- ==> Close IOs Switchs */
- step5 = (uint8_t)(RI->IOGCR | CurrentChannel);
- /* Deadtime */
- deadtime2 = (uint8_t)(step5 & (0xAA | (~CurrentChannel)));
-
- // Loop while all sampling have not reach the VIH level
- do
- {
- /* STEP3: Charging C-Touch */
- RI->IOGCR = step3;
- // Get the measurement of counter if the value of Input register change
- if ((*p_IOIRx & BankDone) != old_status)
- {
- GetCounter(p_IOIRx, &old_status);
- }
-
- /* STEP4 : Waiting for good chargement */
- __Delay_Charge();
-
-#if (TSLPRM_USE_SPREAD_SPECTRUM > 0)
- SwSpreadSpectrum();
-#endif
-
- /* Dead Time */
- RI->IOGCR = deadtime1;
- /* STEP5: Transfering C-Touch charge in C-Sampling */
- RI->IOGCR = step5;
-
- ChargeTransferCounter++;
-
- /* STEP6: Waiting for good transfer */
- __Delay_Transfer();
-
- /* Dead Time */
- RI->IOGCR = deadtime1;
- } while ((old_status != BankDone) && (ChargeTransferCounter <= TSL_Params.AcqMax));
-
- // Get the value of counter if he reach the Max count
- if(ChargeTransferCounter > TSL_Params.AcqMax)
- {
- GetCounter(&BankDone, &old_status);
- }
-
- // Disable necessary IOs
- RI->IOSR1 &= (uint8_t)(~(CurrentBank[0]));
- RI->IOSR2 &= (uint8_t)(~(CurrentBank[1]));
- RI->IOSR3 &= (uint8_t)(~(CurrentBank[2]));
-#if defined(STM8L15X_LD)
- RI->IOSR4 &= (uint8_t)(~(CurrentBank[3]));
-#endif
-
- RI->IOCMR1 &= (uint8_t)(~(CurrentBank[0]));
- RI->IOCMR2 &= (uint8_t)(~(CurrentBank[1]));
- RI->IOCMR3 &= (uint8_t)(~(CurrentBank[2]));
-#if defined(STM8L15X_LD)
- RI->IOCMR4 &= (uint8_t)(~(CurrentBank[3]));
-#endif
-
- //====================
- // All GPIOs in PP Low
- //====================
- for (idx_bk = 0; idx_bk < TSLPRM_TOTAL_BANKS;idx_bk++)
- {
- p_bank = &(TSL_Globals.Bank_Array[idx_bk]);
- p_chSrc = p_bank->p_chSrc;
-
-#if (TSLPRM_USE_SHIELD > 0)
- // Output in Low level
- GPIO_ODR_LOW(p_bank->shield_sampling);
- GPIO_ODR_LOW(p_bank->shield_channel);
- // GPIO in Output
- GPIO_DDR_OUT(p_bank->shield_sampling);
- GPIO_DDR_OUT(p_bank->shield_channel);
- // GPIO in PP
- GPIO_CR1_PP(p_bank->shield_sampling);
- GPIO_CR1_PP(p_bank->shield_channel);
-#endif // TSLPRM_USE_SHIELD
-
- number_of_channels = p_bank->NbChannels;
-
- for (idx_ch = 0;
- idx_ch < number_of_channels;
- idx_ch++)
- {
- // Output in Low level
- GPIO_ODR_LOW(p_chSrc->sampling);
- GPIO_ODR_LOW(p_chSrc->channel);
- // GPIO in Output
- GPIO_DDR_OUT(p_chSrc->sampling);
- GPIO_DDR_OUT(p_chSrc->channel);
- // GPIO in PP
- GPIO_CR1_PP(p_chSrc->sampling);
- GPIO_CR1_PP(p_chSrc->channel);
- p_chSrc++;
- }
- }
-
- }
-}
-
-#else // STM8L10X
-
-/**
- * @brief Start acquisition
- * @param None
- * @retval None
- */
-void TSL_acq_BankStartAcq(void)
-{
- CONST TSL_Bank_T *p_bank = &(TSL_Globals.Bank_Array[0]);
- CONST TSL_ChannelSrc_T *p_chSrc;
- TSL_tNb_T number_of_channels = 0;
- TSL_tIndex_T idx_bk;
- TSL_tIndex_T idx_ch;
-
- uint8_t old_status = 0;
-
- ChargeTransferCounter = 0;
-
-#if (TSLPRM_IODEF > 0)
- //============================
- // All GPIOs in Input floating
- //============================
- for (idx_bk = 0; idx_bk < TSLPRM_TOTAL_BANKS; idx_bk++)
- {
- p_bank = &(TSL_Globals.Bank_Array[idx_bk]);
- p_chSrc = p_bank->p_chSrc;
-
-#if (TSLPRM_USE_SHIELD > 0)
- // GPIO in floating mode
- GPIO_CR1_FLOATING(p_bank->shield_sampling);
- GPIO_CR1_FLOATING(p_bank->shield_channel);
- // GPIO in Input
- GPIO_DDR_IN(p_bank->shield_sampling);
- GPIO_DDR_IN(p_bank->shield_channel);
-#endif
-
- number_of_channels = p_bank->NbChannels;
-
- for (idx_ch = 0;
- idx_ch < number_of_channels;
- idx_ch++)
- {
- // GPIO in floating mode
- GPIO_CR1_FLOATING(p_chSrc->sampling);
- GPIO_CR1_FLOATING(p_chSrc->channel);
- // GPIO in Input
- GPIO_DDR_IN(p_chSrc->sampling);
- GPIO_DDR_IN(p_chSrc->channel);
-
- p_chSrc++;
- }
- }
-#endif // TSLPRM_IODEF
-
- // Test if this bank is not empty
- if (BankDone != 0)
- {
-
-#ifdef TSLPRM_PROTECT_IO_ACCESS
- disableInterrupts();
-#endif //TSLPRM_PROTECT_IO_ACCESS
-
- /* STEP1 : Discharging all capacitors
- ==> all IOs in open-drain LOW */
- GPIOB->ODR &= (uint8_t)(~(CurrentBank[0] | CurrentBank[1]));
- GPIOB->CR1 &= (uint8_t)(~(CurrentBank[0] | CurrentBank[1]));
- GPIOB->DDR |= (uint8_t)(CurrentBank[0] | CurrentBank[1]);
- GPIOD->ODR &= (uint8_t)(~(CurrentBank[2] | CurrentBank[3]));
- GPIOD->CR1 &= (uint8_t)(~(CurrentBank[2] | CurrentBank[3]));
- GPIOD->DDR |= (uint8_t)(CurrentBank[2] | CurrentBank[3]);
-
-#ifdef TSLPRM_PROTECT_IO_ACCESS
- enableInterrupts();
-#endif // TSLPRM_PROTECT_IO_ACCESS
-
- COMP->CCS &= (uint8_t)(~(CurrentSampling |CurrentChannel));
-
- /* STEP2: Waiting for complete discharge */
- SoftDelay(TSLPRM_DELAY_DISCHARGE_ALL);
-
-#ifdef TSLPRM_PROTECT_IO_ACCESS
- disableInterrupts();
-#endif // TSLPRM_PROTECT_IO_ACCESS
-
- // Dead Time
- GPIOB->DDR &= (uint8_t)(~(CurrentBank[0] | CurrentBank[1]));
- GPIOD->DDR &= (uint8_t)(~(CurrentBank[2] | CurrentBank[3]));
-
-#ifdef TSLPRM_PROTECT_IO_ACCESS
- enableInterrupts();
-#endif // TSLPRM_PROTECT_IO_ACCESS
-
- GPIOB->ODR |= (uint8_t)(CurrentBank[0]);
- GPIOD->ODR |= (uint8_t)(CurrentBank[2]);
-
- // Loop while all sampling have not reach the VIH level
- do
- {
-
-#ifdef TSLPRM_PROTECT_IO_ACCESS
- disableInterrupts();
-#endif // TSLPRM_PROTECT_IO_ACCESS
-
- /* STEP3: Charging C-Touch
- ==> Channels in Push-Pull HIGH
- ==> Sampling kept open */
- GPIOB->DDR |= (uint8_t)(CurrentBank[0]);
- GPIOB->CR1 |= (uint8_t)(CurrentBank[0]);
- GPIOD->DDR |= (uint8_t)(CurrentBank[2]);
- GPIOD->CR1 |= (uint8_t)(CurrentBank[2]);
-
-#ifdef TSLPRM_PROTECT_IO_ACCESS
- enableInterrupts();
-#endif // TSLPRM_PROTECT_IO_ACCESS
-
- /* STEP4 : Waiting for good chargement */
- __Delay_Charge();
-
-#if (TSLPRM_USE_SPREAD_SPECTRUM > 0)
- SwSpreadSpectrum();
-#endif
-
-#ifdef TSLPRM_PROTECT_IO_ACCESS
- disableInterrupts();
-#endif // TSLPRM_PROTECT_IO_ACCESS
-
- // Dead Time
- GPIOB->CR1 &= (uint8_t)(~(CurrentBank[0]));
- GPIOB->DDR &= (uint8_t)(~(CurrentBank[0]));
- GPIOD->CR1 &= (uint8_t)(~(CurrentBank[2]));
- GPIOD->DDR &= (uint8_t)(~(CurrentBank[2]));
-
-#ifdef TSLPRM_PROTECT_IO_ACCESS
- enableInterrupts();
-#endif // TSLPRM_PROTECT_IO_ACCESS
-
- /* STEP5: Transfering C-Touch charge in C-Sampling
- ==> Close IOs Switchs */
-
- // Close switch sampling
- COMP->CCS |= (uint8_t)CurrentSampling;
- COMP->CCS |= (uint8_t)CurrentChannel;
-
- /* STEP6: Waiting for good transfer */
- __Delay_Transfer();
-
- //Dead Time
- COMP->CCS &= (uint8_t)(~(CurrentChannel | CurrentSampling));
-
-#ifdef TSLPRM_PROTECT_IO_ACCESS
- disableInterrupts();
-#endif // TSLPRM_PROTECT_IO_ACCESS
-
- // Get the measurement of counter if the value of Input register change
- if ((*p_GPIOx_IDR & BankDone) != old_status)
- {
- GetCounter(p_GPIOx_IDR, &old_status);
- }
-
-#ifdef TSLPRM_PROTECT_IO_ACCESS
- enableInterrupts();
-#endif // TSLPRM_PROTECT_IO_ACCESS
-
- ChargeTransferCounter++;
-
- } while ((old_status != BankDone) && (ChargeTransferCounter != (TSL_Params.AcqMax+1)));
-
- // Get the value of counter if he reach the Max count
- if(ChargeTransferCounter == (TSL_Params.AcqMax+1))
- {
- GetCounter(&BankDone, &old_status);
- }
-
- //====================
- // All GPIOs in PP Low
- //====================
- for (idx_bk = 0; idx_bk < TSLPRM_TOTAL_BANKS;idx_bk++)
- {
- p_bank = &(TSL_Globals.Bank_Array[idx_bk]);
- p_chSrc = p_bank->p_chSrc;
-
-#if (TSLPRM_USE_SHIELD > 0)
- // Output in Low level
- GPIO_ODR_LOW(p_bank->shield_sampling);
- GPIO_ODR_LOW(p_bank->shield_channel);
- // GPIO in Output
- GPIO_DDR_OUT(p_bank->shield_sampling);
- GPIO_DDR_OUT(p_bank->shield_channel);
- // GPIO in PP
- GPIO_CR1_PP(p_bank->shield_sampling);
- GPIO_CR1_PP(p_bank->shield_channel);
-#endif // TSLPRM_USE_SHIELD
-
- number_of_channels = p_bank->NbChannels;
-
- for (idx_ch = 0;
- idx_ch < number_of_channels;
- idx_ch++)
- {
- // Output in Low level
- GPIO_ODR_LOW(p_chSrc->sampling);
- GPIO_ODR_LOW(p_chSrc->channel);
- // GPIO in Output
- GPIO_DDR_OUT(p_chSrc->sampling);
- GPIO_DDR_OUT(p_chSrc->channel);
- // GPIO in PP
- GPIO_CR1_PP(p_chSrc->sampling);
- GPIO_CR1_PP(p_chSrc->channel);
- p_chSrc++;
- }
- }
-
- }
-}
-
-#endif
-
-
-/**
- * @brief Do the measurement
- * @param *p_reg Pointer to the Input register
- * @param *p_old_status Pointer to the previous status value
- * @retval None
- */
-
-void GetCounter(__IO uint8_t *p_reg, uint8_t *p_old_status)
-{
-
- uint8_t new_status = 0;
- uint8_t idx_i = 0;
- uint8_t mask_i = 1;
-#if defined(STM8L10X)
- uint8_t idx_j = 4;
- uint8_t idx_group = 0;
-#else
- uint8_t idx_j = 8;
-#endif // defined(STM8L10X)
-
- new_status = *p_reg;
- new_status = (uint8_t)(new_status & BankDone & (~(*p_old_status)));
-
- while ((new_status != 0) && (idx_i < idx_j))
- {
- if ((new_status & mask_i) != 0)
- {
-#if defined(STM8L10X)
- tab_MeasurementCounter[idx_group]= ChargeTransferCounter;
-#else
- tab_MeasurementCounter[idx_i] = ChargeTransferCounter;
-#endif // defined(STM8L10X)
- *p_old_status |= mask_i;
- new_status &= (uint8_t)(~mask_i);
- }
- idx_i++;
- mask_i <<= 1;
-#if defined(STM8L10X)
- if (idx_i > 1)
- {
- idx_group = 1;
- }
-#endif // defined(STM8L10X)
- }
-}
-
-
-/**
- * @brief Wait end of acquisition
- * @param None
- * @retval status
- */
-TSL_Status_enum_T TSL_acq_BankWaitEOC(void)
-{
- return TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Return the current measure
- * @param[in] index Index of the measure source
- * @retval Measure
- */
-TSL_tMeas_T TSL_acq_GetMeas(TSL_tIndex_T index)
-{
- return(tab_MeasurementCounter[index]);
-}
-
-
-/**
- * @brief Check noise (not used)
- * @param None
- * @retval Status
- */
-TSL_AcqStatus_enum_T TSL_acq_CheckNoise(void)
-{
- return TSL_ACQ_STATUS_OK;
-}
-
-
-/**
- * @brief Check if a filter must be used on the current channel (not used)
- * @param[in] pCh Pointer on the channel data information
- * @retval Result TRUE if a filter can be applied
- */
-TSL_Bool_enum_T TSL_acq_UseFilter(TSL_ChannelData_T *pCh)
-{
- return TSL_TRUE;
-}
-
-
-/**
- * @brief Compute the Delta value
- * @param[in] ref Reference value
- * @param[in] meas Last Measurement value
- * @retval Delta value
- */
-TSL_tDelta_T TSL_acq_ComputeDelta(TSL_tRef_T ref, TSL_tMeas_T meas)
-{
- return((TSL_tDelta_T)(ref - meas));
-}
-
-
-/**
- * @brief Compute the Measurement value
- * @param[in] ref Reference value
- * @param[in] delta Delta value
- * @retval Measurement value
- */
-TSL_tMeas_T TSL_acq_ComputeMeas(TSL_tRef_T ref, TSL_tDelta_T delta)
-{
- return((TSL_tMeas_T)(ref - delta));
-}
-
-
-/**
- * @brief Test if the Reference is incorrect (not used)
- * @param[in] pCh Pointer on the channel data information
- * @retval Result TRUE if the Reference is out of range
- */
-TSL_Bool_enum_T TSL_acq_TestReferenceOutOfRange(TSL_ChannelData_T *pCh)
-{
- return TSL_FALSE;
-}
-
-
-/**
- * @brief Test if the measure has crossed the reference target (not used)
- * @param[in] pCh Pointer on the channel data information
- * @param[in] new_meas Measure of the last acquisition on this channel
- * @retval Result TRUE if the Reference is valid
- */
-TSL_Bool_enum_T TSL_acq_TestFirstReferenceIsValid(TSL_ChannelData_T *pCh, TSL_tMeas_T new_meas)
-{
- return TSL_TRUE;
-}
-
-
-#if defined(__ICCSTM8__)
-#pragma optimize=low
-#endif
-/**
- * @brief Software delay (private routine)
- * @param val Wait delay
- * @retval None
- */
-void SoftDelay(uint16_t val)
-{
- uint16_t idx;
- for (idx = val; idx > 0; idx--)
- {
- nop();
- }
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm8tl5x.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm8tl5x.c
deleted file mode 100644
index 9298122..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_acq_stm8tl5x.c
+++ /dev/null
@@ -1,906 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_acq_stm8tl5x.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the PXS acquisition
- * on STM8TL5x products.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_acq_stm8tl5x.h"
-#include "tsl_globals.h"
-#include "stm8tl5x_it.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-
-/* Private defines -----------------------------------------------------------*/
-#define EPCC_INIT_VALUE (0x80)
-#define CS_MIDDLE_VALUE (17)
-#define CS_MAX_VALUE (32)
-#define MAX_MEASURE (0xFFFF)
-
-/* Private macros ------------------------------------------------------------*/
-#define IS_BANK_INDEX_OK(INDEX) (((INDEX) == 0) || (((INDEX) > 0) && ((INDEX) < TSLPRM_TOTAL_BANKS)))
-#define IS_SOURCE_INDEX_OK(INDEX) (((INDEX) == 0) || (((INDEX) > 0) && ((INDEX) < TSLPRM_TOTAL_CHANNELS)))
-#define IS_EPCC_STATUS_OK(STATUS) ((STATUS & TSL_EPCC_CHANGE_MASK) != 0)
-#define IS_CSSEL_OK(CSSEL) (((CSSEL) == 0) || (((CSSEL) > 0) && ((CSSEL) < CS_MAX_VALUE)))
-
-/* Private variables ---------------------------------------------------------*/
-TSL_BankConfig_T PXS_BankConfig[TSLPRM_TOTAL_BANKS];
-CONST uint8_t PXS_CSsorting[] = {0, 1, 2, 8, 3, 4, 5, 9, 6, 10, 16, 11, 7, 12, 17, 13, 18, 19, 14, 24, 15, 20, 25, 21, 26, 22, 27, 23, 28, 29, 30, 31};
-
-/* Private functions prototype -----------------------------------------------*/
-void TSL_PXS_CS_CalibrateBank(TSL_tIndex_T idx_bk);
-int8_t TSL_PXS_EPCC_CalibrateBank(TSL_tIndex_T bank);
-TSL_Status_enum_T TSL_PXS_EPCC_CalibrateZone(CONST TSL_Zone_T *);
-void SoftDelay(uint16_t val);
-
-/**
- * @brief Initializes the acquisition module.
- * @param None
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_Init(void)
-{
-
- TSL_Status_enum_T retval = TSL_STATUS_OK;
-
- TSL_tIndex_T i;
- TSL_tIndex_T j;
- TSL_tIndex_T idx_bk; // Bank index
- uint16_t TxInUseMask = 0;
- uint16_t RxInUseMask = 0;
- CONST TSL_Bank_T *bank;
- uint8_t *CSArray;
-
- // Enable the PXS IP clock
- CLK->PCKENR1 |= CLK_PCKENR1_PXS;
-
- // Initialization of PXS IP
- PXS->CKCR1 &= (uint8_t)~PXS_CKCR1_PRESC;
-
-#if (TSLPRM_PXS_HSI == 16000)
- PXS->CKCR1 |= PXS_CKCR1_16MHZ;
-#elif (TSLPRM_PXS_HSI == 8000)
- PXS->CKCR1 |= PXS_CKCR1_8MHZ;
-#elif (TSLPRM_PXS_HSI == 4000)
- PXS->CKCR1 |= PXS_CKCR1_4MHZ;
-#elif (TSLPRM_PXS_HSI == 2000)
- PXS->CKCR1 |= PXS_CKCR1_2MHZ;
-#elif (TSLPRM_PXS_HSI == 1000)
- PXS->CKCR1 |= PXS_CKCR1_1MHZ;
-#elif (TSLPRM_PXS_HSI == 500)
- PXS->CKCR1 |= PXS_CKCR1_500KHZ;
-#elif (TSLPRM_PXS_HSI == 250)
- PXS->CKCR1 |= PXS_CKCR1_250KHZ;
-#elif (TSLPRM_PXS_HSI == 125)
- PXS->CKCR1 |= PXS_CKCR1_125KHZ;
-#else
- PXS->CKCR1 |= PXS_CKCR1_16MHZ; // Default
-#endif
-
- PXS->CKCR2 = (uint8_t)(((uint8_t)TSLPRM_PXS_UP_LENGTH & 0x07) << 4) | ((uint8_t)TSLPRM_PXS_PASS_LENGTH & 0x07);
-
-#if TSLPRM_PXS_RF_DETECTION > 0
- enablePXSNoiseDetection();
-#endif
-
- setPXSStab(TSLPRM_PXS_STAB);
- setPXSBias(TSLPRM_PXS_BIAS);
-
- // Initialization of the GPIO shared with the used TX
- for (i = 0; i < TSLPRM_TOTAL_BANKS; i++)
- {
- bank = &(TSL_Globals.Bank_Array[i]);
- CSArray = PXS_BankConfig[i].CSSEL;
- TxInUseMask |= bank->msk_TX;
- // Set the mask with the receivers use as receiver or as transmitter
- RxInUseMask |= bank->msk_RXEN;
- // Set the CS to 0
- for (j = 0; j <= TSLPRM_HIGH_CHANNEL_NB; j++)
- {
- *CSArray = 0;
- CSArray++;
- }
- }
-
- GPIOD->ODR &= (uint8_t)(~(TxInUseMask & 0x00FF));
- // Set the port as output
- GPIOD->DDR |= (uint8_t)(TxInUseMask & 0x00FF);
- // Configure the port as open-drain
- GPIOD->CR1 &= (uint8_t)(~(TxInUseMask & 0x00FF));
-#if TSLPRM_PXS_INACTIVE_TX > 0
- // Configure as floating
- GPIOD->ODR |= (uint8_t)(TxInUseMask & 0x00FF);
-#else
- // Drive them to VSS
- GPIOD->ODR &= (uint8_t)(~(TxInUseMask & 0x00FF));
-#endif
- GPIOB->ODR &= (uint8_t)(~((TxInUseMask & 0xFF00) >> 8));
- // Set the port as output
- GPIOB->DDR |= (uint8_t)((TxInUseMask & 0xFF00) >> 8);
- // Configure the port as open-drain
- GPIOB->CR1 &= (uint8_t)(~((TxInUseMask & 0xFF00) >> 8));
-#if TSLPRM_PXS_INACTIVE_TX > 0
- // Configure as floating
- GPIOB->ODR |= (uint8_t)((TxInUseMask & 0xFF00) >> 8);
-#else
- // Drive it to VSS
- GPIOB->ODR &= (uint8_t)(~((TxInUseMask & 0xFF00) >> 8));
-#endif
-
- enablePXS();
-
-#if TSLPRM_PXS_INACTIVE_RX > 0
- PXS->RXINSR = 0x3FF;
-#else
- PXS->RXINSR = 0x0000;
-#endif
-
-#if TSLPRM_PXS_RX_COUPLING > 0
- enablePXSCoupling();
-#else
- disablePXSCoupling()
-#endif
-
-#if TSLPRM_PXS_SYNCHRONIZE > 0
- enablePXSSync();
-#if TSLPRM_PXS_SYNCHRO_EDGE > 0
- selectPXSSyncRisingEdge();
-#else
- selectPXSSyncFallingEdge();
-#endif
-#else
- disablePXSSync();
-#endif
-
-#if TSLPRM_USE_ACQ_INTERRUPT > 0
- enablePXSInterrupts(PXS_CR2_EOCITEN);
-#endif
- // Configure the acquisition mode
- PXS->RXCR3 = (uint16_t)RxInUseMask;
- PXS->RXCR2 = (uint16_t)RxInUseMask;
-
-#if TSLPRM_ACQ_MAX > 0
- PXS->MAXR = TSLPRM_ACQ_MAX;
- PXS->MAXENR = 0x03FF;
-#else
- PXS->MAXENR = 0;
-#endif
-
- // Calibrate the CS for all banks
- for (idx_bk = 0;idx_bk < TSLPRM_TOTAL_BANKS;idx_bk++)
- {
- TSL_PXS_CS_CalibrateBank(idx_bk);
- }
-
-
- // Calibrate the EPCC for all banks
- for (idx_bk = 0;idx_bk < TSLPRM_TOTAL_BANKS;idx_bk++)
- {
- if (TSL_PXS_EPCC_CalibrateBank(idx_bk) > 0)
- {
- retval = TSL_STATUS_ERROR;
- }
- }
-#if TSLPRM_PXS_LOW_POWER_MODE > 0
- setPXSLowPower();
-#else
- resetPXSLowPower();
-#endif
-
- return retval;
-
-}
-
-/**
- * @brief Calibrate the CS for a selected acquisition bank
- * @param[in] idx_bk Index of the bank
- * @retval Number of Receivers not correctly calibrated
- */
-void TSL_PXS_CS_CalibrateBank(TSL_tIndex_T idx_bk)
-{
- TSL_tIndex_T idx_ch;
- uint8_t currentCS = 24;
- uint8_t CS_delta = 4; // Value to add/substract to/from the current CS
- CONST TSL_Bank_T *bank;
- CONST uint16_t targetCount = TSLPRM_KEY_TARGET_REFERENCE / TSLPRM_KEY_TARGET_ATTENUATION;
- CONST uint16_t targetCountError = targetCount >> 3;
- bool CalibrationDone = FALSE;
- uint16_t measSup[TSLPRM_HIGH_CHANNEL_NB+1];
- uint16_t measInf[TSLPRM_HIGH_CHANNEL_NB+1];
- uint8_t CSsup[TSLPRM_HIGH_CHANNEL_NB+1];
- uint8_t CSinf[TSLPRM_HIGH_CHANNEL_NB+1];
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-#if TSLPRM_USE_ACQ_INTERRUPT == 0
- enablePXSInterrupts(PXS_CR2_EOCITEN);
-#endif
-
- bank = &(TSL_Globals.Bank_Array[idx_bk]);
- resetPXSLowPower();
- TSL_acq_BankConfig(idx_bk);
-
- PXS->MAXR = TSLPRM_KEY_TARGET_REFERENCE;
-
- WFE->CR1 |= WFE_CR1_PXS_EV;
- for (idx_ch = 0; idx_ch <= TSLPRM_HIGH_CHANNEL_NB; idx_ch++)
- {
- PXS->RXEPCCSELR[idx_ch] = 0;
- PXS->RXCSSELR[idx_ch] = currentCS;
- CSsup[idx_ch] = 0;
- CSinf[idx_ch] = 0;
- measInf[idx_ch] = 0;
- measSup[idx_ch] = 0xFFFF;
-
- }
- do
- {
- startPXSAcquisition();
- wfe();
- clearPXS_ISR_EOCF;
- for (idx_ch = 0; idx_ch <= TSLPRM_HIGH_CHANNEL_NB; idx_ch++)
- {
- if (bank->msk_channels & (uint16_t)((uint16_t)1 << idx_ch))
- {
- if (!(PXS->RXSR & (uint16_t)((uint16_t)1 << idx_ch)) || (PXS->RXCNTR[idx_ch] > targetCount - targetCountError))
- {
- PXS->RXCSSELR[idx_ch] -= 8;
- }
- }
- }
- currentCS -= 8;
- }
- while (currentCS);
-
-
- for (idx_ch = 0; idx_ch <= TSLPRM_HIGH_CHANNEL_NB; idx_ch++)
- {
- PXS->RXCSSELR[idx_ch] += CS_delta;
- }
-
- do
- {
- CS_delta >>= 1;
- if ((CS_delta == 0) && (CalibrationDone == FALSE))
- {
- CalibrationDone = TRUE;
- CS_delta = 1;
- }
-
- startPXSAcquisition();
- wfe();
- clearPXS_ISR_EOCF;
- for (idx_ch = 0; idx_ch <= TSLPRM_HIGH_CHANNEL_NB; idx_ch++)
- {
- if (bank->msk_channels & (uint16_t)((uint16_t)1 << idx_ch))
- {
- if (!(PXS->RXSR & (uint16_t)((uint16_t)1 << idx_ch)) || (PXS->RXCNTR[idx_ch] > targetCount))
- {
- measSup[idx_ch] = PXS->RXCNTR[idx_ch];
- CSsup[idx_ch] = PXS->RXCSSELR[idx_ch];
- PXS->RXCSSELR[idx_ch] -= CS_delta;
- }
- else //if (PXS->RXCNTR[idx_ch] < targetCount )
- {
- measInf[idx_ch] = PXS->RXCNTR[idx_ch];
- CSinf[idx_ch] = PXS->RXCSSELR[idx_ch];
- PXS->RXCSSELR[idx_ch] += CS_delta;
- }
-// else
-// {
- // Do nothing (MISRA requirement)
-// }
- }
- }
- }
- while ((CalibrationDone == FALSE) || (CS_delta != 0));
-
-
- // Restore configuration
-#if TSLPRM_ACQ_MAX > 0
- PXS->MAXR = TSLPRM_ACQ_MAX;
-#else
- PXS->MAXENR = 0;
-#endif
-
- WFE->CR1 &= (uint8_t)~WFE_CR1_PXS_EV;
-#if TSLPRM_USE_ACQ_INTERRUPT == 0
- disablePXSInterrupts(PXS_CR2_EOCITEN);
-#endif
-
- // Store the CS
- for (idx_ch = 0;idx_ch <= TSLPRM_HIGH_CHANNEL_NB;idx_ch++)
- {
- if ((measSup[idx_ch] == 0) || ((measSup[idx_ch] - targetCount) > (targetCount - measInf[idx_ch])))
- {
- PXS_BankConfig[idx_bk].CSSEL[idx_ch] = CSinf[idx_ch];
- }
- else
- {
- PXS_BankConfig[idx_bk].CSSEL[idx_ch] = CSsup[idx_ch];
- }
- }
-}
-
-
-/**
- * @brief Calibrate the EPCC for a selected acquisition bank
- * @param[in] idx_bk Index of the bank
- * @retval Number Number of Receivers not correctly calibrated
- */
-int8_t TSL_PXS_EPCC_CalibrateBank(TSL_tIndex_T idx_bk)
-{
- TSL_tIndex_T idx_ch;
- uint8_t currentEPCC, trial, goodEPCC = 0;
- uint8_t EPCCtoCompute = 0; // Used to define if all the EPCC have their final value
- uint8_t EPCC_delta = EPCC_INIT_VALUE; // Value to add/substract to/from the current EPCC
- CONST TSL_Bank_T *bank;
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-#if TSLPRM_USE_ACQ_INTERRUPT == 0
- enablePXSInterrupts(PXS_CR2_EOCITEN);
-#endif
-
- bank = &(TSL_Globals.Bank_Array[idx_bk]);
- resetPXSLowPower();
- TSL_acq_BankConfig(idx_bk);
-
- PXS->MAXR = 2 * TSLPRM_KEY_TARGET_REFERENCE;
-
- WFE->CR1 |= WFE_CR1_PXS_EV;
- for (idx_ch = 0; idx_ch <= TSLPRM_HIGH_CHANNEL_NB; idx_ch++)
- {
- PXS->RXEPCCSELR[idx_ch] = EPCC_delta;
- if (bank->msk_channels & (uint16_t)((uint16_t)1 << idx_ch))
- {
- EPCCtoCompute++;
- }
- }
- do
- {
- EPCC_delta >>= 1;
- startPXSAcquisition();
- wfe();
- clearPXS_ISR_EOCF;
- for (idx_ch = 0; idx_ch <= TSLPRM_HIGH_CHANNEL_NB; idx_ch++)
- {
- if (bank->msk_channels & (uint16_t)((uint16_t)1 << idx_ch))
- {
- if (!(PXS->RXSR & (uint16_t)((uint16_t)1 << idx_ch)) || (PXS->RXCNTR[idx_ch] > TSLPRM_KEY_TARGET_REFERENCE))
- {
- PXS->RXEPCCSELR[idx_ch] -= EPCC_delta;
- }
- else if (PXS->RXCNTR[idx_ch] < TSLPRM_KEY_TARGET_REFERENCE)
- {
- PXS->RXEPCCSELR[idx_ch] += EPCC_delta;
- }
- else
- {
- // Do nothing (MISRA requirement)
- }
- }
- }
- }
- while (EPCC_delta >= 1);
- // Second pass to fine-tune
- trial = TSLPRM_PXS_EPCC_FINE_TUNING_ITERATION;
- do
- {
- startPXSAcquisition();
- goodEPCC = 0; // Reset the goodEPCC variable
- wfe();
- clearPXS_ISR_EOCF;
- for (idx_ch = 0; idx_ch <= TSLPRM_HIGH_CHANNEL_NB; idx_ch++)
- {
- if (bank->msk_channels & (uint16_t)((uint16_t)1 << idx_ch))
- {
- currentEPCC = PXS->RXEPCCSELR[idx_ch]; //this affectation allow to avoid computation of the structure address
- if (!(PXS->RXSR & (uint16_t)((uint16_t)1 << idx_ch)) || (PXS->RXCNTR[idx_ch] > (TSLPRM_KEY_TARGET_REFERENCE + TSLPRM_KEY_TARGET_REFERENCE_ERROR)))
- {
- if (currentEPCC > 0)
- {
- if ((currentEPCC & 0x07) != 0)
- {
- currentEPCC--;
- }
- else
- {
- currentEPCC -= 3; // This is due to the non linearity of the EPCC
- }
- }
- }
- else if (PXS->RXCNTR[idx_ch] < (TSLPRM_KEY_TARGET_REFERENCE - TSLPRM_KEY_TARGET_REFERENCE_ERROR))
- {
- if (currentEPCC < 0xFF)
- {
- if ((currentEPCC & 0x07) != 0x07)
- {
- currentEPCC++;
- }
- else
- {
- currentEPCC += 2; // This is due to the non linearity of the EPCC
- }
- }
- else // Invert the change in case the sorting is not reliable
- {
- currentEPCC--;
- }
- }
- else
- {
- goodEPCC++;
- }
- PXS->RXEPCCSELR[idx_ch] = currentEPCC;
- }
- }
- trial--;
- }
- while ((goodEPCC < EPCCtoCompute) && (trial));
-
- // Restore configuration
-#if TSLPRM_ACQ_MAX > 0
- PXS->MAXR = TSLPRM_ACQ_MAX;
-#else
- PXS->MAXENR = 0;
-#endif
-
- WFE->CR1 &= (uint8_t)~WFE_CR1_PXS_EV;
-#if TSLPRM_USE_ACQ_INTERRUPT == 0
- disablePXSInterrupts(PXS_CR2_EOCITEN);
-#endif
-
- // Store the EPCC
- for (idx_ch = 0;idx_ch <= TSLPRM_HIGH_CHANNEL_NB;idx_ch++)
- {
- PXS_BankConfig[idx_bk].EPCCSEL[idx_ch] = PXS->RXEPCCSELR[idx_ch];
- }
-
- return((int8_t)(EPCCtoCompute - goodEPCC));
-}
-
-
-#if TSLPRM_USE_ZONE > 0
-/**
- * @brief Calibrate the EPCC for a set of acquisition banks.
- * @param[in] zone Set of banks to calibrate the EPCC
- * @retval Status
- */
-TSL_Status_enum_T TSL_PXS_EPCC_CalibrateZone(CONST TSL_Zone_T *zone)
-{
- uint16_t idx_bk;
- TSL_Status_enum_T retval = TSL_STATUS_OK;
- for (idx_bk = 0; idx_bk < zone->NbBanks; idx_bk++)
- {
- if (TSL_PXS_EPCC_CalibrateBank(zone->BankIndex[idx_bk]) > 0)
- {
- retval = TSL_STATUS_ERROR;
- }
- }
- return(retval);
-}
-#endif
-
-
-/**
- * @brief Test the reference and update the EPCC/CS if needed
- * @param[in] pCh pointer on the channel data information
- * @retval Result
- */
-TSL_Bool_enum_T TSL_acq_TestReferenceOutOfRange(TSL_ChannelData_T *pCh)
-{
- uint16_t reference, target_error = 0;
- TSL_Bool_enum_T result = TSL_FALSE;
-
- if (pCh->Flags.EPCCStatus != TSL_EPCC_STATUS_LOCKED)
- {
- reference = pCh->Ref;
-#if TSLPRM_TOTAL_TKEYS > 0
- if (TSL_Globals.This_Obj->Type & TSL_OBJ_TYPE_TKEY_MASK)
- {
- target_error = TSLPRM_TOUCHKEY_REFERENCE_RANGE;
- }
-#endif
-
-#if TSLPRM_TOTAL_LNRTS > 0
- if (TSL_Globals.This_Obj->Type & TSL_OBJ_TYPE_LINROT_MASK)
- {
- target_error = TSLPRM_LINROT_REFERENCE_RANGE;
- }
-#endif
- if ((reference != 0) && ((reference > (TSLPRM_KEY_TARGET_REFERENCE + target_error)) || (reference < (TSLPRM_KEY_TARGET_REFERENCE - target_error))))
- {
- if (reference < (TSLPRM_KEY_TARGET_REFERENCE - target_error))
- {
- pCh->Flags.EPCCStatus = TSL_EPCC_STATUS_INCREASE;
- }
- else if (reference > (TSLPRM_KEY_TARGET_REFERENCE + target_error))
- {
- pCh->Flags.EPCCStatus = TSL_EPCC_STATUS_DECREASE;
- }
- else
- {
- // Do nothing (MISRA requirement)
- }
- result = TSL_TRUE;
- }
- }
- return(result);
-}
-
-/**
- * @brief Test if the measure has crossed the reference target
- * @param[in] pCh Pointer to the channel Data under test
- * @param[in] new_meas Measure of the last acquisition on this channel
- * @retval Result Result of the test
- */
-TSL_Bool_enum_T TSL_acq_TestFirstReferenceIsValid(TSL_ChannelData_T *pCh, TSL_tMeas_T new_meas)
-{
- TSL_Bool_enum_T result = TSL_TRUE;
- TSL_EPCCStatus_enum_T EPCCStatus;
-
- EPCCStatus = pCh->Flags.EPCCStatus;
- if (EPCCStatus & TSL_EPCC_CHANGE_MASK)
- {
- // If the previous reference and the new one are on each side of the reference target
- // the EPCC is no more tested and the calibration continues.
- if (((EPCCStatus == TSL_EPCC_STATUS_INCREASE) && (new_meas >= TSLPRM_KEY_TARGET_REFERENCE))
- || ((EPCCStatus == TSL_EPCC_STATUS_DECREASE) && (new_meas <= TSLPRM_KEY_TARGET_REFERENCE)))
- {
- pCh->Flags.EPCCStatus = TSL_EPCC_STATUS_UNLOCKED;
- }
- else
- {
- result = TSL_FALSE;
- }
- }
-
- return(result);
-}
-
-
-/**
- * @brief Increase or decrease the CS value
- * @param[in] pCSSEL Address of the CS to be modified
- * @param[in] change Define if the Cs must be increased or decreased
- * @retval None
- */
-void TSL_acq_UpdateCS(uint8_t *pCSSEL, TSL_EPCCStatus_enum_T change)
-{
- uint16_t indexCS;
-
- assert_param(IS_EPCC_STATUS_OK(change));
- assert_param(IS_CSSEL_OK(*pCSSEL));
-
- if (*pCSSEL > CS_MIDDLE_VALUE)
- {
- indexCS = (CS_MIDDLE_VALUE - 1);
- }
- else
- {
- indexCS = 0;
- }
- while ((PXS_CSsorting[indexCS] != *pCSSEL) && (indexCS < CS_MAX_VALUE))
- {
- indexCS++;
- }
- if (change == TSL_EPCC_STATUS_INCREASE)
- {
- *pCSSEL = PXS_CSsorting[indexCS + 1];
- }
- else
- {
- *pCSSEL = PXS_CSsorting[indexCS - 1];
- }
-}
-
-
-/**
- * @brief Configures a Bank.
- * @param[in] idx_bk Index of the Bank to configure
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_BankConfig(TSL_tIndex_T idx_bk)
-{
- TSL_Status_enum_T retval = TSL_STATUS_OK;
- uint16_t idx_ch;
- TSL_ChannelFlags_T flags;
- CONST TSL_Bank_T *bank = &(TSL_Globals.Bank_Array[idx_bk]);
- CONST TSL_ChannelSrc_T *pchSrc = bank->p_chSrc;
- CONST TSL_ChannelDest_T *pchDest = bank->p_chDest;
- TSL_tMaskRX enabledRX = 0;
- uint8_t *pEPCCSEL, *pCSSEL;
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_BANK_INDEX_OK(idx_bk));
-
- TSL_Globals.This_Bank = idx_bk;
-
- selectPXSRxGroup(bank->msk_group);
- for (idx_ch = 0;idx_ch < bank->NbChannels;idx_ch++)
- {
- flags = bank->p_chData[pchDest->IdxDest].Flags;
- if (flags.ObjStatus == TSL_OBJ_STATUS_ON)
- {
- enabledRX |= (1 << pchSrc->IdxSrc);
- if (flags.EPCCStatus & TSL_EPCC_CHANGE_MASK)
- {
- pEPCCSEL = &PXS_BankConfig[idx_bk].EPCCSEL[pchSrc->IdxSrc];
- if (flags.EPCCStatus == TSL_EPCC_STATUS_INCREASE)
- {
- if ((*pEPCCSEL) < 0xFF)
- {
- if (((*pEPCCSEL) & 0x07) != 0x07)
- {
- (*pEPCCSEL)++;
- }
- else
- {
- if ((*pEPCCSEL) < 0xFE)
- {
- (*pEPCCSEL) += 2; // This is due to the non linearity of the PCC
- }
- else
- {
- (*pEPCCSEL)++;
- }
- }
-
- }
- else
- {
- pCSSEL = &PXS_BankConfig[idx_bk].CSSEL[pchSrc->IdxSrc];
- if (*pCSSEL < 0x1F)
- {
- TSL_acq_UpdateCS(pCSSEL, TSL_EPCC_STATUS_INCREASE);
- }
- else
- {}
- }
- }
- else
- {
- if ((*pEPCCSEL) > 0)
- {
- if (((*pEPCCSEL) & 0x07) != 0)
- {
- (*pEPCCSEL)--;
- }
- else
- {
- if ((*pEPCCSEL) > 3)
- {
- (*pEPCCSEL) -= 3; // This is due to the non linearity of the PCC
- }
- else
- {
- (*pEPCCSEL)--;
- }
- }
- }
- else
- {
- pCSSEL = &PXS_BankConfig[idx_bk].CSSEL[pchSrc->IdxSrc];
- if (*pCSSEL > 0)
- {
- TSL_acq_UpdateCS(pCSSEL, TSL_EPCC_STATUS_DECREASE);
- }
- else
- {}
- }
- }
- }
- }
-
- // Next channel
- pchSrc++;
- pchDest++;
- }
-
- // The two following loops are more efficient than the two instructions in the same loop
- for (idx_ch = 0;idx_ch <= TSLPRM_HIGH_CHANNEL_NB;idx_ch++)
- {
- PXS->RXCSSELR[idx_ch] = PXS_BankConfig[idx_bk].CSSEL[idx_ch];
- }
- for (idx_ch = 0;idx_ch <= TSLPRM_HIGH_CHANNEL_NB;idx_ch++)
- {
- PXS->RXEPCCSELR[idx_ch] = PXS_BankConfig[idx_bk].EPCCSEL[idx_ch];
- }
-
- PXS->TXENR = bank->msk_TX; // Enable the Tx selected (if any)
- PXS->RXCR1 = bank->msk_channels; // Configure the Rx and the Tx function modes
-
- // Enable the Rx which are not disabled including the potential Rx configured as Tx
- PXS->RXENR = bank->msk_RXEN & ((uint16_t)(~bank->msk_channels) | enabledRX);
-
- if (enabledRX == 0)
- {
- retval = TSL_STATUS_ERROR;
- }
-
- return(retval);
-
-}
-
-
-/**
- * @brief Test if EPCC are changing
- * @param[in] pCh Channel to be processed
- * @retval bool Test result
- */
-TSL_Bool_enum_T TSL_acq_UseFilter(TSL_ChannelData_T *pCh)
-{
- if (pCh->Flags.EPCCStatus & TSL_EPCC_CHANGE_MASK)
- {
- return (TSL_FALSE);
- }
- else
- {
- return(TSL_TRUE);
- }
-}
-
-
-/**
- * @brief Start acquisition on a previously configured bank
- * @param None
- * @retval None
- */
-void TSL_acq_BankStartAcq(void)
-{
- // Start acquisition
- startPXSAcquisition();
-}
-
-
-/**
- * @brief Wait end of acquisition
- * @param None
- * @retval Status
- */
-TSL_Status_enum_T TSL_acq_BankWaitEOC(void)
-{
- TSL_Status_enum_T retval = TSL_STATUS_BUSY;
-
- if (checkPXSInterruptStatusFlag(PXS_ISR_EOCF)) // Check EOC flag
- {
- if (PXS->RXSR != TSL_Globals.Bank_Array[TSL_Globals.This_Bank].msk_channels) // Check MCE flag
- {
- retval = TSL_STATUS_ERROR;
- }
- else
- {
- retval = TSL_STATUS_OK;
- }
- }
-
- return retval;
-}
-
-
-/**
- * @brief Check noise detection
- * @param None
- * @retval Status
- */
-TSL_AcqStatus_enum_T TSL_acq_CheckNoise(void)
-{
- TSL_AcqStatus_enum_T retval = TSL_ACQ_STATUS_OK;
-#if TSLPRM_PXS_RF_DETECTION > 0
- if (checkPXSInterruptStatusFlag(PXS_ISR_NOISEDETF) == PXS_ISR_NOISEDETF)
- {
- retval = TSL_ACQ_STATUS_NOISE;
- }
-#endif
- return(retval);
-}
-
-
-/**
- * @brief Return the current measure
- * @param[in] index Index of the measure source
- * @retval Measure
- */
-TSL_tMeas_T TSL_acq_GetMeas(TSL_tIndexSrc_T index)
-{
- uint16_t CurrentReceiver;
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_SOURCE_INDEX_OK(index));
-
- CurrentReceiver = (uint16_t)(((uint16_t)1) << index);
-
- if (PXS->RXSR & CurrentReceiver)
- {
- return(PXS->RXCNTR[index]);
- }
- else
- {
- return(MAX_MEASURE);
- }
-}
-
-
-/**
- * @brief Process the PXS Interrupt routine
- * @param None
- * @retval None
- */
-INTERRUPT_HANDLER(TSL_acq_ProcessIT, 2)
-{
- clearPXS_ISR_EOCF;
-
- TSL_acq_BankGetResult(TSL_Globals.This_Bank, 0, 0); // No noise filter
-
-#if TSLPRM_USE_ZONE > 0
- if ((TSL_Globals.This_Zone == 0) || (TSL_Globals.Index_In_This_Zone >= TSL_Globals.This_Zone->NbBanks))
- {
- CFG->GCR &= (uint8_t)(~CFG_GCR_AL); // Reset Activation level to resume main processing
- PXS->RXENR = 0; // To reduce consumption
- PXS->TXENR = 0; // To reduce consumption
- TSL_Globals.This_Bank = 0;
- }
- else
- {
- if (TSL_acq_ZoneConfig(TSL_Globals.This_Zone, TSL_Globals.Index_In_This_Zone) != TSL_STATUS_ERROR)
- {
- // Start Bank acquisition
- TSL_acq_BankStartAcq();
-#if TSLPRM_PXS_LOW_POWER_MODE > 0
- if (TSL_Globals.Index_In_This_Zone >= TSL_Globals.This_Zone->NbBanks)
- {
- setPXSLowPower();
- }
-#endif
- }
-
- }
-#else
- CFG->GCR &= (uint8_t)(~CFG_GCR_AL); // Reset Activation level to resume main processing
- PXS->RXENR = 0; // To reduce consumption
- PXS->TXENR = 0; // To reduce consumption
-#endif
-}
-
-
-#if defined(__ICCSTM8__)
-#pragma optimize=low
-#endif
-/**
- * @brief Software delay (private routine)
- * @param val Wait delay
- * @retval None
- */
-void SoftDelay(uint16_t val)
-{
- __IO uint16_t idx;
- for (idx = val; idx > 0; idx--)
- {
- nop();
- }
-}
-
-/******************* (C) COPYRIGHT 2014 STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_dxs.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_dxs.c
deleted file mode 100644
index c721b80..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_dxs.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/**
- ******************************************************************************
- * @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
- *
- * <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.
- *
- ******************************************************************************
- */
-
-/* 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
-
- }
-
-#endif // TSLPRM_USE_DXS > 0
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_ecs.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_ecs.c
deleted file mode 100644
index 39052fd..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_ecs.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_ecs.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the ECS.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_ecs.h"
-#include "tsl_globals.h"
-#include "stm32f0xx_conf.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-
-#define THIS_OBJ_TYPE TSL_Globals.This_Obj->Type
-#define THIS_TKEY_REF TSL_Globals.This_TKey->p_ChD->Ref
-#define THIS_TKEY_REFREST TSL_Globals.This_TKey->p_ChD->RefRest
-#define THIS_TKEY_DELTA TSL_Globals.This_TKey->p_ChD->Delta
-#define THIS_TKEY_STATEID TSL_Globals.This_TKey->p_Data->StateId
-
-#define THIS_LINROT_STATEID TSL_Globals.This_LinRot->p_Data->StateId
-#define THIS_LINROT_NB_CHANNELS TSL_Globals.This_LinRot->NbChannels
-
-/* Private macros ------------------------------------------------------------*/
-#define IS_K_COEFF_OK(COEFF) (((COEFF) == 0) || (((COEFF) > 0) && ((COEFF) < 256)))
-#define IS_POINTER_INITIALIZED(POINTER) ((POINTER) != 0)
-
-/* Private variables ---------------------------------------------------------*/
-/* Private functions prototype -----------------------------------------------*/
-
-/**
- * @brief Calculate the K coefficient
- * @param[in] objgrp Pointer to the objects group to process
- * @param[in] k_slow K coefficient when objects have different delta variation
- * @param[in] k_fast K coefficient when objects have the same delta variation
- * @retval K coefficient (slow or fast)
- */
-TSL_tKCoeff_T TSL_ecs_CalcK(TSL_ObjectGroup_T *objgrp, TSL_tKCoeff_T k_slow, TSL_tKCoeff_T k_fast)
-{
- TSL_tIndex_T idx_obj; // Index of current object
- TSL_tIndex_T idx_ch; // Index of current channel
- TSL_tDelta_T ldelta = 0; // Temporary delta
- TSL_tDelta_T ECS_Fast_Enable = 1;
- TSL_tDelta_T ECS_Fast_Direction = 0;
- CONST TSL_Object_T *pobj;
- TSL_tKCoeff_T retval = k_slow;
- TSL_tNb_T nb_channels = 0; // Number of channels inside current object
- TSL_ChannelData_T *p_Ch = 0;
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_K_COEFF_OK(k_slow));
- assert_param(IS_K_COEFF_OK(k_fast));
-
- 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))
- {
- // Ignore object if not in Release state (OFF or Error in this case)
- if (THIS_TKEY_STATEID != TSL_STATEID_RELEASE)
- {
- pobj++; // Next object
- continue; // Stop processing of current object
- }
- nb_channels = 1;
- p_Ch = TSL_Globals.This_TKey->p_ChD;
- }
-#endif
-
-#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))
- {
- // Ignore object if not in Release state (OFF or Error in this case)
- if (THIS_LINROT_STATEID != TSL_STATEID_RELEASE)
- {
- pobj++; // Next object
- continue; // Stop processing of current object
- }
- nb_channels = THIS_LINROT_NB_CHANNELS;
- p_Ch = TSL_Globals.This_LinRot->p_ChD;
- }
-#endif
-
- // Check channel pointer variable (if USE_FULL_ASSERT is defined)
- assert_param(IS_POINTER_INITIALIZED(p_Ch));
-
- // Check all channels of current object
- for (idx_ch = 0; idx_ch < nb_channels; idx_ch++)
- {
-
- ldelta = p_Ch->Delta;
-
- // Check delta
- if (ldelta == 0) // No Fast ECS !
- {
- ECS_Fast_Enable = 0;
- }
- else
- {
- if (ldelta < 0)
- {
- if (ECS_Fast_Direction > 0) // No Fast ECS !
- {
- ECS_Fast_Enable = 0;
- }
- else
- {
- ECS_Fast_Direction = -1;
- }
- }
- else
- {
- if (ECS_Fast_Direction < 0) // No Fast ECS !
- {
- ECS_Fast_Enable = 0;
- }
- else
- {
- ECS_Fast_Direction = 1;
- }
- }
- }
-
- p_Ch++; // Next channel
-
- } // for all channels of current object
-
- pobj++; // Next object
-
- } // for all objects
-
- // Assign K fast following Delta variations
- if (ECS_Fast_Enable)
- {
- retval = k_fast;
- }
-
- return retval;
-}
-
-
-/**
- * @brief Calculate the new Reference on a group of objects
- * @param[in] objgrp Pointer to the objects group to process
- * @param[in] Kcoeff K coefficient to apply
- * @retval None
- */
-void TSL_ecs_ProcessK(TSL_ObjectGroup_T *objgrp, TSL_tKCoeff_T Kcoeff)
-{
- TSL_tIndex_T idx_obj; // Index of current object
- TSL_tIndex_T idx_ch; // Index of current channel
- CONST TSL_Object_T *pobj;
- TSL_tKCoeff_T Kcoeff_comp;
- uint32_t ECS_meas;
- uint32_t ECS_ref;
- TSL_tNb_T nb_channels = 0; // Number of channels inside current object
- TSL_ChannelData_T *p_Ch = 0;
- void(*pFunc_SetStateCalibration)(TSL_tCounter_T delay) = 0;
-
- // Check parameters (if USE_FULL_ASSERT is defined)
- assert_param(IS_K_COEFF_OK(Kcoeff));
-
- pobj = objgrp->p_Obj; // First object in the group
-
- // Calculate the K coefficient complement
- Kcoeff_comp = (0xFF ^ Kcoeff) + 1;
-
- // 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))
- {
- // Ignore object if not in Release state (OFF or Error in this case)
- if (THIS_TKEY_STATEID != TSL_STATEID_RELEASE)
- {
- pobj++; // Next object
- continue; // Stop processing of current object
- }
- nb_channels = 1;
- p_Ch = TSL_Globals.This_TKey->p_ChD;
- pFunc_SetStateCalibration = &TSL_tkey_SetStateCalibration;
- }
-#endif
-
-#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))
- {
- // Ignore object if not in Release state (OFF or Error in this case)
- if (THIS_LINROT_STATEID != TSL_STATEID_RELEASE)
- {
- pobj++; // Next object
- continue; // Stop processing of current object
- }
- nb_channels = THIS_LINROT_NB_CHANNELS;
- p_Ch = TSL_Globals.This_LinRot->p_ChD;
- pFunc_SetStateCalibration = &TSL_linrot_SetStateCalibration;
- }
-#endif
-
- // Check channel pointer variable (if USE_FULL_ASSERT is defined)
- assert_param(IS_POINTER_INITIALIZED(p_Ch));
-
- // Calculate the new reference + rest for all channels
- for (idx_ch = 0; idx_ch < nb_channels; idx_ch++)
- {
- ECS_meas = TSL_acq_ComputeMeas(p_Ch->Ref, p_Ch->Delta);
- ECS_meas <<= 8;
-
- ECS_ref = (uint32_t)(p_Ch->Ref);
- ECS_ref <<= 8;
- ECS_ref += p_Ch->RefRest;
- ECS_ref *= Kcoeff_comp;
- ECS_ref += (Kcoeff * ECS_meas);
-
- p_Ch->RefRest = (TSL_tRefRest_T)((ECS_ref >> 8) & 0xFF);
- p_Ch->Ref = (TSL_tRef_T)(ECS_ref >> 16);
-
- // Go in Calibration state in the Reference is out of Range
- if (TSL_acq_TestReferenceOutOfRange(p_Ch) == TSL_TRUE)
- {
- pFunc_SetStateCalibration(0);
- }
-
- p_Ch++; // Next channel
- }
-
- pobj++; // Next object
-
- } // for all objects
-
-}
-
-
-/**
- * @brief ECS algorithm on a group of objects
- * The ECS is only performed if at least an object is in Release state and
- * if no objects are in active states (Prox, Detect or Touch)
- * An optional delay is added after the ECS condition (all sensors in Release state) is reached.
- * @param[in] objgrp Pointer to the objects group to process
- * @retval Status
- */
-TSL_Status_enum_T TSL_ecs_Process(TSL_ObjectGroup_T *objgrp)
-{
- TSL_tKCoeff_T MyKcoeff;
- TSL_Status_enum_T retval;
-
- if ((objgrp->StateMask & TSL_STATE_RELEASE_BIT_MASK) && !(objgrp->StateMask & TSL_STATEMASK_ACTIVE))
- {
-#if TSLPRM_ECS_DELAY > 0
- if (!objgrp->ECS_wait)
- {
- disableInterrupts();
- objgrp->ECS_start_time = TSL_Globals.Tick_ms; // Save the current time
- enableInterrupts();
- objgrp->ECS_wait = 1;
- objgrp->ECS_exec = 0;
- }
-#else
- objgrp->ECS_exec = 1;
-#endif
- }
- else
- {
-#if TSLPRM_ECS_DELAY > 0
- objgrp->ECS_wait = 0;
-#endif
- objgrp->ECS_exec = 0;
- }
-
-#if TSLPRM_ECS_DELAY > 0
- if (objgrp->ECS_wait && (!objgrp->ECS_exec))
- {
- // Execute the ECS only when the delay has elapsed
- if (TSL_tim_CheckDelay_ms(TSLPRM_ECS_DELAY, &objgrp->ECS_start_time) == TSL_STATUS_OK)
- {
- objgrp->ECS_exec = 1;
- }
- }
-#endif
-
- if (objgrp->ECS_exec)
- {
- // Calculate the K coefficient
- MyKcoeff = TSL_ecs_CalcK(objgrp, TSLPRM_ECS_K_SLOW, TSLPRM_ECS_K_FAST);
- // Process the objects
- TSL_ecs_ProcessK(objgrp, MyKcoeff);
- retval = TSL_STATUS_OK;
- }
- else
- {
- retval = TSL_STATUS_BUSY;
- }
-
- return retval;
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_filter.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_filter.c
deleted file mode 100644
index 8357154..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_filter.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_filter.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the signal or delta filters.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_filter.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-/* Private macros ------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Private functions prototype -----------------------------------------------*/
-
-/* Noise Filter description
- ------------------------
-
-The noise filter is a first order IRR digital filter based on the following formula:
-
-S(n) = (1-k).S(n-1)+ k.N(n)
-
-S(n) : sample number n of the filtered signal
-N(n) : sample number n of the raw signal
-k : filter coefficient parameter in [0..1]
-
-The filter sampling rate is the acquisition rate.
-
-In order to optimize the implementation in the firmware, the above formula is
-modified in order to have only one multiply operation:
-
-S(n) = S(n-1) + k.(N(n) - S(n-1))
-
-Additionally, we use k = K/256 with K an unsigned 8-bit integer.
-
-The K is given by the ACQ_FILTER_COEFF constant.
-
-S(n) = S(n-1) + K.(N(n) - S(n-1))/(2^8)
-
-and the division can be done easily with bit shifting.
-
-As we are in the digital world, this formula presents a drawback:
-if the difference between S(n-1) and N(n) is less than 1/k, there will be no
-difference between S(n-1) and S(n).
-
-As a consequence, there will be a static error of up to 1/k.
-
-In the STMTouch Driver, the S(n) is stored in the Meas element of the data
-structure after each acquisition:
-
-Meas(n) = S(n) = N(n)
-
-The formula is then:
-
-Meas(n) = Meas(n-1) + K.(Meas(n) - Meas(n-1))/(2^8)
-
-In order to reduce the static error, we can use "Meas(n) = S(n).2^P".
-
-The P is given by the ACQ_FILTER_RANGE constant.
-
-This would shift the signal value left and provides a few additional low
-significant bits useful to reduce the static error.
-
-Warning: all thresholds must be shifted accordingly if the parameter P is
-different from 0.
-
-If we report this into the filter formula we obtain:
-
-Meas(n) = Meas(n-1) + K.[ Meas(n)*2^P - Meas(n-1)]/2^8
-
-In this case the static error is reduced to 1/(k.2^P)
-*/
-
-#define ACQ_FILTER_RANGE (0) /* Range[0..5] - Warning: all thresholds must be shifted if different from 0 */
-
-#define ACQ_FILTER_COEFF (128) /* Range[1..255] - First order filter coefficient (k = ACQ_FILTER_COEFF/256) */
-
-/**
- * @brief Example of measure value filter
- * @param[in] measn1 Previous measure value
- * @param[in] measn Current measure value
- * @retval Filtered measure
- */
-TSL_tMeas_T TSL_filt_MeasFilter(TSL_tMeas_T measn1, TSL_tMeas_T measn)
-{
- TSL_tMeas_T val;
-
- val = (TSL_tMeas_T)(measn << ACQ_FILTER_RANGE);
-
- if (measn1 != 0)
- {
- if (val > measn1)
- {
- val = measn1 + ((ACQ_FILTER_COEFF * (val - measn1)) >> 8);
- }
- else
- {
- val = measn1 - ((ACQ_FILTER_COEFF * (measn1 - val)) >> 8);
- }
- }
-
- return(val);
-}
-
-
-/**
- * @brief Example of delta value filter
- * @param[in] delta Delta value to modify
- * @retval Filtered delta
- */
-TSL_tDelta_T TSL_filt_DeltaFilter(TSL_tDelta_T delta)
-{
- return(delta);
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_globals.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_globals.c
deleted file mode 100644
index 4aa0d94..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_globals.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_globals.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains global variables.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_globals.h"
-
-TSL_Globals_T TSL_Globals; /**< Global variables used by main() and TSL modules */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_linrot.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_linrot.c
deleted file mode 100644
index 561e15c..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_linrot.c
+++ /dev/null
@@ -1,2103 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_linrot.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage Linear and Rotary sensors.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_linrot.h"
-#include "tsl_globals.h"
-
-#if TSLPRM_TOTAL_LNRTS > 0
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-
-/* Private macros ------------------------------------------------------------*/
-
-#define THIS_OBJ_TYPE TSL_Globals.This_Obj->Type
-
-#define THIS_STATEID TSL_Globals.This_LinRot->p_Data->StateId
-#define THIS_RAW_POSITION TSL_Globals.This_LinRot->p_Data->RawPosition
-#define THIS_POSITION TSL_Globals.This_LinRot->p_Data->Position
-#define THIS_CHANGE TSL_Globals.This_LinRot->p_Data->Change
-#define THIS_POSCHANGE TSL_Globals.This_LinRot->p_Data->PosChange
-#define THIS_COUNTER_DEB TSL_Globals.This_LinRot->p_Data->CounterDebounce
-#define THIS_COUNTER_DIR TSL_Globals.This_LinRot->p_Data->CounterDirection
-#define THIS_COUNTER_DTO TSL_Globals.This_LinRot->p_Data->CounterDTO
-#define THIS_DXSLOCK TSL_Globals.This_LinRot->p_Data->DxSLock
-#define THIS_DIRECTION TSL_Globals.This_LinRot->p_Data->Direction
-
-#define THIS_PROXIN_TH TSL_Globals.This_LinRot->p_Param->ProxInTh
-#define THIS_PROXOUT_TH TSL_Globals.This_LinRot->p_Param->ProxOutTh
-#define THIS_DETECTIN_TH TSL_Globals.This_LinRot->p_Param->DetectInTh
-#define THIS_DETECTOUT_TH TSL_Globals.This_LinRot->p_Param->DetectOutTh
-#define THIS_CALIB_TH TSL_Globals.This_LinRot->p_Param->CalibTh
-
-#define THIS_RESOLUTION TSL_Globals.This_LinRot->p_Param->Resolution
-#define THIS_DIR_CHG_POS TSL_Globals.This_LinRot->p_Param->DirChangePos
-
-#define THIS_COUNTER_DEB_CALIB TSL_Globals.This_LinRot->p_Param->CounterDebCalib
-#define THIS_COUNTER_DEB_PROX TSL_Globals.This_LinRot->p_Param->CounterDebProx
-#define THIS_COUNTER_DEB_DETECT TSL_Globals.This_LinRot->p_Param->CounterDebDetect
-#define THIS_COUNTER_DEB_RELEASE TSL_Globals.This_LinRot->p_Param->CounterDebRelease
-#define THIS_COUNTER_DEB_ERROR TSL_Globals.This_LinRot->p_Param->CounterDebError
-#define THIS_COUNTER_DEB_DIRECTION TSL_Globals.This_LinRot->p_Param->CounterDebDirection
-
-#define THIS_NB_CHANNELS TSL_Globals.This_LinRot->NbChannels
-#define THIS_SCT_COMP TSL_Globals.This_LinRot->SctComp
-#define THIS_POS_CORR TSL_Globals.This_LinRot->PosCorr
-
-#if TSLPRM_DTO > 0
-#define DTO_GET_TIME {TSL_linrot_DTOGetTime();}
-#else
-#define DTO_GET_TIME
-#endif
-
-/* Private variables ---------------------------------------------------------*/
-
-//================================================================
-// See AN2869 for more details on Linear and Rotary sensors design
-//================================================================
-
-//==============================================================================
-// 3 CHANNELS - LINEAR - MONO - 0/255 at extremities
-// i.e. CH1 CH2 CH3
-//==============================================================================
-#if TSLPRM_USE_3CH_LIN_M1 > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_3CH_LIN_M1[3][3] =
-{
-// sec = 1 2 3
-// j = 0 1 2
- { 0, -96, 0 }, // maj = 1; i = 0
- { 32, 0, -160 }, // maj = 2; i = 1
- { 0, 96, 0 } // maj = 3; i = 2
-};
-#endif
-
-//==============================================================================
-// 3 CHANNELS - LINEAR - MONO
-// i.e. CH1 CH2 CH3
-//==============================================================================
-#if TSLPRM_USE_3CH_LIN_M2 > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_3CH_LIN_M2[3][3] =
-{
-// sec = 1 2 3
-// j = 0 1 2
- { 0, -192, 0 }, // maj = 1; i = 0
- { 64, 0, -320 }, // maj = 2; i = 1
- { 0, 192, 0 } // maj = 3; i = 2
-};
-#endif
-
-//==============================================================================
-// 3 CHANNELS - LINEAR - HALF-ENDED
-// i.e. CH1 CH2 CH3 CH1
-//==============================================================================
-#if TSLPRM_USE_3CH_LIN_H > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_3CH_LIN_H[3][3] =
-{
-// sec = 1 2 3
-// j = 0 1 2
- { 0, -96, 160 }, // maj = 1; i = 0
- { 32, 0, -160 }, // maj = 2; i = 1
- { -224, 96, 0 } // maj = 3; i = 2
-};
-#endif
-
-//==============================================================================
-// 3 CHANNELS - ROTARY - MONO
-// i.e. CH1 CH2 CH3
-//==============================================================================
-#if TSLPRM_USE_3CH_ROT_M > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_3CH_ROT_M[3][3] =
-{
-// sec = 1 2 3
-// j = 0 1 2
- { 0, -64, 107 }, // maj = 1; i = 0
- { 21, 0, -107 }, // maj = 2; i = 1
- { -149, 64, 0 } // maj = 3; i = 2
-};
-#endif
-
-//==============================================================================
-// 4 CHANNELS - LINEAR - MONO - 0/255 at extremities
-// i.e. CH1 CH2 CH3 CH4
-//==============================================================================
-#if TSLPRM_USE_4CH_LIN_M1 > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_4CH_LIN_M1[4][4] =
-{
-// sec = 1 2 3 4
-// j = 0 1 2 3
- { 0, -64, 0, 0 }, // maj = 1; i = 0
- { 21, 0, -107, 0 }, // maj = 2; i = 1
- { 0, 64, 0, -149 }, // maj = 3; i = 2
- { 0, 0, 107, 0 } // maj = 4; i = 3
-};
-#endif
-
-//==============================================================================
-// 4 CHANNELS - LINEAR - MONO
-// i.e. CH1 CH2 CH3 CH4
-//==============================================================================
-#if TSLPRM_USE_4CH_LIN_M2 > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_4CH_LIN_M2[4][4] =
-{
-// sec = 1 2 3 4
-// j = 0 1 2 3
- { 0, -96, 0, 0 }, // maj = 1; i = 0
- { 32, 0, -160, 0 }, // maj = 2; i = 1
- { 0, 96, 0, -224 }, // maj = 3; i = 2
- { 0, 0, 160, 0 } // maj = 4; i = 3
-};
-#endif
-
-//==============================================================================
-// 4 CHANNELS - LINEAR - HALF-ENDED
-// i.e. CH1 CH2 CH3 CH4 CH1
-//==============================================================================
-#if TSLPRM_USE_4CH_LIN_H > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_4CH_LIN_H[4][4] =
-{
-// sec = 1 2 3 4
-// j = 0 1 2 3
- { 0, -64, 0, 149 }, // maj = 1; i = 0
- { 21, 0, -107, 0 }, // maj = 2; i = 1
- { 0, 64, 0, -149 }, // maj = 3; i = 2
- { -192, 0, 107, 0 } // maj = 4; i = 3
-};
-#endif
-
-//==============================================================================
-// 4 CHANNELS - ROTARY - MONO
-// i.e. CH1 CH2 CH3 CH4
-//==============================================================================
-#if TSLPRM_USE_4CH_ROT_M > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_4CH_ROT_M[4][4] =
-{
-// sec = 1 2 3 4
-// j = 0 1 2 3
- { 0, -48, 0, 112 }, // maj = 1; i = 0
- { 16, 0, -80, 0 }, // maj = 2; i = 1
- { 0, 48, 0, -112 }, // maj = 3; i = 2
- { -144, 0, 80, 0 } // maj = 4; i = 3
-};
-#endif
-
-//==============================================================================
-// 5 CHANNELS - LINEAR - MONO - 0/255 at extremities
-// i.e. CH1 CH2 CH3 CH4 CH5
-//==============================================================================
-#if TSLPRM_USE_5CH_LIN_M1 > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_5CH_LIN_M1[5][5] =
-{
-// sec = 1 2 3 4 5
-// j = 0 1 2 3 4
- { 0, -48, 0, 0, 0 }, // maj = 1; i = 0
- { 16, 0, -80, 0, 0 }, // maj = 2; i = 1
- { 0, 48, 0, -112, 0 }, // maj = 3; i = 2
- { 0, 0, 80, 0, -144 }, // maj = 4; i = 3
- { 0, 0, 0, 112, 0 } // maj = 5; i = 4
-};
-#endif
-
-//==============================================================================
-// 5 CHANNELS - LINEAR - MONO
-// i.e. CH1 CH2 CH3 CH4 CH5
-//==============================================================================
-#if TSLPRM_USE_5CH_LIN_M2 > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_5CH_LIN_M2[5][5] =
-{
-// sec = 1 2 3 4 5
-// j = 0 1 2 3 4
- { 0, -64, 0, 0, 0 }, // maj = 1; i = 0
- { 21, 0, -107, 0, 0 }, // maj = 2; i = 1
- { 0, 64, 0, -149, 0 }, // maj = 3; i = 2
- { 0, 0, 107, 0, -192 }, // maj = 4; i = 3
- { 0, 0, 0, 149, 0 } // maj = 5; i = 4
-};
-#endif
-
-//==============================================================================
-// 5 CHANNELS - LINEAR - HALF-ENDED
-// i.e. CH1 CH2 CH3 CH4 CH5 CH1
-//==============================================================================
-#if TSLPRM_USE_5CH_LIN_H > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_5CH_LIN_H[5][5] =
-{
-// sec = 1 2 3 4 5
-// j = 0 1 2 3 4
- { 0, -48, 0, 0, 144 }, // maj = 1; i = 0
- { 16, 0, -80, 0, 0 }, // maj = 2; i = 1
- { 0, 48, 0, -112, 0 }, // maj = 3; i = 2
- { 0, 0, 80, 0, -144 }, // maj = 4; i = 3
- { -176, 0, 0, 112, 0 } // maj = 5; i = 4
-};
-#endif
-
-//==============================================================================
-// 5 CHANNELS - ROTARY - MONO
-// i.e. CH1 CH2 CH3 CH4 CH5
-//==============================================================================
-#if TSLPRM_USE_5CH_ROT_M > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_5CH_ROT_M[5][5] =
-{
-// sec = 1 2 3 4 5
-// j = 0 1 2 3 4
- { 0, -38, 0, 0, 115 }, // maj = 1; i = 0
- { 13, 0, -64, 0, 0 }, // maj = 2; i = 1
- { 0, 38, 0, -90, 0 }, // maj = 3; i = 2
- { 0, 0, 64, 0, -115 }, // maj = 4; i = 3
- {-141, 0, 0, 90, 0 } // maj = 5; i = 4
-};
-#endif
-
-//==============================================================================
-// 5 CHANNELS - ROTARY - DUAL
-// i.e. CH1 CH2 CH3 CH4 CH5 CH1 CH3 CH5 CH2 CH4
-//==============================================================================
-#if TSLPRM_USE_5CH_ROT_D > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_5CH_ROT_D[5][5] =
-{
-// sec = 1 2 3 4 5
-// j = 0 1 2 3 4
- { 0, -19, -83, 122, 58 }, // maj = 1; i = 0
- { 6, 0, -32, -122, 96 }, // maj = 2; i = 1
- { 70, 19, 0, -45, -96 }, // maj = 3; i = 2
- {-134, 109, 32, 0, -58 }, // maj = 4; i = 3
- { -70, -109, 83, 45, 0 } // maj = 5; i = 4
-};
-#endif
-
-//==============================================================================
-// 6 CHANNELS - LINEAR - MONO - 0/255 at extremities
-// i.e. CH1 CH2 CH3 CH4 CH5 CH6
-//==============================================================================
-#if TSLPRM_USE_6CH_LIN_M1 > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_6CH_LIN_M1[6][6] =
-{
-// sec = 1 2 3 4 5 6
-// j = 0 1 2 3 4 5
- { 0, -38, 0, 0, 0, 0 }, // maj = 1; i = 0
- { 13, 0, -64, 0, 0, 0 }, // maj = 2; i = 1
- { 0, 38, 0, -90, 0, 0 }, // maj = 3; i = 2
- { 0, 0, 64, 0, -115, 0 }, // maj = 4; i = 3
- { 0, 0, 0, 90, 0, -141 }, // maj = 5; i = 4
- { 0, 0, 0, 0, 115, 0 } // maj = 6; i = 5
-};
-#endif
-
-//==============================================================================
-// 6 CHANNELS - LINEAR - MONO
-// i.e. CH1 CH2 CH3 CH4 CH5 CH6
-//==============================================================================
-#if TSLPRM_USE_6CH_LIN_M2 > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_6CH_LIN_M2[6][6] =
-{
-// sec = 1 2 3 4 5 6
-// j = 0 1 2 3 4 5
- { 0, -48, 0, 0, 0, 0 }, // maj = 1; i = 0
- { 16, 0, -80, 0, 0, 0 }, // maj = 2; i = 1
- { 0, 48, 0, -112, 0, 0 }, // maj = 3; i = 2
- { 0, 0, 80, 0, -144, 0 }, // maj = 4; i = 3
- { 0, 0, 0, 112, 0, -176 }, // maj = 5; i = 4
- { 0, 0, 0, 0, 144, 0 } // maj = 6; i = 5
-};
-#endif
-
-//==============================================================================
-// 6 CHANNELS - LINEAR - HALF-ENDED
-// i.e. CH1 CH2 CH3 CH4 CH5 CH6 CH1
-//==============================================================================
-#if TSLPRM_USE_6CH_LIN_H > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_6CH_LIN_H[6][6] =
-{
-// sec = 1 2 3 4 5 6
-// j = 0 1 2 3 4 5
- { 0, -38, 0, 0, 0, 141 }, // maj = 1; i = 0
- { 13, 0, -64, 0, 0, 0 }, // maj = 2; i = 1
- { 0, 38, 0, -90, 0, 0 }, // maj = 3; i = 2
- { 0, 0, 64, 0, -115, 0 }, // maj = 4; i = 3
- { 0, 0, 0, 90, 0, -141 }, // maj = 5; i = 4
- {-166, 0, 0, 0, 115, 0 } // maj = 6; i = 5
-};
-#endif
-
-//==============================================================================
-// 6 CHANNELS - ROTARY - MONO
-// i.e. CH1 CH2 CH3 CH4 CH5 CH6
-//==============================================================================
-#if TSLPRM_USE_6CH_ROT_M > 0
-CONST TSL_tsignPosition_T TSL_POSOFF_6CH_ROT_M[6][6] =
-{
-// sec = 1 2 3 4 5 6
-// j = 0 1 2 3 4 5
- { 0, -32, 0, 0, 0, 117 }, // maj = 1; i = 0
- { 11, 0, -53, 0, 0, 0 }, // maj = 2; i = 1
- { 0, 32, 0, -75, 0, 0 }, // maj = 3; i = 2
- { 0, 0, 53, 0, -96, 0 }, // maj = 4; i = 3
- { 0, 0, 0, 75, 0, -117 }, // maj = 5; i = 4
- {-139, 0, 0, 0, 96, 0 } // maj = 6; i = 5
-};
-#endif
-
-//------------------
-// Common parameters
-//------------------
-
-#define DIRECTION_CHANGE_MAX_DISPLACEMENT (255)
-#define DIRECTION_CHANGE_TOTAL_STEPS (256)
-#define RESOLUTION_CALCULATION (8)
-
-static TSL_tNb_T CalibDiv;
-
-/* Private functions prototype -----------------------------------------------*/
-
-void TSL_linrot_DTOGetTime(void);
-void TSL_linrot_ProcessCh_All_SetStatus(TSL_ObjStatus_enum_T sts);
-TSL_Status_enum_T TSL_linrot_ProcessCh_One_DataReady(void);
-TSL_Status_enum_T TSL_linrot_ProcessCh_All_AcqStatus(TSL_AcqStatus_enum_T sts);
-TSL_Status_enum_T TSL_linrot_ProcessCh_One_AcqStatusError(void);
-TSL_Status_enum_T TSL_linrot_ProcessCh_One_DeltaBelowEquMinus(TSL_tThreshold_T th, TSL_tIndex_T coeff);
-TSL_Status_enum_T TSL_linrot_ProcessCh_One_DeltaAboveEqu(TSL_tThreshold_T th, TSL_tIndex_T coeff);
-TSL_Status_enum_T TSL_linrot_ProcessCh_One_DeltaAbove(TSL_tThreshold_T th, TSL_tIndex_T coeff);
-TSL_Status_enum_T TSL_linrot_ProcessCh_All_DeltaBelowEqu(TSL_tThreshold_T th, TSL_tIndex_T coeff);
-void TSL_linrot_ProcessCh_All_ClearRef(void);
-TSL_tDelta_T TSL_linrot_NormDelta(TSL_ChannelData_T *ch, TSL_tIndex_T idx);
-
-
-//==============================================================================
-// "Object methods" functions
-//==============================================================================
-
-/**
- * @brief Init parameters with default values from configuration file
- * @param None
- * @retval None
- */
-void TSL_linrot_Init(void)
-{
- // Thresholds
-#if TSLPRM_USE_PROX > 0
- THIS_PROXIN_TH = TSLPRM_LINROT_PROX_IN_TH;
- THIS_PROXOUT_TH = TSLPRM_LINROT_PROX_OUT_TH;
-#endif
- THIS_DETECTIN_TH = TSLPRM_LINROT_DETECT_IN_TH;
- THIS_DETECTOUT_TH = TSLPRM_LINROT_DETECT_OUT_TH;
- THIS_CALIB_TH = TSLPRM_LINROT_CALIB_TH;
-
- // Debounce counters
- THIS_COUNTER_DEB_CALIB = TSLPRM_DEBOUNCE_CALIB;
-#if TSLPRM_USE_PROX > 0
- THIS_COUNTER_DEB_PROX = TSLPRM_DEBOUNCE_PROX;
-#endif
- THIS_COUNTER_DEB_DETECT = TSLPRM_DEBOUNCE_DETECT;
- THIS_COUNTER_DEB_RELEASE = TSLPRM_DEBOUNCE_RELEASE;
- THIS_COUNTER_DEB_ERROR = TSLPRM_DEBOUNCE_ERROR;
-
- // Other parameters for linear/rotary only
- THIS_RESOLUTION = TSLPRM_LINROT_RESOLUTION;
- THIS_DIR_CHG_POS = TSLPRM_LINROT_DIR_CHG_POS;
- THIS_COUNTER_DEB_DIRECTION = TSLPRM_LINROT_DIR_CHG_DEB;
-
- // Initial state
- TSL_linrot_SetStateCalibration(TSLPRM_CALIB_DELAY);
-}
-
-
-/**
- * @brief Process the State Machine
- * @param None
- * @retval None
- */
-void TSL_linrot_Process(void)
-{
- TSL_StateId_enum_T prev_state_id;
-
- // Check if at least one channel has a data ready
- if ((TSL_linrot_ProcessCh_One_DataReady() == TSL_STATUS_OK) || (THIS_STATEID == TSL_STATEID_OFF))
- {
-
- prev_state_id = THIS_STATEID;
-
-#if TSLPRM_TOTAL_LINROTS > 0
- if ((TSL_Globals.This_Obj->Type == TSL_OBJ_LINEAR) ||
- (TSL_Globals.This_Obj->Type == TSL_OBJ_ROTARY))
- {
- // Launch the object state function
- TSL_Globals.This_LinRot->p_SM[THIS_STATEID].StateFunc();
- }
-#endif
-
-#if TSLPRM_TOTAL_LINROTS_B > 0
- if ((TSL_Globals.This_Obj->Type == TSL_OBJ_LINEARB) ||
- (TSL_Globals.This_Obj->Type == TSL_OBJ_ROTARYB))
- {
- // Launch the TSL_Params state function
- TSL_Params.p_LinRotSM[THIS_STATEID].StateFunc();
- }
-#endif
-
- // Check if the new state has changed
- if (THIS_STATEID == prev_state_id)
- {
- THIS_CHANGE = TSL_STATE_NOT_CHANGED;
- }
- else
- {
- THIS_CHANGE = TSL_STATE_CHANGED;
- }
-
-#if TSLPRM_USE_DXS > 0
- if (THIS_STATEID != TSL_STATEID_DETECT)
- {
- THIS_DXSLOCK = TSL_FALSE;
- }
- if (THIS_STATEID == TSL_STATEID_TOUCH)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- }
-#endif
-
- }
-}
-
-
-/**
- * @brief Calculate the position
- * @param None
- * @retval Status Return OK if position calculation is correct
- * @note The position is calculated only if the number of channels is greater than 2
- */
-TSL_Status_enum_T TSL_linrot_CalcPos(void)
-{
- TSL_tIndex_T idx;
- TSL_ChannelData_T *p_Ch = TSL_Globals.This_LinRot->p_ChD;
- TSL_tDelta_T norm_delta;
- static TSL_tDelta_T delta1;
- static TSL_tDelta_T delta2;
- static TSL_tDelta_T delta3;
- static TSL_tIndex_T index1;
- static TSL_tIndex_T index2;
- TSL_tNb_T minor;
- TSL_tNb_T major;
- TSL_tNb_T sector_computation = 0;
- TSL_tNb_T position_correction = 0;
- TSL_tsignPosition_T new_position = 0;
- TSL_tPosition_T u_new_position = 0;
-
- delta1 = 0;
- delta2 = 0;
- delta3 = 0;
-
- index1 = 0;
- index2 = 0;
-
- // The position change flag will be set only if a new position is detected.
- THIS_POSCHANGE = TSL_STATE_NOT_CHANGED;
-
- // The position is calculated only if the number of channels is greater than 2
- if (THIS_NB_CHANNELS < 3)
- {
- return TSL_STATUS_ERROR;
- }
-
- //--------------------------------------------------------------------------
- // Sort the channels' delta
- // - delta1 and index1 = biggest
- // - delta2 and index2 = middle
- // - delta3 and index3 = lowest
- //--------------------------------------------------------------------------
- for (idx = 0; idx < THIS_NB_CHANNELS; idx++)
- {
-
-#if TSLPRM_LINROT_USE_NORMDELTA > 0
- norm_delta = TSL_linrot_NormDelta(p_Ch, idx); // Normalize the Delta
-#else
- norm_delta = p_Ch->Delta; // Take only the Delta
-#endif
-
- // The Delta must be positive only otherwise it is noise
- if (norm_delta < 0) {norm_delta = 0;}
-
- if (norm_delta > delta1)
- {
- delta3 = delta2;
- delta2 = delta1;
- delta1 = norm_delta;
- index2 = index1;
- index1 = idx;
- }
- else
- {
- if (norm_delta > delta2)
- {
- delta3 = delta2;
- delta2 = norm_delta;
- index2 = idx;
- }
- else
- {
- if (norm_delta > delta3)
- {
- delta3 = norm_delta;
- }
- }
- }
-
- p_Ch++; // Next channel
-
- } // for all channels
-
- // Noise filter: we need at least two significant Delta measurements
- if (delta2 < ((TSL_tThreshold_T)(THIS_DETECTOUT_TH >> 1) - 1))
- {
- return TSL_STATUS_ERROR;
- }
-
- //----------------------------------------------------------------------------
- // Position calculation...
- //----------------------------------------------------------------------------
-
- /*----------------------------------------------------------------------------
- B = Biggest signal measured (Delta1/Index1)
- M = Middle signal measured (Delta2/Index2)
- S = Smallest signal measured (Delta3/Index3)
-
- - The equation to find the position is:
- Position = Offset +/- [ Sector_Size x ( Major / (Major + Minor) ) ]
-
- - The Offset is the position of the middle of the Middle signal segment.
- All the Offset values are stored in the ROM table Table_POSITION_OFFSET.
-
- - Major = Biggest - Smallest signals
- Minor = Middle - Smallest signals
-
- - The Sector_Size depends of the number of channels used
- ----------------------------------------------------------------------------*/
-
- // Calculates the Major and Minor parameters
- minor = (TSL_tNb_T)(delta2 - delta3); // Middle - Smallest signals
- major = (TSL_tNb_T)(delta1 - delta3); // Biggest - Smallest signals
-
- // Select the offset position in the position offset constant table
- // Equal to: new_position = TABLE_POSITION_OFFSET_xCH_xxx[index1][index2];
- new_position = *(TSL_Globals.This_LinRot->p_PosOff + (index1 * THIS_NB_CHANNELS) + index2);
- sector_computation = THIS_SCT_COMP;
- position_correction = THIS_POS_CORR;
-
- // Calculates: [ Sector_Size x ( Major / (Major + Minor) ) ]
- sector_computation = major * sector_computation;
- sector_computation = sector_computation / (major + minor);
-
- // Use the sign bit from position table to define the interpretation direction.
- // The NewPosition is multiplied by 2 because the Offset stored in the ROM
- // table is divided by 2...
- if (new_position > 0) // Means Offset is > 0 in the position table
- {
- new_position = (TSL_tsignPosition_T)(new_position << 1);
- new_position += sector_computation;
- }
- else // means Offset is <= 0 in the ROM table
- {
- new_position = (TSL_tsignPosition_T)((-new_position) << 1);
- new_position -= sector_computation;
- }
-
- // Position is calculated differently if LINEAR or ROTARY sensor
- if ((THIS_OBJ_TYPE == TSL_OBJ_LINEAR) || (THIS_OBJ_TYPE == TSL_OBJ_LINEARB))
- {
-
- // First adjustment used to shift all the values to obtain the "zero"
- if (new_position > 0)
- {
- new_position -= position_correction;
- }
- else
- {
- new_position = new_position + (256 - position_correction);
- }
-
- // Second adjustment used to clamp the values at both ends of sensor
- if (new_position < 0)
- {
- new_position = 0;
- }
-
- if (new_position > 255)
- {
- new_position = 255;
- }
-
- }
- else // ROTARY sensor: keep only the low byte
- {
- new_position = (TSL_tPosition_T)new_position;
- }
-
- //----------------------------------------------------------------------------
- // Direction Change Process
- //----------------------------------------------------------------------------
-
- if (THIS_DIRECTION == TSL_TRUE) // Anticlockwise direction ...
- {
-
- // Check Direction changed and Position overflow from 0x00 to 0xFF not realized !
- if (((TSL_tPosition_T)new_position > THIS_RAW_POSITION) && (((TSL_tPosition_T)new_position - THIS_RAW_POSITION) < DIRECTION_CHANGE_MAX_DISPLACEMENT))
- {
- if (new_position < (uint16_t)(THIS_RAW_POSITION + THIS_DIR_CHG_POS))
- {
- THIS_COUNTER_DIR = THIS_COUNTER_DEB_DIRECTION;
- return TSL_STATUS_ERROR;
- }
- else
- {
- THIS_COUNTER_DIR--;
- if (!THIS_COUNTER_DIR)
- {
- THIS_COUNTER_DIR = THIS_COUNTER_DEB_DIRECTION;
- THIS_DIRECTION = TSL_FALSE; // New direction accepted: clockwise.
- }
- else
- {
- return TSL_STATUS_ERROR;
- }
- }
- }
-
- // Check position overflow from 0xFF to 0x00 to be filtered !
- if ((new_position + DIRECTION_CHANGE_MAX_DISPLACEMENT) < THIS_RAW_POSITION)
- {
- if ((new_position + DIRECTION_CHANGE_TOTAL_STEPS) < (uint16_t)(THIS_RAW_POSITION + THIS_DIR_CHG_POS))
- {
- THIS_COUNTER_DIR = THIS_COUNTER_DEB_DIRECTION;
- return TSL_STATUS_ERROR;
- }
- else
- {
- THIS_COUNTER_DIR--;
- if (!THIS_COUNTER_DIR)
- {
- THIS_COUNTER_DIR = THIS_COUNTER_DEB_DIRECTION;
- THIS_DIRECTION = TSL_FALSE; // New direction accepted: clockwise.
- }
- else
- {
- return TSL_STATUS_ERROR;
- }
- }
- }
-
- }
- else // Clockwise direction... DEFAULT SETTING !
- {
-
- // Check Direction changed and Position overflow from 0xFF to 0x00 not realized !
- if (((TSL_tPosition_T)new_position < THIS_RAW_POSITION) && ((THIS_RAW_POSITION - (TSL_tPosition_T)new_position) < DIRECTION_CHANGE_MAX_DISPLACEMENT))
- {
- if ((new_position + THIS_DIR_CHG_POS) > THIS_RAW_POSITION)
- {
- THIS_COUNTER_DIR = THIS_COUNTER_DEB_DIRECTION;
- return TSL_STATUS_ERROR;
- }
- else
- {
- THIS_COUNTER_DIR--;
- if (!THIS_COUNTER_DIR)
- {
- THIS_COUNTER_DIR = THIS_COUNTER_DEB_DIRECTION;
- THIS_DIRECTION = TSL_TRUE; // New direction accepted: anticlockwise.
- }
- else
- {
- return TSL_STATUS_ERROR;
- }
- }
- }
-
- // Check position overflow from 0x00 to 0xFF to be filtered !
- if (new_position > (uint16_t)(THIS_RAW_POSITION + DIRECTION_CHANGE_MAX_DISPLACEMENT))
- {
- if ((new_position + THIS_DIR_CHG_POS) > (uint16_t)(THIS_RAW_POSITION + DIRECTION_CHANGE_TOTAL_STEPS))
- {
- THIS_COUNTER_DIR = THIS_COUNTER_DEB_DIRECTION;
- return TSL_STATUS_ERROR;
- }
- else
- {
- THIS_COUNTER_DIR--;
- if (!THIS_COUNTER_DIR)
- {
- THIS_COUNTER_DIR = THIS_COUNTER_DEB_DIRECTION;
- THIS_DIRECTION = TSL_TRUE; // New direction accepted: anticlockwise.
- }
- else
- {
- return TSL_STATUS_ERROR;
- }
- }
- }
-
- }
-
- //----------------------------------------------------------------------------
- // Final result...
- //----------------------------------------------------------------------------
-
- // The Raw Position is always updated
- // The Position is updated only if different from the previous one
-
- THIS_RAW_POSITION = (TSL_tPosition_T)new_position;
-
- u_new_position = (TSL_tPosition_T)((TSL_tPosition_T)new_position >> (RESOLUTION_CALCULATION - THIS_RESOLUTION));
-
- if (THIS_POSITION == u_new_position)
- {
- return TSL_STATUS_ERROR;
- }
- else
- {
- THIS_POSITION = u_new_position;
- THIS_POSCHANGE = TSL_STATE_CHANGED;
- return TSL_STATUS_OK;
- }
-
-}
-
-
-//==============================================================================
-// Utility functions
-//==============================================================================
-
-/**
- * @brief Go in Calibration state
- * @param[in] delay Delay before calibration starts (stabilization of noise filter)
- * @retval None
- */
-void TSL_linrot_SetStateCalibration(TSL_tCounter_T delay)
-{
- THIS_STATEID = TSL_STATEID_CALIB;
- THIS_CHANGE = TSL_STATE_CHANGED;
- TSL_linrot_ProcessCh_All_SetStatus(TSL_OBJ_STATUS_ON);
-
- switch (TSL_Params.NbCalibSamples)
- {
- case 4:
- CalibDiv = 2;
- break;
- case 16:
- CalibDiv = 4;
- break;
- default:
- TSL_Params.NbCalibSamples = 8;
- CalibDiv = 3;
- break;
- }
-
- // If a noise filter is used, the counter must be initialized to a value
- // different from 0 in order to stabilize the filter.
- THIS_COUNTER_DEB = (TSL_tCounter_T)(delay + (TSL_tCounter_T)TSL_Params.NbCalibSamples);
- TSL_linrot_ProcessCh_All_ClearRef();
-}
-
-
-/**
- * @brief Go in Off state with sensor "off"
- * @param None
- * @retval None
- */
-void TSL_linrot_SetStateOff(void)
-{
- THIS_STATEID = TSL_STATEID_OFF;
- THIS_CHANGE = TSL_STATE_CHANGED;
- TSL_linrot_ProcessCh_All_SetStatus(TSL_OBJ_STATUS_OFF);
-}
-
-
-#if !defined(TSLPRM_STM8TL5X) && !defined(STM8TL5X)
-/**
- * @brief Go in Off state with sensor in "Burst mode only"
- * @param None
- * @retval None
- */
-void TSL_linrot_SetStateBurstOnly(void)
-{
- THIS_STATEID = TSL_STATEID_OFF;
- THIS_CHANGE = TSL_STATE_CHANGED;
- TSL_linrot_ProcessCh_All_SetStatus(TSL_OBJ_STATUS_BURST_ONLY);
-}
-#endif
-
-
-/**
- * @brief Return the current state identifier
- * @param None
- * @retval State id
- */
-TSL_StateId_enum_T TSL_linrot_GetStateId(void)
-{
- return(THIS_STATEID);
-}
-
-
-/**
- * @brief Return the current state mask
- * @param None
- * @retval State mask
- */
-TSL_StateMask_enum_T TSL_linrot_GetStateMask(void)
-{
- TSL_StateMask_enum_T state_mask = TSL_STATEMASK_UNKNOWN;
-
-#if TSLPRM_TOTAL_LINROTS > 0
- if ((TSL_Globals.This_Obj->Type == TSL_OBJ_LINEAR) ||
- (TSL_Globals.This_Obj->Type == TSL_OBJ_ROTARY))
- {
- state_mask = TSL_Globals.This_LinRot->p_SM[THIS_STATEID].StateMask;
- }
-#endif
-
-#if TSLPRM_TOTAL_LINROTS_B > 0
- if ((TSL_Globals.This_Obj->Type == TSL_OBJ_LINEARB) ||
- (TSL_Globals.This_Obj->Type == TSL_OBJ_ROTARYB))
- {
- state_mask = TSL_Params.p_LinRotSM[THIS_STATEID].StateMask;
- }
-#endif
-
- return state_mask;
-}
-
-
-/**
- * @brief Return the Change flag
- * @param None
- * @retval Change flag status
- */
-TSL_tNb_T TSL_linrot_IsChanged(void)
-{
- return(THIS_CHANGE);
-}
-
-
-//==============================================================================
-// State machine functions
-//==============================================================================
-
-#if TSLPRM_USE_PROX > 0
-/**
- * @brief Debounce Release processing (previous state = Proximity)
- * @param None
- * @retval None
- */
-void TSL_linrot_DebReleaseProxStateProcess(void)
-{
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_PROX; // Go back to the previous state
- }
- else // Acquisition is OK or has NOISE
- {
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_PROXOUT_TH, 0) == TSL_STATUS_OK)
- {
- THIS_STATEID = TSL_STATEID_PROX; // Go back to the previous state
- }
- else
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- // else stay in Debounce Release
- }
- }
-}
-#endif // if TSLPRM_USE_PROX > 0
-
-
-/**
- * @brief Debounce Release processing (previous state = Detect)
- * @param None
- * @retval None
- */
-void TSL_linrot_DebReleaseDetectStateProcess(void)
-{
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_DETECT; // Go back to the previous state
- }
- else // Acquisition is OK or has NOISE
- {
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_DETECTOUT_TH, 1) == TSL_STATUS_OK)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- }
- else
- {
-#if TSLPRM_USE_PROX > 0
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_PROXOUT_TH, 0) == TSL_STATUS_OK)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- return;
- }
-#endif
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- // else stay in Debounce Release
- }
- }
-}
-
-
-/**
- * @brief Debounce Release processing (previous state = Touch)
- * Same as Debounce Release Detect processing
- * @param None
- * @retval None
- */
-void TSL_linrot_DebReleaseTouchStateProcess(void)
-{
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_TOUCH; // Go back to the previous state
- }
- else // Acquisition is OK or has NOISE
- {
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_DETECTOUT_TH, 1) == TSL_STATUS_OK)
- {
- THIS_STATEID = TSL_STATEID_TOUCH;
- }
- else
- {
-#if TSLPRM_USE_PROX > 0
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_PROXOUT_TH, 0) == TSL_STATUS_OK)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- return;
- }
-#endif
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- // else stay in Debounce Release
- }
- }
-}
-
-
-/**
- * @brief Release state processing
- * @param None
- * @retval None
- */
-void TSL_linrot_ReleaseStateProcess(void)
-{
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_ERROR;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_ERROR;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_ERROR_RELEASE;
- }
- }
- else // Acquisition is OK or has NOISE
- {
- if (TSL_linrot_ProcessCh_One_DeltaAboveEqu(THIS_DETECTIN_TH, 1) == TSL_STATUS_OK)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_DETECT;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_DETECT;
- }
- return;
- }
-
-#if TSLPRM_USE_PROX > 0
- if (TSL_linrot_ProcessCh_One_DeltaAboveEqu(THIS_PROXIN_TH, 0) == TSL_STATUS_OK)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_PROX;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_PROX;
- }
- return;
- }
-#endif
-
- // Check delta for re-calibration
- if (TSL_linrot_ProcessCh_One_DeltaBelowEquMinus(THIS_CALIB_TH, 1) == TSL_STATUS_OK)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_CALIB;
- if (THIS_COUNTER_DEB == 0)
- {
- TSL_linrot_SetStateCalibration(0);
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_CALIB;
- }
- }
- }
-}
-
-
-/**
- * @brief Debounce Calibration processing (previous state = Release)
- * @param None
- * @retval None
- */
-void TSL_linrot_DebCalibrationStateProcess(void)
-{
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_RELEASE; // Go back to the previous state
- }
- else // Acquisition is OK or has NOISE
- {
- if (TSL_linrot_ProcessCh_One_DeltaBelowEquMinus(THIS_CALIB_TH, 1) == TSL_STATUS_OK) // Still below recalibration threshold
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- TSL_linrot_SetStateCalibration(0);
- }
- // else stay in Debounce Calibration
- }
- else // Go back to previous state
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- }
-}
-
-
-/**
- * @brief Calibration state processing
- * @param None
- * @retval None
- */
-void TSL_linrot_CalibrationStateProcess(void)
-{
- TSL_tMeas_T new_meas;
- TSL_tIndex_T idx;
- TSL_ChannelData_T *p_Ch;
-
-#if TSLPRM_CALIB_DELAY > 0
- // Noise filter stabilization time
- if (THIS_COUNTER_DEB > (TSL_tCounter_T)TSL_Params.NbCalibSamples)
- {
- THIS_COUNTER_DEB--;
- return; // Skip the sample
- }
-#endif
-
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_ERROR;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_ERROR;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_ERROR_CALIB;
- }
- }
- else // Acquisition is OK or has NOISE
- {
- // Process all channels
- p_Ch = TSL_Globals.This_LinRot->p_ChD;
-
- for (idx = 0; idx < THIS_NB_CHANNELS; idx++)
- {
-
- // Get the new measure or Calculate it
-#if TSLPRM_USE_MEAS > 0
- new_meas = p_Ch->Meas;
-#else // Calculate it
- new_meas = TSL_acq_ComputeMeas(p_Ch->Ref, p_Ch->Delta);
-#endif
-
- // Verify the first Reference value
- if (THIS_COUNTER_DEB == (TSL_tCounter_T)TSL_Params.NbCalibSamples)
- {
- if (TSL_acq_TestFirstReferenceIsValid(p_Ch, new_meas))
- {
- p_Ch->Ref = new_meas;
- }
- else
- {
- p_Ch->Ref = 0;
- return;
- }
- }
- else
- {
- // Add the measure in temporary Reference
- p_Ch->Ref += new_meas;
-
- // Check reference overflow
- if (p_Ch->Ref < new_meas)
- {
- p_Ch->Ref = 0; // Suppress the bad reference
- THIS_STATEID = TSL_STATEID_ERROR;
- return;
- }
- }
-
- p_Ch++; // Next channel
- }
-
- // Check that we have all the needed measurements
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- // Process all channels
- p_Ch = TSL_Globals.This_LinRot->p_ChD;
- for (idx = 0; idx < THIS_NB_CHANNELS; idx++)
- {
- // Divide temporary Reference by the number of samples
- p_Ch->Ref >>= CalibDiv;
- p_Ch->RefRest = 0;
- p_Ch->Delta = 0;
- p_Ch++; // Next channel
- }
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- }
-}
-
-
-#if TSLPRM_USE_PROX > 0
-/**
- * @brief Debounce Proximity processing (previous state = Release)
- * @param None
- * @retval None
- */
-void TSL_linrot_DebProxStateProcess(void)
-{
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else // Acquisition is OK or has NOISE
- {
- if (TSL_linrot_ProcessCh_One_DeltaAboveEqu(THIS_DETECTIN_TH, 1) == TSL_STATUS_OK)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_DETECT;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_DETECT;
- }
- return;
- }
-
- if (TSL_linrot_ProcessCh_One_DeltaAboveEqu(THIS_PROXIN_TH, 0) == TSL_STATUS_OK)
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- // else stay in Debounce Proximity
- }
- else
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- }
-}
-#endif
-
-
-#if TSLPRM_USE_PROX > 0
-/**
- * @brief Debounce Proximity processing (previous state = Detect)
- * @param None
- * @retval None
- */
-void TSL_linrot_DebProxDetectStateProcess(void)
-{
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- }
- else // Acquisition is OK or has NOISE
- {
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_DETECTOUT_TH, 1) == TSL_STATUS_OK)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- return;
- }
-
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_PROXOUT_TH, 0) == TSL_STATUS_OK)
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- // else stay in Debounce Proximity
- }
- else
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_RELEASE;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_RELEASE_DETECT;
- }
- }
- }
-}
-#endif
-
-
-#if TSLPRM_USE_PROX > 0
-/**
- * @brief Debounce Proximity processing (previous state = Touch)
- * @param None
- * @retval None
- */
-void TSL_linrot_DebProxTouchStateProcess(void)
-{
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_TOUCH;
- }
- else // Acquisition is OK or has NOISE
- {
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_DETECTOUT_TH, 1) == TSL_STATUS_OK)
- {
- THIS_STATEID = TSL_STATEID_TOUCH;
- return;
- }
-
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_PROXOUT_TH, 0) == TSL_STATUS_OK)
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- // else stay in Debounce Proximity
- }
- else
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_RELEASE;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_RELEASE_TOUCH;
- }
- }
- }
-}
-#endif
-
-
-#if TSLPRM_USE_PROX > 0
-/**
- * @brief Proximity state processing
- * @param None
- * @retval None
- */
-void TSL_linrot_ProxStateProcess(void)
-{
-#if TSLPRM_DTO > 0
- TSL_tTick_sec_T tick_detected;
-#endif
-
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_ERROR;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_ERROR;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_ERROR_PROX;
- }
- }
- else // Acquisition is OK or has NOISE
- {
- if (TSL_linrot_ProcessCh_One_DeltaAboveEqu(THIS_DETECTIN_TH, 1) == TSL_STATUS_OK)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_DETECT;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_DETECT;
- }
- return;
- }
-
- if (TSL_linrot_ProcessCh_All_DeltaBelowEqu(THIS_PROXOUT_TH, 0) == TSL_STATUS_OK)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_RELEASE;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_RELEASE_PROX;
- }
- return;
- }
-
- // Stay in Proximity state
-#if TSLPRM_DTO > 0
- //------------------------------------
- // Detection Time Out (DTO) processing
- //------------------------------------
- if ((TSL_Params.DTO > 1) && (TSL_Params.DTO < 64))
- {
- tick_detected = THIS_COUNTER_DTO; // Get the detected time previously saved
- // Enter in calibration state if the DTO duration has elapsed
- if (TSL_tim_CheckDelay_sec(TSL_Params.DTO, &tick_detected) == TSL_STATUS_OK)
- {
- TSL_linrot_SetStateCalibration(0);
- }
- }
-#endif
-
- }
-}
-#endif
-
-
-/**
- * @brief Debounce Detect processing (previous state = Release or Proximity)
- * @param None
- * @retval None
- */
-void TSL_linrot_DebDetectStateProcess(void)
-{
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else // Acquisition is OK or has NOISE
- {
- if (TSL_linrot_ProcessCh_One_DeltaAboveEqu(THIS_DETECTIN_TH, 1) == TSL_STATUS_OK)
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- // else stay in Debounce Detect
- }
- else
- {
-#if TSLPRM_USE_PROX > 0
- if (TSL_linrot_ProcessCh_One_DeltaAboveEqu(THIS_PROXIN_TH, 0) == TSL_STATUS_OK)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_PROX;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_PROX;
- }
- }
- else
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
-#else
- THIS_STATEID = TSL_STATEID_RELEASE;
-#endif
- }
- }
-}
-
-
-/**
- * @brief Detect state processing
- * @param None
- * @retval None
- */
-void TSL_linrot_DetectStateProcess(void)
-{
-#if TSLPRM_DTO > 0
- TSL_Status_enum_T pos_sts;
- TSL_tTick_sec_T tick_detected;
-#endif
-
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_ERROR;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_ERROR;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_ERROR_DETECT;
- }
- }
- else // Acquisition is OK or has NOISE
- {
-
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_DETECTOUT_TH, 1) == TSL_STATUS_OK)
- {
- //-------------------
- // Calculate position
- //-------------------
- if ((THIS_OBJ_TYPE == TSL_OBJ_LINEAR) || (THIS_OBJ_TYPE == TSL_OBJ_ROTARY))
- {
- // Call the specific method
-#if TSLPRM_DTO > 0
- pos_sts = TSL_Globals.This_LinRot->p_Methods->CalcPosition();
-#else
- TSL_Globals.This_LinRot->p_Methods->CalcPosition();
-#endif
- }
- else // TSL_OBJ_LINEARB or TSL_OBJ_ROTARYB
- {
- // Call the default method
-#if TSLPRM_DTO > 0
- pos_sts = TSL_Params.p_LinRotMT->CalcPosition();
-#else
- TSL_Params.p_LinRotMT->CalcPosition();
-#endif
- }
-#if TSLPRM_DTO > 0
- //------------------------------------
- // Detection Time Out (DTO) processing
- // Only if the Position has NOT changed
- //-------------------------------------
- if (pos_sts == TSL_STATUS_OK)
- {
- DTO_GET_TIME; // Take current time
- }
- else
- {
- if ((TSL_Params.DTO > 1) && (TSL_Params.DTO < 64))
- {
- tick_detected = THIS_COUNTER_DTO; // Get the detected time previously saved
- // Enter in calibration state if the DTO duration has elapsed
- if (TSL_tim_CheckDelay_sec(TSL_Params.DTO, &tick_detected) == TSL_STATUS_OK)
- {
- TSL_linrot_SetStateCalibration(0);
- }
- }
- }
-#endif
- return; // Normal operation, stay in Detect state
- }
-
-#if TSLPRM_USE_PROX > 0
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_PROXOUT_TH, 0) == TSL_STATUS_OK)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_PROX;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_PROX_DETECT;
- }
- return;
- }
-#endif
-
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_RELEASE;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_RELEASE_DETECT;
- }
-
- }
-}
-
-
-/**
- * @brief Touch state processing
- * Same as Detect state
- * @param None
- * @retval None
- */
-void TSL_linrot_TouchStateProcess(void)
-{
-#if TSLPRM_DTO > 0
- TSL_Status_enum_T pos_sts;
- TSL_tTick_sec_T tick_detected;
-#endif
-
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_ERROR;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_ERROR;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_ERROR_TOUCH;
- }
- }
- else // Acquisition is OK or has NOISE
- {
-
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_DETECTOUT_TH, 1) == TSL_STATUS_OK)
- {
- //-------------------
- // Calculate position
- //-------------------
- if ((THIS_OBJ_TYPE == TSL_OBJ_LINEAR) || (THIS_OBJ_TYPE == TSL_OBJ_ROTARY))
- {
- // Call the specific method
-#if TSLPRM_DTO > 0
- pos_sts = TSL_Globals.This_LinRot->p_Methods->CalcPosition();
-#else
- TSL_Globals.This_LinRot->p_Methods->CalcPosition();
-#endif
- }
- else // TSL_OBJ_LINEARB or TSL_OBJ_ROTARYB
- {
- // Call the default method
-#if TSLPRM_DTO > 0
- pos_sts = TSL_Params.p_LinRotMT->CalcPosition();
-#else
- TSL_Params.p_LinRotMT->CalcPosition();
-#endif
- }
-#if TSLPRM_DTO > 0
- //------------------------------------
- // Detection Time Out (DTO) processing
- // Only if the Position has NOT changed
- //-------------------------------------
- if (pos_sts == TSL_STATUS_OK)
- {
- DTO_GET_TIME; // Take current time
- }
- else
- {
- if ((TSL_Params.DTO > 1) && (TSL_Params.DTO < 64))
- {
- tick_detected = THIS_COUNTER_DTO; // Get the detected time previously saved
- // Enter in calibration state if the DTO duration has elapsed
- if (TSL_tim_CheckDelay_sec(TSL_Params.DTO, &tick_detected) == TSL_STATUS_OK)
- {
- TSL_linrot_SetStateCalibration(0);
- }
- }
- }
-#endif
- return; // Normal operation, stay in Touch state
- }
-
-#if TSLPRM_USE_PROX > 0
- if (TSL_linrot_ProcessCh_One_DeltaAbove(THIS_PROXOUT_TH, 0) == TSL_STATUS_OK)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_PROX;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_PROX_TOUCH;
- }
- return;
- }
-#endif
-
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_RELEASE;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_RELEASE_TOUCH;
- }
-
- }
-}
-
-
-/**
- * @brief Debounce error state processing
- * @param None
- * @retval None
- */
-void TSL_linrot_DebErrorStateProcess(void)
-{
- volatile TSL_StateMask_enum_T mask;
-
- if (TSL_linrot_ProcessCh_One_AcqStatusError() == TSL_STATUS_OK) // Acquisition error (min or max)
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_ERROR;
- }
- }
- else // Acquisition is OK or has NOISE
- {
- // Get state mask
- mask = TSL_linrot_GetStateMask();
- // Mask Error and Debounce bits
-#ifdef _RAISONANCE_
- mask &= ~(TSL_STATE_DEBOUNCE_BIT_MASK | TSL_STATE_ERROR_BIT_MASK);
-#else
- mask &= (TSL_StateMask_enum_T)(~(TSL_STATE_DEBOUNCE_BIT_MASK | TSL_STATE_ERROR_BIT_MASK));
-#endif
- // Go back to the previous state
- switch (mask)
- {
- case TSL_STATEMASK_RELEASE :
- THIS_STATEID = TSL_STATEID_RELEASE;
- break;
- case TSL_STATEMASK_PROX :
- THIS_STATEID = TSL_STATEID_PROX;
- break;
- case TSL_STATEMASK_DETECT :
- THIS_STATEID = TSL_STATEID_DETECT;
- break;
- case TSL_STATEMASK_TOUCH :
- THIS_STATEID = TSL_STATEID_TOUCH;
- break;
- default:
- TSL_linrot_SetStateCalibration(0);
- break;
- }
- }
-}
-
-
-//==============================================================================
-// Private functions
-//==============================================================================
-
-/**
- * @brief Get the current time in second and affect it to the DTO counter (Private)
- * @param None
- * @retval None
- */
-void TSL_linrot_DTOGetTime(void)
-{
- disableInterrupts();
- THIS_COUNTER_DTO = (TSL_tCounter_T)TSL_Globals.Tick_sec;
- enableInterrupts();
-}
-
-
-/**
- * @brief Set all channels status to ON, OFF or BURST ONLY
- * @param sts Channel status
- * @retval None
- */
-void TSL_linrot_ProcessCh_All_SetStatus(TSL_ObjStatus_enum_T sts)
-{
- TSL_tIndex_T idx;
- TSL_ChannelData_T *p_Ch = TSL_Globals.This_LinRot->p_ChD;
- // Init channels status
- for (idx = 0; idx < THIS_NB_CHANNELS; idx++)
- {
- p_Ch->Flags.ObjStatus = sts;
- p_Ch++;
- }
-}
-
-
-/**
- * @brief Check if at least one channel has a data ready
- * @param None
- * @retval Status
- */
-TSL_Status_enum_T TSL_linrot_ProcessCh_One_DataReady(void)
-{
- TSL_tIndex_T idx;
- TSL_ChannelData_T *p_Ch = TSL_Globals.This_LinRot->p_ChD;
- TSL_Status_enum_T retval = TSL_STATUS_ERROR;
- // Return OK if at least one channel has a data ready
- for (idx = 0; idx < THIS_NB_CHANNELS; idx++)
- {
- if (p_Ch->Flags.DataReady == TSL_DATA_READY)
- {
- p_Ch->Flags.DataReady = TSL_DATA_NOT_READY; // The new data is processed
- retval = TSL_STATUS_OK;
- }
- p_Ch++;
- }
- return retval;
-}
-
-
-/**
- * @brief Check if all channels are equal to the status passed
- * @param sts Status to be checked
- * @retval Status
- */
-TSL_Status_enum_T TSL_linrot_ProcessCh_All_AcqStatus(TSL_AcqStatus_enum_T sts)
-{
- TSL_tIndex_T idx;
- TSL_ChannelData_T *p_Ch = TSL_Globals.This_LinRot->p_ChD;
- // Return OK if ALL channels have the correct acq status
- for (idx = 0; idx < THIS_NB_CHANNELS; idx++)
- {
- if (p_Ch->Flags.AcqStatus != sts)
- {
- return TSL_STATUS_ERROR;
- }
- p_Ch++;
- }
- return TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Check if at least one channel is in error
- * @param None
- * @retval Status
- */
-TSL_Status_enum_T TSL_linrot_ProcessCh_One_AcqStatusError(void)
-{
- TSL_tIndex_T idx;
- TSL_ChannelData_T *p_Ch = TSL_Globals.This_LinRot->p_ChD;
- // Return OK if at least one channel is in acquisition error min or max
- for (idx = 0; idx < THIS_NB_CHANNELS; idx++)
- {
- if (p_Ch->Flags.AcqStatus & TSL_ACQ_STATUS_ERROR_MASK)
- {
- return TSL_STATUS_OK;
- }
- p_Ch++;
- }
- return TSL_STATUS_ERROR;
-}
-
-
-/**
- * @brief Check if at least one channel is below or equal a threshold (inverted)
- * @param th Threshold
- * @param coeff Enable or Disable the multiplier coefficient on threshold
- * @retval Status
- */
-TSL_Status_enum_T TSL_linrot_ProcessCh_One_DeltaBelowEquMinus(TSL_tThreshold_T th, TSL_tIndex_T coeff)
-{
- TSL_tIndex_T idx;
- TSL_ChannelData_T *p_Ch = TSL_Globals.This_LinRot->p_ChD;
- TSL_tDelta_T norm_delta;
-
-#if TSLPRM_COEFF_TH > 0
- uint16_t lth;
- if (coeff)
- {
- lth = (uint16_t)((uint16_t)th << TSLPRM_COEFF_TH);
- }
- else
- {
- lth = th;
- }
-#endif
-
- // Return OK if at least one channel is below or equal the threshold
- for (idx = 0; idx < THIS_NB_CHANNELS; idx++)
- {
-
-#if TSLPRM_LINROT_USE_NORMDELTA > 0
- norm_delta = TSL_linrot_NormDelta(p_Ch, idx); // Normalize the Delta
-#else
- norm_delta = p_Ch->Delta; // Take only the Delta
-#endif
-
-#if TSLPRM_COEFF_TH > 0
- if (norm_delta <= -lth) // Warning!!! The threshold is inverted
-#else
- if (norm_delta <= -th) // Warning!!! The threshold is inverted
-#endif
- {
- return TSL_STATUS_OK;
- }
-
- p_Ch++;
- }
-
- return TSL_STATUS_ERROR;
-}
-
-
-/**
- * @brief Check if at least one channel is above or equal a threshold
- * @param th Threshold
- * @param coeff Enable or Disable the multiplier coefficient on threshold
- * @retval Status
- */
-TSL_Status_enum_T TSL_linrot_ProcessCh_One_DeltaAboveEqu(TSL_tThreshold_T th, TSL_tIndex_T coeff)
-{
- TSL_tIndex_T idx;
- TSL_ChannelData_T *p_Ch = TSL_Globals.This_LinRot->p_ChD;
- TSL_tDelta_T norm_delta;
-
-#if TSLPRM_COEFF_TH > 0
- uint16_t lth;
- if (coeff)
- {
- lth = (uint16_t)((uint16_t)th << TSLPRM_COEFF_TH);
- }
- else
- {
- lth = th;
- }
-#endif
-
- // Return OK if at least one channel is above or equal the threshold
- for (idx = 0; idx < THIS_NB_CHANNELS; idx++)
- {
-
-#if TSLPRM_LINROT_USE_NORMDELTA > 0
- norm_delta = TSL_linrot_NormDelta(p_Ch, idx); // Normalize the Delta
-#else
- norm_delta = p_Ch->Delta; // Take only the Delta
-#endif
-
-#if TSLPRM_COEFF_TH > 0
- if (norm_delta >= lth)
-#else
- if (norm_delta >= th)
-#endif
- {
-#if TSLPRM_COEFF_TH > 0
- if (norm_delta < 0)
- {
- p_Ch++;
- continue;
- }
-#endif
- return TSL_STATUS_OK;
- }
- p_Ch++;
- }
- return TSL_STATUS_ERROR;
-}
-
-
-/**
- * @brief Check if at least one channel is stricly above a threshold
- * @param th Threshold
- * @param coeff Enable or Disable the multiplier coefficient on threshold
- * @retval Status
- */
-TSL_Status_enum_T TSL_linrot_ProcessCh_One_DeltaAbove(TSL_tThreshold_T th, TSL_tIndex_T coeff)
-{
- TSL_tIndex_T idx;
- TSL_ChannelData_T *p_Ch = TSL_Globals.This_LinRot->p_ChD;
- TSL_tDelta_T norm_delta;
-
-#if TSLPRM_COEFF_TH > 0
- uint16_t lth;
- if (coeff)
- {
- lth = (uint16_t)((uint16_t)th << TSLPRM_COEFF_TH);
- }
- else
- {
- lth = th;
- }
-#endif
-
- // Return OK if at least one channel is above the threshold
- for (idx = 0; idx < THIS_NB_CHANNELS; idx++)
- {
-
-#if TSLPRM_LINROT_USE_NORMDELTA > 0
- norm_delta = TSL_linrot_NormDelta(p_Ch, idx); // Normalize the Delta
-#else
- norm_delta = p_Ch->Delta; // Take only the Delta
-#endif
-
-#if TSLPRM_COEFF_TH > 0
- if (norm_delta > lth)
-#else
- if (norm_delta > th)
-#endif
- {
-#if TSLPRM_COEFF_TH > 0
- if (norm_delta < 0)
- {
- p_Ch++;
- continue;
- }
-#endif
- return TSL_STATUS_OK;
- }
- p_Ch++;
- }
- return TSL_STATUS_ERROR;
-}
-
-
-/**
- * @brief Check if all channels are below or equal a threshold
- * @param th Threshold
- * @param coeff Enable or Disable the multiplier coefficient on threshold
- * @retval Status
- */
-TSL_Status_enum_T TSL_linrot_ProcessCh_All_DeltaBelowEqu(TSL_tThreshold_T th, TSL_tIndex_T coeff)
-{
- TSL_tIndex_T idx;
- TSL_ChannelData_T *p_Ch = TSL_Globals.This_LinRot->p_ChD;
- TSL_tDelta_T norm_delta;
-
-#if TSLPRM_COEFF_TH > 0
- uint16_t lth;
- if (coeff)
- {
- lth = (uint16_t)((uint16_t)th << TSLPRM_COEFF_TH);
- }
- else
- {
- lth = th;
- }
-#endif
-
- // Return OK if ALL channels are below or equal the threshold
- for (idx = 0; idx < THIS_NB_CHANNELS; idx++)
- {
-
-#if TSLPRM_LINROT_USE_NORMDELTA > 0
- norm_delta = TSL_linrot_NormDelta(p_Ch, idx); // Normalize the Delta
-#else
- norm_delta = p_Ch->Delta; // Take only the Delta
-#endif
-
-#if TSLPRM_COEFF_TH > 0
- if (norm_delta > lth)
-#else
- if (norm_delta > th)
-#endif
- {
-#if TSLPRM_COEFF_TH > 0
- if (norm_delta < 0)
- {
- p_Ch++;
- continue;
- }
-#endif
- return TSL_STATUS_ERROR;
- }
- p_Ch++;
- }
- return TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Clear the Reference and ReferenceRest for all channels
- * @param None
- * @retval None
- */
-void TSL_linrot_ProcessCh_All_ClearRef(void)
-{
- TSL_tIndex_T idx;
- TSL_ChannelData_T *p_Ch = TSL_Globals.This_LinRot->p_ChD;
- for (idx = 0; idx < THIS_NB_CHANNELS; idx++)
- {
- p_Ch->Ref = 0;
- p_Ch->RefRest = 0;
- p_Ch++;
- }
-}
-
-
-/**
- * @brief Normalize a Delta value
- * @param ch Pointer to the current channel
- * @param idx Index of the channel
- * @retval Normalized Delta value
- */
-TSL_tDelta_T TSL_linrot_NormDelta(TSL_ChannelData_T *ch, TSL_tIndex_T idx)
-{
- uint32_t tmpdelta = ch->Delta;
-
- // Apply coefficient
- if (TSL_Globals.This_LinRot->p_DeltaCoeff[idx] != 0x0100)
- {
- tmpdelta = (uint32_t)(tmpdelta * TSL_Globals.This_LinRot->p_DeltaCoeff[idx]);
- tmpdelta = tmpdelta >> (uint8_t)8;
- }
-
- return (TSL_tDelta_T)tmpdelta;
-}
-
-#endif
-// #if TSLPRM_TOTAL_LNRTS > 0
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_object.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_object.c
deleted file mode 100644
index 7c2e9bf..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_object.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_object.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the sensors in general.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_object.h"
-#include "tsl_globals.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-/* Private macros ------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-
-/* Private functions prototype -----------------------------------------------*/
-
-/**
- * @brief Initialize a group of Objects
- * @param[in] objgrp Pointer to the group of objects
- * @retval None
- */
-void TSL_obj_GroupInit(TSL_ObjectGroup_T *objgrp)
-{
- TSL_tIndex_T idx_obj;
- CONST TSL_Object_T *pobj;
- TSL_tNb_T objgrp_state_mask = 0;
-
- pobj = objgrp->p_Obj; // First object in the group
-
- objgrp->Change = TSL_STATE_NOT_CHANGED;
-
- // Process all objects
- for (idx_obj = 0; idx_obj < objgrp->NbObjects; idx_obj++)
- {
-
- // Assign global object
- TSL_obj_SetGlobalObj(pobj);
-
- switch (pobj->Type)
- {
- //------------------------------------------------------------------------
-#if TSLPRM_TOTAL_TOUCHKEYS > 0
- case TSL_OBJ_TOUCHKEY:
- // Call the specific method
- TSL_Globals.This_TKey->p_Methods->Init();
- // Check if the object has changed of state
- if (TSL_Globals.This_TKey->p_Data->Change)
- {
- objgrp->Change = TSL_STATE_CHANGED;
- }
- // Update object group state mask
- objgrp_state_mask |= TSL_Globals.This_TKey->p_SM[TSL_Globals.This_TKey->p_Data->StateId].StateMask;
- break;
-#endif
- //------------------------------------------------------------------------
-#if TSLPRM_TOTAL_TOUCHKEYS_B > 0
- case TSL_OBJ_TOUCHKEYB:
- // Call the default method
- TSL_Params.p_TKeyMT->Init();
- // Check if the object has changed of state
- if (TSL_Globals.This_TKey->p_Data->Change)
- {
- objgrp->Change = TSL_STATE_CHANGED;
- }
- // Get object state mask from state machine in TSL_Params
- objgrp_state_mask |= TSL_Params.p_TKeySM[TSL_Globals.This_TKey->p_Data->StateId].StateMask;
- break;
-#endif
- //------------------------------------------------------------------------
-#if TSLPRM_TOTAL_LINROTS > 0
- case TSL_OBJ_LINEAR:
- case TSL_OBJ_ROTARY:
- // Call the specific method
- TSL_Globals.This_LinRot->p_Methods->Init();
- // Check if the object has changed of state
- if (TSL_Globals.This_LinRot->p_Data->Change)
- {
- objgrp->Change = TSL_STATE_CHANGED;
- }
- // Update object group state mask
- objgrp_state_mask |= TSL_Globals.This_LinRot->p_SM[TSL_Globals.This_LinRot->p_Data->StateId].StateMask;
- break;
-#endif
- //------------------------------------------------------------------------
-#if TSLPRM_TOTAL_LINROTS_B > 0
- case TSL_OBJ_LINEARB:
- case TSL_OBJ_ROTARYB:
- // Call the default method
- TSL_Params.p_LinRotMT->Init();
- // Check if the object has changed of state
- if (TSL_Globals.This_LinRot->p_Data->Change)
- {
- objgrp->Change = TSL_STATE_CHANGED;
- }
- // Get object state mask from state machine in TSL_Params
- objgrp_state_mask |= TSL_Params.p_LinRotSM[TSL_Globals.This_LinRot->p_Data->StateId].StateMask;
- break;
-#endif
- default:
- break;
- }
-
- pobj++; // Next object
- }
-
- // Update the object group state mask
- objgrp->StateMask = objgrp_state_mask;
-}
-
-
-/**
- * @brief Process the state machine on a group of Objects
- * @param[in] objgrp Pointer to the group of objects to process
- * @retval None
- */
-void TSL_obj_GroupProcess(TSL_ObjectGroup_T *objgrp)
-{
- TSL_tIndex_T idx_obj;
- CONST TSL_Object_T *pobj;
- TSL_tNb_T objgrp_state_mask = 0;
-
- pobj = objgrp->p_Obj; // First object in the group
-
- objgrp->Change = TSL_STATE_NOT_CHANGED;
-
- // Process all objects
- for (idx_obj = 0; idx_obj < objgrp->NbObjects; idx_obj++)
- {
-
- // Assign global object
- TSL_obj_SetGlobalObj(pobj);
-
- switch (pobj->Type)
- {
- //------------------------------------------------------------------------
-#if TSLPRM_TOTAL_TOUCHKEYS > 0
- case TSL_OBJ_TOUCHKEY:
- // Call the specific method
- TSL_Globals.This_TKey->p_Methods->Process();
- // Check if the object has changed of state
- if (TSL_Globals.This_TKey->p_Data->Change)
- {
- objgrp->Change = TSL_STATE_CHANGED;
- }
- // Update object group state mask
- objgrp_state_mask |= TSL_Globals.This_TKey->p_SM[TSL_Globals.This_TKey->p_Data->StateId].StateMask;
- break;
-#endif
- //------------------------------------------------------------------------
-#if TSLPRM_TOTAL_TOUCHKEYS_B > 0
- case TSL_OBJ_TOUCHKEYB:
- // Call the default method
- TSL_Params.p_TKeyMT->Process();
- // Check if the object has changed of state
- if (TSL_Globals.This_TKey->p_Data->Change)
- {
- objgrp->Change = TSL_STATE_CHANGED;
- }
- // Get object state mask from state machine in TSL_Params
- objgrp_state_mask |= TSL_Params.p_TKeySM[TSL_Globals.This_TKey->p_Data->StateId].StateMask;
- break;
-#endif
- //------------------------------------------------------------------------
-#if TSLPRM_TOTAL_LINROTS > 0
- case TSL_OBJ_LINEAR:
- case TSL_OBJ_ROTARY:
- // Call the specific method
- TSL_Globals.This_LinRot->p_Methods->Process();
- // Check if the object has changed of state
- if (TSL_Globals.This_LinRot->p_Data->Change)
- {
- objgrp->Change = TSL_STATE_CHANGED;
- }
- // Update object group state mask
- objgrp_state_mask |= TSL_Globals.This_LinRot->p_SM[TSL_Globals.This_LinRot->p_Data->StateId].StateMask;
- break;
-#endif
- //------------------------------------------------------------------------
-#if TSLPRM_TOTAL_LINROTS_B > 0
- case TSL_OBJ_LINEARB:
- case TSL_OBJ_ROTARYB:
- // Call the default method
- TSL_Params.p_LinRotMT->Process();
- // Check if the object has changed of state
- if (TSL_Globals.This_LinRot->p_Data->Change)
- {
- objgrp->Change = TSL_STATE_CHANGED;
- }
- // Get object state mask from state machine in TSL_Params
- objgrp_state_mask |= TSL_Params.p_LinRotSM[TSL_Globals.This_LinRot->p_Data->StateId].StateMask;
- break;
-#endif
- default:
- break;
- }
-
- pobj++; // Next object
- }
-
- // Update the object group state mask
- objgrp->StateMask = objgrp_state_mask;
-}
-
-
-/**
- * @brief Set the global object variable
- * @param[in] pobj Pointer to the object to process
- * @retval None
- */
-void TSL_obj_SetGlobalObj(CONST TSL_Object_T *pobj)
-{
-
- TSL_Globals.This_Obj = pobj;
-
- switch (pobj->Type)
- {
-#if TSLPRM_TOTAL_TKEYS > 0
- case TSL_OBJ_TOUCHKEY:
- case TSL_OBJ_TOUCHKEYB:
- TSL_Globals.This_TKey = (TSL_TouchKey_T *)pobj->Elmt;
- break;
-#endif
-#if TSLPRM_TOTAL_LNRTS > 0
- case TSL_OBJ_LINEAR:
- case TSL_OBJ_LINEARB:
- case TSL_OBJ_ROTARY:
- case TSL_OBJ_ROTARYB:
- TSL_Globals.This_LinRot = (TSL_LinRot_T *)pobj->Elmt;
- break;
-#endif
- default:
- break;
- }
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_time.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_time.c
deleted file mode 100644
index d274575..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_time.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_time.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the timings in general.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_time.h"
-#include "tsl_globals.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-/* Private macros ------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Private functions prototype -----------------------------------------------*/
-
-/**
- * @brief Management of the timing module interrupt service routine.
- * @param None
- * @retval None
- */
-void TSL_tim_ProcessIT(void)
-{
- static TSL_tTick_ms_T count_1s = 0;
-
- // Count 1 global tick every xxx ms (defined by TSLPRM_TICK_FREQ parameter)
- TSL_Globals.Tick_ms++;
-
- // Check if 1 second has elapsed
- count_1s++;
- if (count_1s > (TSLPRM_TICK_FREQ - 1))
- {
- TSL_Globals.Tick_sec++; // 1 global tick every second
- if (TSL_Globals.Tick_sec > 63) // Due to DTO counter on 6 bits...
- {
- TSL_Globals.Tick_sec = 0;
- }
- count_1s = 0;
- }
-
-// Callback function
-#if TSLPRM_USE_TIMER_CALLBACK > 0
- TSL_CallBack_TimerTick();
-#endif
-
-}
-
-
-/**
- * @brief Check if a delay (in ms) has elapsed.
- * This function must be called regularly due to counter Roll-over only managed one time.
- * @param[in] delay_ms Delay in ms
- * @param[in] last_tick Variable holding the last tick value
- * @retval Status
- */
-TSL_Status_enum_T TSL_tim_CheckDelay_ms(TSL_tTick_ms_T delay_ms, __IO TSL_tTick_ms_T *last_tick)
-{
- TSL_tTick_ms_T tick;
- TSL_tTick_ms_T diff;
-
- disableInterrupts();
-
- tick = TSL_Globals.Tick_ms;
-
- if (delay_ms == 0)
- {
- enableInterrupts();
- return TSL_STATUS_ERROR;
- }
-
- // Counter Roll-over management
- if (tick >= *last_tick)
- {
- diff = tick - *last_tick;
- }
- else
- {
- diff = (0xFFFF - *last_tick) + tick + 1;
- }
-
-#if (TSLPRM_TICK_FREQ == 125)
- if (diff >= (TSL_tTick_ms_T)(delay_ms >> 3)) // Divide by 8 for 8ms tick
-#endif
-#if (TSLPRM_TICK_FREQ == 250)
- if (diff >= (TSL_tTick_ms_T)(delay_ms >> 2)) // Divide by 4 for 4ms tick
-#endif
-#if (TSLPRM_TICK_FREQ == 500)
- if (diff >= (TSL_tTick_ms_T)(delay_ms >> 1)) // Divide by 2 for 2ms tick
-#endif
-#if (TSLPRM_TICK_FREQ == 1000)
- if (diff >= (TSL_tTick_ms_T)delay_ms) // Direct value for 1ms tick
-#endif
-#if (TSLPRM_TICK_FREQ == 2000)
- if (diff >= (TSL_tTick_ms_T)(delay_ms << 1)) // Multiply by 2 for 0.5ms tick
-#endif
- {
- // Save current time
- *last_tick = tick;
- enableInterrupts();
- return TSL_STATUS_OK;
- }
-
- enableInterrupts();
- return TSL_STATUS_BUSY;
-
-}
-
-
-/**
- * @brief Check if a delay (in s) has elapsed.
- * @param[in] delay_sec Delay in seconds
- * @param[in] last_tick Variable holding the last tick value
- * @retval Status
- */
-TSL_Status_enum_T TSL_tim_CheckDelay_sec(TSL_tTick_sec_T delay_sec, __IO TSL_tTick_sec_T *last_tick)
-{
- TSL_tTick_sec_T tick;
- TSL_tTick_sec_T diff;
-
- disableInterrupts();
-
- tick = TSL_Globals.Tick_sec;
-
- if (delay_sec == 0)
- {
- enableInterrupts();
- return TSL_STATUS_ERROR;
- }
-
- // Counter Roll-over management
- if (tick >= *last_tick)
- {
- diff = (TSL_tTick_sec_T)(tick - *last_tick);
- }
- else
- {
- diff = (TSL_tTick_sec_T)((63 - *last_tick) + tick + 1); // DTO counter is on 6 bits
- }
-
- if (diff >= delay_sec)
- {
- // Save current time
- *last_tick = tick;
- enableInterrupts();
- return TSL_STATUS_OK;
- }
-
- enableInterrupts();
- return TSL_STATUS_BUSY;
-
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm32f0xx.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm32f0xx.c
deleted file mode 100644
index 4db154a..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm32f0xx.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_time_stm32f0xx.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the timing with STM32F0xx products.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_time_stm32f0xx.h"
-#include "stm32f0xx_misc.h"
-#include "stm32f0xx_rtc.h"
-#include "stm32f0xx_tim.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-/* Private macros ------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Private functions prototype -----------------------------------------------*/
-
-/**
- * @brief Initialization of the timing module.
- * @param None
- * @retval Status Return TSL_STATUS_ERROR if the Systick configuration has failed.
- */
-TSL_Status_enum_T TSL_tim_Init(void)
-{
- // Program one systick interrupt every (1 / TSLPRM_TICK_FREQ) ms
-// if (SysTick_Config(SystemCoreClock / TSLPRM_TICK_FREQ))
-// {
-// return TSL_STATUS_ERROR;
-// }
-// else
-// {
-// return TSL_STATUS_OK;
-// }
-
- NVIC_InitTypeDef NVIC_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
-
- /* TouchSense_TIMx clock enable */
- TS_RCC_APBxPeriphClockCmd ( TS_TIM_RCC, ENABLE );
-
- /* Enable the TouchSense_TIMx gloabal Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = TS_TIM_IRQx;
- NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init ( &NVIC_InitStructure );
-
- /* -----------------------------------------------------------------------
- In this example TIM7 counter clock (TIM7CLK) is set to APB1 clock (PCLK1), since
- APB1 prescaler is set to 1 and TIM7 prescaler is set to 0.
-
- In this example TIM7 input clock (TIM7CLK) is set to APB1 clock (PCLK1),
- since APB1 prescaler is set to 1.
- TIM7CLK = PCLK1 = HCLK = SystemCoreClock
-
- With Prescaler set to 479 and Period to 24999, the TIM7 counter is updated each 250 ms
- (i.e. and interrupt is generated each 250 ms)
- TIM7 counter clock = TIM7CLK /((Prescaler + 1)*(Period + 1))
- = 48 MHz / ((25000)*(480))
- = 4 Hz
- ==> TIM7 counter period = 250 ms
-
- Note:
- SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f0xx.c file.
- Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate()
- function to update SystemCoreClock variable value. Otherwise, any configuration
- based on this variable will be incorrect.
- ----------------------------------------------------------------------- */
-
- /* Time base configuration */
- TIM_TimeBaseStructure.TIM_Period = 1000; // Ýòî ìèêñðîñåêóíäû //24999
- TIM_TimeBaseStructure.TIM_Prescaler = (SystemCoreClock/1000000)-1; //479;
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit ( TS_TIMx, &TIM_TimeBaseStructure );
-
- /* TouchSense_TIMx Interrupts enable */
- TIM_ITConfig ( TS_TIMx, TIM_IT_Update, ENABLE );
-
- /* TouchSense_TIMx enable counter */
- TIM_Cmd ( TS_TIMx, ENABLE );
-
- return TSL_STATUS_OK;
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm32f3xx.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm32f3xx.c
deleted file mode 100644
index 15135e7..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm32f3xx.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_time_stm32f3xx.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the timing with STM32F3xx products.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_time_stm32f3xx.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-/* Private macros ------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Private functions prototype -----------------------------------------------*/
-
-/**
- * @brief Initialization of the timing module.
- * @param None
- * @retval Status Return TSL_STATUS_ERROR if the Systick configuration has failed.
- */
-TSL_Status_enum_T TSL_tim_Init(void)
-{
- // Program one systick interrupt every (1 / TSLPRM_TICK_FREQ) ms
- if (SysTick_Config(SystemCoreClock / TSLPRM_TICK_FREQ))
- {
- return TSL_STATUS_ERROR;
- }
- else
- {
- return TSL_STATUS_OK;
- }
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm32l1xx.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm32l1xx.c
deleted file mode 100644
index 6dfe699..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm32l1xx.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_time_stm32l1xx.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the timing with STM32L1xx products.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_time_stm32l1xx.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-/* Private macros ------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Private functions prototype -----------------------------------------------*/
-
-/**
- * @brief Initialization of the timing module.
- * @param None
- * @retval Status Return TSL_STATUS_ERROR if the Systick configuration has failed.
- */
-TSL_Status_enum_T TSL_tim_Init(void)
-{
- // Program one systick interrupt every (1 / TSLPRM_TICK_FREQ) ms
- if (SysTick_Config(SystemCoreClock / TSLPRM_TICK_FREQ))
- {
- return TSL_STATUS_ERROR;
- }
- else
- {
- return TSL_STATUS_OK;
- }
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm8l.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm8l.c
deleted file mode 100644
index 06904eb..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm8l.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_time_stm8l.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the timing with STM8L products.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_time_stm8l.h"
-#include "tsl_time.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-/* Private macros ------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Private functions prototype -----------------------------------------------*/
-
-
-/**
- * @brief Initialization of the timing module.
- * @param None
- * @retval Status Return TSL_STATUS_ERROR if the clock divider is wrong
- */
-TSL_Status_enum_T TSL_tim_Init(void)
-{
- // Enable TIM4 clock
-#if defined(STM8L10X)
- CLK->PCKENR |= CLK_PCKENR_TIM4;
-#else // STM8L15X
- CLK->PCKENR1 |= CLK_PCKENR1_TIM4;
-#endif
-
- if (CLK->CKDIVR != 0x00) // Warning: The CPU frequency must be equal to 16 MHz
- {
- return TSL_STATUS_ERROR;
- }
-
- TIM4->SR1 = 0; // Clear overflow flag
-
-#if (TSLPRM_TICK_FREQ == 2000)
- TIM4->PSCR = 6; // 16 MHz / 64 = 4 us clock
- TIM4->ARR = 124; // 125 * 4 us = 0.5 ms
-#endif
-
-#if (TSLPRM_TICK_FREQ == 1000)
- TIM4->PSCR = 6; // 16 MHz / 64 = 4 us clock
- TIM4->ARR = 249; // 250 * 4 us = 1 ms
-#endif
-
-#if (TSLPRM_TICK_FREQ == 500)
- TIM4->PSCR = 8; // 16 MHz / 256 = 16 us clock
- TIM4->ARR = 124; // 125 * 16 us = 2 ms
-#endif
-
-#if (TSLPRM_TICK_FREQ == 250)
- TIM4->PSCR = 8; // 16 MHz / 256 = 16 us clock
- TIM4->ARR = 249; // 250 * 16 us = 4 ms
-#endif
-
-#if (TSLPRM_TICK_FREQ == 125)
- TIM4->PSCR = 10; // 16 MHz / 1024 = 64 us clock
- TIM4->ARR = 124; // 125 * 64 us = 8 ms
-#endif
-
- TIM4->IER = 0x01; // Enable interrupt
- TIM4->CR1 = 0x01; // Start timer
-
- return TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Interrupt handler for TIM4 dedicated to ECS
- * @param None
- * @retval None
- */
-#if defined(_COSMIC_)
-// 'svlreg option' is added to force the saving of the virtual long register
-@svlreg INTERRUPT_HANDLER(TSL_Timer_ISR, 25)
-#else
-INTERRUPT_HANDLER(TSL_Timer_ISR, 25)
-#endif
-{
- TIM4->SR1 &= (uint8_t)(~TIM4_SR1_UIF);
- TSL_tim_ProcessIT();
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm8tl5x.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm8tl5x.c
deleted file mode 100644
index 143ba5d..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_time_stm8tl5x.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_time_stm8tl5x.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage the timing with STM8TL5x products.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_time_stm8tl5x.h"
-#include "tsl_time.h"
-#include "stm8tl5x_it.h"
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-/* Private macros ------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Private functions prototype -----------------------------------------------*/
-
-/**
- * @brief Initialization of the timing module to generate periodic interruptions
- * @warning The CPU frequency must be equal to 16 MHz
- * @param None
- * @retval Status Return TSL_STATUS_ERROR if the CPU freq in uncorrect.
- */
-TSL_Status_enum_T TSL_tim_Init(void)
-{
- CLK->PCKENR1 |= CLK_PCKENR1_TIM4; // The peripheral clock are not enable by default
-
- if (CLK->CKDIVR != 0x00) // The CPU frequency must be equal to 16 MHz
- {
- return TSL_STATUS_ERROR;
- }
-
- TIM4->SR1 = 0; // Clear overflow flag
-
-#if (TSLPRM_TICK_FREQ == 2000)
- TIM4->PSCR = 6; // 16 MHz / 64 = 4 us clock
- TIM4->ARR = 124; // 125 * 4 us = 0.5 ms
-#endif
-
-#if (TSLPRM_TICK_FREQ == 1000)
- TIM4->PSCR = 6; // 16 MHz / 64 = 4 us clock
- TIM4->ARR = 249; // 250 * 4 us = 1 ms
-#endif
-
-#if (TSLPRM_TICK_FREQ == 500)
- TIM4->PSCR = 8; // 16 MHz / 256 = 16 us clock
- TIM4->ARR = 124; // 125 * 16 us = 2 ms
-#endif
-
-#if (TSLPRM_TICK_FREQ == 250)
- TIM4->PSCR = 8; // 16 MHz / 256 = 16 us clock
- TIM4->ARR = 249; // 250 * 16 us = 4 ms
-#endif
-
-#if (TSLPRM_TICK_FREQ == 125)
- TIM4->PSCR = 10; // 16 MHz / 1024 = 64 us clock
- TIM4->ARR = 124; // 125 * 64 us = 8 ms
-#endif
-
- TIM4->IER = 0x01; // Enable interrupt
- TIM4->CR1 = 0x01; // Start timer
-
- return TSL_STATUS_OK;
-}
-
-
-/**
- * @brief Interrupt handler for TIM4 dedicated to ECS
- * @param None
- * @retval None
- */
-#if defined(_COSMIC_)
-// 'svlreg option' is added to force the saving of the virtual long register
-@svlreg INTERRUPT_HANDLER(TSL_Timer_ISR, 25)
-#else
-INTERRUPT_HANDLER(TSL_Timer_ISR, 25)
-#endif
-{
- TIM4->SR1 &= (uint8_t)(~TIM4_SR1_UIF);
- TSL_tim_ProcessIT();
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Libraries/TouchSense/STMTouch_Driver/src/tsl_touchkey.c b/Libraries/TouchSense/STMTouch_Driver/src/tsl_touchkey.c
deleted file mode 100644
index c419e7c..0000000
--- a/Libraries/TouchSense/STMTouch_Driver/src/tsl_touchkey.c
+++ /dev/null
@@ -1,1089 +0,0 @@
-/**
- ******************************************************************************
- * @file tsl_touchkey.c
- * @author MCD Application Team
- * @version V1.4.4
- * @date 31-March-2014
- * @brief This file contains all functions to manage TouchKey sensors.
- ******************************************************************************
- * @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.
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "tsl_touchkey.h"
-#include "tsl_globals.h"
-
-#if TSLPRM_TOTAL_TKEYS > 0
-
-/* Private typedefs ----------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-
-/* Private macros ------------------------------------------------------------*/
-
-#define THIS_MEAS TSL_Globals.This_TKey->p_ChD->Meas
-#define THIS_DELTA TSL_Globals.This_TKey->p_ChD->Delta
-#define THIS_REF TSL_Globals.This_TKey->p_ChD->Ref
-#define THIS_REFREST TSL_Globals.This_TKey->p_ChD->RefRest
-#define THIS_CHANNEL_DATA TSL_Globals.This_TKey->p_ChD
-#define THIS_ACQ_STATUS TSL_Globals.This_TKey->p_ChD->Flags.AcqStatus
-#define THIS_OBJ_STATUS TSL_Globals.This_TKey->p_ChD->Flags.ObjStatus
-#define THIS_DATA_READY TSL_Globals.This_TKey->p_ChD->Flags.DataReady
-
-#define THIS_STATEID TSL_Globals.This_TKey->p_Data->StateId
-#define THIS_CHANGE TSL_Globals.This_TKey->p_Data->Change
-#define THIS_COUNTER_DEB TSL_Globals.This_TKey->p_Data->CounterDebounce
-#define THIS_COUNTER_DTO TSL_Globals.This_TKey->p_Data->CounterDTO
-#define THIS_DXSLOCK TSL_Globals.This_TKey->p_Data->DxSLock
-
-#define THIS_PROXIN_TH TSL_Globals.This_TKey->p_Param->ProxInTh
-#define THIS_PROXOUT_TH TSL_Globals.This_TKey->p_Param->ProxOutTh
-#define THIS_DETECTIN_TH TSL_Globals.This_TKey->p_Param->DetectInTh
-#define THIS_DETECTOUT_TH TSL_Globals.This_TKey->p_Param->DetectOutTh
-#define THIS_CALIB_TH TSL_Globals.This_TKey->p_Param->CalibTh
-
-#define THIS_COUNTER_DEB_CALIB TSL_Globals.This_TKey->p_Param->CounterDebCalib
-#define THIS_COUNTER_DEB_PROX TSL_Globals.This_TKey->p_Param->CounterDebProx
-#define THIS_COUNTER_DEB_DETECT TSL_Globals.This_TKey->p_Param->CounterDebDetect
-#define THIS_COUNTER_DEB_RELEASE TSL_Globals.This_TKey->p_Param->CounterDebRelease
-#define THIS_COUNTER_DEB_ERROR TSL_Globals.This_TKey->p_Param->CounterDebError
-
-#if TSLPRM_DTO > 0
-#define DTO_GET_TIME {TSL_tkey_DTOGetTime();}
-#else
-#define DTO_GET_TIME
-#endif
-
-#if TSLPRM_COEFF_TH > 0
-#define TEST_DELTA(OPER,TH) (THIS_DELTA OPER (uint16_t)((uint16_t)TH << TSLPRM_COEFF_TH))
-#define TEST_DELTA_N(OPER,TH) (THIS_DELTA OPER -((uint16_t)((uint16_t)TH << TSLPRM_COEFF_TH)))
-#define TEST_DELTA_NEGATIVE {if (THIS_DELTA < 0) {return;}}
-#else
-#define TEST_DELTA(OPER,TH) (THIS_DELTA OPER TH)
-#define TEST_DELTA_N(OPER,TH) (THIS_DELTA OPER -(TH))
-#define TEST_DELTA_NEGATIVE
-#endif
-
-/* Private variables ---------------------------------------------------------*/
-
-static TSL_tNb_T CalibDiv;
-
-/* Private functions prototype -----------------------------------------------*/
-
-void TSL_tkey_DTOGetTime(void);
-
-
-//==============================================================================
-// "Object methods" functions
-//==============================================================================
-
-/**
- * @brief Init parameters with default values from configuration file
- * @param None
- * @retval None
- */
-void TSL_tkey_Init(void)
-{
- // Thresholds
-#if TSLPRM_USE_PROX > 0
- THIS_PROXIN_TH = TSLPRM_TKEY_PROX_IN_TH;
- THIS_PROXOUT_TH = TSLPRM_TKEY_PROX_OUT_TH;
-#endif
- THIS_DETECTIN_TH = TSLPRM_TKEY_DETECT_IN_TH;
- THIS_DETECTOUT_TH = TSLPRM_TKEY_DETECT_OUT_TH;
- THIS_CALIB_TH = TSLPRM_TKEY_CALIB_TH;
-
- // Debounce counters
- THIS_COUNTER_DEB_CALIB = TSLPRM_DEBOUNCE_CALIB;
-#if TSLPRM_USE_PROX > 0
- THIS_COUNTER_DEB_PROX = TSLPRM_DEBOUNCE_PROX;
-#endif
- THIS_COUNTER_DEB_DETECT = TSLPRM_DEBOUNCE_DETECT;
- THIS_COUNTER_DEB_RELEASE = TSLPRM_DEBOUNCE_RELEASE;
- THIS_COUNTER_DEB_ERROR = TSLPRM_DEBOUNCE_ERROR;
-
- // Initial state
- TSL_tkey_SetStateCalibration(TSLPRM_CALIB_DELAY);
-}
-
-
-/**
- * @brief Process the State Machine
- * @param None
- * @retval None
- */
-void TSL_tkey_Process(void)
-{
- TSL_StateId_enum_T prev_state_id;
-
- if ((THIS_DATA_READY != 0) || (THIS_STATEID == TSL_STATEID_OFF))
- {
-
- THIS_DATA_READY = TSL_DATA_NOT_READY; // The new data is processed
-
- prev_state_id = THIS_STATEID;
-
-#if TSLPRM_TOTAL_TOUCHKEYS > 0
- if (TSL_Globals.This_Obj->Type == TSL_OBJ_TOUCHKEY)
- {
- // Launch the TKey state function
- TSL_Globals.This_TKey->p_SM[THIS_STATEID].StateFunc();
- }
-#endif
-
-#if TSLPRM_TOTAL_TOUCHKEYS_B > 0
- if (TSL_Globals.This_Obj->Type == TSL_OBJ_TOUCHKEYB)
- {
- // Launch the TSL_Params state function
- TSL_Params.p_TKeySM[THIS_STATEID].StateFunc();
- }
-#endif
-
- // Check if the new state has changed
- if (THIS_STATEID == prev_state_id)
- {
- THIS_CHANGE = TSL_STATE_NOT_CHANGED;
- }
- else
- {
- THIS_CHANGE = TSL_STATE_CHANGED;
- }
-
-#if TSLPRM_USE_DXS > 0
- if (THIS_STATEID != TSL_STATEID_DETECT)
- {
- THIS_DXSLOCK = TSL_FALSE;
- }
- if (THIS_STATEID == TSL_STATEID_TOUCH)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- }
-#endif
-
- }
-}
-
-
-//==============================================================================
-// Utility functions
-//==============================================================================
-
-/**
- * @brief Go in Calibration state
- * @param[in] delay Delay before calibration starts (stabilization of noise filter)
- * @retval None
- */
-void TSL_tkey_SetStateCalibration(TSL_tCounter_T delay)
-{
- THIS_STATEID = TSL_STATEID_CALIB;
- THIS_CHANGE = TSL_STATE_CHANGED;
- THIS_OBJ_STATUS = TSL_OBJ_STATUS_ON;
-
- switch (TSL_Params.NbCalibSamples)
- {
- case 4:
- CalibDiv = 2;
- break;
- case 16:
- CalibDiv = 4;
- break;
- default:
- TSL_Params.NbCalibSamples = 8;
- CalibDiv = 3;
- break;
- }
-
- // If a noise filter is used, the counter must be initialized to a value
- // different from 0 in order to stabilize the filter.
- THIS_COUNTER_DEB = (TSL_tCounter_T)(delay + (TSL_tCounter_T)TSL_Params.NbCalibSamples);
- THIS_REF = 0;
-}
-
-
-/**
- * @brief Go in Off state with sensor "off"
- * @param None
- * @retval None
- */
-void TSL_tkey_SetStateOff(void)
-{
- THIS_STATEID = TSL_STATEID_OFF;
- THIS_CHANGE = TSL_STATE_CHANGED;
- THIS_OBJ_STATUS = TSL_OBJ_STATUS_OFF;
-}
-
-
-#if !defined(TSLPRM_STM8TL5X) && !defined(STM8TL5X)
-/**
- * @brief Go in Off state with sensor in "Burst mode only"
- * @param None
- * @retval None
- */
-void TSL_tkey_SetStateBurstOnly(void)
-{
- THIS_STATEID = TSL_STATEID_OFF;
- THIS_CHANGE = TSL_STATE_CHANGED;
- THIS_OBJ_STATUS = TSL_OBJ_STATUS_BURST_ONLY;
-}
-#endif
-
-
-/**
- * @brief Return the current state identifier
- * @param None
- * @retval State id
- */
-TSL_StateId_enum_T TSL_tkey_GetStateId(void)
-{
- return(THIS_STATEID);
-}
-
-
-/**
- * @brief Return the current state mask
- * @param None
- * @retval State mask
- */
-TSL_StateMask_enum_T TSL_tkey_GetStateMask(void)
-{
- TSL_StateMask_enum_T state_mask = TSL_STATEMASK_UNKNOWN;
-
-#if TSLPRM_TOTAL_TOUCHKEYS > 0
- if (TSL_Globals.This_Obj->Type == TSL_OBJ_TOUCHKEY)
- {
- state_mask = TSL_Globals.This_TKey->p_SM[THIS_STATEID].StateMask;
- }
-#endif
-
-#if TSLPRM_TOTAL_TOUCHKEYS_B > 0
- if (TSL_Globals.This_Obj->Type == TSL_OBJ_TOUCHKEYB)
- {
- state_mask = TSL_Params.p_TKeySM[THIS_STATEID].StateMask;
- }
-#endif
-
- return state_mask;
-}
-
-
-/**
- * @brief Return the Change flag
- * @param None
- * @retval Change flag status
- */
-TSL_tNb_T TSL_tkey_IsChanged(void)
-{
- return(THIS_CHANGE);
-}
-
-
-//==============================================================================
-// State machine functions
-//==============================================================================
-
-#if TSLPRM_USE_PROX > 0
-/**
- * @brief Debounce Release processing (previous state = Proximity)
- * @param None
- * @retval None
- */
-void TSL_tkey_DebReleaseProxStateProcess(void)
-{
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_PROX; // Go back to the previous state
- }
- else // Acquisition is OK or has NOISE
- {
- if (THIS_DELTA > THIS_PROXOUT_TH)
- {
- THIS_STATEID = TSL_STATEID_PROX; // Go back to the previous state
- }
- else
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- // else stay in Debounce Release
- }
- }
-}
-#endif // if TSLPRM_USE_PROX > 0
-
-
-/**
- * @brief Debounce Release processing (previous state = Detect)
- * @param None
- * @retval None
- */
-void TSL_tkey_DebReleaseDetectStateProcess(void)
-{
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_DETECT; // Go back to the previous state
- }
- else // Acquisition is OK or has NOISE
- {
- if TEST_DELTA(>, THIS_DETECTOUT_TH)
- {
- TEST_DELTA_NEGATIVE;
- THIS_STATEID = TSL_STATEID_DETECT;
- }
- else
- {
-#if TSLPRM_USE_PROX > 0
- if (THIS_DELTA > THIS_PROXOUT_TH)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- return;
- }
-#endif
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- // else stay in Debounce Release
- }
- }
-}
-
-
-/**
- * @brief Debounce Release processing (previous state = Touch)
- * Same as Debounce Release Detect processing
- * @param None
- * @retval None
- */
-void TSL_tkey_DebReleaseTouchStateProcess(void)
-{
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_TOUCH; // Go back to the previous state
- }
- else // Acquisition is OK or has NOISE
- {
- if TEST_DELTA(>, THIS_DETECTOUT_TH)
- {
- TEST_DELTA_NEGATIVE;
- THIS_STATEID = TSL_STATEID_TOUCH;
- }
- else
- {
-#if TSLPRM_USE_PROX > 0
- if (THIS_DELTA > THIS_PROXOUT_TH)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- return;
- }
-#endif
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- // else stay in Debounce Release
- }
- }
-}
-
-
-/**
- * @brief Release state processing
- * @param None
- * @retval None
- */
-void TSL_tkey_ReleaseStateProcess(void)
-{
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_ERROR;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_ERROR;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_ERROR_RELEASE;
- }
- }
- else // Acquisition is OK or has NOISE
- {
- if TEST_DELTA(>=, THIS_DETECTIN_TH)
- {
- TEST_DELTA_NEGATIVE;
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_DETECT;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_DETECT;
- }
- return;
- }
-
-#if TSLPRM_USE_PROX > 0
- if (THIS_DELTA >= THIS_PROXIN_TH)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_PROX;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_PROX;
- }
- return;
- }
-#endif
-
- // Check delta for re-calibration
- // Warning: the threshold value is inverted in the macro
- if TEST_DELTA_N(<=, THIS_CALIB_TH)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_CALIB;
- if (THIS_COUNTER_DEB == 0)
- {
- TSL_tkey_SetStateCalibration(0);
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_CALIB;
- }
- }
- }
-}
-
-
-/**
- * @brief Debounce Calibration processing (previous state = Release)
- * @param None
- * @retval None
- */
-void TSL_tkey_DebCalibrationStateProcess(void)
-{
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_RELEASE; // Go back to the previous state
- }
- else // Acquisition is OK or has NOISE
- {
- // Still below recalibration threshold
- // Warning: the threshold value is inverted in the macro
- if TEST_DELTA_N(<=, THIS_CALIB_TH)
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- TSL_tkey_SetStateCalibration(0);
- }
- // else stay in Debounce Calibration
- }
- else // Go back to previous state
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- }
-}
-
-
-/**
- * @brief Calibration state processing
- * @param None
- * @retval None
- */
-void TSL_tkey_CalibrationStateProcess(void)
-{
- TSL_tMeas_T new_meas;
-
-#if TSLPRM_CALIB_DELAY > 0
- // Noise filter stabilization time
- if (THIS_COUNTER_DEB > (TSL_tCounter_T)TSL_Params.NbCalibSamples)
- {
- THIS_COUNTER_DEB--;
- return; // Skip the sample
- }
-#endif
-
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_ERROR;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_ERROR;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_ERROR_CALIB;
- }
- }
- else // Acquisition is OK or has NOISE
- {
-
- // Get the new measure or Calculate it
-#if TSLPRM_USE_MEAS > 0
- new_meas = THIS_MEAS;
-#else // Calculate it
- new_meas = TSL_acq_ComputeMeas(THIS_REF, THIS_DELTA);
-#endif
-
- // Verify the first Reference value
- if (THIS_COUNTER_DEB == (TSL_tCounter_T)TSL_Params.NbCalibSamples)
- {
- if (TSL_acq_TestFirstReferenceIsValid(THIS_CHANNEL_DATA, new_meas))
- {
- THIS_REF = new_meas;
- }
- else
- {
- THIS_REF = 0;
- return;
- }
- }
- else
- {
- // Add the measure in temporary Reference
- THIS_REF += new_meas;
-
- // Check reference overflow
- if (THIS_REF < new_meas)
- {
- THIS_REF = 0; // Suppress the bad reference
- THIS_STATEID = TSL_STATEID_ERROR;
- return;
- }
- }
-
- // Check that we have all the needed measurements
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- // Divide temporary Reference by the number of samples
- THIS_REF >>= CalibDiv;
- THIS_REFREST = 0;
- THIS_DELTA = 0;
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- }
-}
-
-
-#if TSLPRM_USE_PROX > 0
-/**
- * @brief Debounce Proximity processing (previous state = Release)
- * @param None
- * @retval None
- */
-void TSL_tkey_DebProxStateProcess(void)
-{
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else // Acquisition is OK or has NOISE
- {
- if TEST_DELTA(>=, THIS_DETECTIN_TH)
- {
- TEST_DELTA_NEGATIVE;
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_DETECT;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_DETECT;
- }
- return;
- }
-
- if (THIS_DELTA >= THIS_PROXIN_TH)
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- // else stay in Debounce Proximity
- }
- else
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- }
-}
-#endif
-
-
-#if TSLPRM_USE_PROX > 0
-/**
- * @brief Debounce Proximity processing (previous state = Detect)
- * @param None
- * @retval None
- */
-void TSL_tkey_DebProxDetectStateProcess(void)
-{
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- }
- else // Acquisition is OK or has NOISE
- {
- if TEST_DELTA(>, THIS_DETECTOUT_TH)
- {
- TEST_DELTA_NEGATIVE;
- THIS_STATEID = TSL_STATEID_DETECT;
- return;
- }
-
- if (THIS_DELTA > THIS_PROXOUT_TH)
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- // else stay in Debounce Proximity
- }
- else
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_RELEASE;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_RELEASE_DETECT;
- }
- }
- }
-}
-#endif
-
-
-#if TSLPRM_USE_PROX > 0
-/**
- * @brief Debounce Proximity processing (previous state = Touch)
- * @param None
- * @retval None
- */
-void TSL_tkey_DebProxTouchStateProcess(void)
-{
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_TOUCH;
- }
- else // Acquisition is OK or has NOISE
- {
- if TEST_DELTA(>, THIS_DETECTOUT_TH)
- {
- TEST_DELTA_NEGATIVE;
- THIS_STATEID = TSL_STATEID_TOUCH;
- return;
- }
-
- if (THIS_DELTA > THIS_PROXOUT_TH)
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- // else stay in Debounce Proximity
- }
- else
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_RELEASE;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_RELEASE_TOUCH;
- }
- }
- }
-}
-#endif
-
-
-#if TSLPRM_USE_PROX > 0
-/**
- * @brief Proximity state processing
- * @param None
- * @retval None
- */
-void TSL_tkey_ProxStateProcess(void)
-{
-#if TSLPRM_DTO > 0
- TSL_tTick_sec_T tick_detected;
-#endif
-
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_ERROR;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_ERROR;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_ERROR_PROX;
- }
- }
- else // Acquisition is OK or has NOISE
- {
- if TEST_DELTA(>=, THIS_DETECTIN_TH)
- {
- TEST_DELTA_NEGATIVE;
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_DETECT;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_DETECT;
- }
- return;
- }
-
- if (THIS_DELTA <= THIS_PROXOUT_TH)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_RELEASE;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_RELEASE_PROX;
- }
- return;
- }
-
- // Stay in Proximity state
-#if TSLPRM_DTO > 0
- //------------------------------------
- // Detection Time Out (DTO) processing
- //------------------------------------
- if ((TSL_Params.DTO > 1) && (TSL_Params.DTO < 64))
- {
- tick_detected = THIS_COUNTER_DTO; // Get the detected time previously saved
- // Enter in calibration state if the DTO duration has elapsed
- if (TSL_tim_CheckDelay_sec(TSL_Params.DTO, &tick_detected) == TSL_STATUS_OK)
- {
- TSL_tkey_SetStateCalibration(0);
- }
- }
-#endif
-
- }
-}
-#endif
-
-
-/**
- * @brief Debounce Detect processing (previous state = Release or Proximity)
- * @param None
- * @retval None
- */
-void TSL_tkey_DebDetectStateProcess(void)
-{
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else // Acquisition is OK or has NOISE
- {
- if TEST_DELTA(>=, THIS_DETECTIN_TH)
- {
- TEST_DELTA_NEGATIVE;
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_DETECT;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- // else stay in Debounce Detect
- }
- else
- {
-#if TSLPRM_USE_PROX > 0
- if (THIS_DELTA >= THIS_PROXIN_TH)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_PROX;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_PROX;
- }
- }
- else
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
-#else
- THIS_STATEID = TSL_STATEID_RELEASE;
-#endif
- }
- }
-}
-
-
-/**
- * @brief Detect state processing
- * @param None
- * @retval None
- */
-void TSL_tkey_DetectStateProcess(void)
-{
-#if TSLPRM_DTO > 0
- TSL_tTick_sec_T tick_detected;
-#endif
-
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_ERROR;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_ERROR;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_ERROR_DETECT;
- }
- }
- else // Acquisition is OK or has NOISE
- {
- if TEST_DELTA(>, THIS_DETECTOUT_TH)
- {
- TEST_DELTA_NEGATIVE;
-#if TSLPRM_DTO > 0
- //------------------------------------
- // Detection Time Out (DTO) processing
- //------------------------------------
- if ((TSL_Params.DTO > 1) && (TSL_Params.DTO < 64))
- {
- tick_detected = THIS_COUNTER_DTO; // Get the detected time previously saved
- // Enter in calibration state if the DTO duration has elapsed
- if (TSL_tim_CheckDelay_sec(TSL_Params.DTO, &tick_detected) == TSL_STATUS_OK)
- {
- TSL_tkey_SetStateCalibration(0);
- }
- }
-#endif
- return; // Normal operation, stay in Detect state
- }
-
-#if TSLPRM_USE_PROX > 0
- if (THIS_DELTA > THIS_PROXOUT_TH)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_PROX;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_PROX_DETECT;
- }
- return;
- }
-#endif
-
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_RELEASE;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_RELEASE_DETECT;
- }
-
- }
-}
-
-
-/**
- * @brief Touch state processing
- * Same as Detect state
- * @param None
- * @retval None
- */
-void TSL_tkey_TouchStateProcess(void)
-{
-#if TSLPRM_DTO > 0
- TSL_tTick_sec_T tick_detected;
-#endif
-
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_ERROR;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_ERROR;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_ERROR_TOUCH;
- }
- }
- else // Acquisition is OK or has NOISE
- {
- if TEST_DELTA(>, THIS_DETECTOUT_TH)
- {
- TEST_DELTA_NEGATIVE;
-#if TSLPRM_DTO > 0
- //------------------------------------
- // Detection Time Out (DTO) processing
- //------------------------------------
- if ((TSL_Params.DTO > 1) && (TSL_Params.DTO < 64))
- {
- tick_detected = THIS_COUNTER_DTO; // Get the detected time previously saved
- // Enter in calibration state if the DTO duration has elapsed
- if (TSL_tim_CheckDelay_sec(TSL_Params.DTO, &tick_detected) == TSL_STATUS_OK)
- {
- TSL_tkey_SetStateCalibration(0);
- }
- }
-#endif
- return; // Normal operation, stay in Touch state
- }
-
-#if TSLPRM_USE_PROX > 0
- if (THIS_DELTA > THIS_PROXOUT_TH)
- {
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_PROX;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_PROX;
- DTO_GET_TIME; // Take current time for DTO processing
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_PROX_TOUCH;
- }
- return;
- }
-#endif
-
- THIS_COUNTER_DEB = THIS_COUNTER_DEB_RELEASE;
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_RELEASE;
- }
- else
- {
- THIS_STATEID = TSL_STATEID_DEB_RELEASE_TOUCH;
- }
-
- }
-}
-
-
-/**
- * @brief Debounce error state processing
- * @param None
- * @retval None
- */
-void TSL_tkey_DebErrorStateProcess(void)
-{
- volatile TSL_StateMask_enum_T mask;
-
- if (THIS_ACQ_STATUS & TSL_ACQ_STATUS_ERROR_MASK) // Acquisition error (min or max)
- {
- if (THIS_COUNTER_DEB > 0) {THIS_COUNTER_DEB--;}
- if (THIS_COUNTER_DEB == 0)
- {
- THIS_STATEID = TSL_STATEID_ERROR;
- }
- }
- else // Acquisition is OK or has NOISE
- {
- // Get state mask
- mask = TSL_tkey_GetStateMask();
- // Mask Error and Debounce bits
-#ifdef _RAISONANCE_
- mask &= ~(TSL_STATE_DEBOUNCE_BIT_MASK | TSL_STATE_ERROR_BIT_MASK);
-#else
- mask &= (TSL_StateMask_enum_T)(~(TSL_STATE_DEBOUNCE_BIT_MASK | TSL_STATE_ERROR_BIT_MASK));
-#endif
- // Go back to the previous state
- switch (mask)
- {
- case TSL_STATEMASK_RELEASE :
- THIS_STATEID = TSL_STATEID_RELEASE;
- break;
- case TSL_STATEMASK_PROX :
- THIS_STATEID = TSL_STATEID_PROX;
- break;
- case TSL_STATEMASK_DETECT :
- THIS_STATEID = TSL_STATEID_DETECT;
- break;
- case TSL_STATEMASK_TOUCH :
- THIS_STATEID = TSL_STATEID_TOUCH;
- break;
- default:
- TSL_tkey_SetStateCalibration(0);
- break;
- }
- }
-}
-
-
-//==============================================================================
-// Private functions
-//==============================================================================
-
-/**
- * @brief Get the current time in second and affect it to the DTO counter (Private)
- * @param None
- * @retval None
- */
-void TSL_tkey_DTOGetTime(void)
-{
- disableInterrupts();
- THIS_COUNTER_DTO = (TSL_tCounter_T)TSL_Globals.Tick_sec;
- enableInterrupts();
-}
-
-#endif
-// #if TSLPRM_TOTAL_TKEYS > 0
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/