mtk平台函数
MTK文件操作常用函数

1. int FS_Open(const WCHAR*FileName, UINT Flag)该函数用来打开一个文件,FielName为文件路径及文件名,Flag为文件的操作属性,其值可为FS_READ_WRITE,FS_READ_ONLY,FS_OPEN_SHARED等。
如果文件打开成功,该函数返回一个大于等于0的值,否则返回一个小于0 的值。
具体操作方法可如下:FS_HANDLE h;if((h = (FS_HANDLE)FS_Open((constWCHAR*)filename,FS_READ_WRITE|FS_OPEN_SHARED|FS_CREATE)) >= 0){FS_Close(h);}注意,这里的路径要转换成Unicode字符串,可以通过AnsiiToUnicodeString(S8 * pOutBuffer, S8 *pInBuffer)函数来实现。
比如我们在D盘的example 文件夹下有一个test.c 文件需要对其进行修改(D:\example\test.c),则:FS_HANDLE h;S8UnicodeName[100];AnsiiToUnicodeString((S8*) UnicodeName, (S8 *)”D:\\example\\test.c”);if((h = (FS_HANDLE)FS_Open((const WCHAR *)UnicodeName,FS_READ_WRITE|FS_OPEN_SHARED|FS_CREATE)) >= 0){FS_Close(h);}也可使用FS_Open((const WCHAR *)L”D:\\example\\t est.c”,FS_READ_WRITE|FS_OPEN_SHARED|FS_CREATE)方式打开。
当对文件修改完成后,要使用函数FS_Close()将其关闭。
2. intFS_Close(FS_HANDLEFileHandle)用来关闭一个已经打开的文件。
MTK平台PWDN设置方案

当遇到需要把电源加上,PWDN拉高时,需按以下要求做:1.添加#include "upll_ctrl.h"头文件2.在cam era_hw.c文件里定义Delay函数,如下:void Ini_Delaym s(kal_uint16 time){volatile kal_uint32 delay;for (delay =0;delay <t ime*6500;delay++) {} ////1ms}3.在drv_comm.c文件里确认开机时有写cis_module_power_on(KAL_FALSE)函数;在cis_module_power_on(KAL_FALSE);里面做以下操作:kal_prompt_trace(MOD_MMI,"poweroff_hw");// Sensor Module Power turn on, and keep the power alwaysGPIO_ModeSetup(MODULE_POWER_PIN, 0);GPIO_InitIO(1, MODULE_POWER_PIN);GPIO_WriteIO(1, MODULE_POWER_PIN);//sensor resetGPIO_ModeSetup(MODULE_RESET_PIN, 0);GPIO_InitIO(1, MODULE_RESET_PIN);GPIO_WriteIO(1, MODULE_RESET_PIN); // low to reset sonsor, can reduce 0.2mA current// Sensor internal power downGPIO_ModeSetup(MODULE_CMPDN_PIN, 0);GPIO_InitIO(1, MODULE_CMPDN_PIN);GPIO_WriteIO(0, MODULE_CMPDN_PIN);ENABLE_CAMERA_TG_CLK_48M;UPLL_Enable(UPLL_OWNER_ISP);SET_CMOS_FALLING_EDGE(1);SET_TG_PIXEL_CLK_DIVIDER(1);ENABLE_CAMERA_TG_PHASE_COUNTER;ENABLE_CAMERA_CLOCK_OUTPUT_TO_CMOS;Ini_Delayms(2);//UPLL_Disable(UPLL_OWNER_ISP);SET_CMOS_FALLING_EDGE(0);DISABLE_CAMERA_TG_PHASE_COUNTER;DISABLE_CAMERA_CLOCK_OUTPUT_TO_CMOS;Ini_Delayms(200);GPIO_WriteIO(1, MODULE_CMPDN_PIN); // high to enter sensor power-down mode4.在hw.c文件中重新写一个函数,这个函数就是没有把MCLK打开的那些参数配置,另外在image_sensor.c文件的poweroff函数下调用这个函数就可以了。
MTK平台ADC学习笔记

作者: 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是偏移量,需要测量确定。
MTK图形图象函数

1、S32 gdi_image_draw_id(S32 offset_x, S32offset_y, U16 image_id);offset_x和offset_y 是图片左上角的坐标,image_id是指向图片的枚举类型,用法如下:ADD_APPLICATION_IMAGE(MAIN_MENU_MA TRIX_PHONEBOOK_ICON,CUST_IMG_PATH"\\\\MainLCD\\\\MainMenu\\\\MATRIX\\\\MM_PB.gif");2、S32 gdi_image_draw(S32 offset_x, S32 offset_y, U8 *image_ptr);Image_ptr是用file2hex.exe转化后的图片文件名;在MTK平台里,image_ptr = (U8*)GetImage(image_id);3、S32 gdi_image_draw_file(S32 offset_x, S32 offset_y, S8*image_name);Image_name是图片的文件名;4、S32 gdi_image_get_dimension_id(U16 image_id, S32 *width, S32*height);S32 gdi_image_get_dimension_file(S8 *image_name, S32 *width, S32*height);S32 gdi_image_get_dimension(U8 *image_ptr, S32 *width, S32 *height);获得图片的长宽参数5、S32 gdi_image_get_frame_count_id(U16 image_id, S32 *frame_count); S32 gdi_image_get_frame_count_id(U16 image_id, S32 *frame_count);获得动态图片的帧数画点函数;6、void UI_putpixel(s32 x,s32 y,color c);7、关于剪切矩形:void UI_set_clip(s32 x1,s32 y1,s32 x2,s32 y2);void UI_reset_clip(void);void UI_pop_clip(void);void UI_set_text_clip(s32 x1,s32 y1,s32 x2,s32 y2);void UI_reset_text_clip(void);void UI_pop_text_clip(void);画线函数;颜色为c的一条直线:void UI_line(s32 x1,s32 y1,s32 x2,s32 y2,color c);颜色为c,宽度为w的一条直线:void UI_wline(s32 x1,s32 y1,s32 x2,s32 y2,color c,s32 w);画一个空心矩形:void UI_draw_rectangle(s32 x1,s32 y1,s32 x2,s32 y2,color c); 填充一个矩形:void UI_fill_rectangle(s32 x1,s32 y1,s32 x2,s32 y2,color c); 画图区域控制函数:void UI_lock_double_buffer(void);void UI_unlock_double_buffer(void);void UI_BLT_double_buffer(s32 x1, s32 y1, s32 x2 , s32 y2); 文字输出有关的函数:设置字符显示区:void UI_set_text_clip(s32 x1,s32 y1,s32 x2,s32 y2);设置字体颜色:void UI_set_text_color(color c);设置字体边框颜色:void UI_set_text_border_color(color c);设置当前光标位置:void UI_move_text_cursor(s32 x,s32 y);获取字符串的长、宽参数:void UI_measure_string(UI_string_type text,s32 *width,s32 *height);获得单个字符的长、宽参数:void UI_measure_character(UI_character_type c,s32 *width,s32*height);输出字符串:void UI_print_text(UI_string_type text);输出一个字符:void UI_print_character(UI_character_type c);字符串求长:U16 UTF8Strlen(U8 *p);字符串操作函数:字符串查找:strstr字符串拷贝:strcpy字符串定长拷贝:strncpy字符串比较:strcmp字符串定长比较:strncmp字符串续接:strcat字符串定长续接:strncat字符串转化为整型函数:atoi整型转化为字符串函数:itoa关于层建立一个层:GDI_RESULT dm_create_layer_using_outside_memory(S32 x, S32 y, S32 width, S32 height, gdi_handle **handle_ptr, U8 *outside_memory, S32 outside_memory_size, U32 flags);MTK平台上,软件支持四层。
mtk中的一些函数作用

