MTK输入法模块相关

原创 2009年12月25日 10:13:00

 

修改人

版本号

变更说明

修改日期

 

V1.0

Init

2009-09-26

 

 

 

 

 

 

 

1     介绍:... 3

2     相关地方说明:... 3

3     代码处理过程:... 3

 


 

1          介绍:

本文不详细介绍输入法的实现过程和实现原理,只讲解在实现一种语言的过程中,如

何分析问题,简要介绍一些关键性的地方,主要是一个学习方法方面的总结。并且文档也要结合代码来分析才比较有价值。

文档的对象是具有开发输入法经验的人,但不熟悉MTK平台,如何快速上手并实现新语言的添加。

简单来说,输入法需要修改的地方是:功能控制、平台接口部分、输入法引擎接口部分。

 

2          相关地方说明

 

21开关控制:

MAK文件里需要关注的关于ZI输入法的地方是:

Custom_Release.mak(519):

ifeq ($(strip $(INPUT_METHOD)),MMI_ZI)

 

Option.mak(7636): 

ifeq ($(strip $(INPUT_METHOD)),MMI_ZI_V6)

      COM_DEFS    += __MMI_ZI_V7__

 

COMPLIST    += zi

 

REL_CR_MMI_GPRS.mak(702):

ifeq ($(findstring MMI_ZI,$(RELEASE_INPUT_METHODS_SRC)),MMI_ZI)

 

XPMT23C_08B_GPRS.mak(164):

INPUT_METHOD               = MMI_ZI_V7  

 

 

相关宏开关:

INPUT_METHOD

__MMI_ZI__

MMI_ZI_V7

__MMI_LANG_INDONESIAN__

__MMI_ZI_INDONESIAN__

__MMI_MULTITAP_INDONESIAN__

__MMI_ZI_MULTITAP__

CFG_MMI_ZI_INDONESIAN

CFG_MMI_LANG_INDONESIAN

 

 

 

 

22 需要关注的一些函数及说明:

 

mmi_imc_init_all

 

wgui_inputs_ml_setup_ext()

 

平台MULTITAP输入法数组列表:

g_mtk_multitap_mode_info[]

 

3          代码处理过程:

3.1  要修改的地方

3.1.1  语言的设置,在头文件里控制

3.1.2  MAK文件控制输入法引擎的地方;

3.1.3  字库头文件、库文件的更换;

3.1.7  默认语言的设置。

3.1.7  恢复出厂设置。

 

 

3.2  平台处理逻辑

 

 

进入MMS使用输入法的函数调用栈:

(之后会调用wgui_inputs_ml_setup_ext()函数, 而该函数在普通短信编写的时候是不被调用的。)

wgui_inputs_ml_setup_ext(int 0, int 20, int 128, int 103, unsigned char * 0x032bb744, int 2049, unsigned short 153, unsigned short * 0x012c26b2, unsigned char * 0x00000000, unsigned int 128, unsigned char * 0x00000000, int * 0x00000000, unsigned char 1, unsigned int 134217728, short 38, short 19, short 0, short 0, ...) line 6138

ShowCategory280Screen(unsigned short 15261, unsigned short 15183, unsigned short 24012, unsigned short 23885, unsigned short 15199, unsigned short 23882, int 1, unsigned int 128, unsigned char * 0x00000000) line 1899 + 133 bytes

mmi_uc_entry_write_msg() line 2080 + 66 bytes

mmi_uc_get_mms_setting_rsp(void * 0x018751fc) line 1622

mmi_frm_execute_current_protocol_handler(unsigned short 6578, void * 0x018751fc, int 111, void * 0x05f8ff54) line 482 + 17 bytes

ProtocolEventHandler(unsigned short 6578, void * 0x018751fc, int 111, void * 0x05f8ff54) line 2918 + 22 bytes

MMI_task(task_entry_struct * 0x01887a54) line 2364 + 22 bytes

MODIS! 0070f17a() line 347 + 15 bytes

_threadstartex(void * 0x0471c4e0) line 212 + 13 bytes

KERNEL32! 7c80b699()

 

 

 

写普通短信进入输入法的函数调用栈:

 

mmi_imc_connect(void * 0x0330f3d0 _g_mmi_editor_hanler, unsigned int (void *, mmi_imc_message_struct *)* 0x0095a98d mmi_input_box_msg_call_back_ems(void *, mmi_imc_message_struct *)) line 1196

