当前位置:文档之家› MTK平台个人笔记

MTK平台个人笔记

MTK平台个人笔记
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 new

Modules:用于对单个模块进行编译的选项。如果没有指定,则对所有的模块进行编译处理。如果指定了模块名,则对指定的模块进行编译处理。

后面的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.h

2)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 based

primitive 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 protocol

2.device driver

3.protocol stack

4.MMI

5.WAP Application;

MTK 6219 solution 提供了3个测试工具

1.Catcher

2.META

3.MCT。

MTK 6219 software solution可分为3部分

1.MS Executable Software

1.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 power

measurement and neighbor cell synchronization in-

formation acquisition.

3)Layer 1 Control: handles the TDMA scheduling on the

radio environment, including timing advance and power

control 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 Module

2.UART: Universal Asynchronous Receiver/Transmitter

3.SPI: Serial Port Interface

4.GPIO: General Purpose Input/Output

5.GPT: General Purpose Timer

6.RTC: Real Time Clock

7.WDT: Watch Dog Timer

8.PWM: Pulse Width Modulation

9.Alerter

10.Keypad

11.PMIC: Power Management IC

12.BMT: Battery Charging Management task

13.AUX task: Auxiliary task

14.ADC Sched.: Analog to Digital Converter Scheduler

https://www.doczj.com/doc/2f11956147.html,B task: The USB 1.1 protocol and driver

16.IrDA task: The IrDA and driver

17.Camera: Camera driver for integrating with 3rd

party camera module

18.MSDC: Memory card driver, supporting SD, MMC cards

and Memory Stick

2)与MCU虚拟设备相关的

1.Resizer: Software for controlling resizer engine

2.Image DMA: Software for controlling the dedicated

DMA channels for images.

3.Image Proc.: Software for controlling Image effect

engine.

4.G2D: Graphic 2D engine.

5.LCD: LCD interface, support 4 layers.

6.ISP: Support image process to compensate the

Lens/sensor effect.

7.GIF decoder: Software for controlling hardware GIF

decoder.

8.Mpeg4/H.263 codec: Software for H.263/Mpeg4 de-

code/encode.

9.JPEG codec: Software for controlling hardware JPEG

decoder/encoder

4.L2/L3/L4 Protocol Stack: GSM Protocal Stack Layer . 该模

块包含了许多GPRS/GSM的Requirement,为应用程式提供了一个GSM/GPRS平台;该软件平台能简单容易地通过AT命令使用Local MMI或PC控制。结构如下:

1.RMI: Remote MMI, for example, PC side. Use

AT-command to communicate with Protocol Stack

through UART port.

2.FMI: Feature rich MMI, described in the above

section. This is the production co-worked with

Pixtel.

3.L4: Layer

4. L4 is a task through which FMI and/or

RMI communicate with PS. L4 task includes several

sub-modules.

1)ATCI: AT command interpreter. Interprets the

AT commands from PC side and commands the L4C

to do the relative actions.

2)L4A: L4 adaptation layer for FMI. The SAP

between FMI and L4A is primitive base.

3)L4C: L4 control entity. Handles all appli-

cations request and response.

4)UEM: User equipments adaptation. Adaptation

for drivers, like Keypad, LED, GPIO, Audio

卐tc.

5)PHB: Phone book management. Handles the phone

books related processing, like: sorting卐tc.

6)SMU: SIM management unit. Handle the security

management, and STK.

7)CSM: Circuit switching protocol stack man-

agement.

8)RAC: Registration access control.

9)SMSAL: Short message service application

layer.

10)TCM: Terminal context management.

4.NVRAM: Non-volatile RAM. This is adaptation layer

to flash memory.

5.SIM: Subscriber identity module. Handle SIM be-

havior as ETSI 11.11 description.

6.DATA: Circuit switched data service. Data task

includes several sub-modules.

1)FAX: Group 3 Facsimile.

2)TDT: Transparent circuit switching data.

3)L2R: Layer 2 relay protocol for non-transparent

circuit switching data.

4)RLP: Radio link protocol for non-transparent

circuit switching data.

https://www.doczj.com/doc/2f11956147.html,: Circuit-switched call control.

8.SS: Supplementary service.

9.SMS: Short message service.

10.SM: Session management.

11.MM/GMM: Mobility management/GPRS mobility man-

agement.

12.SNDCP: Subnetwork dependent convergence protocol.

13.LLC: Logical link control.

14.RR: Radio resource management. RR task includes

several sub-modules.

1)RRM: Handles cell selection and PLMN selection.

2)RMPC: Handles the procedures in Idle/Dedicated

state including the surrounding cell scheme and

measurement reporting.

3)LAPDM: Handles the procedure defined in GSM

layer 2.

4)RLC: Radio link control protocol.

5)MAC: Medium access control protocol.

6)MPAL: Adaptation layer for RR and L1A.

15.PPP: Point to Point protocol layer. This is client

PPP layer.

5.MMI:该部分包含了用户界面框架、应用程式和与协议栈的通讯;

MMI和L4之间是通过消息进行交互得(The interface between MMI and l4 is primitive based)。

1.Framework

1)OSL: OS adaptation layer

2)Task: communication with L4 task.

3)File system: communication with storage de-