1. HandleIdleScreenDigitEntry()
判断是否处飞行静音模式
2. IdleScreenDigitHandler()
ShowCategory16Screen()建立拨号输入框,并且注册每个按键的响应
执行数字键‘1’的响应:MMI_key_1_down()
g_ucm_p->call_misc.curr_action = MMI_UCM_DIAL;
装载g_ucm_p->call_list.group_info[freeTab]信息(group_id, call_type, call_state)
装载g_ucm_p->call_list.group_info[freeTab].call_info[0]信息
装载消息结构,发送消息:PRT_USSDVSS_REQ(到L4层分析号码)
L4层分析号码后,返回消息:PRT_USSDVSS_RSP,进入CBACK:
1.PsCBackSetCallFeatures()
根据拨出号码,设置到PHB查找,设置gPhoneNumberStruct
判断是否是紧急呼叫:mmi_ucm_is_sos_number()--CheckValidEmergencyNo1()
判断是否是空号码
判断是否已经存在SOS
判断UCM是否忙:mmi_ucm_is_busy()--没有需要处理的Call,没有OUTGOING, INCOMING的group,没有emergency call。
SetCurrentState(CM_OUTGOING_STATE);
AddNewCallInfo()
MakePsInitiateCall((PU8)MsgStruct, (void*)OutgoingCallConnected);
MTK平台开发总结(全)

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()函数中被判断。
MTK一些有用的层函数

该函数会为创建的层指定绘定函数,并且这两个函数只能分别处理DM管理的层,DM管理的层及相关控件可以在结构mmi_dm_control_ids_enum找到,这两个函数可以在DM指定的层上绘图,既可以处理不同的层,也可以处理相同的层,如果不同的层,可以定义在g_categories_controls_map中的control_set_p中定义如下,control_set_p中一般会包含基层,有时也包含新层,定义如下格式
该调用会重新刷屏,很遗憾的是,你新创建的层不在数组dm_layers中,也就不在他刷新的范围内。要么调用dm_add_blt_layer把你的层加入,要么在dm_redraw_category_screen之后再把你自己的层刷到屏上。
使用外部内存创建层
med_alloc_ext_mem
当然类似函数也有很多,如
前三个函数都是刷屏函数,前两个功能一模一样,只能指定刷新的区域,使用前需要用第四个函数指定参与操作的层。第三个可以自己指定要刷到屏的层和区域。需要说明的是,执行gui_BLT_double_buffer和执行gdi_layer_blt_previous不仅效果一样,执行过程也是一样的,gui_BLT_double_buffer只是个函数指针,指向gdi_layer_blt_previous,调用他最后执行的仍然是gdi_layer_blt_previous
设置层的
如果层上的数据是经过十分复杂的运算过程得出来的,比如要在IDLE上显示一个可以使用手指移动的农历是日历,这时就可以在层上画好要显示的数据,通话移动层的位置实现移动效果,要比每次重绘日历要快捷的多。
合并到BASE层
MTK个人笔记

