找回密码
 注册
搜索
查看: 1521|回复: 2

[讨论] 熟悉mtk touch panel的进,疑惑ing

[复制链接]
发表于 2011-1-22 18:10:13 | 显示全部楼层 |阅读模式
HISR 处理完后会进tp task如果是
down则进down的处理touch_panel_down_hdr()
最后几句是:
tp_data_pop(PEN_DOWN, x, y);           
touch_panel_event_hdr();
touch_start_longtap();

此函数会起一个timer
void touch_panel_event_hdr(void)
{
         kal_bool btmp;
         
   if(TP.low_sample_period!=0)
   {
      btmp = GPTI_StartItem(touch_panel_handle,                  
                     TP.low_sample_period,
                     touch_panel_event_cb,
                     NULL);
   }                     
}  
回调函数是:
void touch_panel_event_cb(void *parameter)
{
        kal_int16 x=0, y=0;
        kal_bool valid=KAL_FALSE;
          kal_bool btmp;
#ifndef __TOUCH_PANEL_CTP_SUPPORT__       
        #if defined(DRV_ADC_TOUCH_SCREEN)
                if ((kal_bool)touch_up_level == tp_level())
                {
                        TPUpdateNotify();
                        return;
                }
        #endif // #if defined(DRV_ADC_TOUCH_SCREEN)
#endif
        if(TP.state==DOWN)
        {
#ifndef __TOUCH_PANEL_CTP_SUPPORT__       
        #ifdef TOUCH_PANEL_PRESSURE
                      if (KAL_TRUE == tp_fun_ptr->tp_pressure_check())
                      {
        #endif
#endif       
                   touch_panel_read_adc(&x, &y);                               
                   valid=touch_panel_adc_to_coordinate(&x,&y);/*translate*/               
                   if(touch_panel_exceed_penmove(x, y)&&(valid==KAL_TRUE))
                   {
                      TP.longtap_state=KAL_FALSE;
                      tp_data_pop(PEN_MOVE, x, y);                  
                      #ifdef TOUCH_PANEL_DEBUG
                      dbg_printWithTime("PEN MOVE x=%d y=%d\r\n",x,y);
                      #endif
                      drv_trace2(TRACE_GROUP_10, TP_PEN_MOVE, x, y);
                      TP.pre.x=x;
                      TP.pre.y=y;                      
                      GPTI_StopItem(touch_panel_repeat_handle);
                      if(TP.repeat_cnt!=0)/*long tap and reapeat timer*/
                      {
                         btmp = GPTI_StartItem(touch_panel_repeat_handle,                  
                              TP.repeat_cnt,
                              touch_panel_repeat_cb,
                              NULL);
                            }                  
                   }
#ifndef __TOUCH_PANEL_CTP_SUPPORT__                  
        #ifdef TOUCH_PANEL_PRESSURE
                      }
        #endif
#endif       
                /*start polling again*/
                touch_panel_event_hdr();
        }
}
最后又回touch_panel_event_hdr()构成循环,如此反复

我的疑问是起这个timer的作用是什么?实在没搞明白
中断来了,回到TP TASK 进相应的handler
直接往ring buffer放数据不就是了,为何设置这个timer?

Framework里mmi_pen_poll_handler取buffer的数据时也会起timer,
这个我的理解是buffer里可能放了很多数据,取到一个后用timer来取可能效率会更高


还有一个问题,timer 超时的时候与中断、task的优先级如何?

在加multi touch,可单点TP的流程就搞的一头雾水~
发表于 2011-1-25 10:17:01 | 显示全部楼层
呵呵,并非大家只看不语啊,而是LZ木有考虑到客观因素啊

第一、虽然来这里的大部分是驱动人员,但大家工作的平台不同啊
         你是MTK,我是展讯,他可能是高通,所以即使看到了,也
         木有想法啊;

第二、即使MTK的驱动人员看到这个帖子,如果不是高手,或者以前
         没遇到过这个问题,心里没有把握,一般也不会提出自己的
         看法啊;

第三、LZ贴出这么一段代码,大家都比较忙,就是想帮你,也没空
         去看这段不连贯的代码啊,你贴得太多代码,就算比较连贯
         肯定会很长,大家也懒得看啊,所以看完帖子,还不明白你
         提的啥问题;

第四、驱动高手上rd来解答问题的很少,他们比较忙,甚至没时间
         来逛,就是来逛,也只是看看首页的业内新闻;


所以建议LZ:

     1、礼貌性的询问,这样别人看着也舒服,有时间就会帮你看;
     2、用文字简单描述你的问题,这样也便于大家思考;
     3、说明你的操作流程、工作平台、分析流程

呵呵,期待好心的高手帮你解答吧


      
      [em08][em08][em08]
点评回复

使用道具 举报

 楼主| 发表于 2011-1-24 19:51:29 | 显示全部楼层
大家只看不语啊~
MMT TASK 收到event并不是立即去处理?
[em10]
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-6 20:27 , Processed in 0.048528 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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