MTK之event机制 下载本文

内容发布更新时间 : 2024/11/15 21:50:10星期一 下面是文章的全部内容请认真阅读。

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) {