触屏处理流程

上传人:折*** 文档编号:292037998 上传时间:2022-05-13 格式:DOCX 页数:9 大小:19.32KB
返回 下载 相关 举报
触屏处理流程_第1页
第1页 / 共9页
触屏处理流程_第2页
第2页 / 共9页
触屏处理流程_第3页
第3页 / 共9页
触屏处理流程_第4页
第4页 / 共9页
触屏处理流程_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《触屏处理流程》由会员分享,可在线阅读,更多相关《触屏处理流程(9页珍藏版)》请在金锄头文库上搜索。

1、本文格式为Word版,下载可任意编辑触屏处理流程 P100触屏学习总结 一、 触屏驱动的配置文件: 为了使触屏工作,触屏模块驱动文件务必正确配置触屏的驱动文件,其配置文件在DOOV_11A_COSMOS_GPRS.mak文件中, 中断端口的配置在Touch_panel_.h和IntrCtrl_Mt6236。H文件中 ADC的配置文件在Adc_hw.h文件中; 对于系统是怎么区分x、y、和press的请看36的datasheet。 二、 触屏工作流程: P100使用的是触屏及极少的触屏事情,因而它的输入事情分为两类1:一般的键盘 按键事情;2:触屏事情。 一般的键盘按键事情,之前已经写过相应的文

2、档;就不再重述了。 对于触屏事情的处理,其原理大致上与键盘按键事情的处理流程大致一致,也是上层注册触屏事情,下层在触发触屏事情后,会发一个消息给上层,上层得到消息后会处理之前注册过的函数;主要涉及的相关文件有Dcl_sts.c、Touch_panel_.c、Touch_panel_main.c、Touch_panel_custom.c 、TouchScreen.c、Wgui_Touch_Screen.c、Ts_drv.c等几个文件。 下面我将以触屏初始化-mmi层对触屏事情的注册-drv层触屏中断响应及处理-mmi层触屏事情的响应及处理的依次描述一下触屏事情在各个环节是怎么处理的,结果以屏幕校

3、准为例描述整个流程;然后再简朴描述一下Wgui_Touch_Screen.c文件。 I、触屏初始化 触屏初始化是在函数tp_task_main中完成的,tp_task_main函数是在系统初始化过程中由创立一个任务函数custom_tp_task_create实现的,它会调用函数tp_task_create,从而激活函数tp_task_main。 函数tp_task_main处理触屏事情的重要函数,此函数主要有两个作用:1、初始化触屏事情;2、等待触屏事情的到来。 1、 初始化触屏事情,主要包括的以下几个方面: a: 首先它会调用kal_create_event_group创立一个触屏事情,用

4、于 kal_set_eg_events设置和kal_retrieve_eg_events接收触屏事情的信息。 b: 然后执行初始化函数DclSTS_Initialize(),在函数DclSTS_Initialize中 主要是根据全局变量fgSTSInit的值来抉择是否调用touch_panel_init();在函数touch_panel_init()中主要做了注册触屏事情的回调函数,包含了DOWN、UP事情的回调函数,调用了touch_custom_init函数用于去抖动时间、触发触屏事情的压力、对应的LCD显示屏的显示起始坐标,触屏的起始坐标等触屏根本信息的配置,然后调用DclHTS_Ini

5、tialize函数用于调用函数ts_drv_init(),函数ts_drv_init()主要处理了:初始化触屏事情的中断,设置ADC操纵寄放器AUXADC_CON3,设置中断寄放器(中断向量地址为0x31)标志(边沿触发),开启中断,注册中断处理函数TS_LISR等; c: 接着调用函数touch_panel_test,此函数主要处理了开启触屏、配置手写 区域、配置采样周期、配置超时时间。 2、 处理完初始化工作后就会进入一个while死循环中,用函数 kal_retrieve_eg_events去接收事情信息,然后根据TP.state的状态去执行相应的回调函数 流程图如下: touch_pa

6、nel_test配置手写区域、配置采样周期、配置超时时间tp_task_main初始化kal_create_event_group创立一个按键事情等待触屏事情TP.state=1执行up事情的回kal_retrieve_eg_e调函数ventsDclSTS_InitializeTP.state=0touch_panel_init注册触屏的回调函数,发送消息的回调函数fgSTSInit为真执行DOWN事情的回调函数touch_custom_init去抖动时间、触发按键事情的压力DclHTS_Initializets_drv_init初始化触屏的中断,注册中断处理函数TS_LISR图1:初始化流程

7、图 在完成初始化工作之后,上层MMI就会注册相应的down、up事情函数,当触发到触屏事情后就会执行相应的注册函数。 为了便当理解真个流程下面将MMI对触屏事情的注册和响应放在一起举行描述,但程序的执行还是以上面的依次为主。 II、上层MMI对触屏事情的注册和处理 对于触屏它的触屏事情有两大类 pen事情,stroke事情(手写);pen类事情包括up、move、long_tap、repeat、abort等;stroke类事情包括:stroke_down、 stroke_up、stroke_move、stroke_longtap等;在上层mmi层他们注册过程和相应的处理方式是一致的,我们就以p

