MTK MMI event 小结 3

本文解析了L4C层消息如何转换为MMI层消息的过程,重点介绍了中断消息转换函数mmi_frm_interrupt_event_converter的具体实现,并讨论了SetProtocolEventHandler函数的作用。
摘要由CSDN通过智能技术生成

昨天大概的说了下,普通 event 的执行过程。中间还有几个函数没有介绍,这里简单介绍一下

 

// 这个函数就是简单把 L4c 的interrupt消息,转换成 MMI 层interrupt的消息 static mmi_frm_int_event_type mmi_frm_interrupt_event_converter(U16 event_id, void *msg) {      mmi_frm_int_event_type frm_interrupt_event = 0;      switch (event_id)     {             // GPIO 消息         case PRT_EQ_GPIO_DETECT_IND:         {             mmi_eq_gpio_detect_ind_struct *gpio_detect_ind = (mmi_eq_gpio_detect_ind_struct *)msg;             switch (gpio_detect_ind->gpio_device)             {                 // 翻盖关闭                 case EXT_DEV_CLAM_CLOSE:                 {                     frm_interrupt_event = MMI_FRM_INT_CLAM_CLOSE;                     break;                 }                 // 翻盖打开                 case EXT_DEV_CLAM_OPEN:                 {                     frm_interrupt_event = MMI_FRM_INT_CLAM_OPEN;                     break;                 }                 // 耳机插入 拔出                 case EXT_DEV_EARPHONE:                 {                     if (gpio_detect_ind->on_off == 1)                     {                         frm_interrupt_event = MMI_FRM_INT_EARPHONE_PLUG_IN;                     }                     else                     {                         frm_interrupt_event = MMI_FRM_INT_EARPHONE_PLUG_OUT;                     }                     break;                 }             }             break;         }         // 充电信息,         case PRT_BATTERY_STATUS_IND:         {             mmi_eq_battery_status_ind_struct *battery_status_ind = (mmi_eq_battery_status_ind_struct*)msg;              frm_interrupt_event = mmi_frm_get_frm_int_event_macro(                                       battery_status_ind->battery_status,                                       mmi_frm_int_event_battery_table,                                       sizeof(mmi_frm_int_event_battery_table) / sizeof(mmi_frm_int_event_battery_table[0]));             /* For low battery indication */             if (battery_status_ind->battery_status == PMIC_VBAT_STATUS)             {                 if (battery_status_ind->battery_voltage == BATTERY_LOW_WARNING)                 {                     frm_interrupt_event = MMI_FRM_INT_BATTERY_LOW_WARNING;                 }                 else if (battery_status_ind->battery_voltage == BATTERY_LOW_TX_PROHIBIT)                 {                     frm_interrupt_event = MMI_FRM_INT_BATTERY_LOW_TX_PROHIBIT;                 }             }             break;         }         case MSG_ID_TIMER_EXPIRY:         case MSG_ID_MMI_EQ_POWER_ON_IND:         case MSG_ID_MMI_EQ_KEYPAD_DETECT_IND:         {             break;         }         default:         {              //其他 interrupt event,主要是弹出框相关,短信报告等等             frm_interrupt_event = mmi_frm_get_frm_int_event_macro(                                       event_id,                                        mmi_frm_int_event_convert_table,                                       sizeof(mmi_frm_int_event_convert_table) / sizeof(mmi_frm_int_event_convert_table[0]));             break;         }     }     return frm_interrupt_event; }


这个函数就是把 L4C 的消息转换到 MMI 的消息,然后通过 mmi_frm_query_interrupt_event_information 这个函数去查找,是否有相应的注册。这个函数比较简单,就是数组里去比较。

还有一个常用的函数是 SetProtocolEventHandler,也就是注册一个消息的地回调函数。

具体也没有什么可说的,无非就是循环查找是否有这个 event。

1,如果有,看func 是否为空,为空表示去掉这个event 的注册,不为空,就直接修改 这个event 的 func

2,没有,就增加一个event。

这里注意,由一个小小的优化,就是判断,event 数组的最后是否为无效的 event,如果无效,那么减少总注册event 的个数。

这个样可以减少 循环查询的次数。

转自:

http://blog.csdn.net/yanwuxufeng/archive/2010/07/31/5777875.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值