天天看點

MTK程式設計起步——開發中可能用到的一些東西(轉)

加載過的字元串生成檔案:

string_resource_usage.txt

加載過的圖檔生成檔案:

image_resource_usage.txt

SMS編輯界面,中間按鍵的顯示:

mmi_sms_entry_editor

{

#ifdef __MMI_WGUI_CSK_ENABLE__

EnableCenterSoftkey(0, IMG_GLOBAL_SEND_MSG_CSK);

mmi_imc_disable_csk();

#endif

}

EnableCenterSoftkey(0, 0);去掉其使用。

設定預設時間:

custom_hw_default.c :

DEFAULT_HARDWARE_YEAR、DEFAULT_HARDWARE_MON、DEFAULT_HARDWARE_DAY

Restore.c 恢複出廠時間:RstResetDateTime()

上下左右快捷鍵設定:

Resource_shortcuts.c: 

數組:gShctCandList      可選的快捷方式入口

gShctDefaultList   預設有的入口

gShctDefaultDediList[4]  上下左右四個鍵的入口

camera、video 的一些預設值設定:

MMI_features_camera.h、MMI_features_video.h

(plutommi/customer/custresource/pluto_mmi)

UI_device_height

UI_device_width

MMI_button_bar_height

修改預設輸入法:

Common_mmi_cache_config.c:

NVRAM_SETTING_PREFER_INPUT_METHOD

RESTORE_PREFER_INPUT_METHOD

modis上看需修改版本号:NVRAM_EF_CACHE_SHORT_LID_VERNO

(custom_nvram_editor_data_item.h)

電話本的存儲設定:

mmi_phb_entry_quick_search_list()

{

guiBuffer = GetCurrGuiBuffer(SCR_ID_PHB_QUICK_SEARCH_LIST);

#if !defined(__NEOTEL_N73_SETTING__)

entryCount = mmi_phb_num_of_phb_contact_in_storage(g_phb_cntx.prefer_storage);

#else

entryCount = mmi_phb_num_of_phb_contact_in_storage(MMI_STORAGE_BOTH);

#endif

SetLeftSoftkeyFunction(MTPNP_PFAL_PHB_entry_list_choose_number_dial, KEY_EVENT_UP);//左按鍵

進入撥打的界面。

}

去掉idle界面,網絡名字前面的SIM卡前面的圖示:

wgui_cat033_show_techno_network_name()

和wgui_cat033_show_techno_network_name2()

的:      

#if defined(M8171_SW_VERSION) || defined(M8968_SW_VERSION)||defined(M8289_SW_VERSION)

dual_sim_img = NULL;//指派為空

#else

dual_sim_img = get_image(WGUI_IMG_IDLE_SIM1);

#endif

修改時間的預設格式為12小時制:

#ifdef __NEOTEL__SETTING__

BYTE_ENTRY(TIME_FORMAT, 0X00),//12小時制         

#else

BYTE_ENTRY(TIME_FORMAT, 0X01),//24小時制          

#endif

#ifdef __NEOTEL__SETTING__

BYTE_ENTRY(RESTORE_DEFAULT_TIME_FORMAT, 0x00),

#else

BYTE_ENTRY(RESTORE_DEFAULT_TIME_FORMAT, 0x01),

#endif

修改IP号碼的15位:

#ifdef M8181_SW_S80_VERSION

#define MAX_IP_NUMBER_LEN  15

#else

#define MAX_IP_NUMBER_LEN  10

#endif

檔案nvram_common_defs.h:

#ifdef M8181_SW_S80_VERSION

#define NVRAM_IP_NUMBER_SIZE    32*3

#else

#define NVRAM_IP_NUMBER_SIZE    22*3

#endif

修改GPRS相關的檔案:

#define MAX_GPRS_PROFILE_NUM (9)--custom_data_account.h

#define NVRAM_EF_ABM_GPRS_PROFILE_TOTAL     12

NVRAM_EF_ABM_PS_PROFILE_DEFAULT

NVRAM_EF_ABM_PS_PROFILE_DEFAULT

NVRAM_EF_WAP_PROF_WAP_PROFILE_CONTENT_DEFAULT

NVRAM_EF_WAP_PROF_WAP_SIM1_PROFILE_NAMES_DEFAULT

NVRAM_EF_WAP_PROF_WAP_SIM2_PROFILE_NAMES_DEFAULT

NVRAM_EF_WAP_PROF_MMS_SIM1_PROFILE_NAMES_DEFAULT

NVRAM_EF_WAP_PROF_MMS_SIM2_PROFILE_NAMES_DEFAULT

MMI_features_video.h檔案:

for video player:show text when hotkey pess

#ifndef __NEOTEL__SETTING__

#define __VDOREC_FEATURE_HIDE_OSD__ //屏蔽這兩個宏

#define __VDOREC_FEATURE_MULTI_REGION_LAYER_BG__

#endif

顯示2個IMEI号:

#if defined(__MMI_DUAL_SIM_MASTER__) && defined(__NEOTEL_MULTI_LANGUAGE__) || defined(M8181_SW_S80_VERSION)

mmi_ssc_get_sim2_imei_req();

#else

ShowIMEIScreen();

#endif

修改音樂播放器的歌曲标題坐标:

mmi_audply_redraw_main_AP_title()

gui_print_truncated_borderd_text(、、, MMI_title_string);

允許主螢幕屏保時鐘顯示:

show_main_LCD_date_time函數中:

if (enable_main_LCD_date_time_display)

