2034 lines
69 KiB
C
2034 lines
69 KiB
C
/* This source file is part of the ATMEL QTouch Library Release 5.0.8 */
|
|
|
|
/*****************************************************************************
|
|
*
|
|
* \file
|
|
*
|
|
* \brief This file contains the SAMD QTouch Library API for
|
|
* Capacitive Touch acquisition using the PTC module.
|
|
*
|
|
*
|
|
* - Userguide: QTouch Library Peripheral Touch Controller User Guide.
|
|
* - Support email: www.atmel.com/design-support/
|
|
*
|
|
*
|
|
* Copyright (c) 2013-2015 Atmel Corporation. All rights reserved.
|
|
*
|
|
* \asf_license_start
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
*
|
|
* 3. The name of Atmel may not be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* 4. This software may only be redistributed and used in connection with an
|
|
* Atmel micro-controller product.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
|
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
|
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
|
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* \asf_license_stop
|
|
*
|
|
******************************************************************************/
|
|
|
|
#ifndef TOUCH_API_PTC_H
|
|
#define TOUCH_API_PTC_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* compiler information
|
|
*
|
|
*
|
|
*----------------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* include files
|
|
*
|
|
*
|
|
*----------------------------------------------------------------------------*/
|
|
|
|
#include "touch.h"
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* macros
|
|
*
|
|
*
|
|
*----------------------------------------------------------------------------*/
|
|
#define MIN_NOISE_MEAS_SIGNAL_STABILITY_VAL 1u
|
|
#define MAX_NOISE_MEAS_SIGNAL_STABILITY_VAL 1000u
|
|
#define MIN_FREQ_AUTO_TUNE_SIG_STABILITY_VAL 1u
|
|
#define MAX_FREQ_AUTO_TUNE_SIG_STABILITY_VAL 1000u
|
|
#define MIN_NOISE_MEAS_BUFFER_CNT_VAL 3u
|
|
#define MAX_NOISE_MEAS_BUFFER_CNT_VAL 10u
|
|
#define MIN_NOISE_LIMIT_VAL 1u
|
|
#define MAX_NOISE_LIMIT_VAL 255u
|
|
#define MIN_FREQ_AUTO_TUNE_CNT 1u
|
|
#define MAX_FREQ_AUTO_TUNE_CNT 255u
|
|
#define MIN_LOCKOUT_COUNT 1u
|
|
#define MAX_LOCKOUT_COUNT 255u
|
|
|
|
#define EN_NOISE_MEAS 1u
|
|
#define DIS_NOISE_MEAS 0u
|
|
#define EN_FREQ_AUTO_TUNE 1u
|
|
#define DIS_FREQ_AUTO_TUNE 0u
|
|
|
|
#define MAX_LOCKOUT_VAL 2u
|
|
#define NO_RECAL_RE_EN 1u
|
|
|
|
/*Default AUTO TUNE define*/
|
|
#define DEF_AUTO_TUNE_NONE 0
|
|
|
|
/*Default AUTO_OS define*/
|
|
#define DEF_AUTO_OS_DISABLE 0
|
|
|
|
/*Default AKS feature define*/
|
|
#define DEF_AKS_DISABLE 0
|
|
|
|
#define DEF_FREQ_AUTO_TUNE_DISABLE 0
|
|
|
|
#define DEF_NOISE_MEAS_DISABLE 0
|
|
|
|
#define DEF_SENS_LOCKOUT_NO 2
|
|
|
|
#define DEF_MOIS_TOLERANCE_DISABLE 0
|
|
/*----------------------------------------------------------------------------
|
|
* manifest constants
|
|
*
|
|
*
|
|
*----------------------------------------------------------------------------*/
|
|
|
|
/*! \name Touch Library Acquisition Status bit-fields.
|
|
*/
|
|
/* ! @{ */
|
|
|
|
#define TOUCH_NO_ACTIVITY (0x0000u) /* !< No Touch activity. */
|
|
#define TOUCH_IN_DETECT (0x0001u) /* !< Atleast one Touch channel
|
|
* is in detect. */
|
|
#define TOUCH_STATUS_CHANGE (0x0002u) /* !< Change in Touch status of
|
|
* at-least one Touch channel. */
|
|
#define TOUCH_ROTOR_SLIDER_POS_CHANGE (0x0004u) /* !< Change in Rotor or Slider
|
|
* position of at-least one rotor
|
|
* or slider. */
|
|
#define TOUCH_CHANNEL_REF_CHANGE (0x0008u) /* !< Change in Reference value
|
|
* of at-least one Touch channel.
|
|
**/
|
|
#define TOUCH_BURST_AGAIN (0x0100u) /* !< Indicates that reburst is
|
|
* required to resolve Filtering
|
|
* or Calibration state. */
|
|
#define TOUCH_RESOLVE_CAL (0x0200u) /* !< Indicates that reburst is
|
|
* needed to resolve
|
|
* Calibration. */
|
|
#define TOUCH_RESOLVE_FILTERIN (0x0400u) /* !< Indicates that reburst is
|
|
* needed to resolve Filtering.
|
|
**/
|
|
#define TOUCH_RESOLVE_DI (0x0800u) /* !< Indicates that reburst is
|
|
* needed to resolve Detect
|
|
* Integration. */
|
|
#define TOUCH_RESOLVE_POS_RECAL (0x1000u) /* !< Indicates that reburst is
|
|
* needed to resolve
|
|
* Recalibration. */
|
|
|
|
#define TOUCH_CC_CALIB_ERROR (0x2000u) /* !< Indicates that CC
|
|
* calibration
|
|
* failed on at least
|
|
*one
|
|
* channel. */
|
|
|
|
#define TOUCH_AUTO_OS_IN_PROGRESS (0x4000u) /* !< Indicates that
|
|
* Auto-oversamples in progress
|
|
* to get stable channel
|
|
*signal. */
|
|
/* ! @} */
|
|
|
|
|
|
/*! \name Touch Library Sensor post-processing mode options.
|
|
*/
|
|
/* ! @{ */
|
|
#define TOUCH_LIBRARY_DRIVEN (0u)
|
|
|
|
#define TOUCH_APPLN_DRIVEN (1u)
|
|
|
|
/* ! @} */
|
|
|
|
/* ! \name SENSOR STATE CONFIGURATIONS */
|
|
/* !@{ */
|
|
|
|
/**
|
|
* \def GET_SENSOR_STATE(SENSOR_NUMBER)
|
|
* \brief To get the sensor state that it is in detect or not
|
|
* \param SENSOR_NUMBER for which the state to be detected
|
|
* \return Returns either 0 or 1
|
|
* If the bit value is 0, it is not in detect
|
|
* If the bit value is 1, it is in detect
|
|
*/
|
|
/* Self capacitance method */
|
|
#define GET_SELFCAP_SENSOR_STATE(SENSOR_NUMBER) (p_selfcap_measure_data-> \
|
|
p_sensor_states[(SENSOR_NUMBER / \
|
|
8)] & (1 << (SENSOR_NUMBER % 8))) >> (SENSOR_NUMBER % 8)
|
|
/* Mutual capacitance method */
|
|
#define GET_MUTLCAP_SENSOR_STATE(SENSOR_NUMBER) (p_mutlcap_measure_data-> \
|
|
p_sensor_states[(SENSOR_NUMBER / \
|
|
8)] & (1 << (SENSOR_NUMBER % 8))) >> (SENSOR_NUMBER % 8)
|
|
|
|
/**
|
|
* \def GET_MUTLCAP_SENSOR_NOISE_STATUS(SENSOR_NUMBER)
|
|
* \brief To get the noise status of a particular sensor - it is noisy or not
|
|
* \param SENSOR_NUMBER for which the noise status needs to be fetched
|
|
* \return Returns either 0 or 1
|
|
* If the bit value is 0, it is not noisy
|
|
* If the bit value is 1, it is noisy
|
|
*/
|
|
|
|
/* Mutual capacitance method */
|
|
#define GET_MUTLCAP_SENSOR_NOISE_STATUS(SENSOR_NUMBER) (p_mutlcap_measure_data-> \
|
|
p_sensor_noise_status[(SENSOR_NUMBER / \
|
|
8)] & (1 << (SENSOR_NUMBER % 8))) >> (SENSOR_NUMBER % 8)
|
|
|
|
/**
|
|
* \def GET_SELFCAP_SENSOR_NOISE_STATUS(SENSOR_NUMBER)
|
|
* \brief To get the noise status of a particular sensor - it is noisy or not
|
|
* \param SENSOR_NUMBER for which the noise status needs to be fetched
|
|
* \return Returns either 0 or 1
|
|
* If the bit value is 0, it is not noisy
|
|
* If the bit value is 1, it is noisy
|
|
*/
|
|
|
|
/* Mutual capacitance method */
|
|
#define GET_SELFCAP_SENSOR_NOISE_STATUS(SENSOR_NUMBER) (p_selfcap_measure_data-> \
|
|
p_sensor_noise_status[(SENSOR_NUMBER / \
|
|
8)] & (1 << (SENSOR_NUMBER % 8))) >> (SENSOR_NUMBER % 8)
|
|
|
|
/**
|
|
* \def GET_MUTLCAP_SENSOR_MOIS_STATUS(SNSR_NUM)
|
|
* \brief To get the mutual capacitance moisture status of a particular sensor
|
|
* \param SNSR_NUM for which the moisture status needs to be fetched
|
|
* \return Returns either 0 or 1
|
|
* If the bit value is 0, it is not moisture affected
|
|
* If the bit value is 1, it is moisture affected
|
|
*/
|
|
|
|
#define GET_MUTLCAP_SENSOR_MOIS_STATUS(SNSR_NUM) ((p_mutlcap_measure_data-> \
|
|
p_sensor_mois_status[(SNSR_NUM)/8] & (1<<((SNSR_NUM)%8))) \
|
|
>>(SNSR_NUM %8))
|
|
|
|
/**
|
|
* \def GET_SELFCAP_SENSOR_MOIS_STATUS(SNSR_NUM)
|
|
* \brief To get the self capacitance moisture status of a particular sensor
|
|
* \param SNSR_NUM for which the moisture status needs to be fetched
|
|
* \return Returns either 0 or 1
|
|
* If the bit value is 0, it is not moisture affected
|
|
* If the bit value is 1, it is moisture affected
|
|
*/
|
|
|
|
#define GET_SELFCAP_SENSOR_MOIS_STATUS(SNSR_NUM) ((p_selfcap_measure_data-> \
|
|
p_sensor_mois_status[(SNSR_NUM)/8] & (1<<((SNSR_NUM)%8)))>>\
|
|
(SNSR_NUM %8))
|
|
|
|
/**
|
|
* \def GET_ROTOR_SLIDER_POSITION(ROTOR_SLIDER_NUMBER)
|
|
* \brief To get the rotor angle or slider position.
|
|
* These values are valid only when the sensor state for
|
|
* corresponding rotor or slider shows in detect.
|
|
* \param ROTOR_SLIDER_NUMBER for which the position to be known
|
|
* \return Returns rotor angle or sensor position
|
|
*/
|
|
/* !@} */
|
|
/* Self capacitance method */
|
|
#define GET_SELFCAP_ROTOR_SLIDER_POSITION(ROTOR_SLIDER_NUMBER) \
|
|
p_selfcap_measure_data->p_rotor_slider_values[ \
|
|
ROTOR_SLIDER_NUMBER]
|
|
/* Mutual capacitance method */
|
|
#define GET_MUTLCAP_ROTOR_SLIDER_POSITION(ROTOR_SLIDER_NUMBER) \
|
|
p_mutlcap_measure_data->p_rotor_slider_values[ \
|
|
ROTOR_SLIDER_NUMBER]
|
|
|
|
/**
|
|
* Calculate X line bit position.
|
|
*/
|
|
#define X(n) (uint32_t)(1u << n)
|
|
|
|
/**
|
|
* Calculate Y line bit position.
|
|
*/
|
|
#define Y(n) (uint32_t)(1u << n)
|
|
|
|
/**
|
|
* Max position hysteresis allowed
|
|
*/
|
|
#define TOUCH_MAX_POS_HYST (7u)
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Mutual cap macros
|
|
*
|
|
*
|
|
*----------------------------------------------------------------------------*/
|
|
#if DEF_TOUCH_MUTLCAP == 1
|
|
#if (DEF_MUTLCAP_NUM_SENSORS == 0u)
|
|
#error 'Number of Sensors cannot be 0.'
|
|
#endif
|
|
|
|
#if (DEF_MUTLCAP_NUM_SENSORS > DEF_MUTLCAP_NUM_CHANNELS)
|
|
#error 'Number of Sensors cannot exceed number of channels'
|
|
#endif
|
|
|
|
/**
|
|
* Size of Touch Sensor.
|
|
*/
|
|
#define PRIV_MUTLCAP_SIZE_SENSOR (8u)
|
|
|
|
/**
|
|
* Size of Touch Channel.
|
|
*/
|
|
#define PRIV_MUTLCAP_SIZE_CHANNEL (13u)
|
|
|
|
/**
|
|
* Size of Touch Rotor Slider.
|
|
*/
|
|
#define PRIV_MUTLCAP_SIZE_RS (13u)
|
|
|
|
/**
|
|
* Size of Touch Pad bytes.
|
|
*/
|
|
#define PRIV_MUTLCAP_PAD_BYTE_SIZE (78u)
|
|
|
|
#define PRIV_CHANNELS_64_NO (64u)
|
|
#define PRIV_BYTES_IN_UINT64 (8u)
|
|
|
|
/**
|
|
* Touch Data block size.
|
|
*/
|
|
#define PRIV_MUTLCAP_DATA_BLK_SIZE ((PRIV_MUTLCAP_SIZE_SENSOR * \
|
|
DEF_MUTLCAP_NUM_SENSORS) + \
|
|
(PRIV_MUTLCAP_SIZE_CHANNEL * DEF_MUTLCAP_NUM_CHANNELS) + \
|
|
(PRIV_MUTLCAP_SIZE_RS * DEF_MUTLCAP_NUM_ROTORS_SLIDERS) + \
|
|
((DEF_MUTLCAP_NUM_CHANNELS + 7u) / 8u) + \
|
|
((DEF_MUTLCAP_NUM_CHANNELS + 7u) / 8u) + \
|
|
((DEF_MUTLCAP_NOISE_MEAS_ENABLE * DEF_MUTLCAP_NUM_CHANNELS + 7u) / 8u) + \
|
|
((DEF_MUTLCAP_NOISE_MEAS_ENABLE * DEF_MUTLCAP_NUM_CHANNELS + 7u) / 8u) + \
|
|
(DEF_MUTLCAP_NOISE_MEAS_ENABLE * 2 * \
|
|
DEF_MUTLCAP_NUM_CHANNELS) + \
|
|
(DEF_MUTLCAP_NOISE_MEAS_ENABLE * 2 * DEF_MUTLCAP_NUM_CHANNELS * \
|
|
DEF_MUTLCAP_NOISE_MEAS_BUFFER_CNT) + \
|
|
(DEF_MUTLCAP_FREQ_AUTO_TUNE_ENABLE * 2 * \
|
|
DEF_MUTLCAP_NUM_CHANNELS) + \
|
|
(PRIV_MUTLCAP_PAD_BYTE_SIZE) + \
|
|
(((((DEF_MUTLCAP_NUM_CHANNELS - \
|
|
1u) / \
|
|
PRIV_CHANNELS_64_NO) + \
|
|
1u) * PRIV_BYTES_IN_UINT64) * 2u) +\
|
|
(DEF_MUTLCAP_MOIS_TOLERANCE_ENABLE * DEF_MUTLCAP_NUM_SENSORS *2u) +\
|
|
(DEF_MUTLCAP_MOIS_TOLERANCE_ENABLE*(DEF_MUTLCAP_NUM_MOIS_GROUPS*8))+\
|
|
((DEF_MUTLCAP_MOIS_TOLERANCE_ENABLE * DEF_MUTLCAP_NUM_SENSORS+7)/8u))
|
|
|
|
/**
|
|
* Initialize rotor slider table.
|
|
*/
|
|
#if (DEF_MUTLCAP_NUM_ROTORS_SLIDERS != 0u)
|
|
#define PRIV_MUTLCAP_RS_TABLE_INIT touch_mutlcap_rs_table_init
|
|
#else
|
|
#define PRIV_MUTLCAP_RS_TABLE_INIT NULL
|
|
#endif /* MUTUAL_NUM_ROTORS_SLIDERS*/
|
|
|
|
#endif /* DEF_TOUCH_MUTLCAP. */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Self cap macros
|
|
*
|
|
*
|
|
*----------------------------------------------------------------------------*/
|
|
#if DEF_TOUCH_SELFCAP == 1
|
|
#if (DEF_SELFCAP_NUM_SENSORS == 0u)
|
|
#error 'Number of Sensors cannot be 0.'
|
|
#endif
|
|
|
|
#if (DEF_SELFCAP_NUM_SENSORS > DEF_SELFCAP_NUM_CHANNELS)
|
|
#error 'Number of Sensors cannot exceed number of channels'
|
|
#endif
|
|
|
|
/**
|
|
* Size of Touch Sensor.
|
|
*/
|
|
#define PRIV_SELFCAP_SIZE_SENSOR (8u)
|
|
|
|
/**
|
|
* Size of Touch Channel.
|
|
*/
|
|
#define PRIV_SELFCAP_SIZE_CHANNEL (13u)
|
|
|
|
/**
|
|
* Size of Touch Rotor Slider.
|
|
*/
|
|
#define PRIV_SELFCAP_SIZE_RS (13u)
|
|
|
|
/**
|
|
* Size of Touch Pad bytes.
|
|
*/
|
|
#define PRIV_SELFCAP_PAD_BYTE_SIZE (78u)
|
|
|
|
#define PRIV_BYTES_IN_UINT64 (8u)
|
|
|
|
/**
|
|
* Touch Data block size.
|
|
*/
|
|
#define PRIV_SELFCAP_DATA_BLK_SIZE ((PRIV_SELFCAP_SIZE_SENSOR * \
|
|
DEF_SELFCAP_NUM_CHANNELS) + \
|
|
(PRIV_SELFCAP_SIZE_CHANNEL * DEF_SELFCAP_NUM_CHANNELS) + \
|
|
(PRIV_SELFCAP_SIZE_RS * DEF_SELFCAP_NUM_ROTORS_SLIDERS) + \
|
|
((DEF_SELFCAP_NUM_CHANNELS + 7u) / 8u) + \
|
|
((DEF_SELFCAP_NUM_CHANNELS + 7u) / 8u) + \
|
|
((DEF_SELFCAP_NOISE_MEAS_ENABLE * DEF_SELFCAP_NUM_CHANNELS + 7u) / 8u) + \
|
|
((DEF_SELFCAP_NOISE_MEAS_ENABLE * DEF_SELFCAP_NUM_CHANNELS + 7u) / 8u) + \
|
|
(DEF_SELFCAP_NOISE_MEAS_ENABLE * 2 * \
|
|
DEF_SELFCAP_NUM_CHANNELS) + \
|
|
(DEF_SELFCAP_NOISE_MEAS_ENABLE * 2 * DEF_SELFCAP_NUM_CHANNELS * \
|
|
DEF_SELFCAP_NOISE_MEAS_BUFFER_CNT) + \
|
|
(DEF_SELFCAP_FREQ_AUTO_TUNE_ENABLE * 2 * \
|
|
DEF_SELFCAP_NUM_CHANNELS) + \
|
|
(PRIV_SELFCAP_PAD_BYTE_SIZE) + \
|
|
(PRIV_BYTES_IN_UINT64 * 2u) +\
|
|
(DEF_SELFCAP_MOIS_TOLERANCE_ENABLE * DEF_SELFCAP_NUM_CHANNELS *2u) +\
|
|
(DEF_SELFCAP_MOIS_TOLERANCE_ENABLE *(DEF_SELFCAP_NUM_MOIS_GROUPS*8))+\
|
|
((DEF_SELFCAP_MOIS_TOLERANCE_ENABLE * DEF_SELFCAP_NUM_CHANNELS+7)/8u))
|
|
|
|
/**
|
|
* Initialize rotor slider table.
|
|
*/
|
|
#if (DEF_SELFCAP_NUM_ROTORS_SLIDERS != 0u)
|
|
#define PRIV_SELFCAP_RS_TABLE_INIT touch_selfcap_rs_table_init
|
|
#else
|
|
#define PRIV_SELFCAP_RS_TABLE_INIT NULL
|
|
#endif /* SELF_NUM_ROTORS_SLIDERS*/
|
|
#endif /* DEF_TOUCH_SELFCAP. */
|
|
|
|
|
|
#define LUMP_1(n) ((uint32_t)((uint32_t)1u << n))
|
|
#define LUMP_2(a,b) ((uint32_t)((uint32_t)1 << b) | (LUMP_1(a)))
|
|
#define LUMP_3(a,b,c) ((uint32_t)((uint32_t)1 << c) | (LUMP_2(a,b)))
|
|
#define LUMP_4(a,b,c,d) ((uint32_t)((uint32_t)1 << d) | (LUMP_3(a,b,c)))
|
|
#define LUMP_5(a,b,c,d,e) ((uint32_t)((uint32_t)1 << e) | (LUMP_4(a,b,c,d)))
|
|
#define LUMP_6(a,b,c,d,e,f) ((uint32_t)((uint32_t)1 << f) | (LUMP_5(a,b,c,d,e)))
|
|
#define LUMP_7(a,b,c,d,e,f,g) ((uint32_t)((uint32_t)1 << g) | (LUMP_6(a,b,c,d,e,f)))
|
|
#define LUMP_8(a,b,c,d,e,f,g,h) ((uint32_t)((uint32_t)1 << h) | (LUMP_7(a,b,c,d,e,f,g)))
|
|
#define LUMP_9(a,b,c,d,e,f,g,h,i) ((uint32_t)((uint32_t)1 << i) | (LUMP_8(a,b,c,d,e,f,g,h)))
|
|
#define LUMP_10(a,b,c,d,e,f,g,h,i,j) ((uint32_t)((uint32_t)1 << j) | (LUMP_9(a,b,c,d,e,f,g,h,i)))
|
|
#define LUMP_11(a,b,c,d,e,f,g,h,i,j,k) ((uint32_t)((uint32_t)1 << k) | (LUMP_10(a,b,c,d,e,f,g,h,i,j)))
|
|
#define LUMP_12(a,b,c,d,e,f,g,h,i,j,k,l) ((uint32_t)((uint32_t)1 << l) | (LUMP_11(a,b,c,d,e,f,g,h,i,j,k)))
|
|
#define LUMP_13(a,b,c,d,e,f,g,h,i,j,k,l,m) ((uint32_t)((uint32_t)1 << m) | (LUMP_12(a,b,c,d,e,f,g,h,i,j,k,l)))
|
|
#define LUMP_14(a,b,c,d,e,f,g,h,i,j,k,l,m,n) ((uint32_t)((uint32_t)1 << n) | (LUMP_13(a,b,c,d,e,f,g,h,i,j,k,l,m)))
|
|
#define LUMP_15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) ((uint32_t)((uint32_t)1 << o) | (LUMP_14(a,b,c,d,e,f,g,h,i,j,k,l,m,n)))
|
|
#define LUMP_16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) ((uint32_t)((uint32_t)1 << p) | (LUMP_15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)))
|
|
#define LUMP_17(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) ((uint32_t)((uint32_t)1 << q) | (LUMP_16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p)))
|
|
#define LUMP_18(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) ((uint32_t)((uint32_t)1 << r) | (LUMP_17(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q)))
|
|
#define LUMP_19(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s) ((uint32_t)((uint32_t)1 << s) | (LUMP_18(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r)))
|
|
#define LUMP_20(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t) ((uint32_t)((uint32_t)1 << t) | (LUMP_19(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s)))
|
|
#define LUMP_21(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u) ((uint32_t)((uint32_t)1 << u) | (LUMP_20(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t)))
|
|
#define LUMP_22(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v) ((uint32_t)((uint32_t)1 << v) | (LUMP_21(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u)))
|
|
#define LUMP_23(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) ((uint32_t)((uint32_t)1 << w) | (LUMP_22(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v)))
|
|
#define LUMP_24(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x) ((uint32_t)((uint32_t)1 << x) | (LUMP_23(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w)))
|
|
#define LUMP_25(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y) ((uint32_t)((uint32_t)1 << y) | (LUMP_24(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x)))
|
|
#define LUMP_26(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) ((uint32_t)((uint32_t)1 << z) | (LUMP_25(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y)))
|
|
#define LUMP_27(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa) ((uint32_t)((uint32_t)1 << aa) | (LUMP_26(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z)))
|
|
#define LUMP_28(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab) ((uint32_t)((uint32_t)1 << ab) | (LUMP_27(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa)))
|
|
#define LUMP_29(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab,ac) ((uint32_t)((uint32_t)1 << ac) | (LUMP_28(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab)))
|
|
#define LUMP_30(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab,ac,ad) ((uint32_t)((uint32_t)1 << ad) | (LUMP_29(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab,ac)))
|
|
#define LUMP_31(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab,ac,ad,ae) ((uint32_t)((uint32_t)1 << ae) | (LUMP_30(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,ab,ac,ad)))
|
|
#define LUMP_32(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab,ac,ad,ae,af) ((uint32_t)((uint32_t)1 << af) | (LUMP_31(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,ab,ac,ad,ae)))
|
|
|
|
#define _NUM_ARGS2(X,X16,X15,X14,X13,X12,X11,X10,X9,X8,X7,X6,X5,X4,X3,X2,X1,N,...) N
|
|
#define NUM_ARGS(...) _NUM_ARGS2(0, __VA_ARGS__ ,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
|
|
/*Two levels are required to Create the macro assignment*/
|
|
#define _LUMP_OF_L1(N, ...) LUMP_ ## N(__VA_ARGS__)
|
|
#define _LUMP_OF_L2(N, ...) _LUMP_OF_L1(N, __VA_ARGS__)
|
|
#define LUMP_X(...) _LUMP_OF_L2(NUM_ARGS(__VA_ARGS__), __VA_ARGS__)
|
|
#define LUMP_Y(...) _LUMP_OF_L2(NUM_ARGS(__VA_ARGS__), __VA_ARGS__)
|
|
|
|
#ifndef DEF_MUTL_AUTO_TUNE_VALUE
|
|
#define DEF_MUTL_AUTO_TUNE_VALUE DEF_AUTO_TUNE_NONE
|
|
#endif
|
|
#ifndef DEF_SELF_AUTO_TUNE_VALUE
|
|
#define DEF_SELF_AUTO_TUNE_VALUE DEF_AUTO_TUNE_NONE
|
|
#endif
|
|
|
|
#ifndef DEF_MUTLCAP_AUTO_OS_ENABLE
|
|
#define DEF_MUTLCAP_AUTO_OS_ENABLE DEF_AUTO_OS_DISABLE
|
|
#endif
|
|
|
|
#ifndef DEF_SELFCAP_AUTO_OS_ENABLE
|
|
#define DEF_SELFCAP_AUTO_OS_ENABLE DEF_AUTO_OS_DISABLE
|
|
#endif
|
|
|
|
#ifndef DEF_MUTLCAP_FREQ_AUTO_TUNE_ENABLE
|
|
#define DEF_MUTLCAP_FREQ_AUTO_TUNE_ENABLE DEF_FREQ_AUTO_TUNE_DISABLE
|
|
#endif
|
|
|
|
#ifndef DEF_SELFCAP_FREQ_AUTO_TUNE_ENABLE
|
|
#define DEF_SELFCAP_FREQ_AUTO_TUNE_ENABLE DEF_FREQ_AUTO_TUNE_DISABLE
|
|
#endif
|
|
|
|
#ifndef DEF_MUTLCAP_NOISE_MEAS_ENABLE
|
|
#define DEF_MUTLCAP_NOISE_MEAS_ENABLE DEF_NOISE_MEAS_DISABLE
|
|
#endif
|
|
|
|
#ifndef DEF_SELFCAP_NOISE_MEAS_ENABLE
|
|
#define DEF_SELFCAP_NOISE_MEAS_ENABLE DEF_NOISE_MEAS_DISABLE
|
|
#endif
|
|
|
|
#ifndef DEF_MUTLCAP_LOCKOUT_SEL
|
|
#define DEF_MUTLCAP_LOCKOUT_SEL DEF_SENS_LOCKOUT_NO
|
|
#endif
|
|
|
|
#ifndef DEF_SELFCAP_LOCKOUT_SEL
|
|
#define DEF_SELFCAP_LOCKOUT_SEL DEF_SENS_LOCKOUT_NO
|
|
#endif
|
|
|
|
#ifndef DEF_MUTLCAP_MOIS_TOLERANCE_ENABLE
|
|
#define DEF_MUTLCAP_MOIS_TOLERANCE_ENABLE DEF_MOIS_TOLERANCE_DISABLE
|
|
#endif
|
|
|
|
#ifndef DEF_SELFCAP_MOIS_TOLERANCE_ENABLE
|
|
#define DEF_SELFCAP_MOIS_TOLERANCE_ENABLE DEF_MOIS_TOLERANCE_DISABLE
|
|
#endif
|
|
|
|
#ifndef DEF_MUTLCAP_AKS_ENABLE
|
|
#define DEF_MUTLCAP_AKS_ENABLE DEF_AKS_DISABLE
|
|
#endif
|
|
|
|
#ifndef DEF_SELFCAP_AKS_ENABLE
|
|
#define DEF_SELFCAP_AKS_ENABLE DEF_AKS_DISABLE
|
|
#endif
|
|
|
|
#if (DEF_MUTL_AUTO_TUNE_VALUE == DEF_AUTO_TUNE_NONE)
|
|
#define DEF_MUTL_AUTO_TUNE_FUNC NULL
|
|
#else
|
|
#define DEF_MUTL_AUTO_TUNE_FUNC mutual_auto_tuning
|
|
#endif
|
|
|
|
#if (DEF_SELF_AUTO_TUNE_VALUE == DEF_AUTO_TUNE_NONE)
|
|
#define DEF_SELF_AUTO_TUNE_FUNC NULL
|
|
#else
|
|
#define DEF_SELF_AUTO_TUNE_FUNC self_auto_tuning
|
|
#endif
|
|
|
|
#if ((DEF_MUTLCAP_AUTO_OS_ENABLE != DEF_AUTO_OS_DISABLE) || (DEF_SELFCAP_AUTO_OS_ENABLE != DEF_AUTO_OS_DISABLE))
|
|
#define DEF_AUTO_OS_FUNC auto_os_resolve
|
|
#else
|
|
#define DEF_AUTO_OS_FUNC NULL
|
|
#endif
|
|
|
|
#if ((DEF_MUTLCAP_AKS_ENABLE != DEF_AKS_DISABLE) || (DEF_SELFCAP_AKS_ENABLE != DEF_AKS_DISABLE))
|
|
#define DEF_AKS_FUNC enable_aks
|
|
#else
|
|
#define DEF_AKS_FUNC NULL
|
|
#endif
|
|
/**
|
|
* Initialize the Frequency Auto tune routine
|
|
*/
|
|
#if ((DEF_MUTLCAP_FREQ_AUTO_TUNE_ENABLE != DEF_FREQ_AUTO_TUNE_DISABLE) || (DEF_SELFCAP_FREQ_AUTO_TUNE_ENABLE != DEF_FREQ_AUTO_TUNE_DISABLE))
|
|
#define PRIV_FREQ_AUTO_TUNE_CHK chk_frequency_auto_tune
|
|
#else
|
|
#define PRIV_FREQ_AUTO_TUNE_CHK NULL
|
|
#endif /*Frequency Auto tune Enable*/
|
|
|
|
/**
|
|
* Initialize the Noise Measurement routine
|
|
*/
|
|
#if ((DEF_MUTLCAP_NOISE_MEAS_ENABLE != DEF_NOISE_MEAS_DISABLE) || (DEF_SELFCAP_NOISE_MEAS_ENABLE != DEF_NOISE_MEAS_DISABLE))
|
|
#define PRIV_NM_TABLE_INIT touch_noise_mit_table_init
|
|
#else
|
|
#define PRIV_NM_TABLE_INIT NULL
|
|
#endif /*Noise Measurement Enable*/
|
|
|
|
|
|
#if (((DEF_MUTLCAP_LOCKOUT_SEL != DEF_SENS_LOCKOUT_NO) && (DEF_MUTLCAP_NOISE_MEAS_ENABLE != DEF_NOISE_MEAS_DISABLE))\
|
|
|| ((DEF_SELFCAP_LOCKOUT_SEL != DEF_SENS_LOCKOUT_NO) && (DEF_SELFCAP_NOISE_MEAS_ENABLE != DEF_NOISE_MEAS_DISABLE)))
|
|
#define DEF_LOCKOUT_FUNC lk_chk
|
|
#else
|
|
#define DEF_LOCKOUT_FUNC NULL
|
|
#endif /*Lockout Enable*/
|
|
|
|
/**
|
|
* Initialize the moisture tolerance routine
|
|
*/
|
|
#if ((DEF_MUTLCAP_MOIS_TOLERANCE_ENABLE != DEF_MOIS_TOLERANCE_DISABLE) || (DEF_SELFCAP_MOIS_TOLERANCE_ENABLE != DEF_MOIS_TOLERANCE_DISABLE))
|
|
#define PRIV_MOIS_TOLERANCE_CHK chk_moisture_tolerance
|
|
#else
|
|
#define PRIV_MOIS_TOLERANCE_CHK NULL
|
|
#endif /*Moisture Tolerance Enable*/
|
|
|
|
/* Moisture Tolerance */
|
|
|
|
/**
|
|
* \def GET_MUTLCAP_MOIS_GRP_SUM_DELTA(GRP_ID)
|
|
* \brief To get the mutual capacitance MOISTURE GROUP SUM DELTA
|
|
* \param GRP_ID for which the moisture group sum delta needs to be fetched
|
|
* \return Returns sum delta
|
|
*/
|
|
|
|
#define GET_MUTLCAP_MOIS_GRP_SUM_DELTA(GRP_ID) (mois_mutl_grp_delta_arr[(GRP_ID)-1])
|
|
|
|
|
|
/**
|
|
* \def GET_MUTLCAP_MOIS_GRP_ADJ_DELTA(GRP_ID)
|
|
* \brief To get the mutual capacitance MOISTURE GROUP ADJACENT DELTA
|
|
* \param GRP_ID for which the moisture group adjacent delta needs to be fetched
|
|
* \return Returns adjacent delta
|
|
*/
|
|
|
|
#define GET_MUTLCAP_MOIS_GRP_ADJ_DELTA(GRP_ID) (mois_mutl_grp_adj_delta_arr[(GRP_ID)-1])
|
|
|
|
/**
|
|
* \def GET_MOIS_MUT_GLOB_LOCK_STATE
|
|
* \brief To get the mutual capacitance global moisture lockout status
|
|
* \param none
|
|
* \return Returns mutual capacitance global moisture lockout status
|
|
*/
|
|
|
|
#define GET_MOIS_MUT_GLOB_LOCK_STATE (mois_lock_global_mutl)
|
|
|
|
|
|
/**
|
|
* \def GET_SELFCAP_MOIS_GRP_SUM_DELTA(GRP_ID)
|
|
* \brief To get the self capacitance MOISTURE GROUP SUM DELTA
|
|
* \param GRP_ID for which the moisture group sum delta needs to be fetched
|
|
* \return Returns sum delta
|
|
*/
|
|
|
|
#define GET_SELFCAP_MOIS_GRP_SUM_DELTA(GRP_ID) (mois_self_grp_delta_arr[(GRP_ID)-1])
|
|
|
|
|
|
/**
|
|
* \def GET_SELFCAP_MOIS_GRP_ADJ_DELTA(GRP_ID)
|
|
* \brief To get the self capacitance MOISTURE GROUP ADJACENT DELTA
|
|
* \param GRP_ID for which the moisture group adjacent delta needs to be fetched
|
|
* \return Returns adjacent delta
|
|
*/
|
|
|
|
#define GET_SELFCAP_MOIS_GRP_ADJ_DELTA(GRP_ID) (mois_self_grp_adj_delta_arr[(GRP_ID)-1])
|
|
|
|
|
|
/**
|
|
* \def GET_MOIS_SELF_GLOB_LOCK_STATE
|
|
* \brief To get the self capacitance global moisture lockout status
|
|
* \param none
|
|
* \return Returns self capacitance global moisture lockout status
|
|
*/
|
|
|
|
#define GET_MOIS_SELF_GLOB_LOCK_STATE (mois_lock_global_self)
|
|
/*----------------------------------------------------------------------------
|
|
* type definitions
|
|
*
|
|
*
|
|
*----------------------------------------------------------------------------*/
|
|
|
|
/* ! An unsigned 8-bit number setting a sensor detection threshold. */
|
|
typedef uint8_t threshold_t;
|
|
|
|
/* ! Sensor number type. */
|
|
typedef uint8_t sensor_id_t;
|
|
|
|
/* ! Current time type. */
|
|
typedef uint16_t touch_current_time_t;
|
|
|
|
/* ! Touch sensor delta value type. */
|
|
typedef int16_t touch_delta_t;
|
|
|
|
/* ! Status of Touch measurement. */
|
|
typedef uint16_t touch_acq_status_t;
|
|
|
|
/* ! Touch library GAIN setting */
|
|
typedef enum tag_gain_t {
|
|
GAIN_1,
|
|
GAIN_2,
|
|
GAIN_4,
|
|
GAIN_8,
|
|
GAIN_16,
|
|
GAIN_32
|
|
}
|
|
gain_t;
|
|
/* ! Touch library FILTER LEVEL setting */
|
|
typedef enum tag_filter_level_t {
|
|
FILTER_LEVEL_1,
|
|
FILTER_LEVEL_2,
|
|
FILTER_LEVEL_4,
|
|
FILTER_LEVEL_8,
|
|
FILTER_LEVEL_16,
|
|
FILTER_LEVEL_32,
|
|
FILTER_LEVEL_64
|
|
}
|
|
filter_level_t;
|
|
/* ! Touch library AUTO OS setting */
|
|
typedef enum tag_auto_os_t {
|
|
AUTO_OS_DISABLE,
|
|
AUTO_OS_2,
|
|
AUTO_OS_4,
|
|
AUTO_OS_8,
|
|
AUTO_OS_16,
|
|
AUTO_OS_32,
|
|
AUTO_OS_64,
|
|
AUTO_OS_128
|
|
}
|
|
auto_os_t;
|
|
|
|
/* ! Touch Library error codes. */
|
|
typedef enum tag_touch_ret_t {
|
|
/* ! Successful completion of operation. */
|
|
TOUCH_SUCCESS,
|
|
/* ! Touch Library is busy with pending previous Touch measurement. */
|
|
TOUCH_ACQ_INCOMPLETE,
|
|
/* ! Invalid input parameter. */
|
|
TOUCH_INVALID_INPUT_PARAM,
|
|
/* ! Operation not allowed in the current Touch Library state. */
|
|
TOUCH_INVALID_LIB_STATE,
|
|
/* ! Invalid self cap config input parameter. */
|
|
TOUCH_INVALID_SELFCAP_CONFIG_PARAM,
|
|
/* ! Invalid mutual cap config input parameter. */
|
|
TOUCH_INVALID_MUTLCAP_CONFIG_PARAM,
|
|
/* ! Invalid Recalibration threshold input value. */
|
|
TOUCH_INVALID_RECAL_THRESHOLD,
|
|
|
|
/* ! Channel number parameter exceeded total number of channels
|
|
* configured. */
|
|
TOUCH_INVALID_CHANNEL_NUM,
|
|
/* ! Invalid sensor type. Sensor type can NOT be SENSOR_TYPE_UNASSIGNED.
|
|
**/
|
|
TOUCH_INVALID_SENSOR_TYPE,
|
|
/* ! Invalid Sensor number parameter. */
|
|
TOUCH_INVALID_SENSOR_ID,
|
|
/* ! Number of Rotor/Sliders set as 0, */
|
|
/* ! when trying to configure a rotor/slider. */
|
|
TOUCH_INVALID_RS_NUM
|
|
}
|
|
touch_ret_t;
|
|
|
|
/* ! Touch Application error codes. */
|
|
typedef enum tag_touch_app_err_t {
|
|
TOUCH_INIT_CONFIG_ERR,
|
|
TOUCH_SENSOR_CONFIG_ERR,
|
|
TOUCH_INIT_CALIB_ERR,
|
|
TOUCH_MEASURE_INCOMPLETE,
|
|
TOUCH_MEASURE_CC_CAL_FAILED
|
|
}
|
|
touch_app_err_t;
|
|
|
|
/* ! Sensor start and end channel type of a Sensor. Channel number starts with
|
|
* value 0. */
|
|
typedef enum tag_channel_t {
|
|
CHANNEL_0, CHANNEL_1, CHANNEL_2, CHANNEL_3, CHANNEL_4, CHANNEL_5,
|
|
CHANNEL_6, CHANNEL_7,
|
|
CHANNEL_8, CHANNEL_9, CHANNEL_10, CHANNEL_11, CHANNEL_12, CHANNEL_13,
|
|
CHANNEL_14, CHANNEL_15,
|
|
CHANNEL_16, CHANNEL_17, CHANNEL_18, CHANNEL_19, CHANNEL_20, CHANNEL_21,
|
|
CHANNEL_22, CHANNEL_23,
|
|
CHANNEL_24, CHANNEL_25, CHANNEL_26, CHANNEL_27, CHANNEL_28, CHANNEL_29,
|
|
CHANNEL_30, CHANNEL_31,
|
|
CHANNEL_32, CHANNEL_33, CHANNEL_34, CHANNEL_35, CHANNEL_36, CHANNEL_37,
|
|
CHANNEL_38, CHANNEL_39,
|
|
CHANNEL_40, CHANNEL_41, CHANNEL_42, CHANNEL_43, CHANNEL_44, CHANNEL_45,
|
|
CHANNEL_46, CHANNEL_47,
|
|
CHANNEL_48, CHANNEL_49, CHANNEL_50, CHANNEL_51, CHANNEL_52, CHANNEL_53,
|
|
CHANNEL_54, CHANNEL_55,
|
|
CHANNEL_56, CHANNEL_57, CHANNEL_58, CHANNEL_59, CHANNEL_60, CHANNEL_61,
|
|
CHANNEL_62, CHANNEL_63,
|
|
CHANNEL_64, CHANNEL_65, CHANNEL_66, CHANNEL_67, CHANNEL_68, CHANNEL_69,
|
|
CHANNEL_70, CHANNEL_71,
|
|
CHANNEL_72, CHANNEL_73, CHANNEL_74, CHANNEL_75, CHANNEL_76, CHANNEL_77,
|
|
CHANNEL_78, CHANNEL_79,
|
|
CHANNEL_80, CHANNEL_81, CHANNEL_82, CHANNEL_83, CHANNEL_84, CHANNEL_85,
|
|
CHANNEL_86, CHANNEL_87,
|
|
CHANNEL_88, CHANNEL_89, CHANNEL_90, CHANNEL_91, CHANNEL_92, CHANNEL_93,
|
|
CHANNEL_94, CHANNEL_95,
|
|
CHANNEL_96, CHANNEL_97, CHANNEL_98, CHANNEL_99, CHANNEL_100,
|
|
CHANNEL_101, CHANNEL_102, CHANNEL_103,
|
|
CHANNEL_104, CHANNEL_105, CHANNEL_106, CHANNEL_107, CHANNEL_108,
|
|
CHANNEL_109, CHANNEL_110, CHANNEL_111,
|
|
CHANNEL_112, CHANNEL_113, CHANNEL_114, CHANNEL_115, CHANNEL_116,
|
|
CHANNEL_117, CHANNEL_118, CHANNEL_119,
|
|
CHANNEL_120, CHANNEL_121, CHANNEL_122, CHANNEL_123, CHANNEL_124,
|
|
CHANNEL_125, CHANNEL_126, CHANNEL_127,
|
|
CHANNEL_128, CHANNEL_129, CHANNEL_130, CHANNEL_131, CHANNEL_132,
|
|
CHANNEL_133, CHANNEL_134, CHANNEL_135,
|
|
CHANNEL_136, CHANNEL_137, CHANNEL_138, CHANNEL_139, CHANNEL_140,
|
|
CHANNEL_141, CHANNEL_142, CHANNEL_143,
|
|
CHANNEL_144, CHANNEL_145, CHANNEL_146, CHANNEL_147, CHANNEL_148,
|
|
CHANNEL_149, CHANNEL_150, CHANNEL_151,
|
|
CHANNEL_152, CHANNEL_153, CHANNEL_154, CHANNEL_155, CHANNEL_156,
|
|
CHANNEL_157, CHANNEL_158, CHANNEL_159,
|
|
CHANNEL_160, CHANNEL_161, CHANNEL_162, CHANNEL_163, CHANNEL_164,
|
|
CHANNEL_165, CHANNEL_166, CHANNEL_167,
|
|
CHANNEL_168, CHANNEL_169, CHANNEL_170, CHANNEL_171, CHANNEL_172,
|
|
CHANNEL_173, CHANNEL_174, CHANNEL_175,
|
|
CHANNEL_176, CHANNEL_177, CHANNEL_178, CHANNEL_179, CHANNEL_180,
|
|
CHANNEL_181, CHANNEL_182, CHANNEL_183,
|
|
CHANNEL_184, CHANNEL_185, CHANNEL_186, CHANNEL_187, CHANNEL_188,
|
|
CHANNEL_189, CHANNEL_190, CHANNEL_191,
|
|
CHANNEL_192, CHANNEL_193, CHANNEL_194, CHANNEL_195, CHANNEL_196,
|
|
CHANNEL_197, CHANNEL_198, CHANNEL_199,
|
|
CHANNEL_200, CHANNEL_201, CHANNEL_202, CHANNEL_203, CHANNEL_204,
|
|
CHANNEL_205, CHANNEL_206, CHANNEL_207,
|
|
CHANNEL_208, CHANNEL_209, CHANNEL_210, CHANNEL_211, CHANNEL_212,
|
|
CHANNEL_213, CHANNEL_214, CHANNEL_215,
|
|
CHANNEL_216, CHANNEL_217, CHANNEL_218, CHANNEL_219, CHANNEL_220,
|
|
CHANNEL_221, CHANNEL_222, CHANNEL_223,
|
|
CHANNEL_224, CHANNEL_225, CHANNEL_226, CHANNEL_227, CHANNEL_228,
|
|
CHANNEL_229, CHANNEL_230, CHANNEL_231,
|
|
CHANNEL_232, CHANNEL_233, CHANNEL_234, CHANNEL_235, CHANNEL_236,
|
|
CHANNEL_237, CHANNEL_238, CHANNEL_239,
|
|
CHANNEL_240, CHANNEL_241, CHANNEL_242, CHANNEL_243, CHANNEL_244,
|
|
CHANNEL_245, CHANNEL_246, CHANNEL_247,
|
|
CHANNEL_248, CHANNEL_249, CHANNEL_250, CHANNEL_251, CHANNEL_252,
|
|
CHANNEL_253, CHANNEL_254, CHANNEL_255
|
|
}
|
|
channel_t;
|
|
|
|
/* ! Touch library state. */
|
|
typedef enum tag_touch_lib_state_t {
|
|
TOUCH_STATE_NULL,
|
|
TOUCH_STATE_INIT,
|
|
TOUCH_STATE_READY,
|
|
TOUCH_STATE_CALIBRATE,
|
|
TOUCH_STATE_BUSY
|
|
}
|
|
touch_lib_state_t;
|
|
|
|
/* ! Sensor types available. */
|
|
typedef enum tag_sensor_type_t {
|
|
SENSOR_TYPE_UNASSIGNED,
|
|
SENSOR_TYPE_KEY,
|
|
SENSOR_TYPE_ROTOR,
|
|
SENSOR_TYPE_SLIDER,
|
|
SENSOR_TYPE_LUMP,
|
|
MAX_SENSOR_TYPE
|
|
}
|
|
sensor_type_t;
|
|
|
|
/* Options for the sense type. */
|
|
typedef enum tag_touch_acq_t
|
|
{
|
|
TOUCH_MUTUAL,
|
|
TOUCH_SELF,
|
|
MAX_TOUCH_ACQ
|
|
} touch_acq_t;
|
|
|
|
/* ! Touch library acquisition mode. */
|
|
typedef enum tag_touch_acq_mode_t {
|
|
/* ! When Raw acquisition mode is used, the measure_complete_callback */
|
|
/* ! function is called immediately once a fresh value of Signals are */
|
|
/* ! available. In this mode, the Touch Library does not do any */
|
|
/* ! processing on the Signals. So, the References, Sensor states or */
|
|
/* ! Rotor/Slider position values are not updated in this mode. */
|
|
RAW_ACQ_MODE,
|
|
/* ! When Nomal acquisition mode is used, the measure_complete_callback
|
|
**/
|
|
|
|
/* ! function is called only after the Touch Library completes
|
|
* processing */
|
|
/* ! of the Signal values obtained. The References, Sensor states and */
|
|
/* ! Rotor/Slider position values are updated in this mode. */
|
|
NORMAL_ACQ_MODE
|
|
}
|
|
touch_acq_mode_t;
|
|
|
|
/* ! Touch library PTC prescaler clock and sense resistor auto tuning setting.
|
|
**/
|
|
typedef enum tag_auto_tune_type_t {
|
|
/*! Auto tuning disabled. */
|
|
AUTO_TUNE_NONE = 0,
|
|
/* Auto tune PTC prescaler and sense resistor for best noise performance. */
|
|
AUTO_TUNE_PRSC = 1,
|
|
/* Auto tune PTC prescaler and sense resistor for least power consumption. */
|
|
AUTO_TUNE_RSEL = 2,
|
|
|
|
}
|
|
auto_tune_type_t;
|
|
|
|
/**
|
|
* PTC frequency mode setting.
|
|
* Example: if Generic clock input to PTC = 4MHz, then:
|
|
* FREQ_MODE_NONE No Frequency hopping
|
|
* FREQ_MODE_HOP Frequency hopping is enabled.
|
|
* FREQ_MODE_SPREAD Spread spectrum mode with median filter
|
|
*disabled.
|
|
* FREQ_MODE_SPREAD_MEDIAN Spread spectrum mode with median filter enabled.
|
|
*
|
|
*/
|
|
typedef enum tag_freq_mode_sel_t {
|
|
FREQ_MODE_NONE,
|
|
FREQ_MODE_HOP,
|
|
FREQ_MODE_SPREAD,
|
|
FREQ_MODE_SPREAD_MEDIAN
|
|
}
|
|
freq_mode_sel_t;
|
|
|
|
/**
|
|
* PTC clock prescale setting. Refer touch_configure_ptc_clock() API in
|
|
*touch.c
|
|
* Example: if Generic clock input to PTC = 4MHz, then:
|
|
* PRSC_DIV_SEL_1 sets PTC Clock to 4MHz
|
|
* PRSC_DIV_SEL_2 sets PTC Clock to 2MHz
|
|
* PRSC_DIV_SEL_4 sets PTC Clock to 1MHz
|
|
* PRSC_DIV_SEL_8 sets PTC Clock to 500KHz
|
|
*
|
|
*/
|
|
typedef enum tag_prsc_div_sel_t {
|
|
PRSC_DIV_SEL_1,
|
|
PRSC_DIV_SEL_2,
|
|
PRSC_DIV_SEL_4,
|
|
PRSC_DIV_SEL_8
|
|
}
|
|
prsc_div_sel_t;
|
|
|
|
/**
|
|
* PTC series resistor setting. For Mutual cap mode, this series
|
|
* resistor is switched internally on the Y-pin. For Self cap mode,
|
|
* the series resistor is switched internally on the Sensor pin.
|
|
*
|
|
* Example:
|
|
* RSEL_VAL_0 sets internal series resistor to 0ohms.
|
|
* RSEL_VAL_20 sets internal series resistor to 20Kohms.
|
|
* RSEL_VAL_50 sets internal series resistor to 50Kohms.
|
|
* RSEL_VAL_100 sets internal series resistor to 100Kohms.
|
|
*/
|
|
typedef enum tag_rsel_val_t {
|
|
RSEL_VAL_0,
|
|
RSEL_VAL_20,
|
|
RSEL_VAL_50,
|
|
RSEL_VAL_100
|
|
}
|
|
rsel_val_t;
|
|
|
|
/**
|
|
* PTC acquisition frequency delay setting.
|
|
*
|
|
* The PTC acquisition frequency is dependent on the Generic clock
|
|
* input to PTC and PTC clock prescaler setting. This delay setting
|
|
* inserts "n" PTC clock cycles between consecutive measurements on
|
|
* a given sensor, thereby changing the PTC acquisition frequency.
|
|
* FREQ_HOP_SEL_1 setting inserts 1 PTC clock cycle between consecutive
|
|
* measurements. FREQ_HOP_SEL_14 setting inserts 14 PTC clock cycles.
|
|
* Hence, higher delay setting will increase the total time taken for
|
|
* capacitance measurement on a given sensor as compared to a lower
|
|
* delay setting.
|
|
*
|
|
* A desired setting can be used to avoid noise around the same frequency
|
|
* as the acquisition frequency.
|
|
*
|
|
*/
|
|
typedef enum tag_freq_hop_sel_t {
|
|
FREQ_HOP_SEL_1,
|
|
FREQ_HOP_SEL_2,
|
|
FREQ_HOP_SEL_3,
|
|
FREQ_HOP_SEL_4,
|
|
FREQ_HOP_SEL_5,
|
|
FREQ_HOP_SEL_6,
|
|
FREQ_HOP_SEL_7,
|
|
FREQ_HOP_SEL_8,
|
|
FREQ_HOP_SEL_9,
|
|
FREQ_HOP_SEL_10,
|
|
FREQ_HOP_SEL_11,
|
|
FREQ_HOP_SEL_12,
|
|
FREQ_HOP_SEL_13,
|
|
FREQ_HOP_SEL_14,
|
|
FREQ_HOP_SEL_15,
|
|
FREQ_HOP_SEL_16
|
|
}
|
|
freq_hop_sel_t;
|
|
|
|
/**
|
|
* Which AKS group, if any, a sensor is in.
|
|
* NO_AKS_GROUP = sensor is not in an AKS group, and cannot be suppressed.
|
|
* AKS_GROUP_x = sensor is in AKS group x.
|
|
*/
|
|
typedef enum tag_aks_group_t {
|
|
NO_AKS_GROUP,
|
|
AKS_GROUP_1,
|
|
AKS_GROUP_2,
|
|
AKS_GROUP_3,
|
|
AKS_GROUP_4,
|
|
AKS_GROUP_5,
|
|
AKS_GROUP_6,
|
|
AKS_GROUP_7,
|
|
MAX_AKS_GROUP
|
|
}
|
|
aks_group_t;
|
|
|
|
/**
|
|
* A sensor detection hysteresis value. This is expressed as a percentage of
|
|
* the sensor detection threshold.
|
|
* HYST_x = hysteresis value is x% of detection threshold value (rounded down).
|
|
* NB: a minimum value of 2 is used.
|
|
*
|
|
* Example: if detection threshold = 20, then:
|
|
* HYST_50 = 10 (50% of 20)
|
|
* HYST_25 = 5 (25% of 20)
|
|
* HYST_12_5 = 2 (12.5% of 20)
|
|
* HYST_6_25 = 2 (6.25% of 20 = 1, but value is hard-limited to 2)
|
|
*/
|
|
typedef enum tag_hysteresis_t {
|
|
HYST_50,
|
|
HYST_25,
|
|
HYST_12_5,
|
|
HYST_6_25,
|
|
MAX_HYST
|
|
}
|
|
hysteresis_t;
|
|
|
|
/**
|
|
* A sensor recalibration threshold. This is expressed as a percentage of the
|
|
* sensor detection threshold.
|
|
* RECAL_x = recalibration threshold is x% of detection threshold value
|
|
* (rounded down).
|
|
* NB: a minimum value of 4 is used.
|
|
*
|
|
* Example: if detection threshold = 40, then:
|
|
* RECAL_100 = 40 (100% of 40)
|
|
* RECAL_50 = 20 (50% of 40)
|
|
* RECAL_25 = 10 (25% of 40)
|
|
* RECAL_12_5 = 5 (12.5% of 40)
|
|
* RECAL_6_25 = 4 (6.25% of 40 = 2, but value is hard-limited to 4)
|
|
*/
|
|
typedef enum tag_recal_threshold_t {
|
|
RECAL_100,
|
|
RECAL_50,
|
|
RECAL_25,
|
|
RECAL_12_5,
|
|
RECAL_6_25,
|
|
MAX_RECAL
|
|
}
|
|
recal_threshold_t;
|
|
|
|
/**
|
|
* For rotors and sliders, the resolution of the reported angle or position.
|
|
* RES_x_BIT = rotor/slider reports x-bit values.
|
|
*
|
|
* Example: if slider resolution is RES_7_BIT, then reported positions are in
|
|
* the range 0..127.
|
|
*/
|
|
typedef enum tag_resolution_t {
|
|
RES_1_BIT,
|
|
RES_2_BIT,
|
|
RES_3_BIT,
|
|
RES_4_BIT,
|
|
RES_5_BIT,
|
|
RES_6_BIT,
|
|
RES_7_BIT,
|
|
RES_8_BIT,
|
|
MAX_RES
|
|
}
|
|
resolution_t;
|
|
|
|
/**
|
|
* For sensor lockout selection during noise condition
|
|
* Single key lockout, Global key lockout, no lockout
|
|
**/
|
|
typedef enum tag_sensor_lockout_t {
|
|
SINGLE_SENSOR_LOCKOUT,
|
|
GLOBAL_SENSOR_LOCKOUT,
|
|
NO_LOCKOUT
|
|
}
|
|
nm_sensor_lockout_t;
|
|
|
|
/**
|
|
* For choosing the state of the PTC pins when bursting is not happening on those pins.
|
|
* PULLHIGH_WHEN_NOT_MEASURED,GND_WHEN_NOT_MEASURED
|
|
**/
|
|
typedef enum tag_ptc_gpio_state_t {
|
|
PULLHIGH_WHEN_NOT_MEASURED,
|
|
GND_WHEN_NOT_MEASURED
|
|
}
|
|
ptc_gpio_state_t;
|
|
|
|
/**Structure for storing moisture multi touch group info
|
|
*
|
|
*/
|
|
typedef struct tag_snsr_mois_t{
|
|
/** moisture group member */
|
|
uint8_t mois_grp;
|
|
/** multi touch group member */
|
|
uint8_t multch_grp;
|
|
|
|
}snsr_mois_t;
|
|
|
|
/** Moisture Groups
|
|
*
|
|
*/
|
|
typedef enum tag_moisture_grp{
|
|
MOIS_DISABLED=0,
|
|
MOIS_GROUP_0,
|
|
MOIS_GROUP_1,
|
|
MOIS_GROUP_2,
|
|
MOIS_GROUP_3,
|
|
MOIS_GROUP_4,
|
|
MOIS_GROUP_5,
|
|
MOIS_GROUP_6,
|
|
MOIS_GROUP_7,
|
|
MOIS_GROUPN
|
|
}moisture_grp_t;
|
|
|
|
/* Multi touch Groups Enumeration for
|
|
* moisture Group
|
|
*/
|
|
|
|
typedef enum tag_mltch_grp{
|
|
MLTCH_NONE = (0 << 0u),
|
|
MLTCH_GROUP_0 = (1 << 0u),
|
|
MLTCH_GROUP_1 = (1 << 1u),
|
|
MLTCH_GROUP_2 = (1 << 2u),
|
|
MLTCH_GROUP_3 = (1 << 3u),
|
|
MLTCH_GROUP_4 = (1 << 4u),
|
|
MLTCH_GROUP_5 = (1 << 5u),
|
|
MLTCH_GROUP_6 = (1 << 6u),
|
|
MLTCH_GROUP_7 = (1 << 7u),
|
|
MLTCH_GROUP_Max = MLTCH_GROUP_7
|
|
}mltch_grp_t;
|
|
|
|
/* Touch mode configuration
|
|
* Interrupt / Polled mode
|
|
*/
|
|
|
|
typedef enum tag_tch_mode
|
|
{
|
|
TCH_MODE_POLLED = 0,
|
|
TCH_MODE_ISR = 1,
|
|
TCH_MODE_NONE = 2,
|
|
} tch_mode_t;
|
|
|
|
/** Typedef for moisture sensor threshold */
|
|
typedef int32_t mois_snsr_threshold_t;
|
|
|
|
/** Typedef for moisture system threshold */
|
|
typedef int32_t mois_system_threshold_t;
|
|
|
|
/* ! Touch Library Timing info. */
|
|
typedef struct tag_touch_time_t {
|
|
/* ! Touch Measurement period in milliseconds. This variable determines
|
|
* how */
|
|
/* ! often a new touch measurement must be done. */
|
|
/* ! Default value: Every 25 milliseconds. */
|
|
uint16_t measurement_period_ms;
|
|
/* ! Current time, set by timer ISR. */
|
|
volatile uint16_t current_time_ms;
|
|
/* ! Flag set by timer ISR when it's time to measure touch. */
|
|
volatile uint8_t time_to_measure_touch;
|
|
|
|
}
|
|
touch_time_t;
|
|
|
|
/* ! Sensor structure for storing sensor related information. */
|
|
typedef struct tag_sensor_t {
|
|
/* ! sensor state (calibrating, on, ...). */
|
|
uint8_t state;
|
|
/* ! general purpose ctr: used for calibration, drifting, etc. */
|
|
uint8_t general_counter;
|
|
/* ! Detect Integration ctr. */
|
|
uint8_t ndil_counter;
|
|
|
|
/* ! bits 7..6: sensor type: */
|
|
/* ! {00: key,01: rotor,10: slider,11: reserved} */
|
|
/* ! bits 5..3: AKS group (0..7): 0 = no AKS group */
|
|
/* ! bit 2 : positive re-cal flag */
|
|
/* ! bits 1..0: hysteresis */
|
|
uint8_t type_aks_pos_hyst;
|
|
|
|
/* ! sensor detection threshold. */
|
|
uint8_t threshold;
|
|
|
|
/* ! sensor from channel */
|
|
/* ! for keys: from channel = to channel */
|
|
/* ! rotors : Top channel */
|
|
/* ! sliders : Left most channel */
|
|
/* ! NB:only need to_channel for keys in rotors/sliders build */
|
|
uint8_t from_channel;
|
|
/* ! FOR KEY's: this is unused, */
|
|
/* ! rotors: Bottom left channel */
|
|
/* ! sliders: Middle channel */
|
|
uint8_t to_channel;
|
|
/* ! index into array of rotor/slider values. */
|
|
uint8_t index;
|
|
}
|
|
sensor_t;
|
|
|
|
/* ! Global sensor configuration info. */
|
|
typedef struct tag_touch_global_param_t {
|
|
/* ! Sensor detect integration (DI) limit. */
|
|
uint8_t di;
|
|
/* ! Sensor away from touch drifet rate */
|
|
uint8_t atch_drift_rate;
|
|
/* ! Sensor towards touch drift rate */
|
|
uint8_t tch_drift_rate;
|
|
/* ! Sensor maximum on duration. */
|
|
uint8_t max_on_duration;
|
|
/* ! Sensor drift hold time. */
|
|
uint8_t drift_hold_time;
|
|
/* ! Sensor Positive recalibration delay. */
|
|
uint8_t atch_recal_delay;
|
|
/* ! Sensor calibration dummy burst count. */
|
|
uint8_t cal_seq_1_count;
|
|
/* ! Sensor calibration settling burst count. */
|
|
uint8_t cal_seq_2_count;
|
|
/* ! Sensor recalibration threshold. */
|
|
recal_threshold_t recal_threshold;
|
|
/* ! Touch Post processing mode */
|
|
uint16_t touch_postprocess_mode;
|
|
/* auto oversamples Stability limit */
|
|
uint16_t auto_os_sig_stability_limit;
|
|
/* auto tune Stability limit */
|
|
uint16_t auto_tune_sig_stability_limit;
|
|
/*frequency tune in/out limit*/
|
|
uint8_t auto_freq_tune_in_cnt;
|
|
/*noise sig stability limit*/
|
|
uint16_t nm_sig_stability_limit;
|
|
/*noise threshold limit*/
|
|
uint8_t nm_noise_limit;
|
|
/*global lockout configuration*/
|
|
nm_sensor_lockout_t nm_enable_sensor_lock_out;
|
|
/*lockout count down cycles */
|
|
uint8_t nm_lockout_countdown;
|
|
#if defined(_SAMC21_) || defined(_SAMC20_) || defined(_SAML22_)
|
|
/*charge_share_delay parameter for the PTC*/
|
|
uint8_t charge_share_delay;
|
|
#endif
|
|
}
|
|
touch_global_param_t;
|
|
|
|
/* ! Touch Filter Callback data type. */
|
|
typedef struct tag_touch_filter_data_t {
|
|
/* ! Length of the measured signal values list. */
|
|
uint16_t num_channel_signals;
|
|
/* ! Pointer to measured signal values for each channel. */
|
|
uint16_t *p_channel_signals;
|
|
}
|
|
touch_filter_data_t;
|
|
|
|
/* ! Touch Measured data type. */
|
|
typedef volatile struct tag_touch_measure_data_t {
|
|
/* ! Flag set by touch_xxcap_measure_complete_callback() function when
|
|
* a fresh Touch */
|
|
/* ! status is available. */
|
|
volatile uint8_t measurement_done_touch;
|
|
/* ! Status of Touch measurement. */
|
|
touch_acq_status_t acq_status;
|
|
/* ! Length of the measured signal values list. */
|
|
uint16_t num_channel_signals;
|
|
/* ! Pointer to measured signal values for each channel. */
|
|
uint16_t *p_channel_signals;
|
|
/* ! Length of the measured reference values list. */
|
|
uint16_t num_channel_references;
|
|
/* ! Pointer to reference values for each channel. */
|
|
uint16_t *p_channel_references;
|
|
/* ! Number of sensor state bytes. */
|
|
uint8_t num_sensor_states;
|
|
/* ! Pointer to Touch Status of each sensor. */
|
|
uint8_t *p_sensor_states;
|
|
/* ! Length of the Rotor and Slider position values list. */
|
|
uint8_t num_rotor_slider_values;
|
|
/* ! Pointer to Rotor and Slider position values. */
|
|
uint8_t *p_rotor_slider_values;
|
|
/* ! Length of the sensors data list. */
|
|
uint16_t num_sensors;
|
|
/* ! Calibrated compensation capacitance values. */
|
|
uint16_t *p_cc_calibration_vals;
|
|
/* ! Pointer to Sensor data. */
|
|
sensor_t *p_sensors;
|
|
/* !Pointer to noise status */
|
|
uint8_t *p_sensor_noise_status;
|
|
/*the noise level or value of each channel*/
|
|
uint16_t *p_nm_ch_noise_val;
|
|
/*!Pointer to Moisture Status */
|
|
uint8_t *p_sensor_mois_status;
|
|
/*!Pointer to Auto-Oversamples Status */
|
|
uint8_t *p_auto_os_status;
|
|
/* flag indicates cc calibration process */
|
|
uint8_t cc_calib_status_flag;
|
|
|
|
|
|
}
|
|
touch_measure_data_t;
|
|
|
|
/* ! Touch sensor configuration type. */
|
|
typedef struct tag_touch_selfcap_param_t {
|
|
/* ! Sensor detection threshold. */
|
|
aks_group_t aks_group;
|
|
/* ! Sensor detection threshold. */
|
|
threshold_t detect_threshold;
|
|
/* ! Sensor detection hysteresis. */
|
|
hysteresis_t detect_hysteresis;
|
|
/* ! Sensor position resolution. This is valid only for a Rotor or
|
|
* Slider. */
|
|
resolution_t position_resolution;
|
|
}
|
|
touch_selfcap_param_t;
|
|
|
|
/* ! Touch sensor configuration type. */
|
|
typedef struct tag_touch_mutlcap_param_t {
|
|
/* ! Sensor detection threshold. */
|
|
aks_group_t aks_group;
|
|
/* ! Sensor detection threshold. */
|
|
threshold_t detect_threshold;
|
|
/* ! Sensor detection hysteresis. */
|
|
hysteresis_t detect_hysteresis;
|
|
|
|
/* ! Sensor position resolution. This is valid only for a Rotor or
|
|
* Slider. */
|
|
resolution_t position_resolution;
|
|
|
|
/* ! Sensor position hysteresis. This is valid only for a Rotor or
|
|
* Slider. */
|
|
/* ! Range of position_hysteresis value is from 0 to 7. */
|
|
uint8_t position_hysteresis;
|
|
}
|
|
touch_mutlcap_param_t;
|
|
/* ! Mutual capacitance sensor acquisition parameter type. */
|
|
typedef struct tag_touch_mutlcap_acq_param_t
|
|
{
|
|
/* !pointer to gain per node */
|
|
gain_t *p_mutlcap_gain_per_node;
|
|
/* ! setup acquisition frequency mode */
|
|
freq_mode_sel_t touch_mutlcap_freq_mode;
|
|
/* ! PTC clock prescaler value */
|
|
prsc_div_sel_t *mutlcap_ptc_prsc;
|
|
/* ! PTC series resistor value */
|
|
rsel_val_t *mutlcap_resistor_value;
|
|
/* ! PTC clock prescaler value during CC cal */
|
|
prsc_div_sel_t *mutlcap_ptc_prsc_cc_cal;
|
|
/* ! PTC series resistor value during CC cal */
|
|
rsel_val_t *mutlcap_resistor_value_cc_cal;
|
|
/* !pointer to acquisition frequency settings */
|
|
freq_hop_sel_t *p_mutlcap_hop_freqs;
|
|
/* ! filter level */
|
|
filter_level_t *p_mutlcap_filter_level;
|
|
/* ! auto oversampling */
|
|
auto_os_t *p_mutlcap_auto_os;
|
|
}
|
|
touch_mutlcap_acq_param_t;
|
|
|
|
/* ! Self capacitance sensor acquisition parameter type. */
|
|
typedef struct tag_touch_selfcap_acq_param_t
|
|
{
|
|
/* !pointer to gain per node */
|
|
gain_t *p_selfcap_gain_per_node;
|
|
/* ! enable/disable noise counter-measures */
|
|
freq_mode_sel_t touch_selfcap_freq_mode;
|
|
/* ! PTC clock prescaler value */
|
|
prsc_div_sel_t *selfcap_ptc_prsc;
|
|
/* ! PTC sense resistor value */
|
|
rsel_val_t *selfcap_resistor_value;
|
|
/* ! PTC clock prescaler value during CC cal */
|
|
prsc_div_sel_t *selfcap_ptc_prsc_cc_cal;
|
|
/* ! PTC sense resistor value during CC cal */
|
|
rsel_val_t *selfcap_resistor_value_cc_cal;
|
|
/* !pointer to hop frequency options */
|
|
freq_hop_sel_t *p_selfcap_hop_freqs;
|
|
/* ! filter level */
|
|
filter_level_t *p_selfcap_filter_level;
|
|
/* ! auto oversampling */
|
|
auto_os_t *p_selfcap_auto_os;
|
|
}
|
|
touch_selfcap_acq_param_t;
|
|
|
|
//! QTouch capacitance sensor acquisition parameter type.
|
|
typedef struct tag_touch_acq_param_t
|
|
{
|
|
|
|
//!pointer to gain per node
|
|
gain_t *p_gain_per_node;
|
|
|
|
//! enable/disable noise counter-measures
|
|
freq_mode_sel_t touch_freq_mode;
|
|
|
|
//! PTC clock prescaler value
|
|
prsc_div_sel_t *ptc_prsc;
|
|
|
|
//! PTC sense resistor value
|
|
rsel_val_t *resistor_value;
|
|
|
|
//! PTC clock prescaler value during CC cal
|
|
prsc_div_sel_t *ptc_prsc_cc_cal;
|
|
|
|
//! PTC sense resistor value during CC cal
|
|
rsel_val_t *resistor_value_cc_cal;
|
|
|
|
//!pointer to hop frequency options
|
|
freq_hop_sel_t *p_hop_freqs;
|
|
|
|
//! filter level
|
|
filter_level_t *p_filter_level;
|
|
|
|
//! auto oversampling
|
|
auto_os_t *p_auto_os;
|
|
|
|
}
|
|
touch_acq_param_t;
|
|
|
|
typedef struct tag_tlib_init_fn_ptr_t
|
|
{
|
|
void (*auto_tune_init) (void *, uint8_t,uint16_t);
|
|
uint32_t (*auto_os_init) (void *, uint16_t);
|
|
void (*lk_chk) (void *, uint16_t, uint16_t);
|
|
void (*enable_aks)(void);
|
|
} tlib_init_fn_ptr;
|
|
|
|
|
|
/* ! Self Capacitance configuration input. */
|
|
typedef struct tag_touch_selfcap_config_t {
|
|
/* ! Number of channels using self cap method. */
|
|
uint16_t num_channels;
|
|
/* ! Number of sensors using self cap method. */
|
|
uint16_t num_sensors;
|
|
/* ! Number of rotors/sliders using self cap method. */
|
|
uint8_t num_rotors_and_sliders;
|
|
/* !global sensor configuration info. */
|
|
touch_global_param_t global_param;
|
|
/* !sensor acquisition param info. */
|
|
touch_selfcap_acq_param_t touch_selfcap_acq_param;
|
|
/* ! Pointer to data block buffer. */
|
|
uint8_t *p_data_blk;
|
|
/* ! size of data block buffer */
|
|
uint16_t buffer_size;
|
|
/* !pointer to xy nodes */
|
|
uint32_t *p_selfcap_y_nodes;
|
|
/* !enable or disable quick re-burst response time feature */
|
|
uint8_t self_quick_reburst_enable;
|
|
/* !callback to process sensor signal values before post-processing */
|
|
void (*filter_callback)(touch_filter_data_t *p_filter_data);
|
|
/* !frequency hop : auto tunuing enable* / */
|
|
uint8_t enable_freq_auto_tune;
|
|
/* !Noise measurement enable */
|
|
uint8_t enable_noise_measurement;
|
|
/* !Memory Allocation Buffer */
|
|
uint8_t nm_buffer_cnt;
|
|
/* !Self moisture tolerance enable flag */
|
|
uint8_t self_mois_tlrnce_enable; /* % moisture tolerance% */
|
|
/* !Self cap moisture number of groups */
|
|
uint8_t self_mois_groups;
|
|
/* Moisture Quick Re burst Enable */
|
|
uint8_t self_mois_quick_reburst_enable;
|
|
/* Self_cap PTC GPIO state*/
|
|
ptc_gpio_state_t self_ptc_gpio_state;
|
|
/*Feature list pointers*/
|
|
tlib_init_fn_ptr tlib_feature_list;
|
|
}
|
|
touch_selfcap_config_t;
|
|
/* ! Mutual Capacitance configuration input. */
|
|
typedef struct tag_touch_mutlcap_config_t {
|
|
/* ! Number of channels using mutual cap method. */
|
|
uint16_t num_channels;
|
|
/* ! Number of sensors using mutual cap method. */
|
|
uint16_t num_sensors;
|
|
/* ! Number of rotors/sliders using mutual cap method. */
|
|
uint8_t num_rotors_and_sliders;
|
|
/* !global sensor configuration info. */
|
|
touch_global_param_t global_param;
|
|
//!sensor acquisition param info.
|
|
touch_mutlcap_acq_param_t touch_mutlcap_acq_param;
|
|
/* ! Pointer to data block buffer. */
|
|
uint8_t *p_data_blk;
|
|
/* ! size of data block buffer */
|
|
uint16_t buffer_size;
|
|
/* !pointer to xy nodes */
|
|
uint32_t *p_mutlcap_xy_nodes;
|
|
/* !enable or disable quick reburst response time feature */
|
|
uint8_t mutl_quick_reburst_enable;
|
|
/* !callback to process sensor signal values before post-processing */
|
|
void (*filter_callback)(touch_filter_data_t *p_filter_data);
|
|
//!frequency hop : auto tunuing enable*/
|
|
uint8_t enable_freq_auto_tune;
|
|
//!Noise measurement enable
|
|
uint8_t enable_noise_measurement;
|
|
//!Memory Allocation Buffer
|
|
uint8_t nm_buffer_cnt;
|
|
//! mutual cap moisture tolerance enable flag
|
|
uint8_t mutl_mois_tlrnce_enable;
|
|
//! mutual cap moisture number of groups
|
|
uint8_t mutl_mois_groups;
|
|
/* Moisture Quick Re burst Enable */
|
|
uint8_t mutl_mois_quick_reburst_enable;
|
|
/* Mutual_cap PTC GPIO state*/
|
|
ptc_gpio_state_t mutl_ptc_gpio_state;
|
|
/*Feature list pointers*/
|
|
tlib_init_fn_ptr tlib_feature_list;
|
|
}
|
|
touch_mutlcap_config_t;
|
|
|
|
/* ! Touch Input Configuration type. */
|
|
typedef struct tag_touch_config_t {
|
|
/* ! Mutual cap configuration pointer. */
|
|
touch_mutlcap_config_t *p_mutlcap_config;
|
|
/* ! Self cap configuration pointer. */
|
|
touch_selfcap_config_t *p_selfcap_config;
|
|
/* ! PTC ISR priority level */
|
|
uint8_t ptc_isr_lvl;
|
|
}
|
|
touch_config_t;
|
|
|
|
/* ! Touch library information type. */
|
|
typedef volatile struct tag_touch_info_t {
|
|
/* ! Touch Library state specific to method. */
|
|
touch_lib_state_t tlib_state;
|
|
|
|
/* ! Number of channels in use, irrespective of the corresponding Sensor
|
|
* being disabled or enabled. */
|
|
uint16_t num_channels_in_use;
|
|
|
|
/* ! Number of sensors in use, irrespective of the Sensor being disabled
|
|
* or enabled. */
|
|
uint16_t num_sensors_in_use;
|
|
|
|
/* ! Number of rotor sliders in use, irrespective of the Rotor/Slider
|
|
* being disabled or enabled. */
|
|
uint8_t num_rotors_sliders_in_use;
|
|
/* ! Max possible number of channels per rotor or slider. */
|
|
uint8_t max_channels_per_rotor_slider;
|
|
}
|
|
touch_info_t;
|
|
|
|
/* ! Touch library version information type. */
|
|
typedef struct tag_touch_libver_info_t {
|
|
/* ! Chip ID */
|
|
uint32_t chip_id;
|
|
/* ! Product ID */
|
|
uint16_t product_id;
|
|
/* ! Touch Library version
|
|
Bits[12:15] Reserved
|
|
Bits[8:11] TLIB_MAJOR_VERSION
|
|
Bits[4:7] TLIB_MINOR_VERSION
|
|
Bits[0:3] TLIB_PATCH_VERSION */
|
|
uint16_t fw_version;
|
|
}
|
|
touch_libver_info_t;
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Structure Declarations
|
|
*
|
|
*
|
|
*----------------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* global variables
|
|
*
|
|
*
|
|
*----------------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* extern variables
|
|
* ----------------------------------------------------------------------------*/
|
|
/* ! Touch Library Timing info. */
|
|
extern touch_time_t touch_time;
|
|
|
|
/* ! QTouch Library acquisition status */
|
|
//extern touch_acq_status_t touch_acq_status;
|
|
|
|
/**
|
|
CC calibration signal limit variables, Range 0-1024
|
|
*/
|
|
extern uint16_t cc_cal_max_signal_limit;
|
|
extern uint16_t cc_cal_min_signal_limit;
|
|
|
|
/* ! Self capacitance method measured data pointer. */
|
|
extern touch_measure_data_t *p_selfcap_measure_data;
|
|
|
|
/* ! Mutual capacitance method measured data pointer. */
|
|
extern touch_measure_data_t *p_mutlcap_measure_data;
|
|
|
|
extern void (* volatile touch_suspend_app_cb) (void);
|
|
|
|
/* ! Wake up touch status Lib to Application */
|
|
extern uint8_t wake_up_touch;
|
|
|
|
/* ! Low power mode status from Library to Application*/
|
|
extern uint8_t low_power_mode;
|
|
|
|
extern int32_t mois_mutl_grp_delta_arr[] ;
|
|
extern int32_t mois_mutl_grp_adj_delta_arr[] ;
|
|
extern uint8_t mois_lock_global_mutl;
|
|
|
|
extern int32_t mois_self_grp_delta_arr[] ;
|
|
extern int32_t mois_self_grp_adj_delta_arr[] ;
|
|
extern uint8_t mois_lock_global_self;
|
|
/*----------------------------------------------------------------------------
|
|
* static variables
|
|
* ----------------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* prototypes
|
|
*
|
|
*
|
|
*----------------------------------------------------------------------------*/
|
|
|
|
/*! \name Touch Helper API.
|
|
*/
|
|
/* ! @{ */
|
|
|
|
/*! \brief This API is used to initialize and configure the Touch Library.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_sensors_init(void);
|
|
|
|
/*! \brief This API is used to perform a Single Capacitance measurement
|
|
* using the Touch Library.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_sensors_measure(void);
|
|
/*! \brief This API is used to update Timing info for Touch Library.
|
|
* Typical usage of this API is inside a periodic timer ISR.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
void touch_sensors_update_time(void);
|
|
|
|
/* ! @} */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Touch API
|
|
*
|
|
*
|
|
*----------------------------------------------------------------------------*/
|
|
|
|
/*! \name Touch API.
|
|
*/
|
|
/* ! @{ */
|
|
|
|
/**
|
|
* touch_ret_t touch_mutlcap_sensors_init( touch_config_t *p_touch_config);
|
|
*/
|
|
#define touch_mutlcap_sensors_init( y ) \
|
|
touch_mutlcap_sensors_init_with_rs_table((y), \
|
|
PRIV_MUTLCAP_RS_TABLE_INIT, PRIV_NM_TABLE_INIT,PRIV_FREQ_AUTO_TUNE_CHK,PRIV_MOIS_TOLERANCE_CHK);
|
|
|
|
/**
|
|
* touch_ret_t touch_selfcap_sensors_init( touch_config_t *p_touch_config);
|
|
*/
|
|
#define touch_selfcap_sensors_init( y ) \
|
|
touch_selfcap_sensors_init_with_rs_table((y), \
|
|
PRIV_SELFCAP_RS_TABLE_INIT, PRIV_NM_TABLE_INIT,PRIV_FREQ_AUTO_TUNE_CHK,PRIV_MOIS_TOLERANCE_CHK);
|
|
|
|
/*! \brief This API is used to initialize the Touch Library with Mutual cap
|
|
* method
|
|
* pin, register and sensor configuration provided by the user.
|
|
*
|
|
* \param p_touch_config: Pointer to Touch configuration structure.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_mutlcap_sensors_init_with_rs_table (touch_config_t *p_touch_config,
|
|
void (*rs_table_init)(void), void (*nm_table_init)(void), void (*frequency_auto_tune_en)(touch_acq_t ), void (*mois_tole_en)(void *));
|
|
|
|
/*! \brief This API is used to initialize the Touch Library with Self cap method
|
|
* pin, register and sensor configuration provided by the user.
|
|
*
|
|
* \param p_touch_config: Pointer to Touch configuration structure.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_selfcap_sensors_init_with_rs_table( touch_config_t *p_touch_config,
|
|
void (*rs_table_init)(void), void (*nm_table_init)(void), void (*frequency_auto_tune_en)(touch_acq_t ), void (*mois_tole_en)(void *));
|
|
/*! \brief This API can be used to configure a sensor of type key, rotor or slider.
|
|
*
|
|
* \param sensor_type: can be of type key, rotor or slider.
|
|
* \param from_channel: the first channel in the slider sensor.
|
|
* \param to_channel: the last channel in the slider sensor.
|
|
* \param aks_group: which AKS group (if any) the sensor is in.
|
|
* \param detect_threshold: the sensor detection threshold.
|
|
* \param detect_hysteresis: the sensor detection hysteresis value.
|
|
* \param position_resolution: the resolution of the reported position value.
|
|
* \param p_sensor_id: The sensor id value of the configured sensor is updated
|
|
* by the Touch Library.
|
|
* \note Range of position_hysteresis value is from 0 to 7.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_mutlcap_sensor_config(
|
|
sensor_type_t sensor_type,
|
|
channel_t from_channel,
|
|
channel_t to_channel,
|
|
aks_group_t aks_group,
|
|
threshold_t detect_threshold,
|
|
hysteresis_t detect_hysteresis,
|
|
resolution_t position_resolution,
|
|
uint8_t position_hysteresis,
|
|
sensor_id_t *p_sensor_id);
|
|
|
|
touch_ret_t touch_selfcap_sensor_config(
|
|
sensor_type_t sensor_type,
|
|
channel_t from_channel,
|
|
channel_t to_channel,
|
|
aks_group_t aks_group,
|
|
threshold_t detect_threshold,
|
|
hysteresis_t detect_hysteresis,
|
|
resolution_t position_resolution,
|
|
sensor_id_t *p_sensor_id);
|
|
|
|
/*! \brief This API is used to calibrate the sensors for the first time before
|
|
* starting a Touch measurement. This API can also be used to force
|
|
* calibration of sensors when any of the Touch sensor parameters are
|
|
* changed during runtime.
|
|
*
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_mutlcap_sensors_calibrate(auto_tune_type_t );
|
|
|
|
touch_ret_t touch_selfcap_sensors_calibrate(auto_tune_type_t );
|
|
|
|
/*! \brief This API can be used to start a Touch measurement.
|
|
*
|
|
* \param current_time_ms: Current time in millisecond.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_selfcap_sensors_measure(
|
|
touch_current_time_t current_time_ms,
|
|
touch_acq_mode_t selfcap_acq_mode,
|
|
void (*measure_complete_callback) (void));
|
|
|
|
touch_ret_t touch_mutlcap_sensors_measure(
|
|
touch_current_time_t current_time_ms,
|
|
touch_acq_mode_t mutlcap_acq_mode,
|
|
void (*measure_complete_callback) (void));
|
|
|
|
/*! \brief This API is used to start a event triggered based mutualcap low power sensor
|
|
* measure
|
|
*
|
|
* \param sensor_id: Low power sensor id
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
|
|
touch_ret_t touch_mutual_lowpower_sensor_enable_event_measure(sensor_id_t sensor_id);
|
|
|
|
|
|
/*! \brief This API is used to start a event triggered based selfcap low power sensor
|
|
* measure
|
|
*
|
|
* \param sensor_id: Low power sensor id
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
|
|
touch_ret_t touch_self_lowpower_sensor_enable_event_measure(sensor_id_t sensor_id);
|
|
|
|
/*! \brief This API can be used retrieve the delta value corresponding to
|
|
* a given sensor.
|
|
*
|
|
* \param sensor_id: The sensor id for which delta value is being seeked.
|
|
* \param p_delta: Pointer to the delta variable to be updated by the Touch
|
|
* Library.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_mutlcap_sensor_get_delta(
|
|
sensor_id_t sensor_id,
|
|
touch_delta_t *p_delta);
|
|
|
|
touch_ret_t touch_selfcap_sensor_get_delta(
|
|
sensor_id_t sensor_id,
|
|
touch_delta_t *p_delta);
|
|
|
|
/*! \brief This API can be used to set the sensor configuration parameters.
|
|
* \param p_sensor_id: The sensor id for which configuration parameter
|
|
* information is being set.
|
|
* \param p_touch_sensor_param: The touch sensor parameter structure that will
|
|
* be used by the Touch Library to update.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_mutlcap_sensor_update_config( sensor_id_t sensor_id,
|
|
touch_mutlcap_param_t *p_touch_sensor_param );
|
|
|
|
touch_ret_t touch_selfcap_sensor_update_config(sensor_id_t sensor_id,
|
|
touch_selfcap_param_t *p_touch_sensor_param );
|
|
|
|
/*! \brief This API can be used to read back the sensor configuration
|
|
* parameters.
|
|
* \param p_sensor_id: The sensor id for which configuration parameter
|
|
* information is being set.
|
|
* \param p_touch_sensor_param: The touch sensor parameter structure that will
|
|
* be updated by the Touch Library.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
|
|
touch_ret_t touch_mutlcap_sensor_get_config(sensor_id_t sensor_id,
|
|
touch_mutlcap_param_t *p_touch_sensor_param );
|
|
|
|
touch_ret_t touch_selfcap_sensor_get_config(sensor_id_t sensor_id,
|
|
touch_selfcap_param_t *p_touch_sensor_param );
|
|
|
|
/*! \brief This API can be used to set the sensor configuration parameters.
|
|
* \param p_sensor_id: The sensor id for which configuration parameter
|
|
* information is being set.
|
|
* \param p_touch_sensor_param: The touch sensor parameter structure that will
|
|
* be used by the Touch Library to update.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_mutlcap_sensor_update_acq_config(
|
|
touch_mutlcap_acq_param_t *p_touch_mutlcap_acq_param );
|
|
|
|
touch_ret_t touch_selfcap_sensor_update_acq_config(
|
|
touch_selfcap_acq_param_t *p_touch_selfcap_acq_param );
|
|
|
|
/*! \brief This API can be used to read back the sensor configuration parameters.
|
|
* \param p_sensor_id: The sensor id for which configuration parameter
|
|
* information is being set.
|
|
* \param p_touch_sensor_param: The touch sensor parameter structure that will
|
|
* be updated by the Touch Library.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
|
|
touch_ret_t touch_mutlcap_sensor_get_acq_config(
|
|
touch_mutlcap_acq_param_t *p_touch_mutlcap_acq_param );
|
|
|
|
touch_ret_t touch_selfcap_sensor_get_acq_config(
|
|
touch_selfcap_acq_param_t *p_touch_selfcap_acq_param );
|
|
|
|
/*! \brief This API can be used to update the global parameter
|
|
*
|
|
* \param p_global_param: The pointer to global sensor configuration.
|
|
*
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_mutlcap_update_global_param(
|
|
touch_global_param_t *p_global_param );
|
|
|
|
touch_ret_t touch_selfcap_update_global_param(
|
|
touch_global_param_t *p_global_param );
|
|
|
|
/*! \brief This API can be used to read back the global parameter
|
|
*
|
|
* \param p_global_param: The pointer to global sensor configuration.
|
|
*
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_mutlcap_get_global_param( touch_global_param_t *p_global_param );
|
|
|
|
touch_ret_t touch_selfcap_get_global_param(touch_global_param_t *p_global_param );
|
|
|
|
/*! \brief This API can be used to disable any sensor
|
|
*
|
|
* \param sensor_id: Sensor number which needs to be disabled
|
|
*
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_mutlcap_sensor_disable(sensor_id_t sensor_id);
|
|
|
|
touch_ret_t touch_selfcap_sensor_disable(sensor_id_t sensor_id);
|
|
/*! \brief This API can be used to reenable a disabled sensor
|
|
*
|
|
* \param p_global_param: Sensor number which needs to be reenabled
|
|
* \param no_calib if set then the calibration for the sensor is not forced.
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_mutlcap_sensor_reenable(sensor_id_t sensor_id, uint8_t no_calib);
|
|
|
|
touch_ret_t touch_selfcap_sensor_reenable(sensor_id_t sensor_id, uint8_t no_calib);
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Moisture Tolerance API
|
|
*-----------------------------------------------------------------------------*/
|
|
|
|
|
|
/*! \brief This API can be used to Configures self cap sensor in the moisture group and multi touch group
|
|
*
|
|
* \param snsr_id: The sensor id for which configuration parameter
|
|
* information is being set
|
|
* \param mois_grpid: Moisture group id
|
|
* \param mltch_grpid: Multi touch group id
|
|
* \return touch_ret: Return the touch status
|
|
*/
|
|
|
|
touch_ret_t touch_selfcap_cnfg_mois_mltchgrp(sensor_id_t snsr_id,moisture_grp_t mois_grpid,mltch_grp_t mltch_grpid);
|
|
|
|
/*! \brief This API can be used to Configures mutual cap sensor in the moisture group and multi touch group
|
|
*
|
|
* \param snsr_id: The sensor id for which configuration parameter
|
|
* information is being set
|
|
* \param mois_grpid: Moisture group id
|
|
* \param mltch_grpid: Multi touch group id
|
|
* \return touch_ret: Return the touch status
|
|
*/
|
|
|
|
touch_ret_t touch_mutlcap_cnfg_mois_mltchgrp(sensor_id_t snsr_id,moisture_grp_t mois_grpid,mltch_grp_t mltch_grpid);
|
|
|
|
|
|
/*! \brief This API can be used to Configures self cap moisture group sensor moisuture lock and system
|
|
* moisture lock threshold
|
|
* \param mois_grpid: Moisture group id
|
|
*
|
|
* \param snsr_threshold: sensor moisuture lock threshold
|
|
* \param system_threshold: system moisuture lock threshold
|
|
* \return touch_ret: Return the touch status
|
|
*/
|
|
|
|
touch_ret_t touch_selfcap_cnfg_mois_threshold(moisture_grp_t mois_grpid,mois_snsr_threshold_t snsr_threshold,mois_system_threshold_t system_threshold);
|
|
|
|
|
|
/*! \brief This API can be used to Configures mutual cap moisture group sensor moisuture lock and system
|
|
* moisture lock threshold
|
|
* \param mois_grpid: Moisture group id
|
|
*
|
|
* \param snsr_threshold: sensor moisuture lock threshold
|
|
* \param system_threshold: system moisuture lock threshold
|
|
* \return touch_ret: Return the touch status
|
|
*/
|
|
|
|
touch_ret_t touch_mutlcap_cnfg_mois_threshold(moisture_grp_t mois_grpid,mois_snsr_threshold_t snsr_threshold,mois_system_threshold_t system_threshold);
|
|
|
|
/*! \brief This API can be used to enable mutual cap moisture tolerance feature
|
|
*
|
|
* \param void:
|
|
*
|
|
* \return touch_ret: Return the touch status
|
|
*/
|
|
|
|
touch_ret_t touch_mutlcap_mois_tolrnce_enable(void);
|
|
|
|
/*! \brief This API can be used to disable mutual cap moisture tolerance feature
|
|
*
|
|
* \param void:
|
|
*
|
|
* \return touch_ret: Return the touch status
|
|
*/
|
|
|
|
touch_ret_t touch_mutlcap_mois_tolrnce_disable(void);
|
|
|
|
/*! \brief This API can be used to enable mutual cap moisture tolerance quick reburst feature
|
|
*
|
|
* \param void:
|
|
*
|
|
* \return touch_ret: Return the touch status
|
|
*/
|
|
touch_ret_t touch_mutlcap_mois_tolrnce_quick_reburst_enable(void);
|
|
|
|
|
|
/*! \brief This API can be used to disable mutual cap moisture tolerance quick reburst feature
|
|
*
|
|
* \param void:
|
|
*
|
|
* \return touch_ret: Return the touch status
|
|
*/
|
|
touch_ret_t touch_mutlcap_mois_tolrnce_quick_reburst_disable(void);
|
|
|
|
/*! \brief This API can be used to enable self cap moisture tolerance feature
|
|
*
|
|
* \param void:
|
|
*
|
|
* \return touch_ret: Return the touch status
|
|
*/
|
|
|
|
|
|
touch_ret_t touch_selfcap_mois_tolrnce_enable(void);
|
|
|
|
/*! \brief This API can be used to disable self cap moisture tolerance feature
|
|
*
|
|
* \param void:
|
|
*
|
|
* \return touch_ret: Return the touch status
|
|
*/
|
|
|
|
touch_ret_t touch_selfcap_mois_tolrnce_disable(void);
|
|
|
|
/*! \brief This API can be used to enable self cap moisture tolerance quick re-burst feature
|
|
*
|
|
* \param void:
|
|
*
|
|
* \return touch_ret: Return the touch status
|
|
*/
|
|
touch_ret_t touch_selfcap_mois_tolrnce_quick_reburst_enable(void);
|
|
|
|
/*! \brief This API can be used to disable self cap moisture tolerance quick re-burst feature
|
|
*
|
|
* \param void:
|
|
*
|
|
* \return touch_ret: Return the touch status
|
|
*/
|
|
|
|
touch_ret_t touch_selfcap_mois_tolrnce_quick_reburst_disable(void);
|
|
|
|
/*! \brief This API can be used to get the Touch Library configuration
|
|
*
|
|
* \param p_touch_info: Pointer to the Touch info data structure that will be
|
|
* updated by the Touch Library.
|
|
*
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_mutlcap_get_libinfo( touch_info_t *p_touch_info );
|
|
|
|
touch_ret_t touch_selfcap_get_libinfo(touch_info_t *p_touch_info );
|
|
|
|
/*! \brief This API is to suspend the PTC controller to shutdown through the library
|
|
* To suspend attach the touch_supend_cb function before calling the suspend call.
|
|
*
|
|
* For more details check the user manual
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_suspend_ptc(void);
|
|
/*! \brief This API is to resume the PTC controller through the library
|
|
* To suspend attach the touch_supend_cb function before calling the suspend call.
|
|
*
|
|
* For more details check the user manual
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_resume_ptc(void);
|
|
/*! \brief De-init function for the Mutual cap nodes.
|
|
*
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_mutlcap_sensors_deinit(void);
|
|
/*! \brief De-init function for the Self cap nodes.
|
|
*
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_selfcap_sensors_deinit(void);
|
|
|
|
|
|
/*! \brief This API can be used to get the Touch Library configuration
|
|
*
|
|
* \param p_touch_info: Pointer to the Touch Library Version info data structure that will be
|
|
* updated by the Touch Library.
|
|
*
|
|
* \return touch_ret_t: Touch Library Error status.
|
|
*/
|
|
touch_ret_t touch_library_get_version_info( touch_libver_info_t *p_touch_libver_info_t );
|
|
|
|
/* ! @} */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Extern Objects
|
|
* ----------------------------------------------------------------------------*/
|
|
|
|
/*! \name Touch Library internal use functions.
|
|
*/
|
|
/* ! @{ */
|
|
|
|
/*! \brief This is an extern function of the Touch Library.
|
|
* This function is NOT to be used by the user.
|
|
*/
|
|
void touch_mutlcap_rs_table_init(void);
|
|
void touch_selfcap_rs_table_init(void);
|
|
|
|
void mutual_auto_tuning(void *, uint8_t, uint16_t);
|
|
void self_auto_tuning(void *, uint8_t, uint16_t);
|
|
|
|
uint32_t auto_os_resolve(void *, uint16_t );
|
|
void chk_frequency_auto_tune(touch_acq_t u32_acq_type);
|
|
void touch_noise_mit_table_init(void);
|
|
void lk_chk (void * , uint16_t ,uint16_t);
|
|
void chk_moisture_tolerance(void *);
|
|
void enable_aks(void);
|
|
/* ! @} */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* TOUCH_API_PTC_H */
|