Q群:
电话:
邮箱:
地址:
如果在提供的oneos源码中已经有适合的工程DEMO工程,则可以直接使用;如果没有请参照快速上手中的操作指南,新建一个适合的工程。
如下图示,通过空格或向右方向键选择 (Top) → Drivers→ Touch 使能并选择使用的TOUCH硬件设备,如Enable ft6x06选项,根据实际情况选择是否使能x coordinate swap 和 y coordinate swap;
[*] Using Touch device drivers
[ ] x coordinate swap
[ ] y coordinate swap
[ ] Enable gt9147 ----
[*] Enable ft6x06 --->
[ ] Enable stmpe811 ----
进入Enable ft6x06 ,根据实际情况配置TOUCH设备使用的I2C设备,如soft_i2c4,以及TOUCH设备的I2C地址,如0x2a;
(soft_i2c4) ft6x06 i2c bus name
(0x2a) ft6x06 i2c addr(7bit)
在上一步打开的OneOS-Cube 工具命令行中输入 scons --ide=mdk5重新构建keil工程;
应用程序通过系统提供的IO设备模型接口来访问Touch设备,接口如下:
接口 | 说明 |
---|---|
os_device_find | 根据Touch设备名称查找设备指针 |
os_device_open | 打开Touch设备 |
os_device_read_nonblock | 读取触点信息(非阻塞) |
os_device_control | 控制Touch设备 |
os_device_close | 关闭Touch设备 |
该函数用于查找系统中已经注册的Touch设备,函数原型如下:
os_device_t *os_device_find(const char *name);
参数 | 说明 |
---|---|
name | Touch设备名字 |
返回值 | 说明 |
设备指针 | Touch设备指针 |
OS_NULL | 没有找到对应的设备 |
该函数用于打开Touch设备,函数原型如下:
os_err_t os_device_open(os_device_t *dev);
参数 | 说明 |
---|---|
dev | 设备指针 |
返回值 | 说明 |
OS_EOK | 设备打开成功 |
其他错误码 | 设备打开失败 |
该函数用于非阻塞式获取触点信息,函数原型如下:
os_size_t os_device_read_nonblock(os_device_t *dev, os_off_t pos, void *buffer, os_size_t size);
参数 | 说明 |
---|---|
dev | 设备指针 |
pos | 数据偏移量,Touch设备未使用 |
buffer | 用于存放数据的缓冲区 |
size | 读取数据的个数 |
返回值 | 说明 |
大于等于0 | 读取到的数据个数 |
小于0 | 读取失败 |
如果设备有数据可读,函数立即返回,数据被读取到 buffer 中,返回值为实际读取的数据量。如果设备没有准备好数据,函数立即返回,返回值为0。
触点信息使用下面的结构体来描述:
struct os_touch_data
{
os_uint8_t event; /* 触摸事件:按下、抬起、移动 */
os_uint8_t track_id; /* 触点所属轨迹的ID */
os_uint8_t width; /* 触点的宽度 */
os_uint16_t x_coordinate; /* 触点X轴坐标 */
os_uint16_t y_coordinate; /* 触点Y轴坐标 */
os_tick_t timestamp; /* 时间戳 */
};
该函数用于发送控制命令以控制Touch设备,函数原型如下:
os_err_t os_device_control(os_device_t *dev, int cmd, void *arg)
参数 | 说明 |
---|---|
dev | 设备指针 |
cmd | 控制命令 |
arg | 控制参数 |
返回值 | 说明 |
OS_EOK | 函数执行成功 |
OS_ENOSYS | 函数执行失败,dev为空 |
其他错误码 | 函数执行失败 |
Touch控制命令
/* Touch control cmd types */
#define OS_TOUCH_CTRL_GET_ID (0) /* 获取设备ID */
#define OS_TOUCH_CTRL_GET_INFO (1) /* 获取设备信息 */
#define OS_TOUCH_CTRL_SET_MODE (2) /* 设置工作模式:轮询或中断 */
#define OS_TOUCH_CTRL_SET_X_RANGE (3) /* 设置X轴范围 */
#define OS_TOUCH_CTRL_SET_Y_RANGE (4) /* 设置Y轴范围 */
#define OS_TOUCH_CTRL_SET_X_TO_Y (5) /* 设置X Y轴数据交换 */
#define OS_TOUCH_CTRL_DISABLE_INT (6) /* 关闭中断 */
#define OS_TOUCH_CTRL_ENABLE_INT (7) /* 打开中断 */
该函数用于关闭Touch设备,函数原型如下:
os_err_t os_device_close(os_device_t *dev)
参数 | 说明 |
---|---|
dev | 设备指针 |
返回值 | 说明 |
OS_EOK | 设备关闭成功 |
OS_EBUSY | 设备已经关闭,不允许重复操作 |
其他错误码 | 设备关闭失败 |