硬汉嵌入式论坛

 找回密码
 立即注册
查看: 7789|回复: 9
收起左侧

[ThreadX全家桶] ThreadX GUIX的触摸驱动完美融合到开发板驱动包的方法,仅需修改一个函数TOUCH_PutKey,所有显示屏全部适应

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115830
QQ
发表于 2020-7-6 09:56:25 | 显示全部楼层 |阅读模式


GUIX的触摸分按下,松手和移动三个事件,正好我们的驱动也是分这三个事件,所以仅需修改下函数TOUCH_PutKey,所有显示屏触摸就都可以完美融合了。

GT811,GT911,FT5X06,STMPE811,RA8875自带电阻触摸等等。

  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: TOUCH_PutKey
  4. *        功能说明: 将1个触摸点坐标值压入触摸FIFO缓冲区。电阻触摸屏形参是ADC值,电容触摸屏形参是坐标值
  5. *        形    参: _usX, _usY 坐标值
  6. *        返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. #include   "gx_api.h"
  10. void TOUCH_PutKey(uint8_t _ucEvent, uint16_t _usX, uint16_t _usY)
  11. {
  12.         uint16_t xx, yy;
  13.         GX_EVENT event;

  14.         if (g_tTP.Enable == 1)        /* 电阻屏。 形参是ADC值 */
  15.         {
  16.                 xx = TOUCH_TransX(_usX, _usY);
  17.                 yy = TOUCH_TransY(_usX, _usY);
  18.         }
  19.         else        /* GT811,FTX06,GT911 电容触摸走此分之 */
  20.         {
  21.                 /* 无需转换, 直接是坐标值 */
  22.                 xx = _usX;
  23.                 yy = _usY;               
  24.         }
  25.        
  26.         switch (_ucEvent)
  27.         {
  28.                 case TOUCH_DOWN:
  29.                         event.gx_event_type = GX_EVENT_PEN_DOWN;
  30.                         event.gx_event_payload.gx_event_pointdata.gx_point_x = xx;
  31.                         event.gx_event_payload.gx_event_pointdata.gx_point_y = yy;
  32.                         event.gx_event_sender = 0;
  33.                         event.gx_event_target = 0;
  34.                         event.gx_event_display_handle = 0xC0000000;
  35.                         gx_system_event_send(&event);
  36.                         break;

  37.                 case TOUCH_MOVE:
  38.                         event.gx_event_type = GX_EVENT_PEN_DRAG;
  39.                         event.gx_event_payload.gx_event_pointdata.gx_point_x = xx;
  40.                         event.gx_event_payload.gx_event_pointdata.gx_point_y = yy;
  41.                         event.gx_event_sender = 0;
  42.                         event.gx_event_target = 0;
  43.                         event.gx_event_display_handle = 0xC0000000;
  44.                         gx_system_event_fold(&event);
  45.                         break;

  46.                 case TOUCH_RELEASE:
  47.                         event.gx_event_type = GX_EVENT_PEN_UP;
  48.                         event.gx_event_payload.gx_event_pointdata.gx_point_x = xx;
  49.                         event.gx_event_payload.gx_event_pointdata.gx_point_y = yy;
  50.                         event.gx_event_sender = 0;
  51.                         event.gx_event_target = 0;
  52.                         event.gx_event_display_handle = 0xC0000000;
  53.                         gx_system_event_send(&event);
  54.                         break;

  55.                 default:
  56.                         break;
  57.         }
  58. }
复制代码


回复

使用道具 举报

36

主题

2050

回帖

2158

积分

至尊会员

积分
2158
发表于 2020-7-6 10:13:17 | 显示全部楼层


好办法,不用像之前那样,每个驱动都修改一遍了
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115830
QQ
 楼主| 发表于 2020-7-6 10:22:47 | 显示全部楼层
byccc 发表于 2020-7-6 10:13
好办法,不用像之前那样,每个驱动都修改一遍了

当前这种方法是改动量最小的,也是最方便的。
回复

使用道具 举报

0

主题

15

回帖

15

积分

新手上路

积分
15
发表于 2020-7-7 10:37:40 | 显示全部楼层
只有键盘怎么破?   KEYPAD
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115830
QQ
 楼主| 发表于 2020-7-7 10:43:05 | 显示全部楼层
xuyonjin 发表于 2020-7-7 10:37
只有键盘怎么破?   KEYPAD

实体键盘也没问题,后面教程里面再研究做案例,太多太多东西要研究了。
先把最常用的撸到模板里面。后续会制作各种应用案例。
回复

使用道具 举报

0

主题

21

回帖

21

积分

新手上路

积分
21
发表于 2021-10-24 13:09:40 | 显示全部楼层
硬汉,我照此办理,但好象事件并未发送到gui系统消息队列里,不知为何。在此反转led灯,随触而动是有反应的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115830
QQ
 楼主| 发表于 2021-10-25 02:27:02 | 显示全部楼层
guohuimao 发表于 2021-10-24 13:09
硬汉,我照此办理,但好象事件并未发送到gui系统消息队列里,不知为何。在此反转led灯,随触而动是有反应的

这个参数统一没

event.gx_event_display_handle = 0xC0000000;
回复

使用道具 举报

0

主题

21

回帖

21

积分

新手上路

积分
21
发表于 2021-10-25 21:52:34 | 显示全部楼层
eric2013 发表于 2021-10-25 02:27
这个参数统一没

event.gx_event_display_handle = 0xC0000000;

我看你文档讲过,这里值比较特别,要与驱动接口里的附加数据一致,意思象是传递到那个地方去,两者在指定的内存位置交换数据,但搞不懂为什么是这个值!我用这个值实现不了呀。能不能讲透彻一些原理,给大家普及一下
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115830
QQ
 楼主| 发表于 2021-10-26 00:39:08 | 显示全部楼层
guohuimao 发表于 2021-10-25 21:52
我看你文档讲过,这里值比较特别,要与驱动接口里的附加数据一致,意思象是传递到那个地方去,两者在指定 ...

这个值随意设置,就是个标志
回复

使用道具 举报

0

主题

21

回帖

21

积分

新手上路

积分
21
发表于 2021-10-26 23:53:51 | 显示全部楼层
eric2013 发表于 2021-10-26 00:39
这个值随意设置,就是个标志

确实,感谢硬汉!
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-21 10:43 , Processed in 0.320049 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表