{

dm_coordinates coordinates;

if (show_date == 0)

{

coordinates.s16X = main_LCD_dt_object.date.x;

coordinates.s16Y = main_LCD_dt_object.date.y;

coordinates.s16Width = main_LCD_dt_object.date.width;

coordinates.s16Height = main_LCD_dt_object.date.height;

setup_previous_control(&coordinates);

}

update_mainlcd_dt_display

多個含内嵌菜單的上下菜單選擇按鍵響應函數:

register_inline_fixed_list_keys

{

register_keyboard_key_handler(inline_fixed_list_key_handler);

SetKeyHandler(inline_fixed_list_goto_previous_item, KEY_UP_ARROW, KEY_EVENT_DOWN);

SetKeyHandler(inline_fixed_list_goto_next_item, KEY_DOWN_ARROW, KEY_EVENT_DOWN);

SetKeyHandler(inline_fixed_list_goto_previous_item, KEY_VOL_UP, KEY_EVENT_DOWN);

SetKeyHandler(inline_fixed_list_goto_next_item, KEY_VOL_DOWN, KEY_EVENT_DOWN);

}

内嵌菜單左右選擇響應函數:

register_inline_select_menu_keys

{

SetKeyHandler(inline_select_menu_previous_item, KEY_LEFT_ARROW, KEY_EVENT_DOWN);

SetKeyHandler(inline_select_menu_next_item, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);

SetKeyHandler(inline_select_menu_handle_up_arrow, KEY_UP_ARROW, KEY_EVENT_DOWN);

SetKeyHandler(inline_select_menu_handle_down_arrow, KEY_DOWN_ARROW, KEY_EVENT_DOWN);

SetKeyHandler(inline_select_menu_handle_up_arrow, KEY_VOL_UP, KEY_EVENT_DOWN);

SetKeyHandler(inline_select_menu_handle_down_arrow, KEY_VOL_DOWN, KEY_EVENT_DOWN);

register_keyboard_key_handler(inline_select_menu_keyboard_key_handler);

}

按鍵響應函數:

execute_softkey_function

隐藏按鍵:

wgui_softkey_hide(MMI_RIGHT_SOFTKEY);

重畫按鍵:

redraw_softkey

{

hide_softkey[key] ();

show_softkey(key);

}

寫短信子產品按鍵響應:

SetLeftSoftkeyFunction(mmi_sms_entry_editor_options, KEY_EVENT_UP);

SetCenterSoftkeyFunction(mmi_sms_ed_send, KEY_EVENT_UP);

SetCategory28RightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);

寫短信子產品添加聯系人:

mmi_sms_entry_add_recipient

mmi_sms_recipient_enter_number_done

mmi_sms_phone_number_done

MMS字串:MEA_STR_ID_CONFIG

MMS子產品的宏控制:MMS_SUPPORT = OBIGO_Q03C_MMS_V01

MMS子產品的入口函數:

goto_mms_screen()

wap_entry_widget_screen

彩信清單菜單建立:

widget_ctk_create_list_menu

widget_ctk_screen_create

widget_ctk_show_list_menu

meaSignalReceive參數已經封裝好