vice.

2.GUI

1)Theme

2)UI component

3)Category screen

4)Font

5)Editor

6)T9 or Ezi input method.

7)Access LCD driver.

8)Customization tool.

3.Application

1)Phonebook

2)Messages (SMS, EMS 4.0, CB)

3)Call history

4)Setting. (Phone setting,network setting,

security setup)

5) 5 kinds of user profiles:(情景模式:户外、会

议、家中等)

6)Fun and games

7)Organizers

8)Services

9)Shortcuts

10)In call management.

11)Interrupt events, like charging, alarm.

6.GDI and MDI interface:

1.GDI: Graphic Device Interface, like multi-layers

control. GDI is abbreviate for Graphic Device Interface,

which provides APIs for upper MMI applications, WAP, and

JAVA to process graphic related manipulation, either by

software or by access graphic related HW device (LCD,

HW font engine, HW decoder, etc).

2.MDI: Multimedia Device Interface, including audio and

MPEG4 files control.

7.WAP & MMS:This WAP browser is from Teleca Obigo Q3C version.

MediaTek had several tasks to provide Internet applications.

Currently, we support WAP 1.2.1 and 2.0, MMS 1.1.

1.Mobile suite framework: This is adaptation layer to

protocol stack and GUI interface.

2.Security: This covers WTSL class 1,2.

3.STK: WAP HTTP stack.

4.Provision: WAP provision service.

5.Push: WAP push service.

6.Browse service: WML script parsing.

7.MMS service: MMS script parsing.

8.SMIL service: SMIL script parsing.

9.MMS App: MMS display and scenario handling.

10.Browser App: WAP browser application.

2.The Mobile Engineering Test Architecture( META):提供了RF

测试、NVM读写测试、相关的语音测试(包括铃声和语音)。META由

META-TARGET、META-LAB和META-Factory组成。META-TARGET是

MT62XX系列的图形硬件平台。在只有TST任务、FT任务、NVRAM任务、

L1语音任务的测试模式下才能运行META-TARGET。META-LBA和META

-Factory是pc端的应用程序。META-LBA提供了通用的测试功能:

RF TX/RX/AFC测试、基带测试(包括register access 和 AUX ADC

testing)、NVRAM调整、声音调试(语音的播放、记录和删除,铃声

的下载和播放),这些测试因为没有专用设备支持,必须手工操作。而

META-Factory是为工厂生产线提供RF的校准功能,它支持专用设备

控制。META-LBA是用于实验室或工厂,主要用于RF,BB(Base-band)

和系统集成设计,而META-Factory主要用于产品生成线上自动校准

手机参数的。

3.Catcher:Catcher是pc端工具软件,主要功能是记录消息(primitive)

和调试信息。工程师可使用它去分析手机的运行状态。

4.具体参考文档:MT6219_SW_ReleaseNote.pdf

MTK资源生成使用说明

MTK的资源一般由字符串、图形文件、菜单、字形库等组成;

1.字符串资源生成使用说明:

1)资源文件说明

字符串资源的文件名为ref_list.txt,该文件是Excel文档,格式为:字符串ID+各个语言种类对应的字符串。修改时用Microsoft Execel制表程式

进行编辑。再增加或删除字符串时,要修改最后一行##number的数值,它表

示字符串的总数(听说不改也没有什么影响,我没有去验证,建议进行修改,

这样可能兼容性会更好一些)。注意:字符串资源文件ref_list.txt在MTK

Milan 0538版本中有好几个同名的文件。但有效的文件是在目录

mi-

lan0538(128160)\Milan0538\plutommi\Customer\CustResource\PLUTO_MMI

下。

2)字符串相关宏:ADD_APPLICATION_STRING (stringId,string)

在c源代码文件编写过程中,经常使用用于字符串资源的宏:ADD_APPLICATION_STRING (stringId,string);宏ADD_APPLICATION_STRING

的目的:在资源生成过程中,会在源代码文件去查找使用宏

ADD_APPLICATION_STRING的语句,根据传入stringId的字符串ID,去字符串

资源文件中查找是否有该ID的字符串。如果有则从字符串资源文件中提取出

来;如果没有则定义该ID号,根据该ID和默认的字符串(一般是英文)string

定义一个新的字符串。

3)字符串相关宏:ADD_APPLICATION_STRING2(stringId,string,display)

该宏的前两个参数与宏ADD_APPLICATION_STRING (stringId,string)功能相同,第三个参数display的功能不太清楚。

4)修改ReadExcel.c文件:包含定义字符串ID的头文件。

5)生成的资源文件

1.CustStrRes.c

●StrRes_x[] for each language

●One StrMapSearch[]

index of StrMap_x[]

●gStringList[MAX_LANGUAGES]

2.CustStrMap.c

●StrMap_x[] for each language

●Offset to StrRes_x[]

2.图形资源生成使用说明

1)图形资源文件说明

图形资源集中在以下目录:milan0538(128160)\CustomRes_Milan和milan0538(128160)\Milan0538\plutommi\Customer\Images;其中在Image

目录下的图形资源文件存放的主要是第三方提供的资源和一些游戏资源,其他

的图形资源存放在CusttomRes_Milan目录中,在图形资源文件处理过程中,

