10A event mechanism

2024-06-12 06:38
文章标签 event mechanism 10a

本文主要是介绍10A event mechanism,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自 http://wenku.baidu.com/view/f1e9c3bdfd0a79563c1e7235.html

event机制是MTK feature phone平台10A代码里面的最重要的机制之一.当某一个函数或者功能模块post或者send一个event之后,相关的就收函数就会去接收这个event然后做出相关的动作。 

问题在于:我们自己怎样使用event机制?怎样自己定义event,并使其得到认可(即生效)?怎样传递和接收? 可以通过以下步骤来实现自己定义event:
 一、event的定义 
    在相关的.h文件中枚举自己的event 例如: 
     #ifdef __HQ_WIDGET_FMRADIO_EVENT_HANDLE__ 
     typedef enum 
      { 
        FMRADIO_WIDGET_STATE_EXTERNAL_NONE = 0,    
        FMRADIO_WIDGET_STATE_EXTERNAL_PLAY 
      }FMRADIO_WIDGET_STATE_EXTERNAL_EVENT; 
     #endif 
    定义了2个event,一个是FMRADIO_WIDGET_STATE_EXTERNAL_NONE,一个是FMRADIO_WIDGET_STATE_EXTERNAL_PLAY,一般的FMRADIO_WIDGET_STATE_EXTERNAL_NONE = 0作为默认的event枚举的第一个,是无效的event,在此event枚举中有效的event是FMRADIO_WIDGET_STATE_EXTERNAL_PLAY。

二、event的有效化 
      通过以下方式,主要是函数MMI_FRM_INIT_EVENT,来合法化自己定义的event。 例如如下代码: 
        mmi_event_struct event; //定义event结构体 
       MMI_FRM_INIT_EVENT(&event,  FMRADIO_WIDGET_STATE_EXTERNAL_PLAY);//将自己定义的event初始化到event结构体中,是自己定义的event得到有效化。 

三、event的发送 
      自己定义event的目的就是用来传递,是接受函数做出需要的反应。    
  可以通过以下方式来传递自己的event到指定的接受函数:   
      mmi_frm_post_event((mmi_event_struct*)(&event), Wgui_fmply_widget_event_handler,NULL);//event的发出。将event结构体的地址传给函数Wgui_fmply_widget_event_handler,该函数就是event的接受函数,(可以自己实现)。其中event结构体是第二步中的结构体,该结构体中有自己定义的event。 

或者
    mmi_frm_send_event(mmi_event_struct * evt,mmi_proc_func proc,void * user_data)也可以发送event,
    send和post是event的两种不同的发送方式而已  
     
    所以第二步第三步的代码应该写在一起,如下所示:   
      mmi_event_struct event;  
      MMI_FRM_INIT_EVENT(&event,  FMRADIO_WIDGET_STATE_EXTERNAL_PLAY); 
      mmi_frm_post_event((mmi_event_struct*)(&event), Wgui_fmply_widget_event_handler,NULL);
//或者用函    数mmi_frm_send_event,用哪一个根据实际(需要post还是send)情况决定。 
关键之处就在于:寻找到合适的event发出点,也就是说在哪个地方发出自己需要的event,这是很重要的,否则达不到自己期望的效果。也就是说以下代码 
    mmi_event_struct event;  
   MMI_FRM_INIT_EVENT(&event,  FMRADIO_WIDGET_STATE_EXTERNAL_PLAY); 
   mmi_frm_post_event((mmi_event_struct*)(&event), Wgui_fmply_widget_event_handler,NULL);
  //或者用函数mmi_frm_send_event,用哪一个根据实际(需要post还是send)情况决定。 往哪加很重要。 

四、event的接受 
       第三步中函数Wgui_fmply_widget_event_handler为接收函数,该函数可以自己定义。 
     mmi_ret  Wgui_fmply_widget_event_handler(mmi_event_struct *evt) { switch(evt->evt_id)       
     { 
      case FMRADIO_WIDGET_STATE_EXTERNAL_PLAY:         
       { 
          wgui_widget_fm_button_draw(&button[POWER_BUTTON]);//接收到FMRADIO_WIDGET_STATE_EXTERNAL_PLAY                                                 //之后要做出的动作,该函数也可自己实现         
          break;        
        }      
     default:    
         break;          
     }   
   return MMI_OK;
}











