Touch Key

概述

Touch key 检测电路利用人体导电性,当人体接触电极后引发电容变化,通过检测电容变化感应人体接触。

例如 WQ7036 有六个输入通道,即 6 个 touch pad 可选。通过外接被测量的电容,感应外界触摸电容的变化,判断是否是触摸行为。

../../_images/Touch_key.png

功能特性

  • 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

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

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

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

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

enum WQ_TK_CDC_TYPE

Values:

enumerator WQ_TK_CDC_TYPE_OPT

Tk Dump Optional Cdc Data

enumerator WQ_TK_CDC_TYPE_RAW

Tk Dump Raw Cdc Data

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

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

struct wq_touch_key_dump_regroup_cdc_u
#include <wq_touch_key.h>

TK dump buffer info.

Public Members

uint32_t w
uint32_t cdc

Touch dump pad cdc

uint32_t reserved

Touch dump pad reserved

uint32_t pad_id

Touch dump pad id

struct wq_touch_key_dump_regroup_cdc_u::[anonymous] [anonymous]