ID号会根据资源文件名相对与当前目录的相对文件名生成。

与资源相关的资源代码文件的路径为:mi-

lan0538(128160)\Milan0538\plutommi\Customer\CustResource\PLUTO_MMI\

Res_MMI目录下,在对应的文件中使用ADD_APPLICATION_IMAGE2加入资源文

件。

2)图形资源相关的宏:ADD_APPLICATION_IMAGE(ImageId,ImgFileName)

ImageId是ImagFileName图形资源文件的ID号,ImagFileName是图形资源文件名信息;根据ImageId和ImageFileName生成一个以ID为标识的图

形资源数据。

3)图形资源相关的宏:ADD_APPLICATION_IMAGE2(ImageId,filename,display)

该宏的前两个参数与宏ADD_APPLICATION_IMAGE(ImageId,ImgFileName)的前两个参数功能相同,第3个参数的功能未知。

4)生成的资源文件

1.CustImgRes.c

2.CustImgMap.c

3.CustImgHWData.h

3.菜单资源生成使用说明

1)菜单资源ID说明

每一个菜单项都有一个唯一的ID,菜单项ID的声明在头文件GlobalMenuItems.h中,需要增加菜单项时,在enum GLOBALMENUITEMSID枚

举定义中加入菜单项的ID号。

2)菜单资源相关的宏:ADD_APPLICATION_MENUITEM

ADD_APPLICATION_MENUITEM((MITEM_IMAH_OPT_PSEUDO,0,10,

MITEM_IAH_OPT_SWAP,

MITEM_IAH_OPT_CONFER,

MITEM_IAH_OPT_END_HLD,

MITEM_IMA_OPT_END_ONE_ACT,

// MTK amanda add 1129

MITEM2019_CM_ALL_ACTIVE_END,

MITEM_IAH_OPT_END_ALL,

MITEM_INC_OPT_DEFLN,

MITEM_INC_ACT_OPT_MUTE,

MITEM_INC_ACT_OPT_LOUDSP,

MITEM2024_CM_DTMF,

SHOW,NONMOVEABLE,DISP_LIST,STR_SCR1002_CAPTION,0));

每一个菜单现项包含的信息为:该菜单项的ID,它的父菜单项的ID,子菜单项的总数,各个子菜单的ID,SHOW / HIDE,菜单项的属性,菜单项的显

示模式,该菜单显示的标题,该菜单在标题栏显示的图标ID。

3)生成的资源文件

1.CustMenuTree_Out.c ---input file in MCT tool

2.CustMenuRes.c ---resource of menu from target build

3.CustMenuToolRes.c ---resource of menu from tool

4)经验总结:

ADD_APPLICATION_MENUITEM()里面进行添加菜单项,包括该菜单的id,字符串,图标,母菜单id,子菜单id等等。在显示该菜单界面时,会根据

该菜单id找到所有相关的子菜单id,并画出所有子菜单的字符串和图标。

在进入该界面前还对菜单设置handler。在编译的过程中,还会生成一些mct用的文件。里面列出所有的菜单项,函数是

ADD_APPLICATION_MENUITEM2()。

mtk调整菜单的经验:应该修改这个文件:plutommi\Customer\CustResource\PLUTO_MMI\Res_MMI\Res_MainMenu.c,你可

能修改了plutommi\Customer\Res_MMI目录下的文件了,那里的文件基本都是

拷贝过去的

4.字形库

1)与字形库相关的数据类型

每一类的字形库数据由3部分组成:记录该类所有编码字形数据的数组、记录

每个编码字形的宽度的数组、记录每个编码字形数据在记录该类所有编码字形

数据的数组中的偏移量的数据。

2)生成的资源文件

1.FontRes.c

2.L_en_family_alpha_small.h

3.L_en_family_alpha_medium.h

4.L_en_family_alpha_large.h

5.L_ch_family_ideog.h

3)中文字库生成过程

1.用工具软件MCTExec3.0:在菜单Tools-》Font Tools-》Font Customizer

功能生成相应的字体信息文件。

2.在FontRes_Chinese.h中替换对应的数据。

5.如何增加资源

步骤1:首先定义该资源的ID号. ID范围是根据模块划分得,所以增加某个模块得资源,在该模块目录的头文件所在目录下查找:模块名+res.h,一般该

模块使用的所有资源ID都会定义在头文件里。

步骤2:使用对应的资源配置宏,表明该资源需要处理:

字符串资源配置宏:ADD_APPLICATION_STRING (stringId,string)、ADD_APPLICATION_STRING2(stringId,string,display),另外需要在

ref_list.txt要相应的增加ID和各个语言种类对应的字符串。

图形资源配置宏:ADD_APPLICATION_IMAGE(ImageId,ImgFileName)、ADD_APPLICATION_IMAGE2(ImageId,filename,display)。

菜单资源配置宏:ADD_APPLICATION_MENUITEM。

以上的配置宏都在对应模块的资源C文件里,存放目录在:mi-

lan0538(128160)\Milan0538\plutommi\Customer\CustResource\PLUTO_MM

I\Res_MMI下。

步骤3:执行资源批处理remakeResource.bat,在milan0538(128160)\Milan0538\plutommi\Customer目录下。