{

switch(src_module)

{

case MSF_MODID_SMA:

smaSignalHandler(signal, p);

break;

case MSF_MODID_MSM:

msfSignalHandler(signal, p);

break;

case MSF_MODID_MMS:

mmsSignalHandler(signal, p);

break;

case MSF_MODID_SLS:

slsSignalHandler(signal, p);

break;

}

show_softkey_background();

modis上:

MMI_ON_WIN32

修改本機密碼等:

nvram_common_custpack.c:

COMMON_NVRAM_EF_MS_SECURITY_DEFAULT[]:

定義貪睡重複鬧鐘次數:

AlarmDef.h:

MAX_SNOOZE_CHANCES

gui_switch.h宏定義:

定義MMI窗體等的高度、寬度

GUI圖檔繪制:

gui.c

gui_show_image(S32 x, S32 y, PU8 i)

gui_measure_image(PU8 i, S32 *width, S32 *height)

gui_move_text_cursor(S32 x, S32 y)

gui_measure_string(UI_string_type text, S32 *width, S32 *height)

GDI圖檔繪制:

gdi_image.c:

gdi_image_get_dimension_id(U16 image_id, S32 *width, S32 *height)

gdi_image_draw_id(OFFSET_X,OFFSET_Y,IMAGE_ID):{gdi_image_draw}

gdi_image_draw:{gdi_image_codec_draw}

月曆的相關定義:

Gui_calendar.h

月曆的繪制:

gui_calendar.c

設定idle界面,預設時鐘:

wgui_datetime.c:

U8 g_clock_type = ANALOG;

電池電量變化響應函數:

wgui_status_icon_refresh_fixed_status_icon

{

wgui_status_icon_arrange_status_icons()

{

MMI_status_icons_list1[0] = STATUS_ICON_SIGNAL_STRENGTH;

MMI_status_icons_list1[1] = STATUS_ICON_BATTERY_STRENGTH;

#if defined(__DOUBLE_BATTERY__)

MMI_status_icons_list1[2] = STATUS_ICON_BATTERY_STRENGTH_SLAVE;

MMI_status_icon_bars[0].n_icons = 3;

#if defined(__NEOTEL_N73_SETTING__)

MMI_status_icons_list1[3] = STATUS_ICON_SLAVE_SIGNAL_STRENGTH;

MMI_status_icon_bars[0].n_icons++;

#endif

#else

MMI_status_icon_bars[0].n_icons = 2;

#endif

}

}

信号量圖示和電池圖示坐标設定:

wgui_status_icon_arrange_status_icons

(arrange_status_icons)

進入idle界面的函數:

wgui_cat033_redraw

{

if (PhnsetGetShowDateTimeStatus() == MMI_TRUE)

{

#if defined (__NEOTEL_NOKIA_IDLESCREEN_STYLE__)

gui_show_image(0, 0, get_image(idlescreen_bar_id));//idle界面去掉時鐘圖示

#else

gui_show_image(0, MMI_status_bar_height, get_image(idlescreen_bar_id));

#endif

}

update_mainlcd_dt_display();

in_idle_screen();

wallpaper_layer = wgui_cat033_get_text_abm_layer();wgui_status_icon_set_alpha_layer(wallpaper_layer);

idle_screen_show_network_details();

register_hide_status_icon_bar(0, idle_screen_hide_status_icons_bar0);

#if !defined(__MMI_MAINLCD_320X480__)

register_hide_status_icon_bar(1, idle_screen_hide_status_icons_bar1);

#endif

show_status_icons();

#if defined (__NEOTEL_NOKIA_IDLESCREEN_STYLE__)

show_nokia_idle_function();

#endif

}

N73,idle設定左右按鍵:

設定左右按鍵:

IdleSetLRKey()

{

#if defined(__NEOTEL_LSK_TO_SENDKEY2__)

if ((MTPNP_AD_Get_UsableSide() == MTPNP_AD_DUALSIM_USABLE) || (MTPNP_AD_Get_UsableSide() == MTPNP_AD_SIMCARD2_USABLE))//如果兩個卡可用或者卡2可用,就進入call_list界面

{

lsk_func = MTPNP_PFAL_chist_slave_req_read_mixed_num_by_key;

}

else

{

lsk_func = MMI_Display_Nosim_Message;//若無卡2則提示插入卡

}

#else

lsk_func = EntryMainMenuFromIdleScreen;

#endif

rsk_func = mmi_phb_idle_enter_phb_list;//右軟鍵進入電話簿清單

//更換左右按鍵的響應和字串

#if defined(__MMI_SWAP_LSK_RSK_IN_IDLE_SCREEN__)

tmp_func = lsk_func;

lsk_func = rsk_func;

rsk_func = tmp_func;

tmp_str = lsk_str;

lsk_str = rsk_str;

rsk_str = tmp_str;

#endif

}

待機界面設定日期和時間的坐标:

set_dt_display

{

#if defined(__NEOTEL_N73_SETTING__)

x=32;//設定時間坐标

y=1;

#endif

x1 = main_LCD_dt_object.time.x = x - DT_DISPLAY_GAP;

y1 = main_LCD_dt_object.time.y = y - DT_DISPLAY_GAP;

#if defined(__NEOTEL_N73_SETTING__)

x=50;//設定日期坐标

y=18;

#endif

x1 = main_LCD_dt_object.date.x = x;

y1 = main_LCD_dt_object.date.y = y;

x2 = x1 + main_LCD_dt_object.time.width - 1;

y2 = y1 + main_LCD_dt_object.time.height - 1;               

enable_main_LCD_date_time_display = 1;

}

show_main_LCD_date_time

{

time_string(&main_LCD_dt_object.time.t, (UI_string_type) s, main_LCD_dt_object.flags);

}

if (PhnsetGetShowDateTimeStatus() == MMI_TRUE)

{update_mainlcd_dt_display();}

時間顯示的clip的地方增加格式判斷:

PhnsetGetTimeFormat()。

動态清單:

wgui_dynamic_list_create_icontext_menu

電池充電過程中反複調用:

wgui_status_icon_status_icon_timer_callback()

{

if (status_icon_blink_animate_ON)

{

gui_start_timer(STATUS_ICON_TIMER_RATE, wgui_status_icon_status_icon_timer_callback);

}

}

idle界面接收短信的提示框上面的字串繪制函數:

ShowCategory154Screen{

category_154_message1_y = CAT154_IMAGE_Y - h1 - 1 - h2 - 2 + 8;

category_154_message2_y = CAT154_IMAGE_Y - h2 - 2 + 8;

y = CAT154_IMAGE_Y;

}

接收短信的提示框圖檔SMS/Receiving/SS_IdleMSG.gif

設定屏保預設開啟:

SettingDefs.h  :

#define  FACTORY_RESTORE_DEFAULT_SCREENSAVER_STATUS   1

RESTORE_DEFAULT_SCREENSAVER_STATUS

NVRAM_SCREENSAVER_STATUS

設定屏保預設圖檔:

NVRAM_CURRENT_SCREENSVER_ID

RESTORE_DEFAULT_CURRENT_SCREENSVER_ID

二級菜單背景圖

IMG_BACKGROUND_defaultTheme

IMG_BACKGROUND_1Theme

IMG_BACKGROUND_2Theme

主菜單圖檔坐标的繪制

gui_show_fixed_matrix_menu函數

#if defined(__NEOTEL_MATRIX_MENU_TEXT__)

#if defined(__NEOTEL_LENOVO_MAINMENU__)

if(GetActiveScreenId() == MAIN_MENU_SCREENID)

{

image_rect->rect_text.y = iy + mm->height-sh - 10;

}

else

#endif

{

image_rect->rect_text.y = iy + mm->height-sh - 2;

}

#else

image_rect->rect_text.y = iy + mm->text_y;

#endif

疑問:

#if defined(__NEOTEL_MATRIX_MENU_TEXT__)

gui_show_fixed_matrix_menuitem_text();

#endif

音樂播放器主界面:

mmi_audply_redraw_main_screen

設定預設背光等級和時間值:

Common_mmi_cache_config.c:

NVRAM_BYTE_BL_SETTING_LEVEL

NVRAM_BYTE_BL_SETTING_HFTIME

Restore.c恢複出廠設定值:

#define RESTORE_DEFAULT_BACKLIGHT_LEVEL 5

#define RESTORE_DEFAULT_BACKLIGHT_TIME 6

Nvram_common_config.c:反查電話号碼(撥打的時候和姓名比對)

NVRAM_EF_SYS_CACHE_OCTET_DEFAULT  數組的最後一行

【有的項目在custom_nvram_restore.c  檔案】

#elif defined(M8181_SW_S80_VERSION)

0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 

Custom_wap_cust_pack.c:  添加書簽

custom_wap_bkm_struct wap_bkm_default

Nvram_common_custpack.c: 添加書簽

COMMON_NVRAM_EF_WAP_BOOKMARK_LIST_DEFAULT

idle界面:仿Nokia的shortcut快捷鍵

nokia_shortcuts_struct  nokia_idle_shortcuts數組:

{ 1,IMG_NOKIA_IDLE_TEXTMENU_ICON_SMS,

STR_ID_NOKIA_NEW_MESSAGE,

ViewSmsInboxFromNokiaIdleScreen},

nokia_shortcuts_struct{

BOOL is_set_or_not;

U16 shortcut_icon;

U16 shortcut_string;

FuncPtr shortcut_function;

}

設定idle界面,預設時鐘:

wgui_datetime.c:

U8 g_clock_type = ANALOG;

檔案預設排序設定:

Common_mmi_cache_config.c:

NVRAM_EF_FMGR_SORT_OPTION_LID

idle界面shortcut快捷鍵的坐标設定函數:

wgui_categories_idlescreen.c:

ShowNokiaIdleText():

if(r2lMMIFlag) //其它國語言,字串從右到左顯示的标志

{

x1 = UI_device_width -1 - NOKIA_ROW_GAP - NOKIA_IDLE_MENU_TEXT_ICON_WIDTH;

y1 = text_y; //字串顯示的坐标

}

else

{

x1 = NOKIA_ROW_GAP + NOKIA_IDLE_MENU_TEXT_ICON_WIDTH;

y1 = text_y;

}

滾動字串:

gui_create_scrolling_text(&nokia_scroll_text, x1, y1, width, h, (UI_string_type) nokia_menu_text, NokiaIdletxtscrolling_timer, nokia_scrolling_text_draw_background, text_selected_c, text_selected_c);

gui_show_scrolling_text(&nokia_scroll_text);

shortcut圖示的坐标繪制:

if(r2lMMIFlag)

{

gui_show_image(UI_device_width - 16 - 1,y1 ,(PU8)get_image(shortcutIcon));

}

else

{

gui_show_image(2,y1 ,(PU8)get_image(shortcutIcon));

}

添加一個自定義的世界時間、地區:

resource_world_clock_city.c:

const TimeZoneStruct TimeZoneData[]:

在其中添加世界時間的一項(位置無要求,程式會根據時區重新排序的):

{時區,地名字串,地名字串縮寫,地名字串,地名字串縮寫,1}

其中時區可以上網查,比如北京為東8區 ,就為 +8 西區為負數

地名字串,地名字串縮寫是自己添加字串資源

地圖X坐标,地圖Y坐标為找到我們實際用的地圖背景,對應的地名 x,y坐标即可,

用windows自帶的畫圖工具就可查出來,最後一個參數照填就行

修改預設城市:

mod_mmiPopulateWClockData :找到城市名稱對應的字串id:STR_WCLOCK_CITYxxx,

STR_WCLOCK_CITYxxx 對應的序号在 TimeZoneData 裡面可以檢視到,

STR_WCLOCK_CITY8 處于 數組的第N給位置,即序号為N-1(基于0 開始),

common_mmi_cache_config.c:CURRENT_CITY,修改為對應的序号減 1 (十六進制)

修改預設藍牙設定名稱:

BTMMICm.c裡面,修改 MMI_BT_DEF_HOST_BT_NAME[]的值

在pc上隐藏手機盤符,而隻顯示存儲卡盤符:

custom_usb_ms_init :中注釋掉以下句子:

USB_Ms_Register_DiskDriver(&USB_NOR_drv);

或者修改:

#define PARTITION_SECTORS     0

#define NOR_FAT_PARTITION_SECTORS     0

電話本條數:

PHB_SIM_ENTRY   = 250  # Phonebook Entry Number in SIM: 100, 200

PHB_PHONE_ENTRY = 200  # Phonebook Entry Number in NVRAM: 100, 200

PHB_LN_ENTRY    = 20   # Call log; Last Number Entry Number: 10, 20, 50

預設IP号碼設定:

nvram_common_config.c:

NVRAM_IP_NUMBER_DEFAULT

情景模式預設值:

nvram_common_config.c:

NVRAM_PROFILES_DEFAULT[]

電子書預設設定:

nvram_common_config.c:

NVRAM_EF_EBOOK_DEFAULT_VALUE

修改輸入法的順序:

IMERes.c:

mtk_gIMEModeArray[]修改此數組中的元素的順序即可

設定顯示本機号碼的開啟或關閉:

Common_mmi_cache_config.c:

NVRAM_SETTING_OWNER_NO

PhnsetGetShowOwnerNumStatus顯示本機号碼狀态的函數:打開和關閉。

修改User Agent:

Custom_wap_config.h:

#define WAP_CUSTOM_CFG_DEFAULT_MMS_UA_HEADER  "MAUI MMS User Agent"

修改聲音音量大小:

./custom/audio/../nvram_default_audio.c:

主要含有“_MED_”字段的要修改,而且含有“MIC”的字段最大指不能超過100,否則容易産生自激。

修改聲音音質:

./custom/audio/../ audcoeff.c“DG_DAF”的值,最好不要超過“0x6000”。

Resource_audio.c檔案:

mtk_resource_imelodys[]:來電鈴聲/鬧鈴Ring1—Ring10,

mtk_resource_midis[]:來電鈴聲/鬧鈴MIDI1—MIDI15

mtk_resource_message_sounds[]:資訊鈴聲Tone1—Tone10

mtk_resource_sounds[]:開關機/開關蓋聲Tone—Tone10

mtk_resource_ems_imelodys[]:EMS旋律Melody

mtk_resource_ems_sounds[]:EMS預設聲音Predefined Sound

mtk_resource_mms_sounds[]:mms聲音

版本号修改:

我們修改了nvram裡面的一個預設設定的值,如果我們不修改對應的版本号的話,

在更新手機的時候就必須要format才可以正常讀出我們新設定的值

#define NVRAM_EF_CACHE_BYTE_LID_VERNO      "011"

#define NVRAM_EF_CACHE_SHORT_LID_VERNO     "011"

#define NVRAM_EF_CACHE_DOUBLE_LID_VERNO    "010"

鍵盤鎖時間修改:

Common_mmi_cache_config.c:

NVRAM_SETTING_AUTOKEYPADLOCK_TIME

修改預設輸入法:

方法1:common_mmi_cache_config.c

NVRAM_SETTING_PREFER_INPUT_METHOD

方法2:

Nv項預設值為0xff,然後nv項版本号更新

SetInputMethodFromNVRAM函數中修改

NVRAM_SETTING_PREFER_INPUT_METHOD

預設語言:

common_mmi_cache_config.c

NVRAM_SETTING_LANG

音樂播放器預設音量設定:

NVRAM_AUDPLY_VOLUME

FACTORY_RESTORE_DEFAULT_AUDPLY_VOLUME

預設java的網絡參數配置:

BYTE_ENTRY(NVRAM_JAVA_SETTING_PROF_ID, 0x02)

BYTE_ENTRY(NVRAM_JAVA_SETTING_PROF2_ID, 0x02)

預設wap 網絡參數配置:

SHORT_ENTRY(NVRAM_WAP_PROF_ACTIVE_WAP_PROFILE_INDEX, 0x02, 0x02)

SHORT_ENTRY(NVRAM_WAP_PROF_ACTIVE_MMS_PROFILE_INDEX, 0x02, 0x02)

cs01_mid :是來電鈴聲的資料

cs02_mid :是對應的關機鈴聲

custpack_audio.c中的custpack_audio對應情景模式中的15個和玄鈴聲

mtk_resource_message_sounds :短信鈴聲的修改

轉化工具可以使用MTK提供的MCT和AudioResourceGen。

手機短信容量:

SMS_PHONE_ENTRY = 200  # SMS Entry Number in NVRAM: 200

SMS_TOTAL_ENTRY = 250  # SMS Entry Number in NVRAM and SIM: 250

來電話時,通過電話号碼來搜尋姓名:

PhoneBookStubsToOthers.c中的mmi_phb_call_get_data_for_call_mgnt函數

節電模式:

搜尋__MMI_POWERSAVE_MODE_ENABLE__,

修改的檔案有Gpio.c和Custom_equipment.h。

語音撥号:

在TAURUS_GSM.mak中打開DIGIT_TONE_SUPPORT,添加音樂資源檔案。

修改一些開機預設設定:

nvram_user_config.c

修改打電話時燈不滅的問題:

與__MMI_SLEEP_OUT_BACKLIGHT_ON__有關

修改鬧鐘在各種設定下都會震動的BUG:

修改AlarmFramework.c中的void AlmPlayAlarmTone(void)函數

來電時隻顯示姓名改成顯示電話和姓名:

修改CallStructureManagement.c檔案中的GetIncomingCallName函數

修改來電時搜尋電話号碼的長度:

修改PhoneBookSearch.c中的mmi_phb_util_convert_number_to_int函數,

修改PhoneBookTypes.h中關于INVALID_NUMBER的定義

背景透明:

UI_SUBMENU_OPACITY_LAYER1透明度

主題的使用:

Themecomponents.h相關

修改主菜單的主題背景:

Themecomponents.h:

main_menu_bkg_filler_defaultTheme_1

main_menu_bkg_filler_defaultTheme_2

main_menu_bkg_filler_defaultTheme_3

上下側鍵功能調換:

keypad_def.c裡面DEVICE_KEY_VOL_DOWN和DEVICE_KEY_VOL_UP位置交換

在主螢幕日期顯示的地方加星期顯示:

wgui_datetime.c中的date_string函數,如果沒有副屏,記得把 Res_Gui.c中的PopulateCommonCategoryResources中的#ifdef __MMI_SUBLCD__去掉,跟宏DT_IDLE_NEWSCREEN有關。

牆紙大小限制:

Wallpaper.c中的IMG_SIZE_BOUNDARY

圖檔預覽:

FileMgrUI.c中的fmgr_gui_get_file_info_callback函數

拍照檔案大小限制:

med_global.h中的MAX_CAM_FILE_BUFFER_LEN

快捷鍵的宏:

__MMI_DEDICATED_KEY_SHORTCUTS__

注冊方向鍵的函數:

RegisterDedicatedKeyHandlers();

充電溫度限制:

chr_parameter.c

通話聲音大小調節的按鍵:

SetSideVolumeKeysForCM函數

撥打電話時,有些文字看不全:

修改ShowMOMTCallScreen函數

全屏編輯框:

__MMI_FULL_SCREEN_EDITOR__宏相關

手機播放不了IMY,MID格式的問題:

AUD_MELODY_BUFFER_LEN大小不能為0,而且這個大小将限制能打開的鈴聲的大小

修改充電圖示更新問題,由于status區域重新整理邊界較小導緻:

gui_title_oem.c:

函數為:gui_title_oem_show_background

在moids下播放音樂檔案:

/MoDIS/WIN32FS/DRIVE_E/My Music

短信正在發送中的函數:

SmsAppSendMsg.c:

mmi_sms_entry_sending

繪制世界時鐘的地圖和時區坐标的函數:

wgui_categories.c:Cat231Redraw

進入圖檔浏覽界面,繪制标題欄的背景圖檔的函數:

gui_title_show_background = gui_title_oem_show_background;

gui_title_oem.c:

gui_title_oem_show_background():

gdi_image_draw_id(t->x , t->y, title_bg_id);

用于修改背景圖檔的坐标位置,讓标題欄文字顯示在背景的中位置:

gdi_image_get_dimension_id(title_bg_id, &title_bg_width,  &title_bg_height);

gdi_image_draw_id(t->x, t->y + MMI_title_y -(title_bg_height -  MMI_title_height)/2, title_bg_id);

背景圖檔的ID: title_bg_id = IMAGE_VIEW_TITLEBAR_BG;

繪制音樂播放器界面标題Audio player的函數:

mmi_audply_redraw_main_AP_title():

坐标位置:

gui_print_truncated_borderd_text(x1, height_base+

((MMI_title_height - str_h)/2) ,

UI_device_width - 2, MMI_title_string);

去掉内置視訊:

PhoneBookResDef.h  去掉字串的定義

Res_PhoneBook.c    去掉字串的加載

PhoneBookCallerGroups.c中,

注釋掉下面一段:

for (i = 0; i < 1; i++)

{

g_phb_cntx.video_name_list[++count] = (U8*) GetString((U16) (STR_ID_PHB_VIDEO_1 + i));

g_phb_cntx.video_id_list[count] = VDO_ID_PHB_MTCALL_1 + i;

g_phb_cntx.total_video_id++;

}

屬性模闆說明:

const U8 category5[] =

{

5,                           // 這個代表元件的個數;

DM_BASE_LAYER_START,         // 開始層;

DM_SCR_BG,                   // 背景;

DM_BASE_CONTROL_SET1,        //表示窗體的基本組成——狀态欄、标題和軟按鍵

DM_MULTILINE_INPUTBOX1,      //多行輸入框

DM_CATEGORY_CONTROLLED_AREA  // 輸入法的部分;

};

卡1/卡2是否可用:

E_MTPNP_AD_SIMCARD_USABLE_SIDE MTPNP_AD_Get_UsableSide(void)

網絡營運商1的位置在:idle_screen_show_network_name中修改

網絡營運商2的位置在:idle_screen_show_card2_network_name裡修改

歌詞等一些内容的位置在:idle_screen_show_network_details裡修改

日期時間在:DrawDateTimeImage裡修改

定義網絡營運商的名字:

idleapp.c:

#define SetLine1Text SetIdleScreenNetworkName//營運商名字

#define SetLine2Text SetIdleScreenNetworkStatus//網絡狀态

SetLine1Text(gNWProviderName); 

SetLine1Text(gNWProviderName); 

SetLine2Text((U8*) gServProvderName); 

SetLine2Text((U8*) gOwnerName);

mmi_netset_retrieve_opname_from_plmn(UpdatePlmn, gNWProviderName);

mmi_ucs2ncpy((PS8) gNWProviderName, (PS8) GetString(STR_ID_NETSET_SEARCHIN_NW),            MAX_LENGTH_DISPLAY_NAME - 1);

NetWorkAttachedIndication函數:

strcpy((S8*) gPLMN, (S8*) local_data->plmn);

RefreshNwProviderName(gPLMN);

此處是通過plmn值來得到ref_list中的STR_PLMN_NAME_X的值,具體查找過程可以參考mmi_netset_retrieve_opname_from_plmn具體代碼,

現在問題的關鍵就是哪裡又得到這個plmn值呢?在同個檔案中向上搜尋到NetWorkAttachedIndication函數開始的時候就得到 local_data,進而得到對應的plmn值。再搜尋InitNetWorkBootUpEventsCallBack()函數裡面的 SetProtocolEventHandler(NetWorkAttachedIndication, PRT_NW_ATTACH_IND);就是得到網絡标志的狀态的地方,不過是通過l4給mmi發消息而已。然後我們應該很容易看到 InitNetWorkBootUpEventsCallBack函數也僅僅是在mmitask.c中的InitializeAll()中被調用。

idle界面注冊按鍵處理函數:

IdleApp.c中的IdleScreenDigitHandler()函數,

加入的按鍵處理函數SetKeyHandler

信号訓示圖示:

圖示ID 為 STATUS_ICON_SIGNAL_STRENGTH

位于MainLCD/IdleScreen/Statusicon/ssignal

檔案 NetWorkFunctions.c

函數ChangeStatusIconLevel根據目前的信号值設定顯示的圖檔幀數。

該圖示在待機界面的坐标:

檔案Wgui_status_icons.c---函數arrange_status_icons()

MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].y = 0;