6、查看进入MTK手机工程模式的指令可在CustResDef.h里,对应值为:SSC_ENGINEERING_MODE。
7、打包命令:armar -r *.a(或者*.lib) *.obj,解包命令:armar -x *.a,执行时都要先运行到obj或者库文件目录下。
22、Idle界面里面的触摸屏函数实现,是通过屏幕模板ShowCategory33Screen实现的,在wgui_categories_idlescreen.c里函数ShowCategory33Screen_ext里有注册,如:
wgui_register_category_screen_control_area_pen_handlers(wgui_cat033_pen_down_handler, MMI_PEN_EVENT_DOWN);注册点下触摸时的响应函数,然后我们可以在此响应函数里设置我们需要的屏幕位置的响应函数。
20、函数TurnOnBacklight(GPIO_BACKLIGHT_SHORT_TIME);用于把手机从背光中开启出来高亮屏幕一小段时间,参数也可换成GPIO_BACKLIGHT_PERMANENT(长久。
21、函数ForceSubLCDScreen(mmi_msg_start_msg_sub_anm)用于强制开启小屏幕提醒界面的,里面的参数只是举例,是提示有新短信收到的,在该函数里还需要调用屏幕模板来实现小窗口,这里用的是ShowCategory304Screen,然后会设置SetSubLCDExitHandler(mmi_msg_callback_msg_sub_anm);停止小窗口。
MTK动态加载平台开发介绍

应用程序的开发
▪ C语言基本规则 编写 ROPI 的 C 和汇编程序代码时: • ROPI 段中的代码对同一个 ROPI 段中的符号的每个引用 必须是PC 相对的。 ATPCS 不为只读段定义任何其他基址寄存器。 一个 ROPI 段中的项的地址不能分配给其他 ROPI 段中的项。 • ROPI 段中的代码对不同 ROPI 段中的符号的每个引用必须是PC 相 对的。 这两个段必须是相对固定的。 • ROPI 段中的任何其他引用必须是: — 绝对地址 — 对可写数据的相对于 sb 的引用 • 每当 ROPI 段移动时,寻址 ROPI 段中符号的读写字必须进行调整。
应用程序的加载
▪ 1. 根据应用程序的大小(RO+RW+ZI)分 配内存空间。
▪ 2. 解析应用程序的头,包括版本号,RO, RW, ZI的大小,并找到入口函数。
▪ 3. 获取RW的基地址,并保存基地址。 ▪ 4. 导出(注)MTK函数表供应用程序使用。 ▪ 5. 导出(注)MTK移量。ROPI对寄存器的 使
用没有影响。 RWPI:符号的访问也不是绝对地址的访问,是RW静态 基
址寄存器(sb)加偏移量的方式访问。R9寄存 器
基本原理
▪ ATPCS
ARM-Thumb过程调用标准定义了如何通过寄存器 传递参数和返回值。前四个寄存器(R0-R3)用 来传前四个参数,后续的参数通过下降式满堆栈 来传递的。返回值放在R0当中。另外局部变量的 分配是放在R4-R8上,当局部变量多于可用的寄 存器时,编译器会把多余的变量存储到堆栈。R9 寄存器用于位置无关数据(RWPI)的实现,用来 保存静态基址(sb)。
应用程序和MTK的交互调用
▪ 从T卡程序调用MTK程序,需要通过加载器 引入MTK的函数地址,访问方式以绝对地 址的方式。
mtk平台函数的介绍

显示文本串的函数原型:void(*gui_print_text)(UI_string_type_text);刷新屏幕/重绘屏幕:gui_BLT_double_buffer(S32 x1,S32 y1,S32 x2,S32 y2); 将屏幕清成空白:clear_screen();设置文本输出的起始位置:gui_move_text_cursor();修改文本颜色:gui_set_text_color();退出上一个程序:EntryNewScreen();全屏幕:entry_full_screen();弹出历史中最后一次显示的屏幕:SetKeyHandler();左键响应函数:SetLeftkeyFunction();高亮函数:SetHiliteHandler();文本绘制函数:gui_print_text();在屏幕上输出一个字符:gui_print_character();输出一个带边框的文本:gui_print_bodered_text();测量一个字符串在屏幕上占多少像素长度和高度:gui_measure_string();整形数据转换成字符串:gui_itoa();设置边框的颜色:gui_set_border_color();图形画点:gui_putpixel();/gdi_draw_point();画线:gui_line();绘制水平直线:gui_draw_horizontal_line();绘制垂直直线:gui_draw_vertical_line();绘制一个矩形:gui_draw_rectangle();绘制一个填充了c颜色的实心矩形:gui_fill_rectangle();在屏幕上绘制一个带边框的填充矩形:gdi_draw_frame_rect();画不同宽度的线:gui_wline();十字纹:gui_cross_hatch_fill_rectangle();百叶窗:gui_hatch_fill_rectangle();十字纹(两种颜色交替):gui_alternate_cross_hatch_fill_rectangle(); 百叶窗(两种颜色交替):gui_alternate_hatch_fill_rectangle();圆角矩形:gdi_draw_round_rect();按钮风格的矩形:gdi_draw_button_rect();带阴影的矩形:gdi_draw_shadow_rect();递进色填充矩形:gdi_draw_gradient_rect();绘制图标:gui_show_image();绘制图像:gdi_image_draw_file();动画:gdi_anim_draw_id();暂停动画播放:gdi_anim_stop();图像排版:gdi_image_get_dimension_id();进入图像裁剪区:gui_push_clip();恢复图像裁剪区:gui_pop_clip();裁剪图像:gui_set_clip();重置图像裁剪区到默认范围:gui_reset_clip();创建层:gdi_layer_create();常规静态图像显示函数如下:gdi_image_draw_id() 资源ID,不缩放gdi_image_draw() 资源Buffer,不缩放gdi_image_draw_file() 文件,不缩放gdi_image_draw_ext() Buffer,不缩放gdi_image_draw_resized_if() 资源ID,可缩放gdi_image_draw_resized() 资源Buffer,可缩放gdi_image_draw_resized_file() 文件,可缩放gdi_image_draw_resized_ext() Buffer,可缩放常用的动画函数如下:gdi_anim_draw_id();资源ID,不缩放gdi_anim_draw_id_once();资源ID,不缩放,只画一次gdi_anim_draw();资源Buffer,不缩放gdi_anim_draw_frames();资源buffer,不缩放,指定开始帧gdi_anim_draw_resized();资源buffer,可缩放gdi_anim_draw_once();资源buffer,不缩放,只画一次gdi_anim_draw_file();文件,不缩放gdi_anim_draw_file_resized();文件,可缩放gdi_anim_draw_file_frames();文件,不缩放,指定开始帧gdi_anim_draw_mem();buffer,不缩放gdi_anim_draw_mem_frames();buffer,不缩放,指定开始帧gdi_anim_draw_mem_resized();buffer,可缩放gdi_anim_draw_mem_once();buffer,不缩放,只画一次创建层:gdi_layer_set_active();获取基础层句柄:gdi_layer_get_base_handle();激活层:gdi_layer_set_active();合并层:gui_BLT_double_buffer();指明哪几个层需要合并:gdi_layer_set_blt_layer();/gdi_layer_blt();将整个层刷成单一颜色:gdi_layer_clear();将某一颜色设为层的通透色:gdi_layer_set_source_key();半透明特效:gdi_layer_set_opacity();释放层:gdi_layer_free();锁屏:gdi_layer_lock_frame_buffer();gdi_layer_unlock_frame_buffer();初始化菜单框架的基本属性:gui_create_fixed_list_menu();设置菜单的高亮项:gui_fixed_list_menu_goto_item();停止菜单项的滚动:gui_fixed_icontext_menuitem_stop_scroll();。
MTK常用函数说明

得到系统资源(1)
根据ID得到串地址 GetString 得到mainmenu的标题icon GetRootTitleIcon 根据菜单项ID得到对应的串ID GetStringIdOfItem 根据菜单ID得到所有子项的image id 子项系列有可能是image,也有可能是串 GetSequenceImageIds
MTK常用函数 MTK常用函数
内存分配函数
OslMalloc OslFree
字符串和整形数据的转换
一、ascii和unicodeString的转换 AnsiiToUnicodeString AnsiiNToUnicodeString 二、unicode和ansii的转换 UnicodeToAnsii UnicodeNToAnsii
得到系统资源(3)
根据父亲菜单ID和子项索引得到对应子 项的字串或者image id GetSeqItemId_Ext 根据父亲菜单ID和子项索引得到对应子 项的image id GetSeqItemImageId_Ext
屏幕操作函数
SetParentHandler
串操作函数(1)
pfnUnicodeToEncodingScheme pfnEncodingSchemeToUnicode pfnUnicodeStrlen pfnUnicodeStrcpy pfnUnicodeStrncpy
串操作函数(2)
pfnUnicodeStrcmp pfnUnicodeStrncmp pfnUnicodeStrcat pfnUnicodeStrncat pfnUnicodeStrtok
mtk常用函数及宏

注意:该设置只对英文起作用,汉字大小由字库文件决定。
六、颜色类:
1、常用颜色常量:
GUI:
UI_COLOR_LIGHT_GREY
UI_COLOR_WHITE
UI_COLOR_DARK_GREY
UI_COLOR_BLACK
UI_COLOR_NONE
eg:gdi_handle my_anim;
gdi_anim_stop(my_anim);
GDI_RESULT gdi_image_get_dimension_id(U16 image_id,S32 *width,S32 *height);//测量图片所占宽高像素
解码器相关:
gdi_image_decoder_create
2、绘制像素点:
gdi_draw_point
3、绘制直线及线条:
gdi_draw_line
gdi_draw_line_style
4、绘制矩形及框
gdi_draw_rect
gdi_draw_solid_rect
void gdi_draw_frame_rect(S32 x1,S32 y1,S32 x2,S32 y2,gdi_color rect_color,gdi_color frame_color,S32 frame_width);//绘制带边框填充矩形
gdi_draw_round_rect
gdi_draw_button_rect
gdi_draw_shadow_rect
gdi_draw_gradiegui_putpixel)(S32 x,S32 y,color c) = NULL;//在x,y处绘制一个GUI颜色c
MTK平台个人笔记精髓

➢关于MTK Simulator1.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平台中高亮事件的简单分析

RegisterHighlightHandler() is global for all menu items.
2、SetHintHandler()
DESCRIPTION
This function is used for register the handler for the menu item. If the
2. 关联高亮ID与执行函数
void SetHiliteHandler(U16 itemid, FuncPtr hiliteFuncPtr) 源自该函数将ID与函数关联:
maxHiliteInfo[itemid].entryFuncPtr = hiliteFuncPtr ;
itemid是传入的菜单ID, hiliteFuncPtr是传入的高亮执行函数
if (currFuncPtr)
{
(*currFuncPtr) ();
}
}
会先执行SetHintHandler注册的函数,然后执行
RegisterHighlightHandler注册的函数。注意SetHintHandler注册的函数是在ConstructHintsList()中被调用执行的,并不是在菜单高亮时被执行的,菜单高亮时只执行了RegisterHighlightHandler注册的函数。ConstructHintList将APP传入的指针数组于全局数组hintData[idx]相关联;而SetHitHandler注册的函数完成对全局数组hintData[idx]的赋值。
ExecuteCurrHiliteHandler_Ext(hiliteid);
}
通过该函数的注释就可以知道:当在一个菜单窗口中移动光标时,光标每动到一个菜单项时,系统(可能是Framwork模块)就会调用该函数找到对于菜单项的高亮处理函数并执行;因为ExecuteCurrHiliteHandler是去找该高亮函数,说明该函数已经在系统注册好了,那么该菜单项的高亮处理函数是在什么被注册的呢?就是在每个模块的初始化函数中,例如闹钟模块的 AlmInit()初始化函数。
MTK关于回调函数的简单说明