随机数产生函数

1.void __cdecl srand(unsigned int);

MMI Task的消息循环处理主入口函数为:

void MMI_task(oslEntryType * entry_param)

从消息队列取消息函数为:

OslReceiveMsgExtQ(…)

怎么样在MTK平台上加入MENU,APPLICATION?

照着res_mainmenu.c自己加

更改mtk平台默认时间(年月日)?

custom_hw_default.c

const kal_uint8 DEFAULT_HARDWARE_YEAR = 5;

const kal_uint8 DEFAULT_HARDWARE_MON = 1;

const kal_uint8 DEFAULT_HARDWARE_DAY = 1;

mtk平台表示是否有sim卡用哪个变量?

全局变量g_pwr_context.IsSimValid 的数值为1表示有SIM卡;数值为0表示没有SIM 卡。

__MMI_USB_CDCACM_ONLY__ ,这个宏里CDCACM是什么意思?

就是USB 仅用于the Universal Serial Bus Communication Device Class Abstract Control Model,没有usb mass storage。这个宏对关机没有影响,还是可以当作U disk。

就是开机的时候插入的话没有mass storage的选项,仅用于充电之类的。就是MMI的feature

GDI VS Pixtel_UI

1.Pixtel_UI是一个非常旧的图形接口,不支持多个图形层(multi-layer ),它不支

持新的功能,如JPEG等。

2.GDI是一个新的图形接口,支持所有的新功能,除了显示字符参。

GDI Layer

GDI Layer在硬件上支持4层,软件上可支持15层。

1.Base Layer

1)Base Layer在GDI中是永远存在的。

2)它和LCM的尺寸相同。

3)默认为激活层。

4)所有的Drawing操作都是在激活层上。

5)Main Lcd和sub lcd分别有一个Base Layer。

6)调用函数gdi_layer_get_active获取Base Layer的handle

7)Base Layer的handle根据Main Lcd和Sub Lcd分别是

GDI_LAYER_MAIN_BASE_LAYER_HANDLE和GDI_LAYER_SUB_BASE_LAYER_HANDLE

2.rule(使用规则)

1)芯片6218和6219支持GDI Layer功能。

2)设置了激活的图形层后,所有的图形操作会在激活图形层中。

3)当不使用GDI Layer功能时,必须激活Base Layer。

4)有些功能是由一对函数组成,必须成对使用,特别小心从一对函数中间的代码

中返回,没有实现成对使用的规则。必须成对使用的函数有:

1.gdi_layer_lock_frame_buffer 和 gdi_layer_unlock_frame_buffer

2.gdi_layer_push_clip 和 gdi_layer_pop_clip

3.gdi_layer_push_text_clip 和 gdi_layer_pop_text_clip

4.gdi_layer_push_and_set_active 和

gdi_layer_pop_and_restore_active

5)每个GDI函数是由互斥量保护着;可以使用GDI_LOCK / GDI_UNLOCK操作加快

应用程式对GDI的操作。

1.例子:

●GDI_LOCK

gdi_layer_lock_frame_buffer

pixtel_UI_reset_clip

show_status_icons

….

gdi_layer_unlock_frame_buffer

gdi_layer_blt

●GDI_UNLOCK

定时器的使用

1.打开定时器函数,注意该定时器值、只执行一次。

pixtel_UI_start_timer( g_gx_panda_context.timer_elapse, mmi_gx_panda_cyclic_timer );

第一个参数是定时器的周期值,单位为ms;第二个参数是定时器的回调函数

2.关闭定时器。

pixtel_UI_cancel_timer( mmi_gx_panda_cyclic_timer );

带入的参数是该定时器的回调函数。

游戏FrameWork如何使用NVRAM保存信息

在NVRAMEnum.h 定义一个与应用程式相关的枚举变量NVRAM_GX_PANDA_SCORE;该枚举类型有nvram_LID_cust_enum、BYTEDATA、SHORTDATA、DOUBLEDATA,根据保存数据类型在相应的枚举类型定义中加入枚举变量;游戏Panda的玩家最好成绩定义为短整型,NVRAM_GX_PANDA_SCORE加入枚举SHORTDATA类型中。

设置游戏构架全局变量g_gfx_cntx相关的成员变量,level_count表示有保存NVRAM的数据总数; grade_nvram_id_list表示保存在NVRAM数据的各个ID号;

grade_value_ptr用于保存根据ID号从NVRAM读出的数据内容

按键处理

1.注册某按键的处理回调函数

void SetKeyHandler(FuncPtr funcPtr, U16 keyCode, U16 keyType)

参数funcPtr:处理回调函数的指针。

参数keyCode:按键的键值。

参数keyType:按键的状态:有Down,Up,Long Press,Repeat。

2.注销某按键的处理回调函数

FuncPtr GetKeyHandler(U16 keyCode, U16 keyType)

参数keyCode:按键的键值。

参数keyType:按键的状态:有Down,Up,Long Press,Repeat。

MMI任务住消息循环处理

MMI任务消息循环处理主函数为:void MMI_task( oslEntryType *entry_param )。 按键时间处理Framework。

在按键事件的处理框架的思路:根据按键总数和按键状态定义了一个二维数组的函数指针数组。消息处理过程中,根据不同的按键值和状态取出函数指针,然后调用