ShowCategory28Screen(unsigned short 13183, unsigned short 13183, unsigned short 24012, unsigned short 13182, unsigned short 23907, unsigned short 13182, EMSData * 0x02d233b8 bufForEdit, unsigned char * 0x00000000) line 5182 + 15 bytes

mmi_msg_entry_write_msg() line 3609 + 43 bytes

mmi_msg_pre_entry_write_msg(int 1) line 3552

mmi_msg_um_entry_write() line 8232 + 7 bytes

execute_softkey_function(int 1, int 0) line 1197 + 18 bytes

left_softkey_up() line 1513 + 9 bytes

ExecuteCurrKeyHandler(short 10, short 1) line 2009 + 5 bytes

KeyEventHandler(KEYBRD_MESSAGE * 0x05f8fe40) line 3416 + 21 bytes

ProcessKeyEvent(unsigned int 1, unsigned short 20) line 1714 + 9 bytes

mmi_frm_convert_process_key_event(unsigned int 1, unsigned short 20) line 2158 + 14 bytes

mmi_frm_key_handle(void * 0x018647cc) line 2384 + 15 bytes

mmi_frm_execute_current_protocol_handler(unsigned short 2498, void * 0x018647cc, int 16, void * 0x05f8ff54) line 482 + 17 bytes

ProtocolEventHandler(unsigned short 2498, void * 0x018647cc, int 16, void * 0x05f8ff54) line 2918 + 22 bytes

MMI_task(task_entry_struct * 0x01887a54) line 2364 + 22 bytes

MODIS! 0070f17a() line 347 + 15 bytes

_threadstartex(void * 0x0471c4e0) line 212 + 13 bytes

KERNEL32! 7c80b699()

 

 

 

按“#”进行输入法切换的调用栈:

mmi_imc_change_input_mode(int 20, unsigned int 0) line 1617

mmi_imc_key_change_input_mode() line 13345 + 13 bytes

mmi_imc_key_smart_alphabetic_key_down_handler(int 21, unsigned short 0) line 7122

mmi_imc_key_group_key_down() line 13066 + 20 bytes

ExecuteCurrKeyHandler(short 21, short 0) line 2009 + 5 bytes

KeyEventHandler(KEYBRD_MESSAGE * 0x05f8fe48) line 3416 + 21 bytes

ProcessKeyEvent(unsigned int 0, unsigned short 11) line 1693 + 9 bytes

mmi_frm_convert_process_key_event(unsigned int 0, unsigned short 11) line 2158 + 14 bytes

mmi_frm_key_handle(void * 0x0186578c) line 2384 + 15 bytes

mmi_frm_execute_current_protocol_handler(unsigned short 2498, void * 0x0186578c, int 16, void * 0x05f8ff54) line 482 + 17 bytes

ProtocolEventHandler(unsigned short 2498, void * 0x0186578c, int 16, void * 0x05f8ff54) line 2918 + 22 bytes

MMI_task(task_entry_struct * 0x01887a54) line 2364 + 22 bytes

MODIS! 0070f17a() line 347 + 15 bytes

_threadstartex(void * 0x0471c4e0) line 212 + 13 bytes

KERNEL32! 7c80b699()

    其中,mmi_imc_key_smart_alphabetic_key_down_handler()在函数mmi_imc_key_attach_smart_alphabecit_key_handler()里注册为g_imc_keykey_down处理函数:

    g_imc_key.key_info.key_down_handler = mmi_imc_key_smart_alphabetic_key_down_handler;

程序在执行mmi_imc_key_group_key_down()的时候,通过函数指针调用它,在这个函数的一个执行分支:

            else if (key_code == MMI_IMC_KEY_CHANGE_MODE)

            {

                mmi_imc_key_change_input_mode();

            }

处进入输入法模式切换。

   mmi_imc_key_change_input_mode()会获取输入法模式列表,是在函数mmi_imm_set_required_mode_list()里来初始化的,而不是在mmi_imm_create_input_method_list()来初始化的。

  只有在智能输入法才调用mmi_ime_word_change_mode()。

  普通的MULTITAP调用mmi_ime_multitap_change_mode()。

 

 

 

开机初始化输入法模式表的调用栈:

mmi_imm_set_required_mode_list(unsigned int 0, int * 0x00000000, int 0) line 3908

mmi_imc_init_all() line 1114 + 11 bytes

InitIME() line 3773

InitializeAll() line 3955