回调函数主要用于一些比较费时的操作,或响应不知道何时将会发生的事件,回调函数提供了一种异步的机制,相对于同步执行,提高了效率.前者的例子如WriteFileEx,ReadFileEx等,函数的最后一个参数是一个回调函数的指针,程序中调用WriteFileEx以后,就直接返回了,可以继续进行其他工作,系统在读写操作完成后通知程序作善后处理.后者的例子就是windows的事件机制回调函数的另一个用途,是用于一些枚举函数,如EnumDisplayModes等,每找到一种支持的显示模式,就通知回调函数,由回调函数具体处理,这是因为 EnumDisplayModes本身并不知道用户要如何处理.能,用户提供回调函数,定制系统的功能,这样,不同的用户提供不同的回调函数,可以使系统具有不同的功能.这就是所谓的plugin.使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的操作。至于如何定义回调函数,跟具体使用的API函数有关,一般在帮助中有说明回调函数的参数和返回值等。
回调函数使程序结构乱了许多。Windows API 函数集中有不少回调函数,尽管有详尽说明,仍使初学者一头雾水。恐怕这也是无奈之举。无论何种事物,能以树形结构单向描述毕竟让人舒服些。如果某家族中孙辈又是某祖辈的祖辈,恐怕无人能理清其中的头绪。但数据处理之复杂往往需要构成网状结构,非简单的客户/服务器关系能穷尽。
程序在调用一个函数时,将自己的函数的地址作为参数传递给程序调用的函数时(那么这个自己的函数称回调函数).需要回调函数的 DLL 函数往往是一些必须重复执行某些操作的函数.关系表示如下:
mtk平台函数

