mtk mmi 常用

MTK笔记

L4是MMI/AT和协议栈的适配层。
ATCI是AT命令解析器。
UEM是用于抽象如键盘、LED、通用输入/输出等基本设备,是用户设备模块。
PHB就是电话本。
SMU是安全管理单元(SIM、STK)。
CSM是呼叫服务管理。
RAC是登记访问控制。
SMSAL是SMS应用层。

内核服务包括定时器、任务管理和进程间通信、资源和内存管理、日志和异常处理。OSL是封装OS API的层,而KAL则是封装内核的层,应当在OSL以上来开发。

数据类型定义(VRE的头会比MTK更乱吗?)

* 基本数据类型:kal_non_specific_general_types.h。
* KAL相关的定义:kal_release.h。(好变态的名字,对不对啊?)
* MMI任务中和OSL相关的数据类型定义:PixtelDataTypes.h。

任务之间的通信是通过SEND_ILM来完成的,从实现来看是通过一个消息队列来完成的,关注struct ilm_struct定义,SAP是业务访问点。发送消息之前,首先要把本地参数缓冲区分配出来,然后赋值发送请求。

Highlight事件是用户通过键盘触发的事件,与提示信息关联。

SetProtocolEventHandler实际上就是MMI FRAMEWORK提供的回调函数注册工具,与MMI相关的所有事件都可以通过这个函数登记——包括网络。

按键码需要注意的几个特殊键:KEY_END是挂机键、KEY_SEND是摘机键。

MMI字符串资源的加入:

1)在ref_list.txt中加入字符串。
2)把字符串ID加入到ID枚举中。
3)使用ADD_APPLICATION_STRING2来加入字符串。
4)使用 GetString_r()获得字符串。
5)使用APP_BASE来保证字符串ID的唯一性。

图片资源的加入:

1)把图片加入应用程序目录。
2)把图片ID加入枚举类型中。
3)使用ADD_APPLICATION_IMAGE2来加入图片资源。
4)绘图时就可以直接使用图片ID来绘制了。
5)使用APP_BASE来保证图片ID的唯一性。

MMI各模块对应的目录:

Idle Screen:plutommi\mmi\IdleScreen
Main Menu:plutommi\mmi\MainMenu
Phone Book:plutommi\mmi\PhoneBook
Messages:plutommi\mmi\Messages
Call History:plutommi\mmi\Calls
Call Management:plutommi\mmi\CallManagement
Setting:plutommi\mmi\Setting
File Manager:plutommi\mtkapp\FileMgr
Fun &Games:plutommi\mmi\FunAndGames
User Profiles:plutommi\mmi\PROFILES
Organizer:plutommi\mmi\Organizer
Services:plutommi\mmi\SAT
Shortcuts:plutommi\mmi\Shortcuts
Audio Player:plutommi\mtkapp\AudioPlayer
Camera:plutommi\mtkapp\Camera
FMRadio:plutommi\mtkapp\FMRadio
Photo Editor:plutommi\mtkapp\PhotoEditor
Sound Recorder:plutommi\mtkapp\SoundRecorder

MMI特性定义文件在mcu\plutommi\Customer\CustResource\MMI_features[PROJ].h。

菜单的定义在GlobalMenuItems.h中。

----------------------------------------------------------------------

MTK平台入门

       简介
1.1        目的及其应用范围
本文档介绍了mtk平台的一些基础应用和实现,适用于刚参加mtk软件开发人员
1.2        术语定义
MMI – Man-machine interface,人机界面
FMI – Feature rich MMI
1.3        参考资料
[1] MMI High level design specification, pixtel
       平台安装:
2.1        安装ads1.2
2.2        安装perl
2.3        安装usb 驱动,用于下载
       编译命令:

   通过 new, update, remake, clean all, clean modules, codegen. 来动作生成bin file (二进字文件)
