INPUT(touch/keypad)使用参考

Version 1.1


1. 概述

RTOS input device驱动路径:rtk/proj/sc/driver/sysdriver/input

启用input device,需要在product config中启用选项(此选项仅会编译touch/keypad core层):CONFIG_INPUT_SUPPORT = TRUE。该选项启用后,将会在编译时自动将input目录下的input.mak加入编译库列表进行编译。


2. 触摸屏驱动

为了方便使用touch设备,RTOS这边抽象出了touch设备驱动框架touch core,向上层提供统一的操作接口, 提高上层代码的可重用性,并向底层提供注册触摸屏驱动(比如I2C/SPI)的接口。大致框架如下:

以下是touch core 提供的API:

上层使用touch设备接口:

函数 描述
sstar_touch_open 打开touch设备
sstar_touch_read 读取触点数据
sstar_touch_close 关闭touch设备
sstar_touch_control 控制touch设备

向底层注册touch设备驱动接口:

函数 描述
sstar_touch_driver_register 注册驱动
sstar_touch_driver_deregister 反注册驱动

下面以goodix触摸屏驱动为例子,展示一下使用步骤:

1、goodix_init会做一些触摸屏的reset初始化动作,同时将goodix触摸屏驱动注册到touch core.

2、sstar_touch_open根据注册的name打开对应的触摸屏,如果触摸屏驱动未注册到touch core,那么sstar_touch_open将返回NULL;正常打开touch core将会为触摸屏创建一个设备指针,并返回,后续的操作都将使用该设备指针。touch core将根据打开时传入的opflag是TOUCH_OPFLAG_BLOCK还是TOUCH_OPFLAG_NON_BLOCK,决定在读取触摸屏数据时采用阻塞还是非阻塞方式。

3、sstar_touch_control 使能触摸屏中断,使得触摸屏能正常工作

4、用户程序可以创建一个线程实时读取触摸屏的坐标数据,也可以定时读取,sstar_touch_read是阻塞还是非阻塞,是由sstar_touch_open时传入的参数决定的,这一点需要用户程序在上下文中注意一下


3. KEYPAD驱动

keypad框架与touch screen框架基本差不多,分device层,core层和driver层,core层作为核心,提供API给driver层注册hardware driver,另外提供open/read/close/control API 给device层用户程序使用。与touch core不同的是,key core层不使用task主动读取按键事件,而是提供上报按键事件API,driver层中断中调用该API上报到core层事件队列中,然后device层调用read接口读取队列中的事件。

Device层API简介:

函数 描述
sstar_key_open 打开key input设备
sstar_key_read 读取按键值
sstar_key_close 关闭key input设备
sstar_key_control 控制key input设备

Device层API简介:

函数 描述
sstar_key_driver_register 注册keypad driver
sstar_key_driver_deregister 反注册keypad driver
sstar_key_event_report 上报按键事件按键值