全部文档
概述 硬件支持 快速开发指南 内核 驱动 通用组件 专业组件 常见问题

TOUCH设备用户开发


一、基础BSP配置--以STM32为例

建立工程文件

如果在提供的oneos源码中已经有适合的工程DEMO工程,则可以直接使用;如果没有请参照快速上手中的操作指南,新建一个适合的工程。

配置I2C设备驱动

  1. 参考I2C设备用户开发指南,根据实际硬件配置好硬件I2C或者软件模拟I2C设备。

使用 Menuconfig 配置工程选项

  1. 在对应的 oneos\projects\xxxxx(project文件夹) 目录下打开OneOS-Cube工具,在命令行输入menuconfig打开可视化配置界面;
  2. 如下图示,通过空格或向右方向键选择 (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  ----
    
  3. 进入Enable ft6x06 ,根据实际情况配置TOUCH设备使用的I2C设备,如soft_i2c4,以及TOUCH设备的I2C地址,如0x2a;

(soft_i2c4) ft6x06 i2c bus name
(0x2a) ft6x06 i2c addr(7bit)
  1. Esc键退出menuconfig,注意保存所修改的设置。

使用 Scons 构建工程

在上一步打开的OneOS-Cube 工具命令行中输入 scons --ide=mdk5重新构建keil工程;

二、工程编译及实现

  1. 打开对应的 oneos\projects\xxxxx(project文件夹) 目录下的 project.uvprojx 工程文件;
  2. 编译并下载工程,运行程序。

三、TOUCH设备API介绍

API列表

应用程序通过系统提供的IO设备模型接口来访问Touch设备,接口如下:

接口 说明
os_device_find 根据Touch设备名称查找设备指针
os_device_open 打开Touch设备
os_device_read_nonblock 读取触点信息(非阻塞)
os_device_control 控制Touch设备
os_device_close 关闭Touch设备

os_device_find

该函数用于查找系统中已经注册的Touch设备,函数原型如下:

os_device_t *os_device_find(const char *name);
参数 说明
name Touch设备名字
返回值 说明
设备指针 Touch设备指针
OS_NULL 没有找到对应的设备

os_device_open

该函数用于打开Touch设备,函数原型如下:

os_err_t os_device_open(os_device_t *dev);
参数 说明
dev 设备指针
返回值 说明
OS_EOK 设备打开成功
其他错误码 设备打开失败

os_device_read_nonblock

该函数用于非阻塞式获取触点信息,函数原型如下:

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;             /* 时间戳 */
};

os_device_control

该函数用于发送控制命令以控制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)   /* 打开中断 */

os_device_close

该函数用于关闭Touch设备,函数原型如下:

os_err_t os_device_close(os_device_t *dev)
参数 说明
dev 设备指针
返回值 说明
OS_EOK 设备关闭成功
OS_EBUSY 设备已经关闭,不允许重复操作
其他错误码 设备关闭失败

results matching ""

    No results matching ""