演示如何使用 Zephyr 的按键扫描 (kscan) API 与 FT5336 触控控制器进行交互。运行该代码后,按键扫描事件将被打印到控制台。
int kscan_config ( const struct device * dev, kscan_callback_t callback )
参数说明
字段 | 说明 |
---|---|
dev | 指向驱动程序实例的设备结构的指针 |
callback | 当键盘设备回复键盘事件(如按下/释放键)时调用 |
返回值说明
返回值 | 说明 |
---|---|
0 | 成功 |
Negative | 如果失败,则没有代码 |
更多Keyboard Scan Driver API接口可查看Zephyr官网Keyboard Scan Driver APIs。
SDK 中提供了 kscan 的示例。
{SDK}\.sdk\csk\samples\driver\kscan\ft5336
演示如何使用 Zephyr 的按键扫描 (kscan) API 与模拟按键进行交互。运行该代码后,按键扫描事件将被打印到控制台。
适用开发板:大模型开发套件
编译版型:csk6_duomotai_devkit
在 SDK 根目录(duomotai_ap
)下可通过执行以下指令进行对该示例工程的编译:
lisa zep build -b csk6_duomotai_devkit .sdk/csk/samples/driver/kscan/ft5336/ -p
编译完成后,编译产物二进制文件位于 build\zephyr\zephyr.bin
使用 Type-C 数据线连接开发套件的 DAP_USB
接口,选中以下其中一种方式对固件进行烧录:
cskburn desktop
是一款聆思推出的桌面烧录工具,在下载并安装 cskburn desktop 烧录工具后,双击图标运行软件:
1.点击串口下拉框,选择连接开发套件后识别到的串口编号;
2.将编译输出的.bin
文件拖拽进烧录区域;
3.点击开始烧录,等待烧录完成。
若您已按照 《环境搭建》 教程完成开发环境的安装,可在编译完成后执行 lisa zep exec cskburn
指令完成烧录。
lisa zep exec cskburn -s \\.\COMxx -C 6 -b 1500000 0x000000 --verify-all .\build\zephyr\zephyr.bin
请将命令行中的的 COMx 替换为开发套件在 PC 上对应的串口号(可通过设备管理器查看)。例如:
COM3
。
lisa zep exec cskburn -s PORT -C 6 0x000000 --verify-all ./build/zephyr/zephyr.bin -b 1500000
请将命令行中的 PORT 替换为开发套件连接在 PC 上对应的串口号。例如:
/dev/ttyUSB0
。
烧录完成后,连接串口终端,当触摸开发板显示屏时,可看到串口有对应的信息输出。
以下代码与注释已省略一部分非关键接口代码,主要呈现示例的主业务流程与主要接口的使用。
CONFIG_LOG=y
CONFIG_GPIO=y
CONFIG_I2C=y
CONFIG_KSCAN=y
CONFIG_KSCAN_FT5336=y
CONFIG_KSCAN_FT5336_INTERRUPT=y
1. 从设备树中定义的 ft5336 节点获取 kscan 设备的配置信息
const struct device *kscan_dev = DEVICE_DT_GET(DT_NODELABEL(ft5336));
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);
kscan_enable_callback(kscan_dev);
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);
}
按下开发板复位按钮,运行程序。在控制台中可以看到按键扫描事件的打印信息。
int main(void)
{
const struct device *kscan_dev = DEVICE_DT_GET(DT_NODELABEL(ft5336));
int ret = 0;
if (!device_is_ready(kscan_dev)) {
printk("kscan device not ready \n");
return -1;
}
ret = kscan_config(kscan_dev, kb_callback);
if (ret != 0) {
printk("kscan config error \n");
return -1;
}
kscan_enable_callback(kscan_dev);
printk("ft5336 sample application start\n");
return 0;
}