1026|1

92

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

读《RT-Thread设备驱动开发指南》---第二篇 [复制链接]

 
本帖最后由 xiaolinen 于 2023-8-30 22:19 编辑

读《RT-Thread设备驱动开发指南》---  TOUCH设备驱动开发

第一部分:了解Touch层级结构

        1)什么是Touch设备:

                Touch设备就是触摸设备,是目前嵌入式人机交互领域常用的输入设备。

        2)Touch的层级结构:

                如图所示,即是Touch设备的层级结构示意:

注:图中只体现出的硬件层的IIC总线,其实也可以通过SPI总线实现!
        2.1)图中的应用层主要是开发者自己编写的应用代码,调用统一的I/O设备操作函数,实现自己的业务需求。
        2.2)I/O设备管理层主要是为设备驱动框架提供统一的操作接口,即rt_device_find,rt_device_open,rt_device_control等。
        2.3)Touch设备驱动框架层是对触摸设备基本功能的抽象,与硬件无关,需要开发者自行实现这部分操作方法,比如:rt_touch_info;另外,Touch设备属于I/O设备的一类,同样需要进行设备注册操作,接口为:rt_hw_touch_register。
        2.4)Touch设备驱动层就是针对具体的触摸芯片编写的,开发者可借助RT-Thread提供的软件包快速实现功能,本次实验就会用到XPT2046相关软件包。
        2.5)硬件层就是对应不同厂家,不同型号的触摸芯片,如:IIC总线的FT5426,GT911等;SPI总线的XPT2046,HR2046等。

第二部分:Touch设备涉及到的函数接口

        查找设备

 

rt_device_t rt_device_find(const char* name);

        打开设备

 

rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflags);

        读设备

 

rt_size_t rt_device_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size);

        控制设备

 

rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void* arg);

        设置接收回调函数

 

rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device_t dev,rt_size_t size));

        关闭设备

 

rt_err_t rt_device_close(rt_device_t dev);

第三部分:实验用到的相关软件包以及效果

        3.1)软件包添加路径:

注:该软件包依赖:RT-Thread 4.0+,SPI设备驱动程序,PIN设备驱动程序

        3.2)查找设备:

#define PRO_TOUCH_EQU  	"xpt0"

rt_device_t touch = rt_device_find(PRO_TOUCH_EQU);
if (touch == RT_NULL)
{
    LOG_E("can't find device: %s\n", PRO_TOUCH_EQU);
    return;
}

        3.3)打开设备:

if (rt_device_open(touch, RT_DEVICE_FLAG_INT_RX) != RT_EOK)
{
    LOG_E("open %s failed!\n",PRO_TOUCH_EQU);
    return;
}

        3.4)读设备:

if (rt_device_read(touch, 0, &read_data, 1) == 1)
{
    LOG_I("x = %d,y = %d\n",read_data.x_coordinate,read_data.y_coordinate);
}

        3.5)打印输出:

                操作为触摸屏进行校准后,手指长按一个点,不动。

ph_xpt2046: x = 3189,y = 1994
ph_xpt2046: x = 3199,y = 1977
ph_xpt2046: x = 3199,y = 1979
ph_xpt2046: x = 3213,y = 1972
ph_xpt2046: x = 3247,y = 1991
ph_xpt2046: x = 3247,y = 1979
ph_xpt2046: x = 3247,y = 1967
ph_xpt2046: x = 3247,y = 1971
ph_xpt2046: x = 3247,y = 1955
ph_xpt2046: x = 3199,y = 1973
ph_xpt2046: x = 3199,y = 1990
ph_xpt2046: x = 3199,y = 2007
ph_xpt2046: x = 3167,y = 2039
ph_xpt2046: x = 3071,y = 2019
ph_xpt2046: x = 2943,y = 1911
ph_xpt2046: x = 2735,y = 1871
ph_xpt2046: x = 2523,y = 1865
ph_xpt2046: x = 2399,y = 1853
ph_xpt2046: x = 2295,y = 1839

 

最新回复

_device_read(touch, 0, &read_data, 1) == 1) { LOG_I("x = %d,y = %d\n",read_data.x_coordinate,read_data.y_coordinate); }这个&read_data怎么设置能讲一下吗  详情 回复 发表于 2024-4-4 17:31
点赞 关注
 

回复
举报

168

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
_device_read(touch, 0, &read_data, 1) == 1) { LOG_I("x = %d,y = %d\n",read_data.x_coordinate,read_data.y_coordinate); }这个&read_data怎么设置能讲一下吗
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表