




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
MTK優(yōu)美代碼賞析2:MenuItemMask_flag
從mtk業(yè)已經(jīng)有15個(gè)月了,現(xiàn)在自己雖然對(duì)這個(gè)mtk的架構(gòu)很熟悉了,但感覺自己欠缺的還是太多,窺到嵌入式的冰山一角讓我更加渴望更深層次的學(xué)習(xí)。
感謝艾利平老師,雖然他已離職數(shù)月,但他教導(dǎo)我的思想依然清晰的縈繞在耳旁,每當(dāng)我困惑和苦惱時(shí)指引我方向。。
艾老師教導(dǎo)的對(duì)我特別特別有現(xiàn)實(shí)指導(dǎo)意義的一句話是:原始的(或者是前期)的系統(tǒng)是完美的,出現(xiàn)問題的部分往往是我們后期所作的修改導(dǎo)致的,任何的問題都要在這個(gè)前提下進(jìn)行修改才能最高效最快速的找到問題所在。
隨著工作的不斷深入,我對(duì)艾老師的這句話的體味越來越深,無論是自己新增加的模塊還是自己修改的簡單的bug,我都會(huì)先努力把原先的完美的系統(tǒng)架構(gòu)和處理流程走一遍,然后將自己設(shè)計(jì)的思路和系統(tǒng)的流程進(jìn)行無縫的整合,最后才去做代碼實(shí)現(xiàn)。這樣一來不僅使自己的代碼更加精煉高效,而且使得編碼的過程充滿了樂趣。
艾老師現(xiàn)在在SKY工作,有認(rèn)識(shí)他的朋友見了他請(qǐng)代我向他問個(gè)好啊。
作者張素豐,轉(zhuǎn)載請(qǐng)注明出處:/zhangsufeng/archive/2010/09/03/1816633.html
廢話不談了,開始正文。
最近測(cè)試組對(duì)手機(jī)里IP通話這方面很是重視,不僅要求IP設(shè)置里面的內(nèi)容可設(shè)置也可取消設(shè)置,而且要求通過通話記錄等所有相關(guān)方式實(shí)現(xiàn)IP撥號(hào)。在做這塊內(nèi)容時(shí)自己頻繁的用到mmi_frm_hide_menu_item和mmi_frm_unhide_menu_item函數(shù),以前只知道用,沒怎么去看過他的實(shí)現(xiàn),今天禁不住好奇就偷偷鉆進(jìn)去瞄了一眼,不看還不想看,一看就覺得驚奇,這兩個(gè)函數(shù)功能雖簡單,卻使用另一種自己沒想到的手法去實(shí)現(xiàn)。讓我再次感嘆mtk代碼的規(guī)范優(yōu)美。
首先介紹在這之中一個(gè)很重要的變量:staticU8MenuItemMask[(MAX_MENU_ITEMS_VALUE/8)+1];
mtk使用8位數(shù)的數(shù)組來存儲(chǔ)所有菜單的顯示屬性,每個(gè)數(shù)的每個(gè)位代表一個(gè)菜單是否顯示,0表示顯示,1表示隱藏。
用位來表示菜單的顯示屬性,這種做法讓我驚嘆,不僅數(shù)據(jù)量得到減小,而且邏輯緊密,接口清晰。
但有一點(diǎn)不足,就是這兩個(gè)函數(shù)操作的menuid必須定義在GlobalMenuItems.h中操作才能有效。
下面貼出這兩個(gè)函數(shù)實(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)用完這兩個(gè)函數(shù)后還會(huì)執(zhí)行如下的動(dòng)作,以便為shouCategory做準(zhǔn)備: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í)行的這兩個(gè)函數(shù)實(shí)現(xiàn)如下:
代碼
其中核心的實(shí)現(xiàn)函數(shù)為:MMI_BOOLmmi_frm_test_menu_item_hide(U16menu_item_id);
該函數(shù)的實(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對(duì)應(yīng)MenuItemMask數(shù)組中的位
置1
voidmmi_frm_unhide_menu_itemU16menu_item_id);將要顯示的菜單ID對(duì)應(yīng)MenuItemMask數(shù)組中的位
置0而MMI_BOOLmmi_frm_test_menu_item_hide(U16menu_item_id);通過判斷MenuItemMask中對(duì)應(yīng)的位是否是1來判斷這個(gè)位所對(duì)應(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工地常見安全隱患及整改措施
- 政府消防安全應(yīng)急預(yù)案
- 肝炎病毒感染與老年健康-洞察闡釋
- 邊緣計(jì)算中的數(shù)據(jù)安全與隱私保護(hù)機(jī)制-洞察闡釋
- 車載娛樂系統(tǒng)研發(fā)-洞察闡釋
- 春節(jié)節(jié)后復(fù)工安全教育
- 工廠工作總結(jié)月報(bào)
- 污水崗位安全職責(zé)
- 財(cái)務(wù)日常工作總結(jié)
- 門源回族自治縣建設(shè)工程質(zhì)量安全監(jiān)督站
- 2025全員安全生產(chǎn)責(zé)任制范本
- 林業(yè)行政執(zhí)法培訓(xùn)
- 電大考試試題及答案商法
- 廣西壯族自治區(qū)柳州市上進(jìn)聯(lián)考2024-2025學(xué)年高一下學(xué)期6月期末聯(lián)合考試數(shù)學(xué)試題(含答案)
- 八年級(jí)暑假前家長會(huì)課件
- 2025年河南省高考地理試卷真題(含答案)
- 2025屆廣東省惠州惠城區(qū)五校聯(lián)考英語八下期末檢測(cè)試題含答案
- 高中英語必背3500單詞表完整版
- T/CNFAGS 16-2024綠色甲醇分級(jí)標(biāo)準(zhǔn)(試行)
- 國民經(jīng)濟(jì)行業(yè)分類代碼(2024年版)
- 國家開放大學(xué)《藥物治療學(xué)(本)》形考作業(yè)1-4參考答案
評(píng)論
0/150
提交評(píng)論