DIARYMTK 2010-06-07 14:07:18 阅读90 评论0 字号:大中小May.19LCD移植static const s_lcd_probe gLcdProbe[] = {...{"ILI9328", LCD_IsILI9328, &LCD_func_ILI9328},{"LP4948", NULL, &LCD_func_LP4948},}原来{"LP4948", NULL, &LCD_func_LP4948},放在{"ILI9328", LCD_IsILI9328, &LCD_func_ILI9328},前面导致开机白屏,原因是void LCD_FunConfigNew(void){#if 1kal_uint32 i;for (i = 0; i < LCD_PROBE_NUM; i ++) {if ((gLcdProbe[i].lcd_probe == NULL) || (KAL_TRUE == (gLcdProbe[i].lcd_probe)())) {break;}}gLcdSeq = i;MainLCD = gLcdProbe[gLcdSeq].lcd_func;#endif// MainLCD = &LCD_func_ILI9225;}当走到"LP4948"项时,由于其对应的lcd_probe为"NULL",导致退出循环,使得LCD相应的功能函数都指向"LP4948"对应的函数。
双卡改单卡。
SINGLE_SIM_MMI_ONLY某个菜单项STR_ID不显示。
原来是其子菜单个数与实际个数不相符。
键盘定义Custom/drv/Drv_tool/DrvGen.exeCustom/drv/misc_drv/MT6225_08A_GEMMI_BB/Codegen/codegen.dws分布式编译某个模块出问题了。
MTK手机平台下camera的设置方案

cam_set_param_req_hdlr()
camera_operation_setting()
yuv_operation_setting()[camera_yuv_process_v2.c--2475]
imagesetting
(注: image_sensor_func相关函数的注册,在image_sensor_gc0309.c)
当需要显示时,调用preview函数,使所有参数开始生效
生效:
mdi_camera_preview_start()
mdi_camera_preview_start_internal()
media_cam_preview()
cam_send_preview_req()
(MSG)
cam_preview_req_hdlr()
camera_preview_process()[camera_process_v2.c--]
yuv_preview_process()[camera_yuv_process_v2.c--2223]
yuv_image_setting()[camera_yuv_process_v2.c--2881]
image_sensor_func->yuv_sensor_setting
生效:
mdi_camera_power_on()
media_cam_power_up()[发送MSG_ID_MEDIA_CAM_POWER_UP_REQ消息]
(MSG)
cam_power_up_req_hdlr()
image_sensor_func->sensor_init()[camera_process_v2.c]
mmicamerarescamerac总设置窗口cameramenuc各种处理函用于记录设置值当需要显示时调用preview函数使所有参数开始生效生效
MTK常用接口函数

MTK常用接口函数300条MTK工作笔记,可以为你节省很多开发时间1.加销量统计,机型为A74SMSMsg.c宏 SMS_SEND_NOT_SAVE_SUPPORT (销量统计宏)#define PROJECT_NAME "A74"2.音乐播放键无作用 (有作用)在idleapp.c中:有sim卡的情况下:mmi_idle_entry_idle_screen 函数中注册这个功能的快捷键#if defined(__CLAMSHELL_F65__)SetKeyHandler(mmi_audply_check_fmr_state, KEY_EXTRA_1, KEY_EVENT_UP);SetKeyHandler(mmi_camera_entry_app_screen,KEY_CAMERA, KEY_EVENT_UP);#endif无sim卡的情况下:在simdetection.c中在EntryScrnSimErrorScreen中注册#if defined(__CLAMSHELL_F65__)SetKeyHandler(mmi_audply_check_fmr_state, KEY_EXTRA_1, KEY_EVENT_UP);SetKeyHandler(mmi_camera_entry_app_screen,KEY_CAMERA, KEY_EVENT_UP);#endif宏: __CLAMSHELL_F65__ 翻盖:CLAMSHELL3.情景模式的默认值修改:应答模式默认不要设置成翻盖接听nvram_common_config.cNVRAM_PROFILES_DEFAULT 第8项将值改为0NVRAM_PROFILES_ACTIVATED 默认激活的情景模式4.开机动画:\MainLCD\Active\Poweronoff5.壁纸:\MainLCD\Active\Poweronoff#define CFG_MMI_WALLPAPER_NUM (3)6.开合盖声音:resource_audio.cmtk_resource_sounds 数组中开盖:cs03_mid合盖:cs04_mid开机铃声: cs01_mid关机铃声:cs02_mid7.看墙纸类型#define CFG_MMI_RES_TYPE_WALLPAPER_SEL (__RES_TYPE_GIF__)8.ilde界面message和multimedia 位置互换#defineCFG_MMI_MAINMENU_EXCHANGE_MSG_AND_MULTIMEDIA (__ON__)9.SIM卡电话号码只能读到150条,至少要读到250条PHB_SIM_ENTRY = 25010.rom空间不够,为了节省ROM空间,将短信条数缩减为300,相关文件: customer_ps_inc.h#define CM_SMS_MAX_MSG_NUM 30011.工厂测试:键盘测试:EntryFMKeypadTest相机测试: FM_AutoTest_CAMERA12.修改menuitem的高度:gui_switch.h#define CFG_UI_MENUITEM_HEIGHT (32)13.自动测试的问题:FactoryModeSrc.ckeypad_layout 和 keypad_value14. 开机LOGO显示的地方:MMICheckDiskDisplay15.手机铃声:短信息铃声:resource_audio.cmtk_resource_mms_soundsmtk_resource_mms_sounds 有__MMI_MMS_TEMPLATE_SUPPORT__ 控制的mtk_resource_message_sounds来电铃声:custpack_audio.c 中0936SLIM平台中:和铉: custpack_audio : 和弦的声音资源放在这个数组里面如果要改变数组的大小,需要修改mtk_resource_midis数组的大小,即:#define MIN_MIDI_ID 151#define MAX_MIDI_ID 160 //165 的大小来电铃声中有铃声,和弦两种铃声对应的数组时:resource_audio.cmtk_resource_imelodys这个数组的大小是:resource_audio.h#define MIN_RING_TONE_ID 101#define MAX_RING_TONE_ID 105 //110目前是 5mtk_resource_imelodys[MAX_RING_TONE_ID - MIN_RING_TONE_ID + 1]修改上网的mms 配置custom_wap_config.c找到 custpack_wap_default再找到关于网络的配置:apnnvram_common_config.cNVRAM_EF_ABM_GPRS_PROFILE_DEFAULT16.FM检测耳机的宏:#define CFG_MMI_FM_RADIO_BIND_EARPHONE (__AUTO__)17.一些常用的menuid:MENU_ID_CAMERA_APP : 相机音乐播放器:HighlightAudioPlayerAUDIO_PLAYER_MAIN_MENUIDMESSAGES_MENU_WMESSAGE_MENU_ID : 写短信MAIN_MENU_PROFILES_MENUID : 情景模式ADD_APPLICATION_MENUITEM_HILITE_HANDLER(MAIN_M ENU_PROFILES_MENUID, highlight_mainmenu_profiles);用到的图片在:plutommi\Customer\Images\PLUTO220X176\MainLCD\Profi le短信:MAIN_MENU_MESSAGES_MENUID:ADD_APPLICATION_MENUITEM_HILITE_HANDLER(MAIN_M ENU_MESSAGES_MENUID, highlight_mainmenu_messages);18.lcd 背光亮度: NVRAM_BYTE_BL_SETTING_LEVELlcd背光时间:NVRAM_BYTE_BL_SETTING_HFTIMEnvram 的默认值都是写在这里的这两个默认值在 common_mmi_cache_config.c 文件改动19.设置: MAIN_MENU_SETTINGS_MENUID安全设置: MENU9101_SECURITY键盘锁: MENU9178_AKPL_TIME键盘锁的时间的nvram: NVRAM_SETTING_AUTOKEYPADLOCK_TIME手机设置:MENU9102_INITIAL_SETUPCFG_DISABLE_SHORTCUTS_MENUCFG_MMI_FOURWAYS_KEY_DISABLE快捷方式设置: EXTRA_SHORTCUTS_EXEC_MENUID时间与日期:MENU9141_TIME_AND_DATE时间/日期设置:MENU9143_SETTIMEANDDATE res_setting.csetting_date_time_list_of_iconshightlight函数: HighlightPhnsetSetDT20.手电筒的宏: FLASHLIGHT_TYPE21.出厂时间:custom_hw_default.cconst kal_uint8 DEFAULT_HARDWARE_YEAR = 8; //2008const kal_uint8 DEFAULT_HARDWARE_MON = 1;const kal_uint8 DEFAULT_HARDWARE_DAY = 1;22. 双卡双待: 只有一个拨号键的时候,需要弹出选择拨号界面SENDKEY_MODE = SINGLE_KEY_SELECT_MENU #SENDKEY2_SUPPORT有两个拨号键的时候:SENDKEY_MODE = SENDKEY2_SUPPORT #SENDKEY2_SUPPORT23.智能拼图#define CFG_MMI_GAME_PUZZLE (__AUTO__)24. 相机设置的默认值: MMI_features_camera.h#define CAMERA_DEFAULT_SETTING_BANDING CAMERA_SETTING_BANDING_60HZ25.开关机图片格式:#define CFG_MMI_RES_TYPE_POWER_ONOFF_SEL (__RES_TYPE_GIF__)26. 号码归属地存于T卡中#define GFG_MMI_INCOMINGCALL_DATA_IN_TCARD (__AUTO__)获取手机号码归属地的函数: FetchMobileHomeArea27.music: 路径: MUSIC_FOLDER6225D上如果是中文的路径: CFG_MMI_FOLDER_SM_CHINESE28.滑动换墙纸#define CFG_MMI_WIPE_EFFECT (__ON__)29. 读短信的:mmi_msg_inbox_list_get_hint30. 进入短线列表: mmi_msg_entry_inbox_list6225.阅读短信: mmi_msg_entry_view_msg31. 常用短信:__MMI_MESSAGES_TEMPLATE__短信的handle 一般这个函数注册: mmi_msg_set_msg_menu_highlight_handler (SmsMoMtGuiInterface.c)MSG_TEMPLATE_LANG_ENGLISHCalTemplateBase32.改外文的大小: pluto_en_standardFamily (fontres.c)33.卡1和卡2通话记录合并:# define CFG_MMI_COMBIN_SIM1_AND_SIM2_ENABLE (__ON__)魔音通话:VOICETONE_PITCHSHIFT = TRUEg_imui_ui_param.imui_bottom = MMI_content_y + MMI_content_height - 1-100;handle_inline_full_screen_edit_complete7900修改imui.c这个文件34.关机时退出系统: QuitSystemOperation (shutdownapp.c)35.来电黑名单: CFG_MMI_CM_BLACK_LIST36. 如果没有触摸屏,请注意将手写也关闭掉,否则编译不过TOUCH_PANEL_SUPPORT = NONEHAND_WRITING = NONEHAND_WRITING_CHS_SUPPORT = FALSE37.打印出错信息MMISWChangeWarning38.开机搜索界面ShowCategory120Screen39. 23平台上的拨号大字体#define CFG_MMI_PHB_GENERIC_MULTI_SELECT (__OFF__) 这个宏打开时,发短信从电话簿选择的时候,会有两个选项,无触摸屏时关掉CFG_FULL_DIAL_SCREEN_WITH_PICTURE40. 发短信时,从电话簿添加mmi_sms_recipient_add_from_contactsmmi_phb_mark_several_for_msg_pre_entryShowCategory199Screenwgui_inputs_sl_resize40. 背景播放挂起:mdi_audio_suspend_background_play挂起后,再继续播放:mdi_audio_resume_background_play41.信息报告界面:ShowCategory145Screen信息报告入口函数:mmi_msg_entry_deliver_report_ind显示界面的图片路径: \Images\PLUTO400X240\MainLCD\DualSIM\MESSAGE\CARD1\ OUTBOX字体颜色的theme: MMI_inputbox_normal_filler42.编模拟器的时候__MTK_TARGET__ 这个是不打开的,编译手机时打开43.EntryPhnseFactoryDefaultCalibrationScr45. 读短信:mmi_sms_entry_viewer收到新短信:mmi_msg_new_msg_ind信息报告:mmi_msg_entry_new_msg_indmmi_msg_nmgr_query_sms_notify获取信息报告的显示信息:mmi_msg_get_deliver_report_msg46.nvram_common_config.c中NVRAM_EF_PORT_SETTING_DEFAULT 中#if defined(__ONLY_ONE_UART__) || defined(__MMI_DUAL_SIM__)0, /* tst-ps uses uart_null(value is 99 (0x63)) */99, /* APP uses uart_port1 (value is 0) */#else0, /* tst-ps uses uart_port2(value is 1) */1, /* APP uses uart_port1 (value is 0) */#endif进入工程模式自动调好47. 触屏校准相关EntryPhnseFactoryDefaultCalibrationScr_internal48. 从文件管理进去看图片FileMgr.chighlight_fmgr_view_image49.修改写信息时,光标的颜色的主题inputbox_cursor_color_defaultTheme50.卡1收件箱MENUID:MENU_MTPNP_SMS_MASTER_INBOX卡2收件箱MENUID:MENU_MTPNP_SMS_SLAVE_INBOX51. 判断卡1还是卡2合法:bootupApp.c文件中卡1合法:mmi_bootup_is_sim_valid卡2合法: mmi_bootup_is_sim2_valid卡1卡2收件箱列表:mmi_msg_entry_divided_inbox_menu隐藏一个菜单:mmi_frm_hide_menu_item将以前隐藏的菜单显示出来:mmi_frm_unhide_menu_item相关文件:MTPNP_PFAL_MessageSetup.c模式设置: 卡1开: (MTPNP_AD_Get_Startup_Mode() == MTPNP_AD_NVRAM_CARD1)卡2开: (MTPNP_AD_Get_Startup_Mode() == MTPNP_AD_NVRAM_CARD2)卡1卡2同时开: (MTPNP_AD_Get_Startup_Mode() == MTPNP_AD_NVRAM_DUALCARD)52.短信编辑界面:写短信息选择字的背景颜色:multitap_filler_defaultTheme53.来电归属地显示:宏: __MMI_INCOMINGCALL_SHOW__FetchMobileHomeArea54. 文件浏览相关:entry_fmgr_explorerexit_fmgr_explorer释放浏览时获取的内存: mmi_fmgr_free_thumb_image_cache55. 信号强度: simdetectiondef.h#define SIGNAL_STRENGTH_LEVEL1 6#define SIGNAL_STRENGTH_LEVEL2 9#define SIGNAL_STRENGTH_LEVEL3 12#define SIGNAL_STRENGTH_LEVEL4 15显示信号强度:NetWorkSignalLevelIndication56. 修改短信条数: #define CM_SMS_MAX_MSG_NUM 15057.电话簿列表-----选项(res_phonebook.c) MITEM101_PBOOK_VIEW_OPTIONS插入号码:EMS_ED_OPT_INS_PHB_NUMBERmmi_msg_highlight_insert_phb_number58 ,工程模式密码: #define SSC_ENGINEERING_MODE "*#638725#"59.保存并发送: SEND_OPT_SAVE_AND_SEND_MENUIDmmi_msg_highlight_send_and_save61. 菜单列表字的颜色:list_normal_text_color_defaultTheme二级菜单选中时的颜色:menu_item_160x22_filler_defaultThemelist_main_menu_normal_item_filler_defaultTheme62.多方发送:__MMI_MESSAGES_SEND_TO_MANY__mmi_msg_highlight_send_to_many发送: mmi_msg_highlight_send_onlymmi_msg_send_msg_to_only_entry写信息函数:mmi_msg_entry_write_msg群发:__MMI_MESSAGES_SEND_BY_GROUP__#define EMS_DEFAULT_DCS_AVAILABLE_LENGTH 160 #define EMS_UCS2_DCS_AVAILABLE_LENGTH 7063. 0928 版:编辑短信,显示信息:wgui_EMS_redraw_remaining_characters_display64.发送名片:#define CFG_MMI_VCARD (__ON__)65. 默认的高亮选项:#defineCFG_MMI_DEFAULT_MAIN_MENU_HIGHLIGHT_MESSAGE (__AUTO__)67.idle的界面,title不变化,相关函数:standard_animated_matrix_highlight_handler_type268.#define CFG_MMI_MESSAGE_LIST_HINT (__ON__)69. 文件路径: CFG_MMI_FOLDER_SM_CHINESE70. 6235 上F82要修改lcd背光时间在文件nvram_common_config.c 中背光时间对应的一项为:NVRAM_BYTE_BL_SETTING_HFTIME71.短信copy 宏: __MMI_MESSAGES_COPY__从手机copy到sim卡或从sim卡copy 到手机72.手机上存储短信分配的条数: nvram_common_defs.hNVRAM_EF_SMSAL_SMS_TOTAL73.sim卡2信息设置 -- 存储位置存储位置:MENU_MTPNP_PREFEREDSTORAGE74.sim卡和手机存储短信的总条数: customer_ps_inc.h#define CM_SMS_MAX_MSG_NUM 35075. 6235平台,双 IMEIDUAL_IMEI = TRUE76.短信设置------sim卡1信息设置-----------存储位置设置----------手机手机无法支持的原因:#define CM_SMS_MAX_MSG_NUM 350CM_SMS_MAX_MSG_NUM 为短信的总条数,短信总条数必须大于 sim卡和手机分配的条数的和手机上存储短信的条数: nvram_common_defs.h#if defined(LOW_COST_SUPPORT)#define NVRAM_EF_SMSAL_SMS_TOTAL (10 * NVRAM_DUAL_RECORD)#else#define NVRAM_EF_SMSAL_SMS_TOTAL (200 * NVRAM_DUAL_RECORD)#endif /* LOW_COST_SUPPORT */77. 有两个拨号键时候,通常要定义DEVICE_KEY_SEND 和 DEVICE_KEY_SEND2在文件keypad_def.c78.电话簿快速搜索CFG_MMI_PHB_QUICK_SEARCH79.收到新信息的入口函数:mmi_msg_new_msg_ind80.发送完信息,然后保存的函数mmi_msg_save_msg_after_send_req81.回复短信menuid : SMS_INBOX_OPT_REPLY_MENUID回复短信高亮函数: mmi_msg_highlight_replymmi_msg_reply_msg新增加的宏__SEND_AND_SAVE_SMS__ 这个宏打开,默认就保存所发出的短信发送并保存短信: mmi_msg_highlight_send_and_save发送并保存: mmi_msg_send_and_save_msg_req写短信:SmsMoMtGuiInterface.c HighlightWMessageHandlermmi_msg_entry_write_msg82. 6235平台,删除短信mmi_sms_delete_msg_rsp83.从电话簿中选中联系人,发送短信MENU_ID_PHB_OPTION_SEND_SMSmmi_phb_highlight_op_send_sms__MMI_PHB_SEND_SMS_FROM_PHB__84.矢量字体__MMI_SKY_FONT__85.拒接电话并发送短信__MMI_UCM_REJECT_BY_SMS__86.快捷EXTRA_SHORTCUTS_MENUIDhighlight_mainmenu_shortcuts_execute87.手机设置:MENU9102_INITIAL_SETUPMENU_IDLE_SCR_DISP88.wifiWIFI_WIZARD_SUPPORT = FALSE # TRUE or FALSE 89. idle 的时候的快捷菜单__MMI_TOUCH_IDLESCREEN_SHORTCUTS__90.获取sms的存储类型mmi_frm_sms_get_storage91.字符串相关的问题将字符串转换成ucs2编码mmi_asc_to_ucs2(temple, " ");mmi_ucs2cpy(viewer_header_buff,GetString(STR_GLOBAL_NOT_SUPPORTED));mmi_ucs2cat(viewer_header_buff, buf2);92.无sim卡时,在idle界面也显示宫格-----------------宏CFG_MMI_NOSIM_HAVE_NORMAL_IDLE_MENU_INTERFACE93. 触摸屏TOUCH_PANEL_SUPPORT94.彩信:MMS_FEATURESMMS_SUPPORTMESSAGES_MENU_MMS_MENUID彩信中创建菜单:mauisemm.cstatic int createMenuItems(int slideCount, int initiated, int slideIndex)95.wap:WAP_SUPPORT96.nvram_common_defs.h#define NVRAM_EF_SMSAL_SMS_TOTAL (200 * NVRAM_DUAL_RECORD)GLOBAL_DEBUG_MEM_SIZE97.0932 照片编辑器:#define CFG_MMI_PHOTOEDITOR (__AUTO__)98. 0932.幻灯片#define CFG_MMI_SLIDESHOW (__AUTO__)99.EntryPhnseFactoryDefaultCalibrationScr_internal100.IdleSetLRKey101.彩信:HighlightMMSHandler编辑彩信时:收信人-编辑-添加号码/添加电子邮件进入的函数为:mobile_suite_app.cwap_entry_fullscreen_editorShowCategory5Screen_ext要将这个编辑界面的背景调白一点在ShowCategory5Screen_ext 函数中dm_set_scr_bg_opacity((U8)(current_MMI_theme->bg_opaci ty_low-110));编辑彩信内容:wgui_categories_MMS.cShowCategory277Screen编辑彩信主题:wgui_inline_edit.chandle_inline_full_screen_edit进入函数:MCU\vendor\wap\obigo_Q03C\adaptation\modules\mma\ source\mmsadp.cgoto_mms_screen102. short cut 图片路径:MainLCD\IdleScreen\Touch103. 有触摸屏时,idle界面左右软件中间的那个键的图片位置:__MMI_WGUI_CSK_ENABLE__#if (defined __MMI_TOUCH_SCREEN__) && (defined __MMI_WGUI_CSK_ENABLE__)ADD_APPLICATION_IMAGE2(IMG_CSK_DIAL_ICON,CUST_IM G_PATH"\\\\MainLCD\\\\Call\\\\T ouch\\\\Call.bmp","icons used in csk to make call");#endif104. 写信息----发送---从电话簿添加(IMG_ID_PHB_TAB_GROUP_ITEM,CUST_IMG_PATH"\\\\MainLCD\\\\Phonebook\\\\Phb_group_ite m.pbm","PHB tab group item")STR_CALLER_GROUP_4mmi_sms_entry_add_recipientmmi_phb_entry_generic_mark_several_and_quick_search_ta b1105. status icon id :IMG_SI_MASTER_SIGNAL_CLOSED106. 自动测试中键盘测试:EntryFMKeypadTest106. 视频播放器:入口函数:MENU_ID_VDOPLY_APPmmi_vdoply_highlight_appmmi_vdoply_entry_player_screen_internal]107. 显示imei:mmi_ssc_get_imei_rsp108. 视频录像器:mmi_vdorec_entry_app_internal109. 视频播放器全屏播放时,不能全屏播放在 mmi_vdoply_init_ui 函数中看创建播放层是否正确即创建这个层: g_vdoply_cntx.fullscr_play_layer_handle在 mmi_vdoply_blt_screen 中看刷屏是否正确在 mmi_vdoply_play_video 中看看是否需要旋转屏幕110 录音: CFG_MMI_SOUND_RECORDER背景播放挂起mdi_audio_suspend_background_play111. 定义wallpaper的类型:#define CFG_MMI_RES_TYPE_WALLPAPER_SEL (__RES_TYPE_JPG__)112. 定义清除键:#define CFG_MMI_WITH_C_KEY (__ON__)113. QQDSM_SUPPORT = TRUE#define CFG_MMI_DSM_QQ_APP (__ON__)#define CFG_QQ_APP_TCARD (__ON__)//MSN#define CFG_MMI_DSM_MSN_APP (__ON__)#define CFG_MSN_TCARD (__ON__)114. 拨号大字体#define CFG_MMI_240X400_DIAL_BIG_SCREEN (__ON__)图片包: \\\\MainLCD\\\\DialingScreen\\\\240X400Dialing115. 电话簿的总大小: PhoneBookTypes.hMAX_PB_ENTRIES116. 启动省电模式:#define CFG_MMI_PROFILE_RETRENCH (__ON__)ActivateRetrenchProfile SettingProf.c117. 调整menuitem的高度:CFG_UI_MENUITEM_HEIGHT118. 语言朗读INTERSOUND_MODULE_SUPPORT119. 照相机切换MENU_ID_CAMERA_SWITCH120. melody.#define GAIN_NOR_MED_VOL_MAX 144121. 0928平台全屏显示信号强度和电池电量宏#define CFG_MMI_STATUSBAR_TOUCH (__ON__)122. cta的宏: __CTA_SUPPORT__123. BT_AUDIO_VIA_SCO你那个MTK版本的蓝牙手机中蓝牙这块软件未将MTK自带的蓝牙功能 BT_AUDIO_VIA_SCO打开,所以来电或拨号就没有提示音的。
MTK平台ALS上报数据流程

针对ALS上报数据的流程,我这边大概的讲一下:MTK平台ALS使用轮询模式(polling mode)的话,系统会轮询调用这个函数int stk3x1x_als_operate(void* self, uint32_t command, void* buff_in, int size_in,void* buff_out, int size_out, int* actualout)传进来的参数cammand会以下对应的case:switch (command){case SENSOR_DELAY: //设置sensor 延时if((buff_in == NULL) || (size_in < sizeof(int))){APS_ERR("Set delay parameter error!\n");err = -EINVAL;}// Do nothingbreak;case SENSOR_ENABLE: //打开sensor ,就是打开ALS,if((buff_in == NULL) || (size_in < sizeof(int))){APS_ERR("Enable sensor parameter error!\n");err = -EINVAL;}else{value = *(int *)buff_in;if(value) /如果value的值为1的话,就会调用stk3x1x_enable_als函数{if((err = stk3x1x_enable_als(obj->client,1))) //打开als{APS_ERR("enable als fail: %d\n", err);return -1;}set_bit(STK_BIT_ALS, &obj->enable);}Else //否则就关闭als{if((err = stk3x1x_enable_als(obj->client, 0))) //关闭als{APS_ERR("disable als fail: %d\n", err);return -1;}clear_bit(STK_BIT_ALS, &obj->enable);}}break;case SENSOR_GET_DATA: //获取ALS的数据if((buff_out == NULL) || (size_out< sizeof(hwm_sensor_data))){APS_ERR("get sensor data parameter error!\n");err = -EINVAL;}else{sensor_data = (hwm_sensor_data *)buff_out;#ifdef STK_GESif(obj->ges_enabled){sensor_data->values[0] = stk3x1x_get_als_value(obj, obj->als_last);sensor_data->value_divide = 1;sensor_data->status = SENSOR_STATUS_ACCURACY_MEDIUM;break;}#endiferr = stk3x1x_read_flag(obj->client, &flag); //读取als的数据reading标志位if(err)return err;if(!(flag & STK_FLG_ALSDR_MASK)) //如果als数据reading就继续return -1; //往下执行否则直接return -1if((err = stk3x1x_read_als(obj->client, &obj->als)))//从IC读取ALS数据保存到obj->als中{err = -1;}else{if(obj->als < 3) //当底层获取到的读值在3以下的时候,我们会直接忽略,上报0{obj->als_last = obj->als;sensor_data->values[0] = stk3x1x_get_als_value(obj, 0); //这个函数比较重要,调试把ALS数据做处理的关键函数,ALS数据处理完成之后再放到sensor_data->values[0],系统上层会从这个数组中读取ALS的读值,如果不想对ALS的数据做处理的话,可以直接去掉改成如下就行sensor_data->values[0] = 0,同理下面的用到这个函数的都要做同样的处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DIARYMTK 2010-06-07 14:07:18 阅读90 评论0 字号:大中小May.19LCD移植static const s_lcd_probe gLcdProbe[] = {...{"ILI9328", LCD_IsILI9328, &LCD_func_ILI9328},{"LP4948", NULL, &LCD_func_LP4948},}原来{"LP4948", NULL, &LCD_func_LP4948},放在{"ILI9328", LCD_IsILI9328, &LCD_func_ILI9328},前面导致开机白屏,原因是void LCD_FunConfigNew(void){#if 1kal_uint32 i;for (i = 0; i < LCD_PROBE_NUM; i ++) {if ((gLcdProbe[i].lcd_probe == NULL) || (KAL_TRUE == (gLcdProbe[i].lcd_probe)())) {break;}}gLcdSeq = i;MainLCD = gLcdProbe[gLcdSeq].lcd_func;#endif// MainLCD = &LCD_func_ILI9225;}当走到"LP4948"项时,由于其对应的lcd_probe为"NULL",导致退出循环,使得LCD相应的功能函数都指向"LP4948"对应的函数。
双卡改单卡。
SINGLE_SIM_MMI_ONLY某个菜单项STR_ID不显示。
原来是其子菜单个数与实际个数不相符。
键盘定义Custom/drv/Drv_tool/DrvGen.exeCustom/drv/misc_drv/MT6225_08A_GEMMI_BB/Codegen/codegen.dws分布式编译某个模块出问题了。
May.201.移植中间件2.改信号图标双卡I:\GP_DM2577\X4_20100121\plutommi\Customer\Images\PLUTO240X320\MainLCD\IdleScree n\Statusicons\DualSIM\Master单卡I:\GP_DM2577\X4_20100121\plutommi\Customer\Images\PLUTO240X320\MainLCD\IdleScree n\Statusicons\signalMay.24拨号盘背景图片MainLCD\\\\DialingScreen\\\\DualSIM\\\\DUALMODE_TH_DIALING_SCREEN.GIFgui_inputs.cdialing_key_image[]数组为键盘IMG_ID数组。
gui_dialing_key_select() 处理判断获得的是哪个键,获得其image_id并将其显示出来。
各键的坐标信息则由全局变量dialing_keypad 获得。
gui_dialing_screen_translate_pen_position() 获得item_index,即判断是哪个键。
gui_dialing_screen_translate_pen_event()触屏按键响应gui_show_dialer_input_box_ext() 显示按的数字wgui_categories_CM.cShowCategory16Screen()DrawCate16CategoryControlArea()DrawCate16CategoryControlArea_touch() 显示拨号盘背景Cate16CategoryControlAreaPenDownHandler()注册的触屏响应函数setup_dialing_keypad()设置拨号盘位置摆布参数wgui.h 拨号盘位置参数设置MMI_DIALING_KEYPAD_FUNC_Y//这个参数为从拨号键盘处开始算//实际功能键坐标等于MMI_DIALING_KEYPAD_LAYER_Y+ MMI_DIALING_KEYPAD_FUNC_Y如宏MMI_DIALING_KEYPAD_COLOMNSIdleApp.c 设置拨号盘功能键对应功能IdleScreenDigitHandler() 进入拨号界面SetDialingKeypadPhonebookHandler()mmi_idle_set_dual_sim_dialing_keypad_call_handler()wgui.cdialer_inputbox_handle_key_down()redraw_dialer_inputbox()wgui_inputs.cMMI_dialer_inputbox 参数存储有关拨号盘中已按下的号码,文字显示方式等参数ThemeRes.c 有关手机更菜单下采用的方格设置Themecomponents.hdialer_inputbox_background_filler_defaultTheme 拨号盘显示区填充风格gui_inputs.cgui_show_dialer_input_box_ext()wgui_setup_dialer_inputbox() line 4518ShowCategory16Screen() line 2607 + 60 bytesIdleScreenDigitHandler() line 6825 + 30 bytesHandleIdleScreenDigitEntry() line 7024dialer_input_box_change_callback() 按下的按键变化时调用register_dialer_inputbox_keys()register_dialer_inputbox_dialer_keys()redraw_dialer_inputbox() line 7470dialer_inputbox_direct_input(unsigned short 56) line 7731dialer_inputbox_handle_key_down(int 8) line 3811 + 12 bytesMay.25custimgdatahw.h好像所有图片数据都能在这找到gif图片为其中的图片数组头,0x03, 0x01, 0x8C, 0x07, 0x00, 0x27, 0x00, 0x05,其他就是图片的二进制数据。
bmp图片的数据则肉眼看不出与文件的二进制数据的联系,好像经过处理EntryPhnsetWallpaperSys() 系统墙纸列表EntryPhnsetWallpaperSysView()查看墙纸IMG_ID_DISPCHAR_THEME_WALLPAPERShowCategory130Screen()img_main_menu_bkg_filler_defaultTheme 主菜单背景样式main_menu_bkg_filler_defaultThemesub_menu_bkg_filler_defaultThemeidle_bkg_filler_defaultTheme__MMI_FMGR_MULTI_SELECT_SUPPORT__ 文件多选宏img_list_selected_defaultTheme LIST菜单选中条样式scrollbar_background_filler_defaultTheme 滚动条背景scrollbar_indicator_filler_defaultTheme 滚动条选中区gui_draw_filled_area(S32 x1, S32 y1, S32 x2, S32 y2, UI_filled_area * f)May.26gui_scrollbar_draw_button() 画滚动条current_vertical_progress_indicator_themegui_themes.cMMI_features.hCFG_MMI_UI_SCROLLBAR_DEFAULT_STYLEgui_config.h定义滚动条显示样式current_MMI_themegui_config.h UI_SCROLLBAR_STYLE_1 UI_SCROLLBAR_STYLE_2 ... 一共好像有6种风格,但改成3,5 模拟器跑到有滚动条的地方就卡住,gui_scrollbars_post_oem.hgui_scrollbar_draw_button(int 1,) line 760gui_show_vertical_scrollbar_style_6() line 6894 + 14 bytesgui_show_fixed_list_menu() line 1948 + 15 bytesshow_fixed_list() line 876 + 10 bytesdm_setup_and_draw_fixed_list() line 2902MMI_fixed_list_menucreate_fixed_list()创建list,初始化MMI_fixed_list_menu 参数gui_create_vertical_scrollbar()创建vertical_scrollbar,初始化滚动条参数gui_show_vertical_scrollbar = gui_show_vertical_scrollbar_style_6;current_fixed_list_menu_theme ->vbar_width 决定vbar宽度gui_themes.cgui_initialize_default_themes()current_fixed_list_menu_theme = &MMI_fixed_list_menu_theme;scroll_buttoncurrent_vertical_scrollbar_themevoid set_MMI_theme(MMI_theme *t)current_vertical_scrollbar_theme = current_UI_theme->vertical_scrollbar_theme;void gui_initialize_default_themes(void)current_vertical_scrollbar_theme = &MMI_vertical_scrollbar_theme;在void wgui_init(void)中,调用的情况如下:set_MMI_theme((MMI_theme*) MMI_themes[0]);gui_initialize_default_themes();MMI_scrollbar_normal_fillergui_scrollbar_draw_button(GUI_SCROLLBAR_BUTTON_VERTICAL_SCROLL, &v->scroll_button);画中间的矩形块gui_create_vertical_scrollbar() line 393gui_create_fixed_list_menu() line 455 + 57 bytescreate_fixed_list() line 610 + 36 byteswgui_init() line 1601initialize_UI_demo() line 1809InitializeAll() line 3781mmi_frm_power_on_init_procedure() line 1829list_background_filler_defaultThemeset_MMI_fixed_list_menu_theme()set_MMI_list_main_menu_theme()set_MMI_list_sub_menu_theme()MMI_apply_current_theme()StandaloneRes.cvoid InitializeResourceV ariables(void)ThemeRes.cconst MMI_theme theme_defaultTheme={/*scrollbar_size*/UI_SCROLLBAR_WIDTH,gui_config.h#define UI_SCROLLBAR_WIDTH CFG_UI_SCROLLBAR_WIDTHgui_switch.hCFG_UI_SCROLLBAR_WIDTH 为滚动条中中间方块的宽度gui_fixed_menuitems.cgui_show_fixed_icontext_menuitem() 显示宫格菜单文字gui_show_fixed_icontext_list_menuitem() line:5649gui_show_fixed_twostate_menuitem()gui_shortcut_show() //image viewer. line 501wgui_cat213_fmgr_draw_menuitem()// line 5025将显示的菜单项的文字加上黑边。