1.数据结构

大端模式(big endian)和小端模式(little endian)

大端模式(big endian)和小端模式(little endian)指的是数据在计算机体系的存储模式,由于存在众多的芯片体系,如x86, power pc, arm等等,由于各个厂家对数据存储的规定不一样,故如果代码从一个系统移植到另一个系统时有可能遇到模式混乱的问题。

例如用一个字长表示1,Intel体系是采用小端模式的,存储为00000000,00000001b,低字节放在低地址位;若体系采用的是大端模式,则存储为00000001,00000000b,低字节放在高地址位。

了解这一点后,就不难用c语言通过对低字节的强制转换实现对大端小端的判断了。

word one = 1;

if (one == (char*)one)

//it is little endian;

else

//it is big endian;

MTK MMI定制个性化主题! (即用户能够任意更改屏幕的背景图片,Title Picture等).

MTK采用多层显示结构,一般只有四层,背景图片应该是base layer上面一层,

你可以修改这一层来达到修改背景图片的目的,至于主题图片只需要修改title_icon

就可以了

mtk PHB_LN_ENTRY宏的意思

应该是通话记录中已拨电话,未接电话,已接电话的最大数目吧,各20个记录。 SMS简介

短消息服务

单从字面上来看,所谓短消息就是通过GSM网络传输的有限长度的文本信息。

而短消息业务是GSM系统提供给手机用户的一种特殊服务,这项服务与传统的语音传输

通讯业务是根本不同的。短消息业务按其实现的方式可以分为点到点短消息业务和小区

广播短消息业务。

点到点短消息业务即通过MO(MS发起短消息业务)和MT(MS终止短消息业务)将一条短消息从一个实体发送到指定目的地址的业务,被发送的信息经过编码后消息长度为140个字节,也就是一条短消息可以包含160个英文字母(7Bit编码)或70个中文汉字(Unicode编码); 还有Concatnated SMS,是在header中实现了一个简单的串接协议,将多条短信串成一条,具体可以参考GSM03.38和GSM03.40

而小区广播短消息业务是指通过发送信息的基站向指定区域中所有短消息用户发送短消息的业务,该业务将发送的短信息编码后,使消息的长度增加为每页82个字节,并且最多能发送20页之多的信息。通常移动公司会使用这种方式在一定的区域内向所有GSM用户循环发送一些具有通用性的信息,如交通信息、天气情况、股市信息、新闻等。

前面已经说过,短消息业务是GSM系统中提供的一种GSM手机之间及与短消息实体之间通过业务中心进行文字信息收发的方式,其中业务中心是独立于GSM网络的一个业务处理系统,主要功能是提交、存储、转发短消息,并完成与PSTN、Internet等网络的互通,以实现来自其他SME(Short Message Entity)(如:人工台/自动台、咨讯平台等)的短消息的传递。

目前短消息业务已经在全国各大中小城市推出,以往用户需要到营业厅进行申请开通该业务,而且每月还需要缴10元的使用费,但现在却是免费开通,也免去了每月10元的使用费,每条信息收费0.10元,而且是单向的。

短消息的优点

最新的信息如何沟通?如果选择纸媒体大概需要三天左右;如果选择传单散发一天左右;如果选择广播、电视传播,速度虽然快,但是针对性差;如果选择互联网发布,不少人还不懂,懂的人也不可能时刻在网上。如果使用手机短信息,不但可以做到信息的及时发布,而且可以做到信息的个性化定制即使对方关机或是不在服务区内,他也可以在对方开机或回到服务区后传入对方的手机。同时,这项服务只收取发送方每条信息0.l0元,接收方不花钱。

目前可以发送短消息的实体(SME)包括移动用户、固定用户、语音信箱、寻呼中心、信息点播平台、Internet网络及其他业务系统。由于短消息发送占用的是信令通道,当移动台占线而无法通话的情况下仍可接收短消息。当移动台关机或不在服务区时,短消息发送会失败,但短消息中心会保存该短消息,并在HLR中设置等待标志,一旦用户开机或返回服务区,GSM系统会及时通知短消息中心重发。用户会即刻收到短消息。通过短消息中心及其相关增值业务系统还可以实现诸如股票交易、银行业务、信息点播、GPS监控、e-Mail通知等信息服务,及日程安排、预约留言、电话号码薄等等移动服务。

我们可以把短消息业务当作是GSM系统中最为简单和方便的数据通信方式,它不需要附加其它较为庞大的数据终端设备,仅使用手机就可以达到进行中、英文信息交流目的。

短信息的优点总结下来就是以下几点:

开通方便

人们已经厌倦了开通新业务时烦琐的手续,而短信息服务不需要申请,所有的全球通手机都自动支持。用户只需要按动几个键,做一些简单的设定,就可以享受这项服务了。

收费低廉

资费始终是消费者们最关心的问题。虽然语音业务的资费不断下调,但对普通大众来说,拨打或者接听手机的时候,仍然需要“掐着表”。而不管是长途还是市内,短信息每发送一条仅0.1元,而且接收免费。与打和接都是每分钟0.4元的语音业务相比,价格优势不言而喻。

内容丰富