MMI_status_icons[STATUS_ICON_SIGNAL_STRENGTH].x=3;

列印字元串函數:UI_print_text

if (mmi_idle_exe_callback() == MMI_TRUE)

條件成立, 表示有未讀短信或者未接來電.

其中, mmi_idle_exe_callback()函數有兩個作用:

1) 判斷;

2) 顯示未讀短信界面, 或者未接來電界面

開機預設按鍵不振動:

gpio_vibrator_once_when_key_press = 0;

播放開蓋音效:

playRequestedTone(COVER_OPEN_TONE);

播放鬧鐘鈴聲:

playRequestedTone(ALARM_TONE);

播放開機搜網聲:

playRequestedTone(CAMP_ON_TONE);

手機暗碼:CustResDefPLUTO.h (plutommi/Customer/CustResource/PLUTO_MMI)

SSCStringHandle.h (plutommi/mmi/SSC/SSCInc)

判斷卡有效(mmi_bootup_is_sim_valid()== MMI_TRUE)

用于判斷SIM卡注冊網絡失敗,即SIM卡無效卡的判斷:

if(mmi_bootup_is_nw_registration_ok() == MMI_FALSE)

判斷網絡無效不可用:

if (!mmi_bootup_is_network_service_available())

判斷目前界面是idle界面:

