drivers: kscan: Add generic ADC kscan driver
一个通用的 ADC key 驱动。可以将任何 ADC driver 用作 ADC key。支持任意按键数,仅需配置每个按键(以及它们的组合)对应的电压值。
示例用法:
adckey: adckey {
compatible = "adc-keys";
io-channels = <&exadc 2>; /* 对应的 ADC 通道 */
keyup-threshold-mv = <0>; /* 认为没有按键按下的电压值 (mV) */
press-thresholds-mv = <1650 (BIT(0))>, /* 按键 0 按下的电压值 */
<2300 (BIT(1))>, /* 按键 1 按下的电压值 */
<2536 (BIT(0) | BIT(1))>; /* 按键 0 和 1 同时按下的电压值 */
};
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/drivers/kscan.h>
static const struct device *kscan = DEVICE_DT_GET(DT_NODELABEL(adckey));
static void kscan_callback(const struct device *dev, uint32_t row, uint32_t column, bool pressed)
{
printk("key %d pressed %d\n", row, pressed);
}
int main(void)
{
/* ... */
kscan_config(kscan, kscan_callback);
kscan_enable_callback(kscan);
/* ... */
}