mtk平台函数

合集下载

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设置方案

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学习笔记

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图形图象函数

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中的一些函数作用

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平台开发总结(全)声明:前阶段进行了近两个月的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一些有用的层函数

MTK一些有用的层函数
dm_register_category_controlled2_callback
该函数会为创建的层指定绘定函数,并且这两个函数只能分别处理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个人笔记

MTK个人笔记
5、MTK工程里面的语言种类,其宏控制和字串ID可以在Res_SSC.c里面的PopulateSSCRes()里面查看。
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);停止小窗口。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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将显示的菜单项的文字加上黑边。

相关文档
最新文档