MTK平台个人笔记
- 格式:doc
- 大小:593.50 KB
- 文档页数:55
1.如何判断手机中是否插入sim卡方法1:判断标志gInsertSimAppFlag是否为1,为1时,有SIM卡,为0时,无SIM卡方法2:if(g_pwr_context.PowerOnSIMStatus & MMI_SIM_STATUS_NOT_INSERT) return FALSE;elsereturn TRUE;方法3:IsSATPresent();为0时无SIM卡,为1时有SIM卡方法4:判断DRV_Reg(SIM_CTRL)的值,为1时有SIM卡,为0时,无SIM卡。
方法5:MTPNP_BOOL MTPNP_PFAL_Is_Card1Absent(void);MTPNP_BOOL MTPNP_PFAL_Is_Card2Absent(void);2.菜单隐藏的实现如在娱乐游戏下菜单隐藏,#if defined(DMG_SKIPEGG_DEF)if (0 == gInsertSimAppFlag){mmi_frm_unhide_menu_item(MENU_ID_FNG_SKIPEGG);}else{mmi_frm_hide_menu_item(MENU_ID_FNG_SKIPEGG);}#endifnItems = GetNumOfChild_Ext(MAIN_MENU_FUNANDGAMES_MENUID);//修改对应的三个函数为_Ext形式。
GetSequenceStringIds_Ext(MAIN_MENU_FUNANDGAMES_MENUID, ItemList);GetSequenceImageIds_Ext(MAIN_MENU_FUNANDGAMES_MENUID, ItemIcons);3.关于History手机中的屏幕流程都是顺序的,用户都是通过按键在屏幕之间切换。
这里有三种类型的屏幕切换,即1 向前移动向下一个屏幕的切换作为用户按键输入的结果。
2 向后移动向前一个屏幕的切换作为用户按键输入的结果。
MTK平台开发总结(全)声明:前阶段进行了近两个月的MTK平台上层开发,由于缺乏技术支持,对于整个平台的认识都是通过简略的文档和浅薄的经验摸索出来的。
其间整理了一些文档。
由于联发科提供的PDF全部是英文,有些名词难以翻译准确,只能凭单方理解和嵌入式开发的词汇习惯进行意译,还请谅解。
系列文章均出自原创,肤浅可笑之处,望海涵。
(一)窗体的重画通过观察可以发现,每个窗体模板都调用这样一个函数:dm_redraw_category_scree n()。
这个函数便是显示窗体的函数。
它内部的实现是这样的:获得该窗体所包含的组件及它们的属性,再根据组件的类型和属性,调用不同的接口,逐一绘制各组件。
详细流程如下图所示:由上面的流程可见,无论是窗体所包含的组件,还是组件的属性,都是根据模板ID获取的。
那么现在摆在面前的有两个问题:一、模板ID是如何传递到这个函数中的;二、模板ID和窗体组件、组件的属性,是如何关联到一起的。
我们逐一解决这两个问题。
一、模板ID是如何传递到这个函数中的模板ID,是Sho wCateg ory..Screen()过程中,所显示的界面的编号,千万不要与EntryNe wScree n(scrID,…) 函数中传入的窗口ID相混淆。
它们以―MMI_‖为前缀,被定义在枚举型结构MMI_CATEGORY_ID_L IST中,又通过结构体d m_data_struct和它的全局结构体变量g_dm_data,在应用程序中被广泛使用。
先看看结构体dm_data_struct的定义:typedef struct{S32 s32ScrId;S32 s32Cat Id;S32 s32fl ags;}其中,s32ScrId是当前窗口ID,也就是我们使用EntryNe wScree n()时传入的那个参数;而s32Cat Id才是模板ID;最后的flag,是模板需要显示软键盘、清屏等动作时,所置的标志变量,它在上面提到的那个dm_redraw_category_scree n()函数中被判断。
分类:LINUX一、【一】调试串口的设置驱动的调式过程经常需要通过trace工具看log的,trace前需要修改手机串口,有以下三种方法设置串口1 通过手机进入工程模式设置2 修改代码,修改Nvram_user_config.c中的NVRAM_EF_PORT_SETTING_DEFAULT[]3.通过META工具修改在连上meta:左上角选中NVRAM Editor,在跳出的对话框里选择other LID,再选择NVRAM_EF_PORT_SETTING_LID,接下来read from nvram,对话框右边就会出现串口的设置情况,对调tst_port_ps(输入0)和ps_port(输入99)的值,二【【二】关于gpio口Gpio的初始化在文件gpio_drv.c里,可以用MTK提供的工具配置也可以用代码在程序里直接操作,二者的选择要看有没有定义宏__CUST_NEW__工具初始化时要注意配置codegen.dws,该文件里配置的只是对gpio口的初始化,并不是所有的gpio口都要设置成工作时的模式,尤其是当作时钟和蓝牙部分的gpiio口,初始化时就设置成工作模式的话会造成电机电流过大的。
代码初始化时DRV_WriteReg()、DRV_Reg对gpio口寄存器操作,分别定义gpio口的模式,和方向(0:输入;1:输出),对单个gpio口操作用到以下函数(以gpio25为例):GPIO_ModeSetup(25, 0);设置GPIO25为模式0GPIO_InitIO(1,25);初始化GPIO25方向为输出GPIO_WriteIO(0, 25 );设值GPIO25输入低电平0三、【三】键盘设置1)键盘定义Keypad_def.c如果定义CUST_NEW,工具中的键盘定义对应在改文件里的KEYPAD_MAPPING(keypad_drv.h);2)硬件键盘定义与软件mmi键盘的对应nKeyPadMap[](Keybrd.c)3)工程模式键盘测试函数EntryFMKeypadTest()修改键盘测试时界面显示的键的名称1. 做好上面的第一第二两步2. FactoryModeSrc.c开始部分定义添加的键所要显示的名称,值,分别应用到keypad_layout[](确定要显示的位置),keypad_value[]3.在EntryFMKeypadTest()函数中的数组IdleScreenDigits[]里添加要显示的键4)如果要设置一个键不管在什么界面下都起作用的话(如手电筒开关或则其他需求)就需要在键盘的事件响应函数static voidKeyEventHandler(KEYBRD_MESSAGE *eventKey)里设置,根据键值条用相应的响应函数,不过该函数及时在锁屏状态下也会执行的,需要根据需要添加条件语句四、关于LCDlcm背光驱动分为两种控制方式:1. pwm这个是通过调占空比来调节亮度的持续信号;2. PFM这个是通过脉冲的个数来控制LCM背光亮度。
MTK初学必须了解的知识点为何 0836 的6225 一开始没有信号?m12196.c 里面 power on 、power off 的动作只针对6205有写过实际代码,但是对6225 及其他平台没有相应代码,修改即可CTA 软件应该开关哪些功能?对于目前很多公司而言,不希望花费很多金钱和时间去测试GPRS 、蓝牙等相关协议;版本号对于测试来说,一定要是相同的,不能变化1、去掉 GPRS 相关的功能2、去掉蓝牙相关的功能3、增加 CTA 版本号,并保证其在测试前后总是一直的。
4、增加免费游戏5、SP功能全部去掉。
CTA 版本号应该怎样做?1、CTA 版本号的目的是为了保证手机在CTA送测期间,被查询到的版本号一致,而实际的版本号通过另外的方式可以查询到,所以生成了一个CTA版本号。
2、由于我们有一个硬件版本号查询的接口,目前就借用了这样一个接口,因此我们实际上只需要修改硬件版本号及其查询字串,就可以用作 CTA 版本号的查询了。
3、硬件版本号查询字串修改,需要找到SSC_HW_VERSION 进行修改即可,而版本号则在对应的 VERNO.BLD 里面修改即可如何添加一个自定义的世界时间地区,如越南胡志明市?找到 resource_world_clock_city.c 中与项目对应的数组const TimeZoneStruct TimeZoneData[]在其中添加世界时间的一项(位置无要求,程序会根据时区重新排序的):{时区,地名字串,地名字串缩写,地名字串,地名字串缩写,1} 其中时区可以上网查,比如北京为东8区就为 +8 西区为负数地名字串,地名字串缩写是自己添加字串资源地图X坐标,地图Y坐标为找到我们实际用的地图背景,对应的地名 x,y坐标即可,用windows自带的画图工具就可查出来最后一个参数照填就行如何开启trace?1、手机端设置a、用工程模式字串,开启工程模式b、进入【设备】->【Set UART】->【uart setting】c、设定【TST-PS Config】等于【UART 1】,【PS Config】等于【无】,[TST-L1 Config】等于【UART 1】d、确定后,则手机端设置完成2、PC端设置a、打开CATCHERb、【Config】->【Set Database Path】,选中与手机软件对应的db文件c、【Control】->【Mode】->【Logging】,允许trace记录d、【Config】->【Configuration RS232】, 选择合适的COM 端口e、【Control】->【Connect】,则可以开始tracef、【Control】->【Set Filter】,设置需要显示的过滤器为什么第一次开机的日期格式和默认回复出厂设置的日期格式不一致?第一次开机使用 DATE_FORMAT 对应NVRAM里的值:恢复出厂设置是使用RESTORE_DEFAULT_DATE_FORMAT对应NVRAM里的值;文件:Nvram_cust_pack.c(注意要修改相关的项目配置文件)对应关系如下:0-----DD-MMM-YYYY1-----DD/MM/YYYY2-----MM/DD/YYYY3-----YYYY/MM/DD4-----YYYY-MM-DD5-----MMM DD,YYYY默认开启UART为trace使用1、目前在主干上面已在GPRS.MAK里面增加相应的宏,按需要把下面的宏设为TRUE即可:# uart 默认为debug 使用UART_FOR_DEBUG_DEFAULT = FALSE#默认关闭TRACE,即FALSESIMTECH_DEBUG = FALSE2、如果不是当前主干,则可以在Nvram_common_config.c 里面,找到NVRAM_EF_PORT_SETTING_DEFAULT将默认端口调换一下顺序即可,即:把 99 修改为 0,0修改为99,注意只能修改端口相关的 0 和 99 如何修改工程模式启动字串?查找 SSC_ENGINEERING_MODE,并修改其定义即可真机工程为什么在模拟器上面编译不过?1、target可以通过。
对于5.0的系统是要求的ubuntu 12.041 新代码第一步执行:source build/envsetup.sh (此命令完成一些命令的初始化,配置了android编译的环境)2 执行lunch 命令(选择平台编译选项,用来让用户选择编译项,类似于旧框架的./mk listp)3 输入所需要编译的工程(这里需要编译82平台输入20),会显示相关的一些信息(1)A: ProjectConfig.mk路径:alps\device\farsighted\fars6582_wt_l(2)B: Drvtool路径:alps\kernel-3.10\tools\dct(3)C: Codegen.dws路径alps\kernel-3.10\arch\arm\mach-mt6582\fars6582_wt_l\dct\dct(4)D: flash时序表路径:alps\device\mediatek\build\build\tools\emigen\MT6582(5)E: flash配置文路径:alps\bootable\bootloader\preloader\custom\fars6582_wt_l\inc(6)F: 背光,键盘灯配置文路径:kernel :alps\kernel-3.10\arch\arm\mach-mt6582\fars6582_wt_l\leds\ mt65xxlk:alps\bootable\bootloader\lk\target\fars6582_wt_l(7)G: TP驱动路径:alps\kernel-3.10\drivers\input\touchscreen\mediatekTP 用户头文件配置路径:alps\kernel-3.10\arch\arm\mach-mt6582\fars6582_wt_l\touchpanel\ GT9XX新增TP还需要在以下文件增加编译路径:***新增TP还需要在以下文件增加编译路径:alps\kernel-3.10\drivers\input\touchscreen\mediatek\ Makefilealps\kernel-3.10\drivers\input\touchscreen\ KconfigTP mk文件配置(8)H: LCM驱动存放路径lk:alps\bootable\bootloader\lk\dev\lcm\ mt65xx_lcm_list.c配置文件:Lk部分mk文件配置:alps\bootable\bootloader\lk\project\ fars6582_wt_l.mkBOOT_LOGO有两处alps\bootable\bootloader\lk\project\ fars6582_wt_l.mkalps\bootable\bootloader\lk\dev\logo\ rules.mkKernel部分:lcm驱动:alps\kernel-3.10\arch\arm\mach-mt6582\fars6582_wt_l\lcm\此目录下只放.c文件,不需要文件夹alps\kernel-3.10\drivers\misc\mediatek\lcma:链接obj alps\kernel-3.10\arch\arm\mach-mt6582\fars6582_wt_l\lcm\ MakefileB:编译路径alps\kernel-3.10\arch\arm\mach-mt6582\fars6582_wt_l\lcm\ mt65xx_lcm_list.cC:kernel mk文件配置路径:alps\kernel-3.10\arch\arm\configs\ fars6582_wt_l_defconfigKerner config配置建议使用menuconfig命令make dir outmake O=out fars6582_wt_l_debug_defconfig(这是对应的项目配置文件)make O=out menuconfig(进不去的同学可看看后面的补充)(9)I: CAMERA 配置:1 alps\device\farsighted\fars6582_wt_l\ProjectConfig.mk2 hal目录3 驱动目录4 涉及修改的文件MT6582_L0\alps\kernel-3.10\drivers\misc\mediatek\imgsensor\inc\kd_imgsensor.hMT6582_L0\alps\kernel-3.10\drivers\misc\mediatek\imgsensor\src\mt6582\kd_sensorlist.hMT6582_L0\alps\vendor\mediatek\proprietary\custom\fars6582_wt_l\hal\imgsensor_src\sensorlist .cppalps\kernel-3.10\arch\arm\mach-mt6582\fars6582_wt_l\camera\camera\kd_camera_hw.calps\vendor\mediatek\proprietary\custom\common\kernel\imgsensor\inc\kd_imgsensor.h(10)J: Gsensor,alps配置:1 1 alps\device\farsighted\fars6582_wt_l\ProjectConfig.mk2 驱动目录MT6582_L0\alps\kernel-3.10\drivers\misc\mediatek\alspsMT6582_L0\alps\kernel-3.10\drivers\misc\mediatek\ accelerometer3 custom文件alps\kernel-3.10\arch\arm\mach-mt6582\fars6582_wt_l\accelerometeralps\kernel-3.10\arch\arm\mach-mt6582\fars6582_wt_l\ alsps4 makefilealps\kernel-3.10\drivers\misc\mediatek\alsps\Makefilealps\kernel-3.10\drivers\misc\mediatek\ accelerometer \Makefilealps\kernel-3.10\drivers\misc\mediatek\Kconfig.drivers此makefife加了后menuconfig后才有选项(11)K: Sound 配置1 1 alps\device\farsighted\fars6582_wt_l\ProjectConfig.mk2alps\vendor\mediatek\proprietary\custom\fars6582_wt_l\hal\audioflinger\audio\audio_custom_exp .h3编pl模块需先把项目名赋值我拿到的代码是需要做如下修改才能正常运行menuconfig,如果你们的正常可以忽略以下:Menuconfig需修改的地方:1 MT6582_L0\alps\kernel-3.10\Makefile修改如下:2 安装sudo apt-get install libncurses5 libncurses5-dev3 make O(大写字母O)=out menuconfig****需注意的是,如果编完后关闭了窗口再重新打开编译都要运行一次source build/envsetup.sh lunch一些常用编译命令:make –j24 2>&1 | tee build.log (相当于new命令,编译过程会生成build.log文件在alps目录下)-j后面通常是编译主机CPU支持核数2>&1, 表示将标准错误重定向到标准输出tee :同时将LOG输出到控制台和文件preloadermake –j24 pl 2>&1 | tee pl.loglkmake –j24 lk 2>&1 | tee lk.logkernelmake –j24 kernel 2>&1 | tee kernel.log clean commondm ,mm ,mmm,mma打包命令。
MTK平台个⼈笔记1.MTK simulator的⼯程⽂件是 PixtelMMI.dsw。
2.打开PixtelMMI.dsw,检查⽂件default_Fmrdo.c、default_mmi_profiles.c、default_mmi_settings.c、default_version.c⽂件是否存在⼯程⽂件中,上述⽂件存放⽬录:项⽬所在⽬录\custom\app\MILAN_BB。
3.在调试运⾏过程中会提⽰某些DLL⽂件⽆法连接,这是VC没有安装。
DLL⽂件所在⽬录:VC安装盘\VC98\DEBUG。
把缺失的⽂件复制到window安装⽬录下的System32⽬录⾥。
4.运⾏MTK Simulator,选取File→Newwork Simulator,会运⾏MMINWSimulator;在MMINWSimulator菜单中,选取Menu→Messages,会弹出⼀个Send Event窗⼝,窗⼝⾥有⼀个Events列表,列表⾥有不同⽤途种类的Events;如果需要启动⼿机,选取BootUp Events,点击OK按钮,MTK Simulator模拟开机过程。
关于调试语句的说明kal_print语句:该语句只能打印字符串信息。
Trace_out语句:该语句可以输出格式化字符串。
ASSERT语句:断⾔语句。
Trace语句:可以输出格式化字符串。
关于MTK Target的编译连接批处理命令: Milan.bat 。
●概述在windows下,打开dos编辑窗⼝(开始->运⾏->cmd),找到⼯程代码所在根⽬录,如:E:\MTK6217 输⼊编译批处理命令:格式:make[custom="projectName"]"project" "action"["modules"]Example: make custom=mtk6217 gprs newModules:⽤于对单个模块进⾏编译的选项。
MTK平台学习笔记(三)-增加菜单项的流程翁加平说明:红色部分为新增部分;蓝色部分为修改部分。
以增加菜单“防火墙”为例,说明增加一个菜单的具体流程。
防火墙菜单:MainMenuSettingsFirewallSeparateNoneModeRedName ModeModeBlackNameRedNameAddEditCallDelDelAllBlackNameAddEditCallDelDelAll1 增加字符串在文件“.\ plutommi\Customer\CustResource\PLUTO_MMI\ref_list.txt”中,按照规则增加字符串:STR_MENU_FIREWALLSTR_MENU_FIREWALL_SEPARATESTR_MENU_FIREWALL_SEPARATE_NONEMODESTR_MENU_FIREWALL_SEPARATE_REDMODESTR_MENU_FIREWALL_SEPARATE_BLACKMODESTR_MENU_FIREWALL_REDNAMESTR_MENU_FIREWALL_BLACKNAMESTR_MENU_FIREWALL_SEPARATE_NONEMODE_SHOWSTR_MENU_FIREWALL_SEPARATE_REDMODE_SHOWSTR_MENU_FIREWALL_SEPARATE_BLACKMODE_SHOWSTR_MENU_FIREWALL_REDNAME_OPERATESTR_MENU_FIREWALL_BLACKNAME_OPERATESTR_MENU_FIREWALL_ADD_REDNAMESTR_MENU_FIREWALL_ADD_BLACKNAMESTR_MENU_FIREWALL_EDIT_REDNAMESTR_MENU_FIREWALL_EDIT_BLACKNAMESTR_MENU_FIREWALL_CALL_REDNAMESTR_MENU_FIREWALL_CALL_BLACKNAMESTR_MENU_FIREWALL_DEL_REDNAMESTR_MENU_FIREWALL_DEL_BLACKNAMESTR_MENU_FIREWALL_ALLDEL_REDNAMESTR_MENU_FIREWALL_ALLDEL_BLACKNAMESTR_MENU_FIREWALL_DEL_NOTIFYSTR_MENU_FIREWALL_ALLDEL_NOTIFYSTR_MENU_FIREWALL_OPERATESTR_MENU_FIREWALL_ADDSTR_MENU_FIREWALL_EDITSTR_MENU_FIREWALL_CALLSTR_MENU_FIREWALL_DELSTR_MENU_FIREWALL_ALLDEL2 增加与菜单条、字符串、屏幕和图片相关的枚举值在文件“”中增加enum GLOBALMENUITEMSID{IDLE_SCREEN_MENU_ID=1,。
mtk平台,相关问题总结下面是我在mtk平台,遇到的一些问题,我将其保存,大家可以看看有的可能很简单,大家不要见笑啊~~~~~~~编译前请将..\custom\common\nvram_lid_statistics.h文件和tst文件夹的属性、plutommi\Customer\Customize下的GCML.txt改为可读写。
Release 版本的时候,MMI/MiscFramework/MiscFrameworkSrc/UCS2.c不能删除,因为,resgen 要用倒ucs2.c1:深路经覆盖浅路径文件2:只有ADD_APPLICATION_MENUITEM,ADD_APPLICATION_MENUITEM2两种添加菜单方式3:添加菜单的时候一定要,指定子菜单的个数4:CmsWapMmsAdp.h文件中,如果是26项目,不要打开28开关#define SUPPORT_MTK_6226#if 0#ifdef SUPPORT_MTK_6228#define CMS_SURPPORT_PNG_BMP#endif#endif5:Res_SAT.c中,如果用移软的库,要将#ifndef CMS_NEW_APPADD_APPLICATION_MENUITEM((SERVICES_WAP_MENU_ID,MAIN_MENU_SERVI CES_MENUID,0,SHOW,NONMOVEABLE|SHORTCUTABLE,DISP_LIST,SERVICES_WAP_STRING_ID,SERVICES_WAP_IMAGE_ID)); #endif注释掉6:DataAccountDef.h中添加#include "custom_mmi_default_value.h"用来防止#ifdef MAX_GPRS_USER_NAME_LEN#define MAX_GPRS_USERNAME MAX_GPRS_USER_NAME_LEN-1 #else#define MAX_GPRS_USERNAME 15#endif#ifdef MAX_GPRS_PASSWORD_LEN#define MAX_GPRS_USERPASSWD MAX_GPRS_PASSWORD_LEN-1 #else#define MAX_GPRS_USERPASSWD 15#endif的偏差7:头文件打不开,很可能在make中的相应文件里,没有加这个路径如:plutommi.inc文件中没有包含相应路径8: user agent profile 在文件cmswapmmsadp.c9:mtk 28, 在mms_send_message函数中,要将MMS_SetMaxSize(gconfig.sendsize, gconfig.retrievesize);放在MMS_Init();之后,否则,发彩信会重启10:mms_init_global_param此函数中设置了mms的相关参数,还有mms_init_pre_setting_file_chinamobile改为gconfigtemp.gprs_mode =4[2 wap]wap里的wap_init_pre_setting_file_chinamobile函数帐号改为gWapTemp.gprs_mode =14//WAP_SERVICE_CHINAMOBILE+GSM_NET_ACCOUNT;11:cmswapmmsadp.h中有wap,mms相关设置12:将开关#if defined(CMS_NEW_APP) || defined(MMS_SUPPORT)#define __MMI_STATUS_ICON_MMS__#endif打开,否则来彩信的时候没有未读图标13:收发彩信的时候,底下的白色部分修改mmi_mms_show_send_receive_status函数中的UI_fill_rectangle(0,MMS_PROGRESS_INDICATOR_HEIGHT,UI_device_width-1, 10,UI_color(255,255,255));14:我们发了新版本给贵方,如果需要打trace请在手机上开启trace,方法:1:Idle->输入*#34364#,选择第2项设备,--〉7项,set uart->1项TST Config-〉uart port选择uart1完成,重启15:gif重复播放,gif图像消失的解决方式(1)在播放前添加gdi_image_gif_reset();16:Idle 来短信进入了短信inbox,没有进合一接口#if defined(CMS_NEW_APP)&&defined(SUPPORT_SMSMMS_COMBINE)extern void mmi_mms_entry_inbox(void);#endifvoid mmi_msg_exit_inbox_list_dummy(void){memset(&currHistory, 0, sizeof(currHistory));#if defined(CMS_NEW_APP)&&defined(SUPPORT_SMSMMS_COMBINE) currHistory.scrnID = SCR_ID_MMS_INBOX;#elsecurrHistory.scrnID = SCR_ID_MSG_INBOX_LIST;#endifSetMessagesCurrScrnID(0);g_msg_cntx.MessagesScrnIdToDelHistoryNodes = SCR_ID_MSG_INBOX_LIST;g_msg_cntx.MessagesScrnIdDelUptoHistoryNodes = SCR_ID_MSG_INBOX_LIST;#if defined(CMS_NEW_APP)&&defined(SUPPORT_SMSMMS_COMBINE)currHistory.entryFuncPtr = mmi_mms_entry_inbox;#elsecurrHistory.entryFuncPtr = mmi_msg_entry_inbox_list;#endif17:filter.txt文件用于模拟器的编译,此文件中定义的开关,都将被模拟器过滤掉,所以如果第三方release的软件不能支持模拟器就要将其在模拟器上过滤掉18:MTK23:我们模拟器在开机无法正常启动时,可以将\MTK23_07AW0736MP\modis\WIN32FS\DRIVE_C\NVRAM\NVD_DATA\下的数据文件全部清除,在从新启动模拟器,一般都可以成功启动。
1.如何增加语言:在MMI_featurePLUTO.h文件里打开相对应的编译开关;增加字库文件fonres.c 以及相应的.h文件2.新手求助怎么设置系统默认的屏保界面:在nvram_cust_pack.c里面修改RESTORE_DEFALT_CURRENT_SCREENSVR_ID的数值就可以了3.显示文本串的函数原型:Void(*gui_print_text)(UI_string_type_text)4.刷新屏幕:Gui_BLT_double_buffer(0,0,UI_device_Width-1,UI_device_height-1);5.修改文本颜色:gui_set_text_color()eg: gui_set_text_color(UI_COLOR_RED);6.设置文本输出的起始位置:gui_move_txt_cuiror();7.进入一个新的程序,需要首先手动退出上一个屏幕。
调用EntryNewScreen函数:EntryNewScreen(MAIN_MENU_SCREEND,NULL,NULL,NULL);8.如何关掉状态条:最简单的方式是在进入新的屏幕时候调用Entry_full_screen()9.屏幕历史:EntryNewScreen的函数原型:EntryNewScreen(U16 newscmID, FunPtr newExitHandler, FuncPtr newEntryHandler,void *peerBuf);新屏幕序号,屏幕的推出函数,系统在强制推出我们的屏幕时候会自动调用这个函数;屏幕的入口函数,只有传入这个参数,系统才会将屏幕自动加入历史;暂时不用Eg:Void mmi_myapp_entry(vooid){EntryNewScreen(MAIN_MENU_SCREENID,NULL,mmi_myapp_entry,NULL);Entry_full_screen();Clear_screen();Gui_move_text_cuisor(50.100);Gui_set_text__color(UI_COLOR_RED);Gui_pring_text(“helloworld”);Gui_BLT_double_buffe r(0,0,UI_device_Width-1,UI_device_height-1);}10.返回最近的屏幕:推出手动执行:GoBackHistory通知系统将历史中国最后一次显示的屏幕弹出来,如下:Void mmi_myapp_entry(vooid){EntryNewScreen(MAIN_MENU_SCREENID,NULL,mmi_myapp_entry,NULL);Entry_full_screen();Clear_screen();Gui_move_text_cuisor(50.100);Gui_set_text__color(UI_COLOR_RED);Gui_pring_text(“helloworld”);Gui_BLT_double_buffe r(0,0,UI_device_Width-1,UI_device_height-1);SetKeyHandler(GoBackHisory,KEY_RSK,KEY_EVENT_UP);//通常设置右软件为返回最近显示的屏幕}11.plutommi\mmi下面:12.字串资源:(1)在*def.h文件中添加字串ID(2)在plutommi\customer\custresource\pluto_mmi\ref_list.txt中添加字串,注意字串ID一定要与*def.h中的字串ID一致,第二列为字串所属程序名,。
作者: Darren完成日期: 2010-06-28 Page 1 of 14 e-mail:*******************目录1.基本概念 (2)2.MT6225 ADC简介 (3)3.MT6253 ADC简介 (3)4.两种操作模式 (3)5.用于电池电量显示的ADC检测 (4)5.1.主要流程图 (4)5.2.流程说明 (6)5.3.创建步聚 (6)6.充电时ADC的检测 (7)6.1充电时ADC的调度流程 (7)7.工程模式查看电池电压ADC (8)8.MT6225平台区分USB和CHARGER的ADC通道 (8)9.ADC校准 (10)10.ADC检测的主要API (11)11.ADC调度器的成员变量 (13)作者: Darren完成日期: 2010-06-28 Page 2 of 14 e-mail:*******************1.基本概念ADC ,即analog to digital converter,模拟信号至数字信号的转换器。
主要的ADC转换算法有逐次逼近法,双积分法。
它们一般由芯片内部的硬件电路实现,但外部的电路接法会有所不同。
MTK平台ADC采样的可使用外部电路:y=((a*x+b)/100)*factor(如adc_adc2vol()中的算式)x为ADC采样值,y为测量点的实际电压如图2所示,(a*x+b)为A点的电压值,((a*x+b)/100)*factor才是我们要测量的Ui的电压值。
由于ADC的量程有限,故需要进行分压才能测量比较大的电压,之后再根据分压电阻的比值转换成要测量点的电压。
a为每单位表示的电压。
MTK的ADC量程为2.8V,ADC为10位的,故a=2800000/2^10=2734(uV)。
通常为了扩大测量范围,需要把a扩大约一倍(记为a1),之后再通过factor校正。
比如变成5524,是原来的2.02倍b是偏移量,需要测量确定。
1.KAL是封装内核的层应当在O SL以上来开发,KA L OS层为Medi aTek‟s软件和N ucleu s操作系统的接口。
它为任务提供许多系统服务函数,比如计时器,队列,内存管理,事件等等。
Task是有一定封装性的软件模块,当此模块被执行的时候,可以把它理解为一个独立的线程。
Ta sk之间的交流可以理解成线程间通信。
大家以后可能要独立完成一个task的设计,以应付一些比较高级的应用开发。
2.ta sk的创建:MTK提供了自定义task的接口,首先要在cu stom_confi g.h文件中的cus tom_t ask_i ndx_t ype和c ustom_modu le_ty pe这两个枚举类型中分别加入我们自己的t ask_i ndex和modul e id。
其次在c ustom_conf ig.c中的cust om_mo d_tas k_g[]这个数组中定义中增加moudl e与tas k的映射。
需要注意这个数组的成员个数不能超MAX_CUSTO M_MOD S,即MT K只支持16个自定义task。
然后需要在tas k配置表c ustom_comp_conf ig_tb l[]中增加task的配置信息。
这个结构体的成员组成如下:typed ef st ruct{ kal_char *co mp_na me_pt r; //task名称 kal_char *co mp_qn ame_p tr;//外部队列名称 kal_uint32 com p_pri ority;//ta sk优先级kal_u int16 comp_stac k_siz e;//t ask堆栈大小 kal_uint8 co mp_ex t_qsi ze;//外部队列大小 kal_uint8 com p_int_qsiz e;//内部队列大小kal_c reate_func_ptr co mp_cr eate_func;//创建t ask的入口函数ka l_boo l c omp_i ntern al_ra m_sta ck;} com ptask_info_stru ct;接下来是比较关键的task创建函数的实现。
Windows Live™∙主页∙个人资料∙联系人∙邮件∙照片更多▼日历活动群共享空间SkyDrive家庭安全设置移动主页下载全部服务∙MSN ▼主页汽车理财电影资讯体育天气∙∙登录float in the sk... 的个人资料ShareSpace照片日志列表工具帮助日志日志摘要排列方式:2009年5月2009年4月2009年3月2009年2月2009年1月2008年12月2008年11月2008年10月2008年9月2008年8月2008年7月2008年6月< 上一页下一页> 11月13日MTK的一些笔记MMI_ON_WIN32 MMI_ON_HARDWARE_P__MTK_TARGET__#ifdef __cplusplusextern "C" {#endif__SMS_BLACK_LIST__ 短信防火墙SLT_MMI_SLIDE_UNLOCK 滑动解锁__MMI_VCARD__ 名片夹__SLT_MMI_PHB_VCARD__ 超级电话本__MMI_VIP__ SECURITY_VIP vip功能__SLT_LONG_DISTANCE_DDD__ 长途区号__MMI_UI_HINTS_IN_MENUITEM__ 在菜单空间显示hint(正常应该关闭,弹出hint)//手机默认密码NVRAM_SECURITY_VIP_PASSWORD_LIDNVRAM_EF_MS_SECURITY_DEFAUL Tmmi_frm_sms_save_sms_req发短信mmi_msg_new_msg_ind 新短信到达ReleaseEMSEditBuffer 释放写短信的bufferSCR_INLINE_EDIT 编辑电话本界面SCR_ADD_NEW_ENTRY 增加电话本界面color_dialing_font_map[] 拨号界面的不同字体颜色数组gui_show_dialer_input_box_ext 拨号输入框wgui_setup_dialer_inputboxIdleDialPadCallmmi_ucm_entry_outgoing_callShowMOMTCallScreennvram_cust_pack.c存放开关机默认值custom_mmi_default_value.h 存放开关机默认值定义2008年5月2008年4月2008年3月2008年2月2008年1月2007年12月2007年11月2007年10月2007年9月2007年8月2007年7月2007年6月2007年5月2007年4月2007年3月2007年2月2007年1月2006年12月2006年11月2006年10月fmgr_msdc_plug_in_hdlrfmgr_msdc_plug_out_hdlr 插拔T卡mmi_vobj_is_pending_object 收到名片夹mmi_vobj_receive_get_full_tmp_path_name 取得名片夹路径isEarphonePlugged //耳机是否插入标志gPenEditorSelectCandidate, 汉王判断有无备选字s_bShowingCand 国笔判断有无备选字handle_category28_input手机信号的显示是根据公式frame_number = (level_percentage * (n_frames)) / 100;来计算需要显示哪一针图片,了解原理后大家可以对gSignalStrengthLevel灵活付值.void ChangeStatusIconLevel(S16 icon_ID, U8 level_percentage)mmi_phb_sel_quick_search_get_index //电话本选择复制、删除时中键显示的勾和叉图setup_bottom_shortcuts 触屏底部丝印的快捷键custom_comp_config_tbl 自己配制的任务列表resource_shortcuts.c gShctDefaultDediList 快捷键定义mmi_audply_redraw_lyric :显示歌词idle_screen_show_network_details :待机显示歌名nvram_common_config.c // 恢复出厂设置的定义以及自动测试的程序(增加或删除工程模式中测试项目数组NVRAM_EF_AUTOTEST_DEFAUL T[NVRAM_EF_AUTOTEST_SIZE]) nvram_user_config.c //存放nvram的各项默认值nvram_restore_byte_cache //恢复出厂设置的byte值wgui_categories_inputsenum.h //输入法的定义custom_hw_default.c //电池参数audcoeff.c 、nvram_default_audio.c //音频参数FactoryModeDef.h //工程模式、测试模式的定义FactoryModeSrc.c 存放工程模式的各项设置其中const testlet Tests[MAX_AUTO_TEST_ITEMS] = {}存放*#87#自动测试时的各项测试函数2006年9月2006年8月2006年7月2006年6月2006年5月2006年4月2006年3月2006年2月2006年1月2005年12月2005年11月2005年10月MAX_AUTO_TEST_ITEMS 自动测试项目的最大值nvram_common_config.cNVRAM_EF_PORT_SETTING_DEFAULT[] //设置默认调试端口nvram_cust_pack.cNVRAM_CACHE_DOUBLE_DEFAULT //触摸屏校准数据custom_wap_cust_pack.c //书签,主页audio_group_init[NUM_OF_GROUP] 铃声设置数组initalize_main_menu_application()注册主菜单得各个高亮函数GlobalConstants.h //存放按键定义keypad_def.c //按键映射关系CustImgDataHW.h //编译后的图片数据数组__MAINLCD+__路径+__文件名+__扩展名[]CustCoordinates.c //Screen控件MMI_features_GUIPLUTO.h__MMI_BI_DEGREE_MAIN_MENU_STYLE__ //主菜单样式__MMI_MAINMENU_TYPE__NVRAM_EF_SMSAL_SMS_TOTAL //短消息最大值(nvram_user_defs.h)CM_SMS_MAX_MSG_NUM (customer_ps_inc.h)//要比NVRAM_EF_SMSAL_SMS_TOTAL值大(100)PHB_PHONE_ENTRY (.make)//手机电话簿容量PHB_SIM_ENTRY //sim卡电话簿容量nvram_user_defs.h 文件中NVRAM_EF_SMSAL_SMS_TOTAL 手机短信的容量定义CM_SMS_MAX_MSG_NUM 短信总容量定义(sim + phone).mak 文件中PHB_PHONE_ENTRY 定义手机中电话本的容量PHB_SIM_ENTRY定义sim卡的电话本容量mmi_phb_quick_search_find_entry 电话本输入字符搜索列表refresh_search_list_change_list 字符搜索列表回调函数PhoneSetupResList.h //墙纸定义、数量IMERes.c //定义笔画输入法(MTK源代码__MMI_TOUCH_SCREEN__和笔画INPUT_MODE_MMI_SM_STROKE 互斥)NVRAM_PROFILES_DEFAULT //情景模式里面的设置,铃声等的默认值MMI_PROFILE_ENUM_TYPE 情景模式IdleToggleProfile 激活情景模式CustResDefPLUTO.h //定义资源路径及工程菜单定义如:*#86# *#65289*# 等DEFAULT_HARDWARE_YEARDEFAULT_HARDWARE_MON DEFAULT_HARDWARE_DAY//手机默认年、月、日份GUITypeDef.h HIGHLIGHT_EFFECT SOFTKEY_STYLE STATUSBAR_STYLE //定义高亮菜单的效果、按钮和statusbar的显示风格pixtel_UI_show_fixed_matrix_menu //九宫格数据//没有小电池,第一次正常关机开机时时间不能保存kal_bool DRV_POWERON(void) :: if (RTC_isFisrtOn()/*||(KAL_FALSE==RTC_is_config_valid())*/)//modi fy by lvqiang for rtc bug11832S8* path; //字符转换函数,把ASCII 转换成UCS2 如例:mmi_chset_convert(g_chset_text_encoding, MMI_CHSET_UCS2, (char*)MUSIC_FOLDER, (char*)path, FMGR_MAX_PATH_LEN-10); mmi_ucs2cat((PS8)filexpr_temp, (const PS8)path);//创建中文文件夹#define PHB_VCARD_FOLDER "\x0D\x54\x47\x72\x39\x59\x00\x00\\" // 名片夹#ifdef __cplusplus //lijinbu 20070613 add fo r simulatorextern "C" {#endif /* __cplusplus */NVRAM_EF_PHB_COMPARE_DIGIT_DEFAULT 电话本比较的位数MTK平台的UA内置方法:custom_wap_config.h文件里头的#define WAP_CUSTOM_CFG_DEFAUL T_UA_HEADER "MAUI WAP Browser"#define WAP_CUSTOM_CFG_DEFAUL T_MMS_UA_HEADER "MAUIMMS User Agent"这两项引号中的红体字部分内容替换为我们提供的有效UA!"LCT_D800B_01/1.0 Nucleus/1.13.21 MTK6225/07A Release/5.1.2008 Browser/TelecaQ03C1 Profile/MIDP-2.0 Configuration/CLDC-1.1"电池显示六格的问题:3520000, 3570000, 3680000, 3780000,3890000, 3950000, 4000000, 4090000, 9999999,#define NVRAM_EF_CUST_HW_LEVEL_TBL_SIZE 444#define BATTERY_MAX_LEVEL 11gui_fixed_menuitems.c(pixtel_UI_show_fixed_fullscreen_page_menuitem())gui_fixed_menus.c (g_MainMenu_Item_Poistion 数组存放9宫格的坐标值)show_fixed_list调用下面函数(pixtel_UI_show_fixed_list_menu()调用DrawMainMenuBgImageContext()画选中位置的图片) CustMenuRes.c const CUSTOM_MENUnCustMenus[]所有屏幕画面的参数菜单ID 父菜单ID 子菜单个数等等,结构描述如下://The Below is the structure of the MenuItem which can be transfered to any screen.typedef struct Custom_MenuItem{U16 nMenuItemId; //Unique Id for each MenuItem.U16 nParentId; //ItemId of the parent if 0(zero) then no parent.U16 nNumofMenuItem; //Number of Children it has.U16 nHideFlag; //This is a flag to mask/hide.(not sure currently)U16 nMovable; //This is a flag for moving like 0-NotMovable Anywhere,//1-Movable within the same parent..etcU16 nDispAttribute; //This is a display attribute flag like 1-list,2-Circular,3-Tab..etc.U16 nStrId; //Unique StringId of the MenuItem.U16 nImageId; //Unique Image of the MenuItem.U16 *nOrderMenuItemId; //ItemId of the children in Sequence}CUSTOM_MENU;目录结构:plutommiAlarm 闹钟AsyncEvents 异步事件和硬件协议事件的处理Audio 声音管理Calendar 日历CallManagement 电话呼叫Calls 辅助服务CommonScreens 所有应用的公用屏幕Data Time 日期和时间的实现Debug 包含.obj文件并且是正在工作的文件夹DebugLevel 管理debug日志的MACROSDemo 一个demo应用Framework 管理应用消息,流程控制和操作系统封装EventHandlingFileSystemHistoryNVRAMManagerOslTasksFunandGames FunandGames的应用GPIO 处理不同的外部设备例如:背光,震动,ledGUI 管理UI的相关函数IdleDemo 待机应用和事例Inc 所有应用的共享文件MiscFramework Pixtel MMI平台管理字体unicode的支持。
1.MTK simulator的工程文件是 PixtelMMI.dsw。
2.打开PixtelMMI.dsw,检查文件default_Fmrdo.c、default_mmi_profiles.c、default_mmi_settings.c、default_version.c文件是否存在工程文件中,上述文件存放目录:项目所在目录\custom\app\MILAN_BB。
3.在调试运行过程中会提示某些DLL文件无法连接,这是VC没有安装。
DLL文件所在目录:VC安装盘\VC98\DEBUG。
把缺失的文件复制到window安装目录下的System32目录里。
4.运行MTK Simulator,选取File→Newwork Simulator,会运行MMINWSimulator;在MMINWSimulator菜单中,选取Menu→Messages,会弹出一个Send Event窗口,窗口里有一个Events列表,列表里有不同用途种类的Events;如果需要启动手机,选取BootUp Events,点击OK按钮,MTK Simulator模拟开机过程。
关于调试语句的说明kal_print语句:该语句只能打印字符串信息。
Trace_out语句:该语句可以输出格式化字符串。
ASSERT语句:断言语句。
Trace语句:可以输出格式化字符串。
关于MTK Target的编译连接批处理命令: Milan.bat 。
●概述在windows下,打开dos编辑窗口(开始->运行->cmd),找到工程代码所在根目录,如:E:\MTK6217 输入编译批处理命令:格式:make[custom="projectName"]"project" "action"["modules"]Example: make custom=mtk6217 gprs newModules:用于对单个模块进行编译的选项。
如果没有指定,则对所有的模块进行编译处理。
如果指定了模块名,则对指定的模块进行编译处理。
后面的modules是nucleus之类的,可以不用写,中间的除了mtk6217工程名外可以照写,mtk6217工程名可以在你的源代码的make目录下有个工程文件名,比如我的例子就叫mtk6217_gprs.mak,你将你的替换就可以了,另外,除了上面的仁兄跟你说的ADS1.2以上 perl也要 5.**,我用的是ActivePerl-5[1].6.1.631-MSWin32-x86.msi名字的,你查找下载一下,最后你还需要安装VC6,这才能确保编译不出错。
New:全面的编译,包括了所有的资源,代码,会把生产的所有的obj都删除掉,重新产生;还有一些代码的拷贝,特别是资源和定义头,如:mmi_features.h 编译选项说明:1)New:全面的编译,包括了所有的资源,代码,会把生产的所有的obj都删除掉,重新产生;还有一些代码的拷贝,特别是资源和定义头,如:mmi_features.h2)update:主要是资源和代码的编译,一般不怎么用,比new要编译的少一点,也是比较全面的编译3)remake:这个最常用,如果你没有修改资源(图片、铃声、字符串),只修改了*.c文件,就用这个编译就可以了,会从新产生bin文件4)还有一个值得要说的是resgen,这个是专门用于编辑资源的,和remake编译配合(先resgen产生资源,再remake)比较快。
●Milan.bat执行流程1)Milan.bat:选择资源文件,根据资源文件得选项,复制不同得资源配置文件,并改名为custom_config.bld,根据用户选择得编译选项调用make.bat cus-tom=Milan gprs new/update/remake。
2)Make.bat:判断当前得操作系统后,调用相应得批处理 m_win2k.bat %*, %*表示调用make.bat命令行的所有参数作为m_win2k.bat的命令行参数。
3)M_win2k.bat:根据命令行参数设置环境变量DEFAULT_CUSTOM、CUSTOMER、PROJECT、ACTION等,生成了编译配置文件~labelbuild.tmp、~buildinfo.tmp、~cleanmod.tmp、~updatemod.tmp、~remakemod.tmp,调用命令:tools\make.exe-fmake\gsm2.mak -r -R CUSTOMER=%CUSTOMER% PROJECT=%PROJECT% %ACTION%,再milan这个项目编译处理中:%CUSTOM% = Milan,%PROJECT% = gprs,%ACTION% = new / update / remake 。
4)Gsm2.mak:1.包含其他的makefile文件:option.mak,~buildinfo.tmp,Milan_gprs.make,custom.bld,verno_Milan.bld,~cleanmod.tmp,~updatemod.tmp,~remakemod.tmp、comp.mak。
●关于Perl、ADSv1_2的路径设置Perl的搜索路径设置是在Milan.bat批处理中;ADSv1_2的搜索路径设置是在make路径下的文件Option.mak;●源程序编译配置文件在make目录下,.pth文件表示该模块下需要编译的源文件所在的相对目录;.lst文件表示需要编译的源程序的相对文件名;.inc文件表示头文件的路径;.def文件表示定义的条件编译宏。
如何在NVRAM增加一个保存记录的文件1.custom_nvram_editor_data_item.h(目录:MILAN0538\custom\app\MILAN_BB)2.nvram_user_defs.h(目录:MILAN0538\custom\app\MILAN_BB)3.nvram_user_config.c(目录:MILAN0538\custom\app\MILAN_BB)4.NVRAMEnum.h(目录:MILAN0538\plutommi\mmi\Framework\NVRAMManager\NVRAMManagerInc)MTK架构MMI|-----------|--------primitive basedprimitive interface|parameter converter|function interface L4A|----------------function based|L4C Layer 4说明:就是mmi和L4A是依赖primitive 通讯,即message ----primitive based;l4a和l4c用function call的方式联系---function based;layer 4就是一个中转站,中转各layer和mmi的通讯.MTK 6219手机解决方案由5部分组成1.L1 protocol2.device driver3.protocol stack4.MMI5.WAP Application;MTK 6219 solution 提供了3个测试工具1.Catcher2.META3.MCT。
MTK 6219 software solution可分为3部分1.MS Executable Software1.OS:OS Adaptation Layer;MTK采用的是Nucleus OS,OSL的目的是为了使MTK软件方案适应于Nucleus OS,在Nucleus OS的基础上封装了一层,该层就是OS。
2.L1 Protocal Stack:GSM Physical Layer,支持5-Series技术规范下的比特流发送。
为上层提供服务,Control the mapping 和调度逻辑通道和物理通道。
实现了TDMA framing和无线控制。
1)Layer 1 Asynchronous:处理来自上层的消息和将消息处理的结果发送给上层。
2)Surrounding Cell Engine:handles the neighbor cell powermeasurement and neighbor cell synchronization in-formation acquisition.3)Layer 1 Control: handles the TDMA scheduling on theradio environment, including timing advance and powercontrol command from serving base station.4)Layer 1 Driver: handles the DSP and Radio control.。
3.Drivers: Device Driver, like SIM,UART,GPIO etc. Driver为MCU所有的外围设备提供了控制功能接口。
该模块处理许多手机用户可见的操作,比如按键处理、LCD显示。
与L4 entity进行交互,提供在设备控制功能函数,用于访问设备的寄存器。
1)与MCU外围设备相关的1.SIM: Subscriber Identity Module2.UART: Universal Asynchronous Receiver/Transmitter3.SPI: Serial Port Interface4.GPIO: General Purpose Input/Output5.GPT: General Purpose Timer6.RTC: Real Time Clock7.WDT: Watch Dog Timer8.PWM: Pulse Width Modulation9.Alerter10.Keypad11.PMIC: Power Management IC12.BMT: Battery Charging Management task13.AUX task: Auxiliary task14.ADC Sched.: Analog to Digital Converter SchedulerB task: The USB 1.1 protocol and driver16.IrDA task: The IrDA and driver17.Camera: Camera driver for integrating with 3rdparty camera module18.MSDC: Memory card driver, supporting SD, MMC cardsand Memory Stick2)与MCU虚拟设备相关的1.Resizer: Software for controlling resizer engine2.Image DMA: Software for controlling the dedicatedDMA channels for images.3.Image Proc.: Software for controlling Image effectengine.4.G2D: Graphic 2D engine.5.LCD: LCD interface, support 4 layers.6.ISP: Support image process to compensate theLens/sensor effect.7.GIF decoder: Software for controlling hardware GIFdecoder.8.Mpeg4/H.263 codec: Software for H.263/Mpeg4 de-code/encode.9.JPEG codec: Software for controlling hardware JPEGdecoder/encoder4.L2/L3/L4 Protocol Stack: GSM Protocal Stack Layer . 该模块包含了许多GPRS/GSM的Requirement,为应用程式提供了一个GSM/GPRS平台;该软件平台能简单容易地通过AT命令使用Local MMI或PC控制。