8、en类事情中的down事情为例,MMI对pen事情的处理包括pen事情的注册和pen事情的响应,概括如下: a:MMI层触屏事情的注册 若在某个界面需要down事情,他就会调用相应down事情注册函数 mmi_pen_register_down_handler举行注册,在mmi_pen_register_down_handle函数 中他会把参数中的回调函数赋给全局变量g_pen_event_table即 g_pen_event_tableMMI_PEN_EVENT_DOWN = pen_fp; 其他的还有up、move、long_tap、repeat、abort及stroke类的等函数的注册也

9、是一样的。 b:MMI层触屏事情的响应 在初始化pen system过程中mmi_pen_init函数会注册函数 mmi_pen_drv_callback_registry(mmi_pen_touch_panel_sendilm, NULL) 用于底层drv向上层MMI发送消息和 SetProtocolEventHandler(mmi_pen_touch_panel_event_ind, MSG_ID_TP_EVENT_IND);用于当MMI层接收到消息MSG_ID_TP_EVENT_IND就会执行函数MMI_task函数,MMI_task就会调用ProtocolEventHandler进而调

10、用mmi_frm_execute_current_protocol_handler,函数 mmi_frm_execute_current_protocol_handler会 根据eventID找到之前在初始化pen system过程中注册过的函数mmi_pen_touch_panel_event_ind进而调用mmi_pen_poll_hdlr();接着根据event的类型excecute_pen_event();执行之前注册的函数(g_pen_event_tableevt_type) (pos); 流程图如下: MMI_taskMMI接收到消息ProtocolEventHandlermmi_

11、pen_touch_panel_event_indExecuteCurrProtocolHandlermmi_pen_poll_hdlr根据事情ID号找到之前的注册函数Switch(data.event)从buffer中取出数据excecute_pen_event(g_pen_stroke_tableevt_type) (pos) 图2:MMI层触摸的响应流程图 (g_pen_event_tableevt_type) (pos)中的注册函数的参数pos是x、y的坐标值;在执行之前注册过的函数时他会调用mmi_pen_check_inside_polygon(area, point);判断触摸的

12、坐标与控件的显示坐标是否匹配;若匹配那么是有效触摸然后举行相应操作;若不匹配那么被视为无效触摸; 下面主要描述一下MMI层响应的主要函数mmi_pen_poll_hdlr,描述时还以pen down事情为例; 首先会根据if_has_pen_event()的返回值是否为假和delay_polling_timer是否为真即进入while语句;在执行函数if_has_pen_event()过程中它会从buffer中读出之前存入buffer的触摸信息,概括流程见下图: mmi_pen_poll_hdlrwhile (!delay_polling_timer & if_has_pen_event()真

13、if_has_pen_event()mmi_pen_lookahead_buffer_fill_data假mmi_pen_drv_get_eventswitch (data.event)data.event有DCL_PEN_DOWN、DCL_PEN_MOVE、DCL_PEN_REPEAT、DCL_STROKE_MOVE等DclSTS_ControlSTS_CMD_GET_EVENTDCL_PEN_DOWN(其他处理流程大致一致或)excecute_pen_eventtouch_panel_get_event_mmi_frm_fetch_msg_from_extQ_to_circularQtou

14、ch_pop_data_from_buffer读出触摸信息存到touch_data布局体中并置send_touch_ilmif(OslNumOfCircularQMsgs() MMI_PENDING_MSG_THRESHOLD)真跳出while循环真While循环终止if (delay_polling_timer)开启一个执行mmi_pen_poll_hdlr回调函数的timer else if (g_pen_cntx.is_pen_down | pen_abort_happen)真开启一个执行mmi_pen_poll_hdlr回调函数的timer并置pen_abort_happen为0mmi

15、_pen_poll_hdlr函数终止图3:mmi_pen_poll_hdlr函数流程图 在mmi_pen_poll_hdlr中的while循环会一向从buffer中读数据直到while的条件为假;然后开启一个执行回调函数mmi_pen_poll_hdlr的timer,以处理后面的repeat、longtap、up事情。 III、drv层触屏事情中断响应及处理 在我们的系统中,对于触摸功能是这样处理的: 首次触摸是由中断检测得到,之后响应中断举行处理;处理完后开启一个timer,定时器到时处理时主动读取触摸坐标,若是有效坐标那么处理,处理完后同样开启一个timer ,若是无效坐标那么表示没有触摸,此时再除掉中断标记、重新开启中断响应,等待下一次触摸中断 。 在初始化过程中已经注册了中断的响应函数TS_LISR,当触屏上的压力大于门槛压力时就会触发一个中断,进入中断函数TS_LISR,会激活高级中断的DRV_AUXADC_HISR_ID 从而进出高级中断函数TS_HISR,在高级TS_HISR函数会检测tp_state然后根据tp_state的值举行相应的处理,读出ADC的值即tp的x、y坐标,继

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号