下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
MTK優(yōu)美代碼賞析2:MenuItemMask_flag
從mtk業(yè)已經(jīng)有15個月了,現(xiàn)在自己雖然對這個mtk的架構(gòu)很熟悉了,但感覺自己欠缺的還是太多,窺到嵌入式的冰山一角讓我更加渴望更深層次的學(xué)習(xí)。
感謝艾利平老師,雖然他已離職數(shù)月,但他教導(dǎo)我的思想依然清晰的縈繞在耳旁,每當(dāng)我困惑和苦惱時指引我方向。。
艾老師教導(dǎo)的對我特別特別有現(xiàn)實指導(dǎo)意義的一句話是:原始的(或者是前期)的系統(tǒng)是完美的,出現(xiàn)問題的部分往往是我們后期所作的修改導(dǎo)致的,任何的問題都要在這個前提下進行修改才能最高效最快速的找到問題所在。
隨著工作的不斷深入,我對艾老師的這句話的體味越來越深,無論是自己新增加的模塊還是自己修改的簡單的bug,我都會先努力把原先的完美的系統(tǒng)架構(gòu)和處理流程走一遍,然后將自己設(shè)計的思路和系統(tǒng)的流程進行無縫的整合,最后才去做代碼實現(xiàn)。這樣一來不僅使自己的代碼更加精煉高效,而且使得編碼的過程充滿了樂趣。
艾老師現(xiàn)在在SKY工作,有認識他的朋友見了他請代我向他問個好啊。
作者張素豐,轉(zhuǎn)載請注明出處:/zhangsufeng/archive/2010/09/03/1816633.html
廢話不談了,開始正文。
最近測試組對手機里IP通話這方面很是重視,不僅要求IP設(shè)置里面的內(nèi)容可設(shè)置也可取消設(shè)置,而且要求通過通話記錄等所有相關(guān)方式實現(xiàn)IP撥號。在做這塊內(nèi)容時自己頻繁的用到mmi_frm_hide_menu_item和mmi_frm_unhide_menu_item函數(shù),以前只知道用,沒怎么去看過他的實現(xiàn),今天禁不住好奇就偷偷鉆進去瞄了一眼,不看還不想看,一看就覺得驚奇,這兩個函數(shù)功能雖簡單,卻使用另一種自己沒想到的手法去實現(xiàn)。讓我再次感嘆mtk代碼的規(guī)范優(yōu)美。
首先介紹在這之中一個很重要的變量:staticU8MenuItemMask[(MAX_MENU_ITEMS_VALUE/8)+1];
mtk使用8位數(shù)的數(shù)組來存儲所有菜單的顯示屬性,每個數(shù)的每個位代表一個菜單是否顯示,0表示顯示,1表示隱藏。
用位來表示菜單的顯示屬性,這種做法讓我驚嘆,不僅數(shù)據(jù)量得到減小,而且邏輯緊密,接口清晰。
但有一點不足,就是這兩個函數(shù)操作的menuid必須定義在GlobalMenuItems.h中操作才能有效。
下面貼出這兩個函數(shù)實現(xiàn)的代碼:代碼
1
2
/*****************************************************************************
3
*
FUNCTION
4
*
mmi_frm_hide_menu_item
5
*
DESCRIPTION
6
*
Set
the
bit
represented
the
menuitem
on
to
hide
it
7
*
PARAMETERS
8
*
menu_item_id
[IN]
Id
of
the
menuitem
9
*
RETURNS
10
*
void
11
*****************************************************************************/
12
void
mmi_frm_hide_menu_item(U16
menu_item_id)
13
{
14
/*----------------------------------------------------------------*/
15
/*
Local
Variables
*/
16
/*----------------------------------------------------------------*/
17
U16
idx
=
0,
reminding
=
0;
18
U16
item_id
=
menu_item_id
-
1;
19
20
/*----------------------------------------------------------------*/
21
/*
Code
Body
*/
22
/*----------------------------------------------------------------*/
23
if
(menu_item_id
<
MAX_MENU_ITEMS_VALUE)
24
{
25
idx
=
item_id
/
8;
26
reminding
=
item_id
-
(idx
*
8);
27
MenuItemMask[idx]
|=
(1
<<
(7
-
reminding));
28
}
29
}
30
31
32
33
/*****************************************************************************
34
*
FUNCTION
35
*
mmi_frm_unhide_menu_item
36
*
DESCRIPTION
37
*
Reset
the
bit
represented
the
menuitem
on
to
unhide
it
38
*
PARAMETERS
39
*
menu_item_id
[IN]
Id
of
the
menuitem
40
*
RETURNS
41
*
void
42
*****************************************************************************/
43
void
mmi_frm_unhide_menu_item(U16
menu_item_id)
44
{
45
/*----------------------------------------------------------------*/
46
/*
Local
Variables
*/
47
/*----------------------------------------------------------------*/
48
U16
idx
=
0,
reminding
=
0;
49
U16
item_id
=
menu_item_id
-
1;
50
51
/*----------------------------------------------------------------*/
52
/*
Code
Body
*/
53
/*----------------------------------------------------------------*/
54
if
(menu_item_id
<
MAX_MENU_ITEMS_VALUE)
55
{
56
idx
=
item_id
/
8;
57
reminding
=
item_id
-
(idx
*
8);
58
MenuItemMask[idx]
&=
~(1
<<
(7
-
reminding));
59
}
60
}
61
一般在調(diào)用完這兩個函數(shù)后還會執(zhí)行如下的動作,以便為shouCategory做準備:1
U16
nNumofItem;
2
U16
nStrItemList[6];
3
4
nNumofItem
=
GetNumOfChild_Ext(MENU_ID_PHB_EXTRA_NUMBER);
5
GetSequenceStringIds_Ext(MENU_ID_PHB_EXTRA_NUMBER,
nStrItemList);
執(zhí)行的這兩個函數(shù)實現(xiàn)如下:
代碼
其中核心的實現(xiàn)函數(shù)為:MMI_BOOLmmi_frm_test_menu_item_hide(U16menu_item_id);
該函數(shù)的實現(xiàn)為:代碼
1
2
/*****************************************************************************
3
*
FUNCTION
4
*
mmi_frm_test_menu_item_hide
5
*
DESCRIPTION
6
*
test
if
the
menuitem
is
hidden
or
not
7
*
PARAMETERS
8
*
menu_item_id
[IN]
Id
of
the
menuitem
9
*
RETURNS
10
*
MMI_BOOL
MMI_TRUE
if
the
menuitem
is
hidden
11
*****************************************************************************/
12
MMI_BOOL
mmi_frm_test_menu_item_hide(U16
menu_item_id)
13
{
14
/*----------------------------------------------------------------*/
15
/*
Local
Variables
*/
16
/*----------------------------------------------------------------*/
17
U16
idx
=
0,
reminding
=
0;
18
U16
item_id
=
menu_item_id
-
1;
19
20
/*----------------------------------------------------------------*/
21
/*
Code
Body
*/
22
/*----------------------------------------------------------------*/
23
if
(menu_item_id
<
MAX_MENU_ITEMS_VALUE)
24
{
25
idx
=
item_id
/
8;
26
reminding
=
item_id
-
(idx
*
8);
27
if
((MenuItemMask[idx]
>>
(7
-
reminding))
&
1)
28
{
29
return
MMI_TRUE;
30
}
31
}
32
return
MMI_FALSE;
33
}
34
voidmmi_frm_hide_menu_item(U16menu_item_id);將要隱藏的菜單ID對應(yīng)MenuItemMask數(shù)組中的位
置1
voidmmi_frm_unhide_menu_itemU16menu_item_id);將要顯示的菜單ID對應(yīng)MenuItemMask數(shù)組中的位
置0而MMI_BOOLmmi_frm_test_menu_item_hide(U16menu_item_id);通過判斷MenuItemMask中對應(yīng)的位是否是1來判斷這個位所對應(yīng)的菜單是否被隱藏,他所使用到的CUSTOM_MENUnCustMenus[MAX_MENU_ITEMS];定義在StandaloneRes.c中InitializeResourceVariables函數(shù)里面
nCustMenus=(CUSTOM_MENU*)(langpack2ndJumpTbl[9]);//071706menuresource其中void*langpack2ndJumpTbl[]={
(void*)mtk_gLanguageArray,(void*)&mtk_gMaxDeployedLangs,
(void*)mtk_gStringList,
(void*)mtk_gIMEModeArray,(void*)mtk_gIMEQSearchModeArray
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 測繪管理與法律法規(guī)-2020年注冊測繪師《測繪管理與法律法規(guī)》真題
- 2024年錘紋助劑項目可行性研究報告
- 2024年白喉類毒素項目資金申請報告
- 2024年航天器壓力控制系統(tǒng)組件及零部件項目資金申請報告代可行性研究報告
- 2025年冀教新版選擇性必修1生物下冊階段測試試卷含答案
- 2025年浙科版七年級生物上冊階段測試試卷
- 2025年牛棚租賃與生態(tài)旅游開發(fā)合作合同書4篇
- 二零二五年度奶牛養(yǎng)殖場數(shù)字化轉(zhuǎn)型升級合同4篇
- 二零二五年度木工雕刻藝術(shù)品定制生產(chǎn)合同4篇
- 二零二五年度城市綜合體夜間安全管理打更合同3篇
- 南通市2025屆高三第一次調(diào)研測試(一模)地理試卷(含答案 )
- 2025年上海市閔行區(qū)中考數(shù)學(xué)一模試卷
- 2025中國人民保險集團校園招聘高頻重點提升(共500題)附帶答案詳解
- 重癥患者家屬溝通管理制度
- 法規(guī)解讀丨2024新版《突發(fā)事件應(yīng)對法》及其應(yīng)用案例
- IF鋼物理冶金原理與關(guān)鍵工藝技術(shù)1
- 銷售提成對賭協(xié)議書范本 3篇
- 勞務(wù)派遣招標(biāo)文件范本
- EPC項目階段劃分及工作結(jié)構(gòu)分解方案
- 小學(xué)二年級數(shù)學(xué)口算練習(xí)題1000道
- 家譜、宗譜頒譜慶典講話
評論
0/150
提交評論