类如:
假设项目是gsm项目,项目名称为m720,则有这些命令:
make custom=m720 gsm resgen(修改了资源时用这个命令生成新资源)
make custom=m720 gsm remake(用于生成bin档即可烧录到手机的文件)
make custom=m720 gsm clean  custom(把custom模块生成的obj文件删除)
make custom=m720 gsm update custom(update custom 模块)
make custom=m720 gsm new(等于执行了前三个步骤,即clean、resgen、remake)
make custom=m720 gsm update mmiresource(更新了资源但不会更新代码)

       添加一个字符串:
首先给该字符串起一个名字,即ID:如STR_GLOBAL_OK,这个即是一个字串的id也就是名字,而这个字串的具体内容(比如STR_GLOBAL_OK的内容是“Ok”),可以用下面的语句来添加,
ADD_APPLICATION_STRING2(STR_GLOBAL_OK, "Ok","Global String- OK");
如果有对应的中文字符,则应在ref_list.txt中按照固定的格式添加中文字串。如:
STR_GLOBAL_OK        GLOBAL        6        Global String- OK        Ok        確定        确定

       添加一个菜单:
首先给这个菜单起一个名字,即ID:如ORGANIZER_CALENDER_MENU,这个即是一个菜单的id也就是名字,但要把这个菜单加入到某个父菜单之下,则须指定其父菜单,方式可以参照:ORGANIZER_CALENDER_MENU这个菜单的方法,在res_mainmenu.c里,
        ADD_APPLICATION_MENUITEM((MAIN_MENU_ORGANIZER_MENUID,IDLE_SCREEN_MENU_ID,ORG_ENUM_TOTAL,
                        #if defined(__MMI_CALENDAR__)
                                ORGANIZER_CALENDER_MENU,
                        #endif
                        #if defined(__MMI_TODOLIST__)
                                ORGANIZER_TODOLIST_MENU,
                        #endif
                                ORGANIZER_ALARM_MENU,
                               
                        #if defined (__MMI_WORLD_CLOCK__)       
                                ORGANIZER_WORLDCLOCK_MENU,
                        #endif
                        #ifdef __MMI_MESSAGES_CLUB__
                                MAIN_MENU_SHORTCUTS_MENUID,
                        #endif
                        #ifdef __SLT_LONG_DISTANCE_DDD__
                        MENU_LONG_DISTANCE_DDD,
                        #endif
                                SHOW,MOVEABLEACROSSPARENT,DISP_LIST,
                                MAIN_MENU_ORGANIZER_TEXT,MAIN_MENU_ORGANIZER_ICON));
这个语句说明菜单ORGANIZER_CALENDER_MENU是菜单MAIN_MENU_ORGANIZER_MENUID的子菜单。而在res_organizer.c里,
        ADD_APPLICATION_MENUITEM((ORGANIZER_CALENDER_MENU,MAIN_MENU_ORGANIZER_MENUID,
        3,
        MENU_GOTO_TASK_CAL,
        MENU_ID_CLNDR_JUMP_TO_DATE,
        MENU_CAL_TYPE,
        SHOW,
        MOVEABLETOSHORTCUT,DISP_LIST,
                ORGANIZER_MENU_CALENDER_STRINGID,ORGANIZER_MENU_CALENDER_IMAGEID));
这个语句则声明了ORGANIZER_CALENDER_MENU菜单所拥有的子菜单。
       
1.        关于宏ADD_APPLICATION_STRING2()、ADD_APPLICATION_MENUITEM()可以参考文件Writing Applications Using Pixtel MMI Platform.pdf
更深入的了解可以查看文件夹Document\MMI Design Documents\Pixtel下的文件。
       下载程序:
在当前工程build文件夹中找到对应的项目,打开项目文件夹,里面有*.bin文件就是我们要下载的文件。
       编译错误信息查看:
如果在编译中某一模块编译不通过,我们可以在build\项目名称\log 中查看log信息
       模拟器运行:
  首先安装好VC,然后直接运行工程目录下的PLUTOMMI\mmi\PixtelMMI.dsw文件,先编译资源文件,然后执行运行就可以了。

       修改铃声资源:
一般项目开发修改的铃声资源主要是来电铃声,开关机铃声,翻合盖提示音,信息提示音

****************

如何修改mtk的系统开机铃声

1) 使用AudioResGen将目标铃声转变成数据,转换后的数据在AudioResGen目录下的resource_audio.c中,数组的名称就是你的铃声文件名称;
2)将生成的数组数据拷贝到工程中的\\custom\audio\xx_bb\resource_audio.c中;
3)将const audio_resource_struct mtk_resource_sounds[]={中的第一个修改成目标数组名称;
这样就可以了。

注:关键的步骤是需要在这之前将AudioResGen目录下的所有txt文件内容清空,而不是删除这些文件,然后将音频资源

所在的绝对路径写入其中任何一个文件再运行exe就可以了

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qikaibinglan/archive/2010/02/07/5296149.aspx

--------------------------------------------------------------------------

从Google analytics的看到有网友通过“mct 如何把声音转成数组”访问了本站。

从我个人的喜好来说使用MCT来把铃声转换数组并不方便,我觉得最方便的途径是使用tools目录下的AudioResGen工具。

AudioResGen工具简单快捷,把铃声的路径写到AudioResGen工具包下如“sound.txt”这样的TXT文件里,然后运行AudioResGen.exe,生产两个C文件custpack_audio.c和resource_audio.c,数组就在这两个文件里了。

http://www.rdsns.com/archives/164

****************

9.1.修改来电闹钟铃声资源:
修改的文件是custpack_audio.c中
const custpack_audio_header custpack_audio =
       15,
{
        {Y300Mid01_mp3, sizeof(Y300Mid01_mp3), 5},
        {Y300Mid02_mid, sizeof(Y300Mid02_mid), 17},
        {Y300Mid03_mid, sizeof(Y300Mid03_mid), 17},
        {Y300Mid04_mid, sizeof(Y300Mid04_mid), 17},       
        {Y300Mid05_mid, sizeof(Y300Mid05_mid), 17},
        {Y300Mid06_mid, sizeof(Y300Mid06_mid), 17},
        {Y300Mid07_mid, sizeof(Y300Mid07_mid), 17},
        {Y300Mid08_mid, sizeof(Y300Mid08_mid), 17},       
        {Y300Mid09_mid, sizeof(Y300Mid09_mid), 17},
        {Y300Mid10_mid, sizeof(Y300Mid10_mid), 17},
        {Y300Mid11_mid, sizeof(Y300Mid11_mid), 17},       
        {Y300Mid12_mid, sizeof(Y300Mid12_mid), 17},
        {Y300Mid13_mid, sizeof(Y300Mid13_mid), 17},
        {Y300Mid14_mid, sizeof(Y300Mid14_mid), 17},
        {Y300Mid15_mp3, sizeof(Y300Mid15_mp3), 5},
}
custpack_audio 数组 第一个参数是铃声总数
                    第二个参数是铃声list ,其中包含铃声数据,大小,类型,
铃声数据可以用MCT 这个工具转换,然后代替各个数组的数据,提示最好不要修改数组名称
类型可以在mdi_audio.h 中查找,类如 这里的5 代表mp3,17代表mid
            
9.2修改开关机铃声,翻合盖提示音,信息提示音
resource_audio.c---------------------开关机铃声,翻合盖提示音,信息提示音
开关机铃声和翻合盖提示音对应的数组是一样的
const audio_resource_struct mtk_resource_sounds[]={
        {resource01_mid, sizeof(resource01_mid), 17},
        {resource02_mid, sizeof(resource02_mid), 17},
        {resource03_mid, sizeof(resource03_mid), 17},
        {resource04_mid, sizeof(resource04_mid), 17},
        {resource05_mid, sizeof(resource05_mid), 17},
        {resource06_mid, sizeof(resource06_mid), 17},       
        {resource07_mid, sizeof(resource07_mid), 17},
        {resource08_mid, sizeof(resource08_mid), 17},



};

信息提示音对应的数组是:
const audio_resource_struct mtk_resource_message_sounds[]={
        {message01_mp3, sizeof(message01_mp3), 5},       
        {message02_mp3, sizeof(message02_mp3), 5},
        {message03_mid, sizeof(message03_mid), 17},
        {message04_mid, sizeof(message04_mid), 17},       
        {message05_mid, sizeof(message05_mid), 17},
        {message06_mid, sizeof(message06_mid), 17},
        {message07_mid, sizeof(message07_mid), 17},
        {message08_mid, sizeof(message08_mid), 17},
        {message09_mid, sizeof(message09_mid), 17},
        {message10_mid, sizeof(message10_mid), 17},
};

9.3 调整铃声总数和id
resource_audio.h--------------------设置铃声id 和总数

铃声ID大小不需要调整,只是根据铃声总数变了,增加或者减少ID

********************

MTK声音播放相关

 

MTK播放声音的函数:
(1).mdi_audio_snd_play_file_with_vol_path();这个函数是播放声音文件的函数,第一个参数是文件的路径,注意如果是U8类型,只能播放英文文件名的函数,一般应将文件名设置为U16型的.
(2).mdi_audio_snd_play_string_with_vol_path();这个函数是播放资源类型的声音文件.

void play_aud_test()
{
U32 audio_len;
U8 *audio_data;
U8 audio_type;
U16 repeat = 1;
mdi_result result;
audio_data = get_audio((U16) (AUD_ID, &audio_type, &audio_len);
if (audio_data != NULL)
{
     result = mdi_audio_snd_play_string_with_vol_path(
                 (void*)audio_data,
                 audio_len,
                 repeat,
                 NULL,
                 callback,
                 volume,
                 speaker);
}
}

在这个函数里面,先要从资源中根据资源id获取到生硬数据,同时,可以得到声音类型和声音的长度.然后再用该函数播放之.

(3).如果要录音的话,首先要发出请求,mmi_sndrec_send_record_req();然后把录制的数据保存到自己的文件中,这个具体的录制过程不得而知,mtk对其做了封装,只需要发送这个消息给底层就可以了.所录制的声音都保存在SoundRecorder.fullname这个文件里面.

********************

 

********************

MTK按键的声音

你换的是code还是wav?
我这边是mtk_resource_keypad_tones调用的是static const unsigned char bubbles_wav[]
你试着替换这边的。

另外注意编译是不是没有问题,编译之后再回来看看这边的code是否还是你修改后的code。

 

你要在主make文件里把CUST_KEYPAD_TONE_SUPPORT改成TRUE才会播放
你改的那个按键音,否则播放的是DTMF音。

 

你的播放方式是否修改了啊?
平台默认的是*.midi格式的音乐,你要是换成*.mp3,*.wav播放方式要进行相应的修改的!


把铃声资源换掉就行了,这还用跪求,害得我专门进来看看
********************


10        修改图片资源:
添加图片资源一般用这个函数:ADD_APPLICATION_IMAGE2,它的参数分别是:图片ID,图片放置路径,图片用途描述。类如:

ADD_APPLICATION_IMAGE2( MAIN_MENU_SYSTEM_ICON ,       CUST_IMG_PATH"\\\\MainLCD\\\\MainMenu\\\\BI_DEGREE\\\\MM_ITEM.gif" , "Icon used for system in mainmenu" );

图片资源的修改主要分几种情况:
10.1   直接替换图片资源,不需要调整座标:类如开关机动画,墙纸,开关机mp4等,这种修改资源很简单,但是修改时要注意图片来名称和类型与代码中是否匹配。
10.2   修改需要调整座标的图片:如日历,计算器等,这些图片修改需要ID给出座标,然后我们在代码中修改。
10.3   修改用tools生成座标的图片:主要是MP3 ,MP4 ,FM,世界时钟,座标调整可以用mct tools 来做。关于这个工具的使用
10.4  主题的修改也可以mct tools 来做

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值