这篇关于10A event mechanism的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1053459

相关文章

fetch-event-source 如何通过script全局引入

fetchEventSource源码中导出了两种类型的包cjs和esm。但是有个需求如何在原生是js中通过script标签引呢?需要加上type=module。今天介绍另一种方法 下载源码文件: https://github.com/Azure/fetch-event-source.git 安装: npm install --save-dev webpack webpack-cli ts

myEclipse失去焦点时报错Unhandled event loop exception的解决方案

一句话:百度杀毒惹的祸。。。。果断卸载后问题解决。

WebAPI(二)、DOM事件监听、事件对象event、事件流、事件委托、页面加载与滚动事件、页面尺寸事件

文章目录 一、 DOM事件1. 事件监听2. 事件类型(1)、鼠标事件(2)、焦点事件(3)、键盘事件(4)、文本事件 3. 事件对象(1)、获取事件对象(2)、事件对象常用属性 4. 环境对象 this5. 回调函数 二、 DOM事件进阶1. 事件流(1)、 捕获阶段(2)、 冒泡阶段(3)、 阻止冒泡(4) 、阻止元素默认行为(5) 、解绑事件 2. 事件委托3. 其他事件(1)、页面加

鸿蒙轻内核M核源码分析系列十二 事件Event

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 轻内核M核源码分析系列一 数据结构-双向循环链表 轻内核M核源码分析系列二 数据结构-任务就绪队列 鸿蒙轻内核M核源码分析系列三 数据结构-任务排序链表 轻内核M核源码分析系列四 中断Hwi 轻内核M核源码分析系列五 时间管理 轻内核M核源码分析系列六 任务及任务调度(1)任务栈 轻内核M核源码分析系列六 任务及任务调度

Event Time源码分析

《2021年最新版大数据面试题全面开启更新》 flink 中Processing Time也就是处理时间在watermark定时生成、ProcessFunction中定时器与时间类型的窗口中都有使用,但是其内部是如何实现注册定时器、如何调用、如何容错保证在任务挂掉在下次重启仍然能够触发任务执行,都是我们今天的主题。首先需要了解一下在flink内部时间系统是由哪些类来共同完成这件事,下面画

获取一个event_base

原文链接:http://www.wangafu.net/~nickm/libevent-book/Ref2_eventbase.html 创建一个event_base 在你使用任何有意思的Libevent函数之前,你需要分配一个或多个event_base结构.每一个event_base结构含有一组events,并且可以告知你哪一些events是就绪的. 如果一个event_base是以加锁模

论文《Autoencoders for improving quality of process event logs》翻译

论文《Autoencoders for improving quality of process event logs》翻译 《Autoencoders for improving quality of process event logs》翻译

IE中的事件对象window.event

和dom中的事件对象做对比: 几个重要的方法和属性分别是: (1)事件类型:同为type属性; (2)事件作用目标:ie为srcElement属性; (3)阻止事件冒泡:ie为canceBubble属性;(设置为ture为阻止冒泡,false为允许); (4)阻止事件默认行为:ie为retureValue属性;(设置为ture为阻止,false是允许); 同样通过判断浏览器的能力来选择

DOM的事件对象event

注:本例讨论的全都是事件的对象,不是事件不讨论 什么是事件对象?在触发DOM中的事件时都会产生一个对象(ie中的先不讨论) DOM中的事件对象: 重要属性和方法: (1)type属性,用于返回事件的类型 例: (2)target属性,用于返回事件作用的目标 (3)stopPropagation(),用于阻止事件冒泡:例: <div id="div"> <input type

Qt event-buttons()

event->buttons() & Qt::LeftButton 和 event->buttons() == Qt::LeftButton 在这里的效果一致,但这两个语句完全不等价(效果一致仅仅是一个特例)。event->buttons() 的返回值是 Qt::MouseButtons,这是一个 flag 类型,可以使用 | 进行按位或的操作。也就是说,event->buttons() 可能返回