嵌入式技术william hill官网
直播中

张英

7年用户 1407经验值
私信 关注
[问答]

怎样去解决触摸驱动与GUI交互的问题呢

小弟手头有块TQ2440的板子,用的7寸的屏,所以小弟参考MINI2440的代码做了移植,任务和GUI都跑起来了,现在界面直接放的是例程里demo的代码,但触摸和GUI的交互始终好像跑步起来。按了按钮,gui不响应。通过跟踪后发现,key.c驱动运行正常,跟踪能获得emouse.x和y的数据,然后程序似乎是发给了GUI的Server了,

rtgui_server_post_event(&(kbd_event.parent), sizeof(kbd_event));

但GUI那头我代码看了许久,似乎是通过系统event捕捉触摸行为的,但调试就是找不到突破口,还请各位大大指条明路啊,问题主要是

1.GUI那侧可以从那个函数入手啊?
2.GUI捕捉到行为后,接下来是否就根据xy坐标值,去找创建在这个rect.x,y的按钮的事件?请问可以这样理解么?这个是我摘下来的代码

next_btn = rtgui_button_create("next");
rtgui_button_set_onbutton(next_btn, demo_view_next);
rtgui_widget_set_rect(RTGUI_WIDGET(next_btn), &rect);
rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(next_btn));

谢谢!

回帖(9)

小萃米

2022-4-8 11:31:07
使用触摸屏功能应该关注的是touch.c文件,而不是key.c文件。key.c文件是用于键盘控制的。
你可以在touch.c中打印些信息出来看下。
举报

张英

2022-4-8 11:31:26
首先谢过shaolin,我后来检查了下touch的代码后再调试,可以看到按钮似乎有反应,还是触发不了翻页,我是这样做的,能否帮忙看下是否正确。
我首先想到的可能是和我的开发板和mini2440设计略有不同的原因,触摸返回的坐标不太对,后发现可能是和x,y坐标转换有关,我略微修改下面代码后,返回的emouse.x和y基本正确了,符合整个坐标的分布,出了再次校正x和y的min和max值之外,还修改了touch.c的一下四处,主要是修改了xy和height以及width的对应关系
touch->x = touch->height * (ts.xp-touch->min_x)/(touch->max_x-touch->min_x);
touch->y = touch->width - (touch->width * (ts.yp-touch->min_y)/(touch->max_y-touch->min_y));
。。。。
emouse.x = touch->y;
emouse.y = touch->x;

这样修改好后,返回坐标能在触摸屏的范围内,(我的屏用的是7寸的,返回值和位置关系正确,而且在分辨率800*480之内)触摸后可以看到按钮似乎有动作的,但是并没有翻页触发相应的动作,可以帮忙大致判断下下一步的诊断方向么,谢谢!
举报

李俊

2022-4-8 11:31:37
有个calibration.c,把它一起编译,然后在shell下执行相应的命令,就可以对触摸进行校正,然后就好用了。
举报

张英

2022-4-8 11:31:52
终于弄明白原来按钮是通过event过来的,然后去响应emouse的事件,不过还有点小疑惑,就是如果有多个按钮的时候,我们怎么识别是按下了哪个按钮,是必须通过判别emouse的x和y来判别位置来实现的么?还是有其他什么简便的方法,比如这个emouse是不是有个ID什么的?
举报

李俊

2022-4-8 11:32:02
多个按钮?左键、右键一起按下吗?这个一般称为中键按下
举报

张英

2022-4-8 11:32:12
不好意思,可能是我没描述清楚。我是指不同的按钮控件,比如demo view那个例子里面的前一页和后一页两个按钮控件,虽然按下时都会触发button down的event给gui的server,但我们在事件处理程序中如何分辨按下了哪个按钮呢?除了判断x和y坐标之外event里面有没有个id代表不同控件对象呢?
因为原来例程是用键盘按钮触发的,现在想用触摸实现,所以碰上这个问题,这个解决就能写应用了,呵呵,还请多多指教啊,谢谢
举报

李俊

2022-4-8 11:32:23
每一个控件都会有个结构体,其中有一些回调函数,你可以设置成自己的,这样当一个按钮按下时就会被回调到你设置的函数中。

具体的可以看看RT-Thread/GUI的例程。
举报

李莉

2022-4-8 11:32:32
我用的是v0.4.0 beta2版本,其中calibration函数调用之后,右上角校正程序部分有问题,导致程序异常退出,这是什么原因?
举报

李俊

2022-4-8 11:32:40
有输出的log吗?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分