blob: e801a2e138e3d360fcf3f8069ff44d5a3b983076 [file] [log] [blame]
/****************************************************************************
* arch/xtensa/src/esp32s3/esp32s3_touch.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* 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.
*
****************************************************************************/
#ifndef __ARCH_XTENSA_SRC_ESP32S3_ESP32S3_TOUCH_H
#define __ARCH_XTENSA_SRC_ESP32S3_ESP32S3_TOUCH_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <stdint.h>
#include <stdbool.h>
#include "esp32s3_touch_lowerhalf.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define TOUCH_SLOPE_DEFAULT (TOUCH_SLOPE_7)
#define TOUCH_TIE_OPT_DEFAULT (TOUCH_TIE_OPT_LOW)
#define TOUCH_HIGH_VOLTAGE_THRESHOLD (TOUCH_HVOLT_2V7)
#define TOUCH_LOW_VOLTAGE_THRESHOLD (TOUCH_LVOLT_0V5)
#define TOUCH_ATTEN_VOLTAGE_THRESHOLD (TOUCH_HVOLT_ATTEN_0V5)
#define TOUCH_IDLE_CH_CONNECT_DEFAULT (TOUCH_CONN_GND)
#define TOUCH_THRESHOLD_MAX (0x1fffff)
#define TOUCH_SLEEP_CYCLE_DEFAULT (0xf)
#define TOUCH_MEASURE_CYCLE_DEFAULT (500)
#define TOUCH_DEBOUNCE_CNT_MAX (7)
#define TOUCH_NOISE_THR_MAX (3)
#define TOUCH_JITTER_STEP_MAX (15)
#define TOUCH_PROXIMITY_CHANNEL_NUM (3)
/****************************************************************************
* Public Types
****************************************************************************/
#ifndef __ASSEMBLY__
struct touch_config_s
{
enum touch_high_volt_e refh;
enum touch_low_volt_e refl;
enum touch_volt_atten_e atten;
enum touch_cnt_slope_e slope;
enum touch_tie_opt_e tie_opt;
enum touch_fsm_mode_e fsm_mode;
#ifdef CONFIG_ESP32S3_TOUCH_FILTER
enum touch_filter_mode_e filter_mode;
uint32_t filter_debounce_cnt;
uint32_t filter_noise_thr;
uint32_t filter_jitter_step;
enum touch_smooth_mode_e filter_smh_lvl;
#endif
#ifdef CONFIG_ESP32S3_TOUCH_DENOISE
enum touch_denoise_grade_e denoise_grade;
enum touch_denoise_cap_e denoise_cap_level;
#endif
};
/****************************************************************************
* Public Data
****************************************************************************/
/* Store GPIO number corresponding to the Touch Sensor channel number.
* Note: T0 is an internal channel that does not have a corresponding
* external GPIO.
*/
static const int touch_channel_to_rtcio[] =
{
-1,
TOUCH_PAD_NUM1_CHANNEL_NUM,
TOUCH_PAD_NUM2_CHANNEL_NUM,
TOUCH_PAD_NUM3_CHANNEL_NUM,
TOUCH_PAD_NUM4_CHANNEL_NUM,
TOUCH_PAD_NUM5_CHANNEL_NUM,
TOUCH_PAD_NUM6_CHANNEL_NUM,
TOUCH_PAD_NUM7_CHANNEL_NUM,
TOUCH_PAD_NUM8_CHANNEL_NUM,
TOUCH_PAD_NUM9_CHANNEL_NUM,
TOUCH_PAD_NUM10_CHANNEL_NUM,
TOUCH_PAD_NUM11_CHANNEL_NUM,
TOUCH_PAD_NUM12_CHANNEL_NUM,
TOUCH_PAD_NUM13_CHANNEL_NUM,
TOUCH_PAD_NUM14_CHANNEL_NUM
};
#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
/****************************************************************************
* Inline Functions
****************************************************************************/
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: esp32s3_configtouch
*
* Description:
* Configure a touch pad channel.
*
* Input Parameters:
* tp - The touch pad channel;
* config - The touch pad configuration structure.
*
* Returned Value:
* OK.
*
****************************************************************************/
int esp32s3_configtouch(enum touch_pad_e tp, struct touch_config_s config);
/****************************************************************************
* Name: esp32_touchread
*
* Description:
* Read a touch pad channel.
*
* Input Parameters:
* tp - The touch pad channel.
*
* Returned Value:
* 0 if touch pad pressed, 1 if released.
*
****************************************************************************/
bool esp32s3_touchread(enum touch_pad_e tp);
/****************************************************************************
* Name: esp32s3_touchreadraw
*
* Description:
* Read the analog value of a touch pad channel.
*
* Input Parameters:
* tp - The touch pad channel.
*
* Returned Value:
* The number of charge cycles in the last measurement.
*
****************************************************************************/
uint32_t esp32s3_touchreadraw(enum touch_pad_e tp);
/****************************************************************************
* Name: esp32s3_touchbenchmark
*
* Description:
* Read the touch pad channel benchmark.
*
* Input Parameters:
* tp - The touch pad channel.
*
* Returned Value:
* The benchmark value.
*
****************************************************************************/
uint32_t esp32s3_touchbenchmark(enum touch_pad_e tp);
/****************************************************************************
* Name: esp32s3_touchsetthreshold
*
* Description:
* Set the touch pad channel threshold.
*
* Input Parameters:
* tp - The touch pad channel;
* threshold - The threshold value.
*
* Returned Value:
* None.
*
****************************************************************************/
void esp32s3_touchsetthreshold(enum touch_pad_e tp, uint32_t threshold);
/****************************************************************************
* Name: esp32s3_touchirqenable
*
* Description:
* Enable the interrupt for the specified touch pad.
*
* Input Parameters:
* irq - The touch pad irq number.
*
* Returned Value:
* None.
*
****************************************************************************/
#ifdef CONFIG_ESP32S3_TOUCH_IRQ
void esp32s3_touchirqenable(int irq);
#else
# define esp32s3_touchirqenable(irq)
#endif
/****************************************************************************
* Name: esp32s3_touchirqdisable
*
* Description:
* Disable the interrupt for the specified touch pad.
*
* Input Parameters:
* irq - The touch pad irq number.
*
* Returned Value:
* None.
*
****************************************************************************/
#ifdef CONFIG_ESP32S3_TOUCH_IRQ
void esp32s3_touchirqdisable(int irq);
#else
# define esp32s3_touchirqdisable(irq)
#endif
/****************************************************************************
* Name: esp32s3_touchregisterreleasecb
*
* Description:
* Register the release callback.
*
* Input Parameters:
* func - The handler function to be used.
*
* Returned Value:
* None.
*
****************************************************************************/
#ifdef CONFIG_ESP32S3_TOUCH_IRQ
void esp32s3_touchregisterreleasecb(int (*func)(int, void *, void *));
#endif
#ifdef __cplusplus
}
#endif
#undef EXTERN
#endif /* __ASSEMBLY__ */
#endif /* __ARCH_XTENSA_SRC_ESP32S3_ESP32S3_TOUCH_H */