Touch Key
概述
Touch key 检测电路利用人体导电性,当人体接触电极后引发电容变化,通过检测电容变化感应人体接触。
例如 WQ7036 有六个输入通道,即 6 个 touch pad 可选。通过外接被测量的电容,感应外界触摸电容的变化,判断是否是触摸行为。
功能特性
Touch Key: 每个 phase 可指定外部 pad;备用 phase 可以作为休眠 phase。
接口:标准 device 接口(init/deinit/open/close/read/start_dump/stop_dump)。
工作模式:支持中断模式。
Touch key 具有防抖功能,防止误触发。
资源依赖
touch key
OS timer
share task
工作模式
Touch 功能和入耳功能分别采用不同的工作模式:
Touch:相对阈值模式。当阈值的变化量达到设定值就会触发抬手/触摸中断。
入耳:绝对阈值模式。由于要确保耳机在耳内运动时不会触发入/出耳中断,绝对阈值模式更合适。在绝对阈值模式下,当外部环境发生变化导致设定的绝对阈值不能使用时,上层必须实时校准阈值。
Touch dump 设计说明
Touch dump 驱动内部设计了 ping-pong buffer,长度默认 32 个字节,开启 dump 后不停挂包;dump callback 回调的 buffer 携带 pad id 和 cdc 值。
open/close 接口可开启单一 pad,也可以 group 形式 open/close pad。 建议 open/close 一次性就打开/关闭需要的 pad。
start dump 开启某个 pad 的 dump ,需要一个个 pad 进行传参,如果是滑动功能,则支持以group形式传参开启 dump。
start dump 后不会自行停止,内部 dma ping-pong buffer 会自行挂包 dump,满足设置的 buffer 长度后自动 callback 给上层,直到调用 stop dump,释放该 pad dump 内存,停止 该 pad 数据的dump。
stop dump 可以停止对应 pad 的 dump ,直到停止所有 pad 的 dump后回收 ping-pong buffer ,至此 dma dump 完全停止。如果是滑动功能,则支持以 group 形式传参关闭 dump。
close 接口支持在 dma dump 进行时关闭 pad。
deinit 回收锁、dma channel、清零状态位、彻底关停 touch 模块等操作。
打开 TouchKey 宏控 TOUCH_KEY_DUMP_RAW_CDC ,可 dump 原始 raw cdc 点 ;建议 dump raw cdc 长度 大于 256,否则中断太多,share task 会来不及处理。
参考示例
/examples/touch_demo/
API 介绍
Defines
-
WQ_TOUCH_KEY_ANTI_SHAKE_CLIMB_TRIG_TIMES
-
WQ_TOUCH_KEY_ANTI_SHAKE_FALL_TRIG_TIMES
-
WQ_TOUCH_KEY_PHASE_AVER_MODE_FALL_THRS
-
WQ_TOUCH_KEY_PHASE_AVER_MODD_CLIMB_THRS
-
WQ_TOUCH_KEY_PHASE_SUMMING_MODE_FALL_THRS
-
WQ_TOUCH_KEY_PHASE_SUMMING_MODE_CLIMB_THRS
Typedefs
-
typedef void (*wq_touch_key_callback)(WQ_TK_PAD_ID pad_id, WQ_TOUCH_KEY_INT int_type)
Typedef for callback function to callback channel id and interrupt type.
备注
This function is intended to be called from within an interrupt context.
- Param pad_id:
The Touch Key channel id
- Param int_type:
The Touch Key interrupt type
-
typedef void (*wq_tk_dump_cdc_callback)(void *buf, uint32_t buf_len)
Typedef for callback function to callback dump channel buffer.
- Param buf:
The Touch Key dump buffer
- Param buf_len:
The Touch Key total dump buf len
Enums
-
enum WQ_TK_PAD_ID
Values:
-
enumerator WQ_TK_PAD_ID_0
Extern Touch Pad Id 0
-
enumerator WQ_TK_PAD_ID_1
Extern Touch Pad Id 1
-
enumerator WQ_TK_PAD_ID_2
Extern Touch Pad Id 2
-
enumerator WQ_TK_PAD_ID_3
Extern Touch Pad Id 3
-
enumerator WQ_TK_PAD_ID_4
Extern Touch Pad Id 4
-
enumerator WQ_TK_PAD_ID_5
Extern Touch Pad Id 5
-
enumerator WQ_TK_PAD_ID_MAX
Extern Touch Pad Id Max
-
enumerator WQ_TK_PAD_ID_INVALID
Extern Touch Pad Id Invalid
-
enumerator WQ_TK_PAD_ID_0
-
enum WQ_TOUCH_KEY_DIV_FREQ
Values:
-
enumerator WQ_TOUCH_KEY_DIV_FREQ_8K
Touch Pad Freq 8K
-
enumerator WQ_TOUCH_KEY_DIV_FREQ_10K
Touch Pad Freq 10K
-
enumerator WQ_TOUCH_KEY_DIV_FREQ_16K
Touch Pad Freq 16K
-
enumerator WQ_TOUCH_KEY_DIV_FREQ_32K
Touch Pad Freq 32K
-
enumerator WQ_TOUCH_KEY_DIV_FREQ_64K
Touch Pad Freq 64K
-
enumerator WQ_TOUCH_KEY_DIV_FREQ_128K
Touch Pad Freq 128K
-
enumerator WQ_TOUCH_KEY_DIV_FREQ_256K
Touch Pad Freq 256K
-
enumerator WQ_TOUCH_KEY_DIV_FREQ_MAX
Touch Pad Freq Max
-
enumerator WQ_TOUCH_KEY_DIV_FREQ_8K
-
enum WQ_TK_PAD_MODE
Values:
-
enumerator WQ_TK_PAD_MODE_NONE
Touch Pad Id Mode None
-
enumerator WQ_TK_PAD_MODE_RELATIVE
Touch Pad Id Relative Mode
-
enumerator WQ_TK_PAD_MODE_ABSOLUTE
Touch Pad Id Absolute Mode
-
enumerator WQ_TK_PAD_MODE_NONE
-
enum WQ_TOUCH_KEY_AGGREGATE_POINT_CDC
;
Values:
-
enumerator WQ_TOUCH_KEY_AGGREGATE_POINT_CDC_0
TK Cdc Raw Cdc
-
enumerator WQ_TOUCH_KEY_AGGREGATE_POINT_CDC_32
TK Cdc Aggregate Cdc 32
-
enumerator WQ_TOUCH_KEY_AGGREGATE_POINT_CDC_64
TK Cdc Aggregate Cdc 64
-
enumerator WQ_TOUCH_KEY_AGGREGATE_POINT_CDC_128
TK Cdc Aggregate Cdc 128
-
enumerator WQ_TOUCH_KEY_AGGREGATE_POINT_CDC_256
TK Cdc Aggregate Cdc 256
-
enumerator WQ_TOUCH_KEY_AGGREGATE_POINT_CDC_MAX
TK Cdc Aggregate Cdc Max
-
enumerator WQ_TOUCH_KEY_AGGREGATE_POINT_CDC_0
-
enum WQ_TOUCH_KEY_INT
Values:
-
enumerator WQ_TOUCH_KEY_INT_NONE
Tk Int None
-
enumerator WQ_TOUCH_KEY_INT_PRESS_RELEASE
Tk Int Release
-
enumerator WQ_TOUCH_KEY_INT_PRESS_MID
Tk Int Press
-
enumerator WQ_TOUCH_KEY_INT_PRESS_RELEASE_MISC
Tk Int Press & Release
-
enumerator WQ_TOUCH_KEY_INT_MAX
Tk Int Max
-
enumerator WQ_TOUCH_KEY_INT_NONE
Functions
-
void wq_touch_key_init(WQ_TOUCH_KEY_DIV_FREQ freq)
the function is to init touch_key module
- 参数:
freq -- [in] Touch key freq
-
WQ_RET wq_touch_key_deinit(void)
the function is to deinit touch_key module
- 返回:
WQ_RET RET_OK for success else for error
-
WQ_RET wq_touch_key_open(const wq_touch_key_config_t *param)
the function is to open touch key.
备注
Channel interruption is enabled after 20ms. pls use pad after 20ms
备注
when touch pad opened ,Other pad touch function will disabled,so best to open pad together.
备注
support to open pad in group
- 参数:
param -- [in] param pointer
- 返回:
WQ_RET RET_OK for success else for error
-
WQ_RET wq_touch_key_enable_interrupt(WQ_TK_PAD_ID pad_id, bool enable)
the function is to enable the pad's intr, please delay more than 20ms before call.
- 参数:
pad_id -- [in] is pad id
enable -- [in] enable intr
- 返回:
WQ_RET RET_OK for success else for error
-
WQ_RET wq_touch_key_close(const WQ_TK_PAD_ID *pad_array, uint8_t pad_num)
the function is to close touch_key pad.
备注
better close all pad together
备注
support to close pad in group
- 参数:
pad_array -- [in] touch key's pad id array pointer
pad_num -- [in] touch key's pad number
- 返回:
WQ_RET RET_OK for success else for error
-
WQ_RET wq_touch_key_set_threshold(WQ_TK_PAD_ID pad_id, uint32_t fall_thrs, uint32_t climb_thrs)
the function is to set pad's thrs
- 参数:
pad_id -- [in] touch key's pad id
fall_thrs -- [in] touch key's fall thrs
climb_thrs -- [in] touch key's climb thrs
- 返回:
WQ_RET RET_OK for success else for error
-
WQ_RET wq_touch_key_start_dump(const wq_touch_key_dump_config_t *param)
the function is to start dma dump.
备注
It can set param once or call the API multiple times to set param
备注
no use in interrupt state!
备注
Only slide func can deliver param in group
- 参数:
param -- [in] dma dump set param.
- 返回:
WQ_RET RET_OK for success else for error
-
WQ_RET wq_touch_key_stop_dump(const WQ_TK_PAD_ID *pad_array, uint8_t pad_num)
the function is to stop channeldma dump.
备注
When all dump pads are stopped, the dump behavior can be disabled
备注
no use in interrupt state !
备注
Only slide func can deliver param in group
- 参数:
pad_array -- [in] dma dump stop channel id.
pad_num -- [in] dma dump staop channel num.
- 返回:
WQ_RET RET_OK for success else for error
-
uint32_t wq_touch_key_read_cdc(WQ_TK_PAD_ID pad_id)
the function is to read channel cdc.
- 参数:
pad_id -- [in] read channel id
- 返回:
pad id cdc value
-
WQ_TK_PAD_ID wq_touch_key_get_wakeup_pad(void)
the function is get wakeup pad id.
- 返回:
get wakeup pad id.
-
struct wq_touch_key_config_t
- #include <wq_touch_key.h>
TK open param.
Public Members
-
WQ_TK_PAD_ID *pad_array
Touch pad array pointer
-
WQ_TK_PAD_MODE work_mode
Touch work_mode
-
WQ_TOUCH_KEY_AGGREGATE_POINT_CDC point_num
Touch point_num
-
uint32_t fall_thrs
Threshold for triggering a fall interrupt
-
uint32_t climb_thrs
Threshold for triggering a climb interrupt
-
uint8_t fall_trig_times
Trig times thrs for triggering a fall interrupt
-
uint8_t climb_trig_times
Trig times thrs for triggering a climb interrupt
-
uint8_t pad_array_num
-
wq_touch_key_callback callback
Callback for tk interrupt
-
WQ_TK_PAD_ID *pad_array
-
struct wq_touch_key_dump_config_t
- #include <wq_touch_key.h>
TK dump param config.
Public Members
-
WQ_TK_PAD_ID *pad_array
Touch dump pad array pointer
-
uint8_t pad_array_num
Touch dump channel id number
-
void *buf
Touch dump buffer
-
uint32_t buf_len
Touch dump buffer len
-
wq_tk_dump_cdc_callback cb
Touch dump buffer callback
-
WQ_TK_PAD_ID *pad_array
-
struct wq_touch_key_dump_regroup_cdc_u
- #include <wq_touch_key.h>
TK dump buffer info.