MTK優(yōu)美代碼賞析2MenuItemMask-flag_第1頁
MTK優(yōu)美代碼賞析2MenuItemMask-flag_第2頁
MTK優(yōu)美代碼賞析2MenuItemMask-flag_第3頁
MTK優(yōu)美代碼賞析2MenuItemMask-flag_第4頁
MTK優(yōu)美代碼賞析2MenuItemMask-flag_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論