mtk平台函数
- 格式:doc
- 大小:66.50 KB
- 文档页数:14
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)用来关闭一个已经打开的文件。
当遇到需要把电源加上,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函数下调用这个函数就可以了。
作者: 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、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平台开发总结(全)声明:前阶段进行了近两个月的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()函数中被判断。
显示文本串的函数原型: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();。
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将显示的菜单项的文字加上黑边。