if (g_idle_context.IsOnIdleScreen)

PhoneBookOperateSingle.c

包括了檢視條目;添加條目;編輯mtk電話本修改所涉及到的一些檔案;

PhonebookMain.c

包括了初始化和重新開機;号碼查找;at指令;主菜單;電話本清單菜單;公共用途。

PhoneBookOperateSingle.c

包括了檢視條目;添加條目;編輯條目;删除條目;複制條目;移動條目;重複入口;檔案系統中的圖檔。

PhoneBookOperateMass.c

包括了全部複制;全部删除;常用操作功能。

PhoneBookSearch.c

包括名稱索引排序;通過名稱搜尋;快速搜尋。

PhoneBookCallerGroup.c

包括号碼群組資料設定;号碼群組成員清單;建立内嵌選擇清單;

PhoneBookExtraNumbers.c

包括使用者号碼;服務電話号碼;緊急電話号碼。

PhoneBookSettings.c

包括記憶體狀态;首選存儲;所選字段開啟與關閉設定;我的名片設定。

PhoneBookStubsToOthers.c

包括打電話接口;短息接口;彩信接口;email接口;常用号碼查找;常用功能轉換。

修改通話界面,修改開機畫面,修改ilde界面,title重新整理背景,添加圖檔資源:

(1:修改通話界面:

RedrawMOMTCallScreen();通話界面顯示正在通話!

wgui_categories_CM.c

(2:修改開機畫面,一般開機畫面先調取一張靜态圖檔,再調取一張動态圖檔;但modis裡  面隻會顯示一張動态圖檔!

(3:title重新整理背景問題:

gui_title_oem_show_background();當各個界面之間跳轉時,對于無背景的圖檔隻  重新整理title背景:  gui_title_oem.c

(4:添加圖檔修改MP3界面和FM界面,修改确定和退出特效!

AudioPlayer界面:

IMAGE中添加圖檔資源;

AudioPlayerResDef.h添加ID;

Res_AudioPlayer.c定義添加資源ID;

AudioPlayerMainScreen.c中修改

mmi_audply_redraw_LSK_down,

mmi_audply_redraw_RSK_down,

mmi_audply_redraw_LSK_up,

mmi_audply_redraw_RSK_up,用來修改按下和彈起效果!

mmi_audply_redraw_main_screen用來修改觸摸界面的效果!

FM界面:

IMAGE中添加圖檔資源;

FMRadioDef.h添加ID;

Res_FMRadio.c定義添加資源ID;

FMRadioMainScreen.c中修改

mmi_fmrdo_redraw_main_LSK_down,

mmi_fmrdo_redraw_main_RSK_down,

mmi_fmrdo_redraw_main_LSK_up,

mmi_fmrdo_redraw_main_RSK_up,用來修改按下和彈起效果!

mmi_fmrdo_redraw_main_all用來修改觸摸界面的效果!

(5:修改ilde界面的歌詞和FM電台的顯示效果 

wgui_categories_idlescreen.c中audply_idle_text_scroll_timer()和    idle_screen_show_network_details()

其中gui_redraw_scrolling_text()用來顯示滾動字元!

系統預設鈴聲資源主要在:

resource_audio.c,custpack_audio.c 中

如需修改可以利用項目中的工具AudioResGen.exe(tools/AudioResGen)

首先将鈴聲檔案的絕對路徑加到imy.txt(tools/AudioResGen),如:

D:/work/audio_resource_gen/MTK/imy/s1imy01.imy

D:/work/audio_resource_gen/MTK/imy/s1imy02.imy

然後運作AudioResGen.exe,會生成三個檔案:

custpack_audio.c,resource_audio.c,resource_audio.h

裡面有生成的資源數組檔案,将其加入到系統的資源檔案custpack_audio.c,resource_audio.c即可。

為何有的時鐘鬧鈴不是準時的:

MMI supports two kinds of timers.

1. Alignment timers :  These timers are not very accurate. But they

keep on running even when the backlight of the LCD    isturned off. All the applications use these timers.

2. Non-Alignment timers : These timers are very accurate. They do not run

when the backlight is turned off. All the

UIcomponents use Non Alignment timers.

#define  TIMER_IS_ALIGNMENT       0  //Aligned timer

#define  TIMER_IS_NO_ALIGNMENT    1  //Non-aligned timer

情景模式

1、NOR      對應Normal

2、HED          headset

3、HND          handfree

每種情景下有多種item

1、CTN      ---Call Tone

2、KEY      ----Keypad Tone

3、TVO     ----TV out

4、MIC      ----MICrophone

5、GMI      ----FM ,BUZ, buzzer

6、SPH      ----Speech Tone

7、MED     ----melody

8、SID      ----Side Tone

測試和實驗室會聯合給出一個表。按照此表對應設定即可

顔色配置:

短信閱讀界面資訊頭背景顔色:EMS_viewer_header_background_filler

顔色選擇繪制:show_highlighted_inline_color_select_menuitem()

狀态欄背景顔色:status_icon_bar_filler_defaultTheme

單行編輯器光标顔色:inline_edit_cursor_color_defaultTheme

單行編輯高亮背景顔色:inline_edit_focussed_filler_defaultTheme

多行編輯界面行分隔線顔色:gui_create_EMS_input_box()--->b->underline_color

編輯區域字型顔色:inputbox_normal_text_color_defaultTheme

編輯界面選字區域:1>箭頭 mmi_pen_editor_draw_arrow()

2>選字區域背景顔色,選中背景等  candidate_singleline_inputbox_theme

編輯界面虛拟鍵盤按中鍵背景顔色:virtual_keyboard_key_down_filler_defaultTheme

popup螢幕背景顔色:popup_screen_background_color_defaultTheme

popup螢幕字型顔色:popup_screen_border_color_defaultTheme

滾動條顔色:scrollbar_background_filler_defaultTheme

滾動條滑塊顔色: scrollbar_indicator_filler_defaultTheme

list菜單項高亮背景顔色:list_selected_item_filler_defaultTheme

月曆目前日期背景顔色:calendar_cell_current_DefaultTheme

校準界面字型顔色:UpdateCalibrationScreen()--->MMI_multiline_inputbox.normal_text_color

開機請等候界面字型顔色: ShowCategory9Screen()--->MMI_multiline_inputbox.normal_text_color

開機找網界面日期時間字型顔色: set_dt_display--->case DT_NETWORK_SEARCH

電子書字型顔色:ShowCategory75Screen()--->MMI_multiline_inputbox.normal_text_color

編輯區域預設背景顔色:inputbox_filler_defaultTheme(如插入USB)

待機界面時間的設定:

set_dt_display()

main_LCD_dt_object.time.font = &MMI_large_font;

main_LCD_dt_object.time.text_color = *current_MMI_theme->idle_scr_time_color;

main_LCD_dt_object.time.text_border_color = *current_MMI_theme->idle_scr_time_border_color;

main_LCD_dt_object.time.width = w + (DT_DISPLAY_GAP << 1);

main_LCD_dt_object.time.height = h + (DT_DISPLAY_GAP << 1);

x1 = main_LCD_dt_object.time.x = x - DT_DISPLAY_GAP;

y1 = main_LCD_dt_object.time.y = y - DT_DISPLAY_GAP;

x2 = x1 + main_LCD_dt_object.time.width - 1;

y2 = y1 + main_LCD_dt_object.time.height - 1;

如何手動修改imei?

1. meta 工具

2. 連接配接好下載下傳線,點選meta工具的reconnect ,按手機開機鍵;

3. 選擇nvram editor ;選擇手機軟體對應database檔案;

4、選擇 NVRAM_EF_IMEI_IMEISV_LID

5 、選擇1 2 讀取 即可得到imei号

6、點選imei号,可以修改号碼;儲存,即可修改imei号。

7、×#06# 檢視顯示imei号。

23c中有NVRAM_EF_IMEI_IMEISV_DEFAULT

預設IMEI号:

nvram_common_config.c:

NVRAM_EF_IMEI_IMEISV_DEFAULT

0x53, 0x68, 0x88, 0x00, 0x00, 0x00, 0x51, 0x08, ,表示IMEI号3586880000001580

不是飛行模式判斷:

if (mmi_bootup_get_active_flight_mode() == 0)

或if (mmi_bootup_get_active_flight_mode() != FLIGHTMODE_SILENT)

飛行模式判斷:

if (mmi_bootup_get_active_flight_mode() == FLIGHTMODE_SILENT)

判斷不插卡的情況,包括插卡後取出和開機前就沒有插卡兩種情況,是以在判斷語句中應該是:

if(!gInsertSimAppFlag ||

( MTPNP_AD_Get_Card1Status() == MMI_SIM_STATUS_NOT_INSERT &&

MTPNP_AD_Get_Card2Status() == MMI_SIM_STATUS_NOT_INSERT))

或者是:

if(!gInsertSimAppFlag ||

MTPNP_AD_Get_Card1Status() == MTPNP_AD_SIMCARD_ABSENT &&

MTPNP_AD_Get_Card2Status() == MTPNP_AD_SIMCARD_ABSENT)

)

值得注意的是:要将引用的外部應用的變量和函數所在的頭檔案包含進去否則報錯。

短信功能無法使用:

if (mmi_frm_sms_check_action_pending())

禁用切斷電源報警的功能:

AlmDisableSPOF();

判斷網絡ID

卡1:memcmp(gHomePLMNNum, "51011", 5)

卡2:memcmp(gHomePLMNNum_2, "51011", 5)

gPLMN   手機卡1目前接入網絡的網絡ID

gPLMN_2 手機卡2目前接入網絡的網絡ID

編輯短信的時候button bar中間按鍵顯示的圖檔:

菜單ID :IMG_GLOBAL_SEND_MSG_CSK

#ifdef __MMI_WGUI_CSK_ENABLE__

EnableCenterSoftkey(0, IMG_GLOBAL_SEND_MSG_CSK);

mmi_imc_disable_csk();

#endif

菜單隐藏:

mmi_frm_hide_menu_item(MENU_ID_UCM_CALL_SETTING);

菜單取消隐藏:

mmi_frm_unhide_menu_item(MENU_ID_UCM_CALL_SETTING);

注意:

如果用mmi_frm_hide_menu_item()隐藏了一個菜單, 那麼隻要調用了這個函數,

以後所有界面都不會顯示該菜單, 除非在顯示之前調用mmi_frm_unhide_menu_item().

開關機動畫, USB動畫, 開機logo: Active/Poweronoff

主菜單: MainMenu

子菜單: Submenu

主題(主菜單背景): Theme

牆紙: /MainLCD/IdleScreen/Wallpaper

鎖屏圖檔: /MainLCD/IdleScreen/IPHONEKYEPADLOCK

wap登陸: /MainLCD/UIElement/Progress

短信菜單小圖檔: MainLCD/DualSIM/MESSAGE

錄音: MainLCD/SoundRecorder

幻燈片: MainLCD/PhotoEditor

圖檔編輯器: MainLCD/PhotoEditor

遊戲: MainLCD/Submenu/Funandgame

狀态欄短信已滿: /MainLCD/IdleScreen/Statusicons/DualSIM/Callforward/Master

狀态欄彩信圖示: /MainLCD/IdleScreen/Statusicons/DualSIM/MMS/Master

狀态欄的信号圖示: /MainLCD/IdleScreen/Statusicons/DualSIM/Master //sim卡1

和: /MainLCD/IdleScreen/Statusicons/DualSIM/Slave //sim卡2

檔案管理中, 菜單前面的圖檔: /MainLCD/FileManager

繼續閱讀