INPUT(touch/keypad)使用参考
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 | 上报按键事件按键值 |