找回密码
 注册
搜索
查看: 6978|回复: 39

[讨论] 一个新手的MTK笔记--2010-05-05 开贴

[复制链接]
发表于 2010-5-5 17:17:53 | 显示全部楼层 |阅读模式
本人入行没多久,有什么写的不对的地方,请各位高手指点。我本人也尽量陆续修改(我不能保证每天都更新)

1:高亮函数

粗看一下,无非就是在选中菜单中某ITEM时执行一些操作(以下简称 help_action),比如帮助菜单的变化,即左右软键对应的功能提示信息。

按照我的思路的话,应该有一个按键处理函数,在按键的时候,执行这个help_action.事情就这么简单

但是MTK远远比我这个思路要复杂的多。

我们来剥茧抽丝
 楼主| 发表于 2010-5-5 17:24:11 | 显示全部楼层
MTK的高亮函数,基本都是在类似于下面的函数里被调用的

void PopulateMainMenuRes(void)
{                               
    ADD_APPLICATION_MENUITEM_HILITE_HANDLER(MAIN_MENU_PROFILES_MENUID,                                 highlight_mainmenu_profiles);
    ADD_APPLICATION_MENUITEM_HILITE_HANDLER(MAIN_MENU_PHONEBOOK_MENUID,                                 highlight_mainmenu_phonebook);

而这个函数最终是放在开机初始化函数里的调用的,比如InitializeAll,
(我非常不理解这么做,这些完全可以放在按键处理时做,为什么放在开机初始化中,影响开机速度。谁帮我解答这个问题?)


以主菜单的SETTING为例
void highlight_mainmenu_settings(void)
{
//LSK执行EntryScrSettingMenu
//RSK返回上级菜单(父菜单)

    MApp_MainMenu_SetSoftKey_Handler(EntryScrSettingMenu, handle_mainmenu_right_softkey_up);
}
进入SETTING屏幕
void EntryScrSettingMenu(void)
{
。。。。。。
    /* 7 Register highlight handler to be called in menu screen */
    RegisterHighlightHandler(ExecuteCurrHiliteHandler);
。。。。。

}

void RegisterHighlightHandler(void (*f) (S32 item_index))

{

    MMI_list_highlight_handler = f;

    MMI_matrix_highlight_handler = f;

    MMI_circular_3D_highlight_handler = f;

}


把ExecuteCurrHiliteHandler函数赋给三个函数指针

对于不同类型的菜单会有不同的全局变量,通过才这样的全局变量,系统其他部分的代码就可以直接使用该全局变量进行对高亮函数的调用


void ExecuteCurrHiliteHandler(S32 hiliteid)
{
   
    ClearKeyHandler(KEY_RIGHT_ARROW, KEY_EVENT_DOWN);

    ExecuteCurrHiliteHandler_Ext(hiliteid);

}
ExecuteCurrHiliteHandler_Ext去找该高亮函数,(名字感觉和功能无法对应,词不达意,不好的编程风格)
点评回复

使用道具 举报

发表于 2010-5-5 20:18:26 | 显示全部楼层
MTK的这种操作还是跟它的软件架构有关系的,像MTK中有很多task在跑,会不停的执行来的消息,这时候对相同的按键有不同的函数要走,如果不在初始化注册好,那么在执行的时候处理起来就会比较麻烦。不知道你发现没,在注册高亮的函数中写的函数都是注册左右软件等按键的函数。这里可以参考MFC里对消息的处理。
呵呵这是我个人的理解,如果有不对的地方还请指教。
点评回复

使用道具 举报

 楼主| 发表于 2010-5-5 21:29:07 | 显示全部楼层
以下是引用ly85206559在2010-5-5 20:18:26的发言:
MTK的这种操作还是跟它的软件架构有关系的,像MTK中有很多task在跑,会不停的执行来的消息,这时候对相同的按键有不同的函数要走,如果不在初始化注册好,那么在执行的时候处理起来就会比较麻烦。不知道你发现没,在注册高亮的函数中写的函数都是注册左右软件等按键的函数。这里可以参考MFC里对消息的处理。
呵呵这是我个人的理解,如果有不对的地方还请指教。


你说的相同按键,处理不同的函数,可以举个例子吗?

我目前对程序还不是很熟
点评回复

使用道具 举报

发表于 2010-5-6 09:58:53 | 显示全部楼层
像左软件一般都是进入下一级屏幕或者执行某些功能函数,又软件一般是返回上一级菜单,看楼主在这个论坛也有2年了,以前不是开发这个平台的?
点评回复

使用道具 举报

 楼主| 发表于 2010-5-6 10:46:58 | 显示全部楼层
以下是引用ly85206559在2010-5-6 9:58:53的发言:
像左软件一般都是进入下一级屏幕或者执行某些功能函数,又软件一般是返回上一级菜单,看楼主在这个论坛也有2年了,以前不是开发这个平台的?


我以前在其他版块混的,刚入手机





点评回复

使用道具 举报

发表于 2010-5-6 11:12:30 | 显示全部楼层
我是个新手哦,我认真看了楼主的帖子,以下是我的看法:
第一,InitPhoneSetupCntx这个函数在初始化的时候给g_phnset_cntx_p->currentCity 变量赋值,当然这里有可能是0,但也有可能不是0,所以这里不一定是赋值为0。
第二,g_phnset_cntx_p->currentCity 是一个全局变量,除了进入日期菜单会用到外,还有地方会用到,甚至会影响到这个值,比如我如果修改了时区,MTK会将修改了的值写入NV(这是必须的),但不一定修改g_phnset_cntx_p->currentCity (当然也有可能会修改),但如果你自己写了一个功能需要修改g_phnset_cntx_p->currentCity所对应的NV,你不一定会修改g_phnset_cntx_p->currentCity里面的值,所以MTK这么做保证了g_phnset_cntx_p->currentCity的值是最新的(因为涉及到NV里的值 大家都是严谨的)。
不知道我这么解释楼主能不能明白,呵呵!个人见解[em12]
点评回复

使用道具 举报

发表于 2010-5-6 16:38:15 | 显示全部楼层
[em13]静静关注中[em12]
点评回复

使用道具 举报

发表于 2010-5-6 16:45:38 | 显示全部楼层
挣点工分
点评回复

使用道具 举报

发表于 2010-5-6 22:00:56 | 显示全部楼层
一直关注中······ 
点评回复

使用道具 举报

发表于 2010-5-7 17:08:04 | 显示全部楼层
关注ing......
点评回复

使用道具 举报

发表于 2010-5-7 17:25:40 | 显示全部楼层
弱弱的问一句,什么是高亮函数...[em28]
点评回复

使用道具 举报

发表于 2010-5-12 13:59:13 | 显示全部楼层
走安全路线。。
不能把手机当成电脑[em14]
点评回复

使用道具 举报

发表于 2010-5-12 16:53:01 | 显示全部楼层
关注中……
点评回复

使用道具 举报

发表于 2010-5-17 22:36:41 | 显示全部楼层
学习中 好多都不懂
点评回复

使用道具 举报

发表于 2010-5-17 23:24:08 | 显示全部楼层
写得不错
楼主别太监了啊
点评回复

使用道具 举报

发表于 2010-5-18 12:27:18 | 显示全部楼层
关注此帖
点评回复

使用道具 举报

 楼主| 发表于 2010-5-18 13:35:17 | 显示全部楼层
最近没时间了,以后有时间了继续,抱歉了
点评回复

使用道具 举报

发表于 2010-5-19 11:33:12 | 显示全部楼层
void PopulateMainMenuRes(void)
{   
    ADD_APPLICATION_MENUITEM_HILITE_HANDLER(MAIN_MENU_PROFILES_MENUID,     highlight_mainmenu_profiles);
    ADD_APPLICATION_MENUITEM_HILITE_HANDLER(MAIN_MENU_PHONEBOOK_MENUID,     highlight_mainmenu_phonebook);

而这个函数最终是放在开机初始化函数里的调用的,比如InitializeAll,
(我非常不理解这么做,这些完全可以放在按键处理时做,为什么放在开机初始化中,影响开机速度。谁帮我解答这个问题?)


1 利于代码模块化管理,不至于每个文中都有。
2 开机速度一般用户可以接受,而按键响应速度是客户不能接受的
点评回复

使用道具 举报

 楼主| 发表于 2010-5-19 12:16:22 | 显示全部楼层
以下是引用msgrev在2010-5-19 11:33:12的发言:



1 利于代码模块化管理,不至于每个文中都有。
2 开机速度一般用户可以接受,而按键响应速度是客户不能接受的

按键处理直接执行highlight_mainmenu_profiles

一点都不影响速度

比如按键 KEY_UP,找到对应的按键处理MIA_VOL_UP

在CASE MIA_VOL_UP:  进行音量加减的动作,保存到EEPROM里
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

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

GMT+8, 2024-5-5 00:07 , Processed in 0.049926 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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