mmi_frm_power_on_init_procedure() line 1935

mmi_bootup_exit_disk_check() line 1581

mmi_bootup_entry_disk_check() line 1484

MMI_task(task_entry_struct * 0x01887a54) line 2197

MODIS! 0070f17a() line 347 + 15 bytes

_threadstartex(void * 0x0471c4e0) line 212 + 13 bytes

KERNEL32! 7c80b699()

    其中在建立列表的时候,会依据gIMEModeArray[]来做判断,通过分析代码发现,在函数InitializeResourceVariables中,

        gIMEModeArray = (sIMEModeDetails*) (langpack2ndJumpTbl[3]); 

langpack2ndJumpTbl[]跳转表又关联到IMERes.c文件中的数组   mtk_gIMEModeArray[] ,它是通过开关来控制各个输入法模式的。

 

只有

 

 

 

 

3.3  引擎处理逻辑

 

 

ZiEngine.c

MMI_BOOL mmi_ime_word_init( void )

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

MTK输入法流程整理

mmi_imc_key_change_mode中根据当前输入法的属性: lang_attr = mode_details_ptr->Lang_Special_Attrib; mode_attr...
  • RickyX1048
  • RickyX1048
  • 2014年07月14日 09:29
  • 810

mtk模块编译

当修改一些代码时,使用什么编译命令可以最有效率 1: ./mk n(r) kernel; ./mk bootimage;当修改kernel相关代码时,要使用此命令,具体如下:      alps/...
  • hanmengaidudu
  • hanmengaidudu
  • 2017年03月17日 16:17
  • 243

mtk android mm编译单个app模块

mtk android 界面修改时候,一般都是修改app ,修改后,编译这个app,然后install到真机。 具体步骤: 先切换到工程目录下,执行 souirce ./build/envsetup....
  • ngyzqf
  • ngyzqf
  • 2013年12月07日 13:25
  • 844

mtk显示系统所有模块驱动

1.在目录:kernel-3.18drivers\misc\mediatek\video\mt6735\Ddp_info.c DDP_MODULE_DRIVER *ddp_modules_drive...
  • qianjin2531
  • qianjin2531
  • 2017年10月16日 14:44
  • 170

MTK 3G/4G行业设备解决方案MTK8735 核心板4G 全网通4核64位 物联网方案LTE模块

MTK联发科MTK8735 核心板4G 全网通4核64位 物联网方案LTE模块 MTK 3G/4G行业设备解决方案 MTK联发科平台全部芯片,专业定制开发手机,平板,行业设备,智能手表穿戴,智能家...
  • nini520huihui
  • nini520huihui
  • 2017年02月05日 16:00
  • 886

MTK编译技巧

第七课、mtk编译技巧 一、Android源代码编译过程 二、编译命令汇总    一)./makeMtk   -o=TARGET_BUILD_VARIANT=user   sagetel82_wet_...
  • yaoming168
  • yaoming168
  • 2014年08月23日 13:11
  • 5197

MTK模块入门

***************说明:该文件描述资源和模块添加方面*author:se7en*time:2009-04-20    modify at 2009-04-27**************O...
  • fengye245
  • fengye245
  • 2010年03月24日 17:02
  • 4775

MTK android内核独立模块编译与加载

1.在xxx/alps/kernel/drivers目录下新建文件夹名字是驱动的名字 2.把需要的编译的驱动程序拷贝到     xxx/alps/kernel/drivers 3.在新建的文件夹下...
  • a7665302511
  • a7665302511
  • 2015年05月05日 21:31
  • 372

mtk一些常见修改

真机工程为什么在模拟器上面编译不过?1、target可以通过。2、按照通常的步骤创建出模拟器3、编译不通过。为什么会这样?1、通常情况下,在没有添加SP的时候是可以正常编译通过的。2、对于某些SP,会...
  • xinke87
  • xinke87
  • 2011年03月18日 13:42
  • 1374

4G全网通安卓智能核心板模块 MTK6735方案

iM35S是基于MTK四核64位处理器开发的一款低功耗、高性能、小尺寸的核心模块,支持LTE-FDD/LTE-TDD/WCDMA/TD-SCDMA/EVDO/CDMA/GSM 频段;支持WiFi802...
  • ismart1
  • ismart1
  • 2017年03月14日 15:03
  • 1234
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MTK输入法模块相关
举报原因:
原因补充:

(最多只允许输入30个字)