提交 fba8d5dc 编写于 作者: 彭国庆's avatar 彭国庆

samples: driver: keysense: 适配多模态板型

上级 e43be4ce
流水线 #16532 已通过 ,包含阶段
in 7 minute 和 54 second
......@@ -2,7 +2,7 @@
cmake_minimum_required(VERSION 3.20.0)
set(SUPPORT_BOARDS csk6012_nano csk6011a_nano)
set(SUPPORT_BOARDS csk6012_nano csk6011a_nano csk6_duomotai_devkit)
if(NOT ${BOARD} IN_LIST SUPPORT_BOARDS)
message("Please choose one of the following boards:")
foreach(item ${SUPPORT_BOARDS})
......@@ -15,3 +15,4 @@ find_package(Zephyr HINTS $ENV{ZEPHYR_BASE})
project(KEYSENSE)
target_sources(app PRIVATE src/main.c)
CSK6002 kscan
################
简介
=====================
演示如何使用 Zephyr 的按键扫描 (kscan) API 与模拟按键进行交互。运行该代码后,按键扫描事件将被打印到控制台。
Overview
********
构建步骤
=====================
lisa zep build -b csk6_duomotai_devkit ./samples/driver/keysense/ -p
功能说明
=====================
1. 从设备树中定义的 keysense 节点获取 kscan 设备的配置信息
::
const struct device *kscan_dev = DEVICE_DT_GET(DT_NODELABEL(keysense));
2. 检查 kscan 设备是否就绪
::
if (!device_is_ready(kscan_dev)) {
printk("kscan device not ready \n");
return -1;
}
3. 配置 kscan 设备的回调函数
::
ret = kscan_config(kscan_dev, kb_callback);
4. 回调函数打印按键事件的行列号和按键状态
::
static void kb_callback(const struct device *dev, uint32_t row, uint32_t col, bool pressed)
{
ARG_UNUSED(dev);
printk("Key row = %d col = %d Pressed = %u\n", row, col, pressed);
}
运行
======================
按下开发板复位按钮,运行程序。给定 PB05 输入电压,在控制台中可以看到按键扫描事件的打印信息。
/*
* Copyright (c) 2023 Anhui(Shenzhen) Listenai Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*/
&pinctrl {
printctl_aon_iomux_keysense_default: aon_iomux_keysense_default {
pinctrls = <AON_KEY_GPIOB_05>;
};
};
&keysense {
status = "okay";
pinctrl-0 = <&printctl_aon_iomux_keysense_default>;
pinctrl-names = "default";
//keysense use adc channel 6 to sample
io-channels = <&adc0 6>;
//Trigger voltage of each analog key (mV)
analogkey-trigger = <1100 1890 3300>;
};
/ {
aliases {
analogkey = &keysense;
};
};
&adc0 {
status = "okay";
};
......@@ -5,3 +5,4 @@ CONFIG_KSCAN_CSK6=y
CONFIG_KSCAN=y
CONFIG_PRINTK_SYNC=y
CONFIG_ADC_CSK6=y
tests:
sample.board.csk6.driver.keysense:
platform_allow: csk6011a_nano
platform_allow: csk6011a_nano csk6_duomotai_devkit
tags: csk6
harness: console
harness_config:
type: one_line
regex:
- "csk6 keysense sample application start"
......@@ -21,21 +21,23 @@ static void kb_callback(const struct device *dev, uint32_t row, uint32_t col, bo
printk("Key row = %d col = %d Pressed = %u\n", row, col, pressed);
}
void main(void)
int main(void)
{
const struct device *kscan_dev = DEVICE_DT_GET(DT_NODELABEL(keysense));
int ret = 0;
if (!device_is_ready(kscan_dev)) {
printk("kscan device not ready \n");
return;
return -1;
}
ret = kscan_config(kscan_dev, kb_callback);
if (ret != 0) {
printk("kscan config error \n");
return;
return -1;
}
printk("csk6 keysense sample application start\n");
return 0;
}
支持 Markdown
0% or
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册