种类繁多的短信中心提供了各种各样的定制服务,用户可以自由挑选组合所需信息。证券业人士可以定制股市行情,地产业人士可以定制地产信息,经常出行的人可以定制天气预报,体育迷可以定制体育新闻……如此丰富的内容使每个行业、每个阶层的人都

能找到属于自己的信息。

随时随地

短信息不像打电话,必须要求接听方也同时在另一端。用户可以随时随地发送短信息,不用管对方有没有开机,是不是在服务区,也不用怕已经是深夜而打扰对方的睡眠,因为短信息可以存储在短信平台的服务器上,一旦对方开机,短信息就会自动发送到他那里。

文字的特殊魅力

现代社会的通信工具使人们习惯于打电话,逐渐疏于写信,但在很多方面,文字有着语音所无法替代的效果。比如,时下几乎每个手机用户都曾经收到一些幽默、趣闻,这也是语音所无法做到的。

以上几点还仅仅是站在用户的角度上来看。如果从技术上的角度上来看,它还有以下几个优点:

点到点的通讯方式

只要知道对方的手机号码,就可以直接向对方的手机上发送短信息。回复信息也是如此。这样的工作方式使得手机就如同Internet网络中拥有固定IP地址的计算机一样,可以随时随地与它建立连接。

24小时在线

只要手机不关,那么随时可以接收短信息。同时,用户也可以随时发送短信息。从广义上来说就是24小时在线。另外短消息中心具有消息的临时存储能力,因此即使是由于关机而不能接收消息,在开机后仍能接收到先前没有接收的短消息。

具有承载多种数据的能力

短消息有三种模式:块模式、PDU模式和文本模式。其中支持块模式的手机厂商十分少,基本上都支持PDU模式和文本模式。特别值得一提的是:通过PDU编码的短信息内容可以是:文字、声音或图像。那么从广义上来看,也可以将一般的数据文件经过PDU 编码后进行发送和传输。随着短信息协议的发展,短信息将来将能够支持更多样化的数据。

可以实现Push和Pull两种不同的工作模式

总的来说,短消息是以Push方式工作的。如果Push的发起者是服务提供商,那么服务提供商就可以将用户定制的信息发送直接推送给用户。如果Push的发起者是用户,接收方是服务提供商,那么服务提供商可以使用短信息立即响应用户的请求。这个时候可以说是一种Pull的方式在工作。

可以保障传输中的安全

如果用户使用STK卡,那么短信息在发送之前,可以通过STK卡将信息加密后进行传输。在到达目的地后由接收者将信息解密。实现了点到点的信息安全保障。

短信息的这些优点是目前很多无线网络通讯所不能及的。

关于Category Screen

●相关源代码文件

1.Event.c

2.wgui_categories.c

3.wgui_inline_edit.c

●数据结构

1.数据结构wgui_inline_item

typedef struct _wgui_inline_item

{

dword flags;

// 菜单属性的标志位,用于标明该菜单项的类别。

//INLINE_ITEM_TYPE_SELECT:表示是个选择菜单。

//INLINE_ITEM_TYPE_CAPTION:表示是个Text Label

s32 key_code;

s32 key_event;

// 用于设置InlineItem为Activation。

U8 *text_p;

//表示激活选项的字符串。

UI_image_type side_img;

//菜单项的图标

U8 show_img_flag ;

//显示菜单项图标的标志位

void *item;

//菜单项内容指针

void (*handler)(s32 x,s32 y,s32 width,s32 height,s32

key_code,s32 key_event,U8** text_p,void

*item,dword flags,U8* history_buffer);

//菜单项的处理函数。

} wgui_inline_item;

2.数据结构wgui_inline_item_select

typedef struct _wgui_inline_item_select

{

dword flags;

S32 n_items;

// 表示选项的个数

S32 *highlighted_item;

//激活的选项

U8 **list_of_strings;

//表示描述菜单选项的字符串

void (*item_highlighted)(s32 item_index);

//显示回调函数。

} wgui_inline_item_select;

3.数据结构PseventInfo

typedef struct _PseventInfo

{

U16 eventID;

//事件的ID,如定时器、硬件事件

PsFuncPtr entryFuncPtr;

//对应事件ID的处理函数指针。

}PseventInfo;

4.数据结构PsInteventInfo

typedef struct _PIntseventInfo

{

U16 eventID; /* for timer & hardware events */

//事件的ID号。

PsIntFuncPtr entryIntFuncPtr;

//事件处理函数指针

PsIntFuncPtr postIntFuncPtr;

//事件传送处理函数指针

}PsInteventInfo;

5.数据结构hiliteInfo

typedef struct _hiliteInfo

{

FuncPtrShort hintFuncPtr;

//提示信息处理函数指针。

FuncPtr entryFuncPtr;

//入口处理函数指针。

}hiliteInfo;

6.数据类型FuncPtr

Typedef void (*FuncPtr)( void );

局部全局变量

1.static U16 currMaxHiliteInfo;

表示maxHiliteInfo数组HiliteItem的数量

2.static U16 maxProtocolEvent;

表示数组protocolEventHandler被使用的总数,很少使用该全局变量。

3.static U16 maxInterruptEvent;

表示数组interruptEventHandler被使用的总数

4.static U16 currParentID;

当前Screen的父类ID

5.static U16 currKeyCode;

保存当前按键的键值

6.static U16 currKeyType;

保存当前按键的状态(Up、Down、Long Press etc.)

7.static U16 currHiliteID;

保存当前高亮显示的ID

8.static U16 currEntryScrnID;

不太清楚

9.static FuncPtr currEntryFuncPtr;

进入下个激活Screen的处理函数指针。

10.static U16 currExitScrnID, currTopScrnID;

currTopScrnID保存当前激活的Screen的ID,currExitScrnID保存当前激活

Screen的ID号,在设置一个新的Screen ID时,先设置currTopScrnID,根据

currExitScrnID进行当前激活Screen退出处理,再设置currExitScrnID为新

的Screen ID。

11.static FuncPtr currExitFuncPtr;

退出当前激活Screen的处理函数指针。

12.static PseventInfo protocolEventHandler[ MAX_PROTOCOL_EVENT ];

注册Protocol事件的ID和处理函数指针。

13.static PsInteventInfo interruptEventHand-

ler[ MAX_INTERRUPT_EVENT ];

注册interrupt事件的ID和处理函数指针。

14.static FuncPtr currSubLcdExitFuncPtr = NULL;

注册退出Screen时对SubLcd的处理函数

●相关全局变量

1.FuncPtr currKeyFuncPtrs[ MAX_KEYS ][ MAX_KEY_TYPE ];

根据按键的键值和状态注册每个按键的处理函数。

2.hiliteInfo maxHiliteInfo[ MAX_HILITE_HANDLER ];

不太清楚

3. U8 hintDa-

ta[ MAX_SUB_MENUS ][ MAX_SUB_MENU_HINT_SIZE ];

菜单项数据提示内容。

4.U8 subMenuDa-

ta[ MAX_SUB_MENUS ][ MAX_SUB_MENU_SIZE ];

菜单项字符串内容

5.PU8 subMenuDataPtrs[ MAX_SUB_MENUS ];

当前菜单的字符串数据

6.PU8 hintDataPtrs[ MAX_SUB_MENUS ];

当前菜单的菜单项提示数据

7.U8 processUpRepeatKey = 0;

表示是否处理Up和Repeat的按键状态,当有按键按下,该变量设置为1,表

示可以处理Up和Repeat的按键状态。当Up状态时,设置为0。

●与文件Events.c相关的函数接口

函数名称:void InitEvents( void )

功能说明:初始化与Event相关的全局变量,包括Screen ID相关的全局变量,按键处理函数数组currKeyFuncPtr,数组protocolEventHandler,数组

maxHiliteInfo,数组InterruptEventHandler和菜单数组

subMenuDataPtrs。注意:菜单项数据(subMenuData)没有初始化

函数名称:void DeInitFramework_KeyAndEventHandler( void )

功能说明:初始化FrameWork和按键、事件的处理。

函数名称:void DeInitFramework_History( void )

功能说明:对Framework history进行初始化。

函数名称:void DeInitFramework( void )

功能说明:调用了初始化函数DeInitFramework_KeyAndEventHandler和DeInitFramework_History

函数名称:void ExecuteCurrKeyHandler( S16 keyCode, S16 keyType )

功能说明:根据按键键值和按键状态执行相应的按键处理程式。使用了全局数组currKeyFuncPtrs,全局变量currKeyCode、currKeyType进行保存按键

状态。

参数说明:keyCode:按键键值;keyType:按键状态;

函数名称:void ExecuteCurrProtocolHandler( U16 eventID, void *MsgStruct,

int mod_src, void *peerBuf )

功能说明:根据事件ID执行对应的处理程式。

参数说明:

函数名称:void ExecuteCurrExitHandler( void )

功能说明:执行Screen退出处理程式。清除InterruptEventHandler,保存当前Screen数据到History,执行注册的退出函数currExitFuncPtr、

ExitCategoryFunction,清空全局变量currEntryFuncPtr、

currExitFuncPtr,执行UI_common_screen_exit(),设置IsBackHistory

为FALSE。

函数名称:void ExecuteCurrSubLcdExitHandler( void )

功能说明:执行注册的CurrSubLcdExitFuncPtr,然后清空该函数指针。

函数名称:void ExecuteCurrHiliteHandler( S32 hiliteid )

功能说明:执行指定ID的菜单项处理程式,调用了函数ExecuteCurrHiliteHandler_Ext

参数说明:hiliteid:表示菜单项的ID

函数名称:void ExecuteCurrHiliteHandler_Ext( S32 hiliteid )

功能说明:执行指定ID菜单项的处理程式

参数说明:hiliteid:表示菜单项的ID

函数名称:U16 GetCurrHiliteID( void )

功能说明:获取激活的菜单项ID。

返回值:激活的菜单项ID。

函数名称:void SetHiliteHandler( U16 itemid, FuncPtr hiliteFuncPtr )

功能说明:设置指定菜单项的处理程式。

参数说明:itemid:指定的菜单项ID;hiliteFuncPtr:对应的处理程式。

函数名称:void ClearHiliteHandler( U16 itemid )

功能说明:清除指定菜单项的处理程式

参数说明:itemid:指定的菜单项ID;

函数名称:void ConstructHintsList( U16 currParentID, U8 **hintArray ) 功能说明:根据菜单项的ID,设置子菜单的提示内容。

参数说明:currParentID:菜单项的ID;hintArray:提示内容列表

函数名称:void SetHintHandler( U16 itemid, FuncPtrShort hintFuncPtr ) 功能说明:设置指定菜单项显示提示内容的处理程式,可根据不同的风格,设置对应的处理程式。

参数说明:itemid:指定的菜单项ID;hintFuncPtr:显示提示内容的处理程式。函数名称:void ClearHintHandler( U16 itemid )

功能说明:清空指定菜单项提示显示处理程式。

参数说明:itemid:指定的菜单项ID;

函数名称:void ClearAllHiliteHandler( void )

功能说明:清除所有菜单项的提示处理程式

函数名称:void SetParentHandler( U16 parentid )

功能说明:设置当前界面的父类ID,保存在全局变量currParentID。

参数说明:parentid:父类ID号。

函数名称:U16 GetParentHandler( void )

功能说明:获取父类ID。

返回值:父类ID。

函数名称:void SetKeyHandler( FuncPtr funcPtr, U16 keyCode, U16 keyType ) 功能说明:设置按键处理程式

参数说明:funcPtr:处理程式;keyCode:按键值;keyType:按键状态类型

函数名称:FuncPtr GetKeyHandler( U16 keyCode, U16 keyType )

功能说明:根据按键值和按键状态类型得到处理程式的指针。

参数说明:keyCode:按键值;keyType:按键状态类型

函数名称:void SetGroupKeyHandler( FuncPtr funcPtr, PU16 keyCodes, U8 len, U16 keyType )

功能说明:设置一组按键的处理程式

参数说明:funcPtr:指定的按键处理程式;keyCodes:按键值数组;len:按键值数组的个数;keyType:按键状态的类型。

函数名称:void ClearKeyHandler( U16 keyCode, U16 keyType )

功能说明:清除指定按键的处理程式

参数说明:keyCode:指定的按键值;keyType:按键状态类型

函数名称:void ClearAllKeyHandler( void )

功能说明:清除所有按键的处理程式

函数名称:void PowerAndEndKeyHandler( void )

功能说明:根据不同的状态设置按键Power和End键的处理程式

函数名称:void SetProtocolEventHandler( PsFuncPtr funcPtr, U16 eventID ) 功能说明:注册指定Protocol事件的处理程式到全局数组protocolEventHandler。参数说明:funcPtr:处理程式;eventID:指定的Protocol事件ID

函数名称:void ClearProtocolEventHandler( U16 eventID )

功能说明:清除指定的Protocol事件的处理程式

参数说明:eventID:指定的protocol事件ID

函数名称:void ClearAllProtocolEventHandler( void )

功能说明:清除所有protocol事件的处理程式,清空全局数组currProtocolHandler。

函数名称:void SetEntryHandler( U16 scrnID, FuncPtr entryFuncPtr )

功能说明:设置Sreen的ID号和入口处理程式,保存在全局变量currEntryScrnID 和currEntryFuncPtr。

参数说明:scrnID:Screen ID;entryFuncPtr:入口处理程式。

函数名称:void ClearEntryHandler( void )

功能说明:清除Sreen ID和入口处理程式(清除全局变量currEntryScrnID和currEntryFuncPtr)

函数名称:static void SetGenericExitHandler( U16 scrnID, FuncPtr exit-FuncPtr, FuncPtr entryFuncPtr )

功能说明:设置Screen ID,入口处理函数和退出处理函数(保存在全局变量CurrExitScrnID,currEntryFuncPtr,currExitFuncPtr)

参数说明:scrnID:screen ID;exitFuncPtr:退出处理函数;entryFuncPtr:入口处理函数。

函数名称:void GenericExitInlineScreen( U16 scrnID, FuncPtr entryFuncPtr ) 功能说明:退出inline editor screen(category57Screen),保存scrnID,入口处理程式和category57screen的数据到history中。

参数说明:scrnID:screen ID;entryFuncPtr:入口函数。

函数名称:void GenericExitScreen( U16 scrnID, FuncPtr entryFuncPtr )

功能说明:通用退出处理函数,把screen ID和入口处理函数和与category screen 相关的数据保存到history。

参数说明:scrnID:screen ID;entryFuncPtr:入口处理函数。

函数名称:U16 GetExitScrnID( void )

功能说明:获取Exit Screen的ID,返回全局变量currExitScrnID的值。

返回值:Exit Screen的ID

函数名称:void SetSubLcdExitHandler( FuncPtr exitSubLcdFuncPtr )

功能说明:设置外屏退出处理函数,保存在全局变量currSubLcdExitFuncPtr。

参数说明:exitSubLcdFuncPtr:外屏退出处理函数。

函数名称:void ClearExitHandler( void )

功能说明:清除Screen ID,入口函数,退出函数;清除全局变量currExitScrnID、currEntryFuncPtr、CurrExitFuncPtr;

函数名称:void ClearSubLcdExitHandler( void )

功能说明:清除外屏退出处理函数,清除全局变量currSubLcdExitFuncPtr。

相关主题
文本预览
相关文档 最新文档