展讯平台窗口创建流程

合集下载

展讯学习笔记(整理)

展讯学习笔记(整理)

创建窗口的步骤:第一步:创建窗口数据表WINDOW_TABLE( MMIPB_MAIN_WIN_TAB ) ={WIN_FUNC((uint32)HandleMainWinMsg),WIN_ID( MMIPB_MAIN_WIN_ID ),CREATE_TAB_CTRL(GUI_TAB_ITEM_LEFT,GUITAB_STATE_NONEED_SCROLL|GUITAB_STATE_SINGLE_LINE,MMIPB_SEARCH_LIST_TAB_CTRL_ID),END_WIN};第二步:实现窗口处理函数:LOCAL MMI_RESULT_E HandleMainWinMsg(MMI_WIN_ID_T win_id,MMI_MESSAGE_ID_E msg_id,DPARAM param){MMI_RESULT_E recode = MMI_RESULT_TRUE;switch(msg_id){case MSG_OPEN_WINDOW:break;case MSG_GET_FOCUS:break;case MSG_LOSE_FOCUS:break;case MSG_FULL_PAINT:break;case MSG_CLOSE_WINDOW:break;default:break;}return recode;}第三步:调用MMK_CreateWin创建窗口5,在MS_MMI/source/mmi_app/app目录下添加新模块:修改app.mk文件中的宏:MSRCPATH、MINCPATH、SOURCES6,字库资源放在目录MS_MMI\source\resource\mmi_res_320x480_universe\FONT中7,铃声资源放在目录MS_MMI\source\resource\mmi_res_320x480_universe\RING中8,颜色资源表在目录MS_MMI\source\resource\mmi_res_320x480_universe\color_table.xls 9,开机log在MS_MMI\source\resource\mmi_res_320x480_universe\logo.bmp10,mmi_res_prj_def.h文件中:定义语言信息、定义全局信息、定义皮肤信息、定义模块信息、定义铃声信息、定义字库信息11,在每个模块中,基本上都有一个自己模块的资源ID 头文件,例如common模块的common_mdu_def.h头文件12,mmi_theme.c和mmitheme_xx.c中实现了几乎所有控件的风格。

展讯 build环境使用手册

展讯 build环境使用手册

展讯 build环境使用手册展讯 Build 环境使用手册一、简介展讯 Build 环境是为展讯公司开发团队提供的一套集成开发环境,旨在为开发人员提供便捷、高效的开发工具和平台。

本手册将详细介绍展讯 Build 环境的安装、配置和使用方法。

二、安装1. 下载展讯 Build 环境安装包展讯 Build 环境安装包可以从展讯公司的官方网站下载。

请确保从官方渠道下载,以确保安装包的安全性和完整性。

2. 执行安装程序双击下载的安装包,按照提示一步步进行安装。

建议选择默认安装路径,以便后续操作的顺利进行。

3. 完成安装安装完成后,会在您选择的安装路径下生成展讯 Build 环境的文件夹。

您可以在此文件夹中找到所有的开发工具和相关资源。

三、配置1. 环境变量设置为了能够方便地在任意路径下调用展讯 Build 环境,我们需要对环境变量进行一些配置。

- Windows 系统:右键点击“计算机”或“我的电脑”,选择“属性”->“高级系统设置”->“环境变量”。

在系统变量中找到“Path”,并选择“编辑”。

在弹出的窗口中,将展讯 Build 环境的安装路径添加到“Path”变量的值中,并点击“确定”保存。

- macOS / Linux 系统:在终端中输入以下命令,并将展讯 Build环境的安装路径替换为您的实际路径。

```shellexport PATH=/your/installation/path:$PATH```2. 配置开发工具根据您的开发需求,展讯Build 环境提供了多种开发工具和插件。

您可以根据需要进行安装和配置。

- IDE:展讯 Build 环境支持多种集成开发环境,如 Eclipse、Android Studio 等。

您可以根据个人喜好进行选择和安装。

- SDK:展讯 Build 环境提供了丰富的软件开发工具包,包括Android SDK、Java SDK 等。

您可以根据项目需要进行安装和配置。

展讯平台MMI介绍

展讯平台MMI介绍

2019/10/15
Proprietary and Confidential Information
18
GUI
GUI 模块的主要功能就是给应用开发提供最基本的图形 控件接口,并跟窗口系统、消息机制结合,处理基本的 人机操作
2019/10/15
Proprietary and Confidential Information
每当需要增加新的大块Memory Block的时候,首先是应该考虑是否可以 和别的模块共用。不行再增加新的block。
2019/10/15
Proprietary and Confidential Information
17
培训内容
平台简介 Reference MMI介绍 GUI介绍 Kernel介绍 资源介绍 实例介绍
22
GUI提供的控件(续)
• Animition • Calendar • Textbox • Msgbox • Prgbox • Punctuation • Selectionpage • Label • Softkey
• Statusbar • Strokepage • Block(68ad提供半透显示) • Button • Dropdownlist • Richtext(68ad提供) • Iconlist (68ad提供) • S发人员专注于应用的功能开发, 而不是过多考虑界面的开发
• 方便添加新控件 • 更改现有控件风格
2019/10/15
Proprietary and Confidential Information
24
控件(续)
控件的风格
• 每一类Control和Window的缺省显示风格定义在文件 mmi_theme.c/h中

《展讯平台简介》课件

《展讯平台简介》课件

5G技术:展讯平台将积极布局5G技术,为未来通信提供 更广阔的发展空间
人工智能:展讯平台将加强人工智能技术的研发和应用, 提高平台的智能化水平
物联网:展讯平台将致力于物联网技术的研发和应用,推 动物联网产业的发展
云计算:展讯平台将加强云计算技术的研发和应用,提高 平台的数据处理能力和服务水平
数据处理技术: 采用先进的大数 据处理技术,包 括数据清洗、数 据挖掘、数据分 析等
存储技术:采用 分布式存储技术, 提高数据存储的 安全性和可靠性
数据备份:采用 多节点备份技术, 确保数据安全
数据加密:采用 高强度加密技术, 确保数据安全
网络安全:采用先进的防火墙技术,防止网络攻击和数据泄露
数据加密:采用高强度的加密算法,确保数据传输和存储的安全性
用户特点:政府机构用户通常具有较高的权威性 和影响力,对展讯平台的需求也较为稳定和可靠。
应用场景:政府机构用户主要通过展讯平 台发布政策法规、行业动态等信息,同时 也可以利用平台进行项目招标、采购等活 动。
用户反馈:政府机构用户对展讯平台的评价较高, 认为平台具有权威性、可靠性、稳定性等特点, 能够满足其发布信息、交流合作等方面的需求。
合作前景:展讯平台将与全球范围内的合作伙伴共同开发新技术、新产品,实现互利共赢。
技术合作:展讯平台将加强与国际知名高校、科研机构的合作,共同研发新技术,提升技术实 力。
市场合作:展讯平台将加强与国际知名企业的合作,共同开拓海外市场,实现市场扩张。
加强技术研发,提升产品竞争力 拓展市场,扩大市场份额 加强与合作伙伴的合作,共同推进行业发展 提升服务质量,提高客户满意度
技术架构:基于ARM架 构,支持多种操作系统
系统组成:包括CPU、 GPU、内存、存储等硬 件模块

展讯android平台基础

展讯android平台基础

展讯android软件平台基础(for SC8810)目录1.Android基本概念 (2)2.开发环境搭建 (4)安装ubuntu操作系统 (4)设定安装源 (4)安装开发包 (5)展开IDH包 (5)3.代码目录结构 (6)4.编译方法和系统 (7)5.烧录image方法 (8)传统烧录方法 (8)fastboot烧录方法 (8)6.adb (9)7.Log系统 (11)8.Q&A (12)1.Android基本概念Software stack for mobile devices, including operating system, middleware and key applications.2.开发环境搭建安装ubuntu操作系统设定安装源$ sudo vi /etc/apt/sources.listubuntu-10.4:deb /ubuntu/ lucid main multiverse restricted universedeb /ubuntu/ lucid-backports main multiverse restricted universedeb /ubuntu/ lucid-proposed main multiverse restricted universedeb /ubuntu/ lucid-security main multiverse restricted universedeb /ubuntu/ lucid-updates main multiverse restricted universedeb-src /ubuntu/ lucid main multiverse restricted universedeb-src /ubuntu/ lucid-backports main multiverse restricted universe deb-src /ubuntu/ lucid-proposed main multiverse restricted universe deb-src /ubuntu/ lucid-security main multiverse restricted universedeb-src /ubuntu/ lucid-updates main multiverse restricted universe ubuntu-10.10:deb /ubuntu maverick partnerdeb-src /ubuntu maverick partnerdeb /ubuntu maverick maindeb-src /ubuntu maverick maindeb /ubuntu/ maverick main restricted universe multiversedeb /ubuntu/ maverick-backports restricted universe multiversedeb /ubuntu/ maverick-proposed main restricted universe multiverse deb /ubuntu/ maverick-security main restricted universe multiversedeb /ubuntu/ maverick-updates main restricted universe multiversedeb-src /ubuntu/ maverick main restricted universe multiversedeb-src /ubuntu/ maverick-backports main restricted universe multiverse deb-src /ubuntu/ maverick-proposed main restricted universe multiverse deb-src /ubuntu/ maverick-security main restricted universe multiverse deb-src /ubuntu/ maverick-updates main restricted universe multiverse安装开发包更新了安装源之后,需要执行下面的命令安装必要的包$ sudo apt-get update$ sudo apt-get upgrade$ sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind eclipse vim ssh git libodbcinstq1c2 odbcinst1debian1展开IDH包3.代码目录结构最外层目录android:-- Makefile (全局的Makefile,里面只包含build/core/main.mk)-- 3rdparty (包含编译脚本,工具,第三方driver, hal, app,binary)-- bionic (bionic C库,bionic含义为仿生,这里面是一些基础的库的源代码)-- bootable (启动引导相关代码)-- build (存放系统编译规则及generic等基础开发包配置、脚本工具)-- cts (Android兼容性测试套件标准)-- dalvik (Dalvik JA VA虚拟机)-- development (应用程序开发相关,需要的模板和工具)-- device (设备厂商的示例文件)-- external (Android使用的一些开源的模组)-- frameworks (核心框架层——java及C++语言)-- hardware (部分厂家开源的硬解适配层HAL代码)-- kernel (Linux内核)-- ndk (一系列工具合集,帮助开发者快速开发C/C++动态库)-- out (编译完成后的代码输出与此目录)-- packages (应用程序包)-- prebuilt (x86和arm架构下预编译的一些资源)-- sdk (Android sdk及模拟器)-- system (Android底层文件系统库、应用及组件——C语言)-- u-boot (Bootloader,引导加载器)-- vendor (厂商定制代码)4.编译方法和系统$ cd 3rdparty/$ ./build.products.sh00). sp8810gaExample:*1* ./build.products.sh sp8810ga2 ./build.products.sh s p8810ga [subcmd]3 jobs=16 ./build.products.sh sp8810ga++++++++++++++++++++++++++ subcmd list ++++++++++++++++++++++++++prebuild [dirname] -- 编译android工程时脚本会将第3方chip的修改动态patch到android工程中lbuild [dirname] [clean] -- 调用第3方build.sh脚本中的function my_local_build函数(主要用来编译ko)nbuild -- 只编译标准androidfprebuild -- 快速build需要的前提配置自动设置,同时完成一次彻底编译(建议使用)fbuild -- 快速build,不编译3rdparty下的ko(一旦repo sync,务必重新执行fprebuild)fbuild2 -- 快速build,在fbuild基础上,再额外编译3rdparty下的文件(建议使用)clean -- 清除第3方对android的所有修改,恢复到原始的android版本,可以认为是unpatch.diff [dirname] -- 比较第3方代码和android标准代码的差异,即生成patchdiff2 [dirname] -- 用beyondcompare比较第3方代码和android标准代码的差异install [dirname] -- 将第3方编译结果安装到out/target/product/xxxx/system/sps*目录install2 [outdir ] -- 将product产品编译结果安装到outdir目录(用来在批量编译产品时完成自动拷贝)ramdisk -- 编译product产品对应的ramdisk.img,将init.3rdparty.rc修改内容添加到ramdisk.imgrecovery -- 编译product产品对应的ramdisk-recovery.img和recovery.img system -- 重新打包system文件夹生成system.imguserdata -- 重新打包data文件夹生成userdata.imgbootimage -- 生成boot.img和linux.bin内核文件bootimage2 -- 先删除.config,然后编译整个内核,最后生成boot.img和linux.bin 内核文件5.烧录image方法编译之后产生的image目录在:Out/target/product/hsdroid/sps.images.sp8810ga/可以看到,idh包编译出来的需要烧录的image是:fdl2.bin, u-boot-spl-16k.bin, u-boot.bin,boot.img, system.img, userdata.img, recovery.img另外,展讯还会release modem image:Vmjaluna.img, DSP.bin, nvitem.bin, Modem.bin传统烧录方法使用research downloader, upgrade downloader, factory downloader, 烧录上面所有的image。

展讯_软件发布流程

展讯_软件发布流程

软件发放流程一.准备工作:1.软件需求表2.资源:logo(bmp格式,16位),墙纸(JPG格式),开关机动画(GIF),铃声…二.建立项目工程:1.配置对应的.mk文件:a.复制一份相同主板的其他项目的.mk文件(f6,h322,th2,x6,h320,x5…),重命名为,eg:F6项目,重命名为:project_snd_f6_xxx.mk(xxx客户名简写),该文件位于工程根目录下。

b.根据客户需求(需求表)修改project_snd_f6_xxx.mk文件,具体需注意事项如下:1):定义:export F6_XXX_MMI_FEATURE = TRUE ###嘉源的MMI FEATURE# Option1:TRUE# Option2:FALSE2): 定义:export CUST_RES_SET =F6_XXX01 ###对应客户快关机动画和墙纸的目录3):选择主菜单的风格:MAINMENU_STYLE=。

,SPECIAL_EFFECT_ICON_SIZE=。

这两个变量的值是根据需求表中选择的,且要对应。

4):Driver 部分:根据需求表配置Driver部分,注意如下变量(1)定义:export LCD_DRV_DEBUG_SUPPORT = TRUE ###DEBUG LCD# Option1:TRUE# Option2:FALSEexport SENSOR_DIRECTION_CHANGE = TRUE ###DEBUG SENSOR# Option1:TRUE# Option2:FALSE此处的两个宏是在工程模式中手动调试LCD和SENSOR用的,与其相关的宏有,对应的主板宏要定义如:H322_PCB =TRUE,F6_PCB = TRUE,X6_PCB = TRUE,若为单摄像头,则DUAL_SENSOR_SUPPORT = FALSE和exportSENSOR_DIRECTION_CHANGE = FALSE,(2)再根据需求表配置如下驱动相关的:export LCD_DRV = XXXX,若此类型的屏我们没调过,此项可不写(具体可咨询驱动工程师)DUAL_SENSOR_SUPPORT ,单双摄像头HORSE_RUN_LED ,跑马灯CUSTOMER_SPECIAL_AUDIO_PARA,客户指定的音频参数5):SP部分:根据需求打开或关闭相应的SP开关即可,一般保持默认,一般需要修改客户ID,对应如下文件鱼游:popo_prot.c扬讯:met_platMgr.c艾麒:elive_common.h思凯:mmimrapp.h以上客户ID的修改方法请参照之前已经修改的项目执行。

展讯平台窗口创建流程

展讯平台窗口创建流程

窗口创建流程简介窗口在展讯平台中是一个至关重要的概念,与Windows操作系统相类似的,窗口在展讯平台中就是最终呈现给用户的一个应用程序。

在这里,我们可以把窗口看作一个应用程序,因为,它不但能够显示内容给用户,而且更为重要的是,窗口能够处理系统中所有的内部消息及发送到该窗口的外部消息。

一个应用程序是由一个或多个窗口构成的,例如Idle窗口只包含一个窗口,而短消息模块包含多个窗口。

应用程序都是通过窗口显示给用户,并最终实现人机交互。

下面我们来看下展讯平台的窗口创建流程。

图1动态窗口创建流程图2 静态窗口创建流程窗口分为静态窗口和动态窗口,静态窗口会在宏WINDOW_TABLE中先定义好窗口的属性,而动态窗口是在实现时动态创建窗口属性。

具体如何选择,根据应用的需要来选择。

展讯平台为用户提供了创建静态窗口和动态窗口的接口,分别为函数MMK_CreateWin和函数MMK_CreateWindow,具体如何创建窗口,可以参考展讯文档,这里主要讲述调用创建窗口接口后的流程。

通过上面两个流程图,我们可以看到静态窗口和动态窗口的创建会调用几个相同的函数MMK_AddTreeNode、TreeNodeNew和MMK_WindowTreeNodeConstruct。

这三个函数是为了创建窗口节点,窗口是通过树来管理的,如下图:图3 窗口管理展讯平台里退出当前窗口时,系统会执行注销当前窗口的操作,用树管理窗口的好处就是这时候系统会自动进入父窗口,从而达到用户希望的效果。

创建完窗口节点后,会创建窗口的一些基本属性,如背景、显示区域等,这个时候我们看不到其它的属性,如状态栏、菜单、编辑框等等。

静态窗口和动态窗口在这之后就会出现一些区别,静态窗口会在后面继续创建窗口其它的属性,这些属性在先前宏WINDOW_TABLE中已经定义好的,比如状态栏、标题栏、菜单栏、soft控件等。

这些属性的创建是在以下函数中进行的。

PUBLIC BOOLEAN MMK_ParseWinTab(MMI_HANDLE_T win_handle,uint32 *win_tab_ptr){…value_ptr = win_tab_ptr;while ((END_WIN != *value_ptr) && (CAF_END_WIN != *value_ptr)){ins = *value_ptr;value_ptr++;if ((FIRST_PARSE <= ins) && (END_WIN > ins)){result = MMKParseFunc[ins - FIRST_PARSE](win_handle,&value_ptr);//调用函数表中的函数来创建窗口的其它属性}else if ((CHILD_CTRL_FIRST <= ins) && (LAST_CHILD > ins)){result = GUIFORM_ParseChild((ins - CHILD_CTRL_FIRST),win_handle,&value_ptr);}else if ((CAF_PARSEWIN_FIRST <= ins) && (CAF_PARSEWIN_MAX > ins)){result = CAFParseFunc[ins - CAF_PARSEWIN_FIRST](win_handle,&value_ptr);}else{SCI_ASSERT(FALSE); /*assert verified*/ }if (!result){break;}}return (result);}LOCAL const PARSE_FUNC MMKParseFunc[] ={SetWinPrio,SetWinFunc,SetWinId,CreateMenuCtrl,CreatePopmenuCtrl,CreateMsgBoxCtrl,CreatePrgBoxCtrl,CreateTextCtrl,CreateListBoxCtrl,CreateEditTextCtrl,CreateEditPhonenumCtrl,CreateEditDigitalCtrl,CreateEditPasswordCtrl,CreateEditListCtrl,CreateEditDateCtrl,CreateEditTimeCtrl,CreateEditIPCtrl,CreateAnimCtrl,SetWinBackgroundID,CreateLabelCtrl,CreateButtonCtrl,SetWinStyle,CreateDropDownListCtrl,CreateIconListCtrl,CreateRichTextCtrl,CreateTabCtrl,CreateStatusBarCtrl,CreateSoftkeyCtrl,CreateTitleCtrl,SetWinMoveStyle,CreateTipsCtrl,CreateSettingList,CreateFormCtrl,CreateOwnDrawCtrl,CreateToolbarCtrl,SetWinSupportAngle,};而动态窗口在创建完基本的属性后,需要手动创建窗口的其它属性。

展讯平台开发说明

展讯平台开发说明

Build环境使用手册Version: 0.2.52010-10-14修订历史重要声明版权声明本文档中的任何内容受《中华人民共和国著作权法》的保护,版权所有© 2006, 展讯通信有限公司,保留所有权利,但注明引用其他方的内容除外。

商标声明本文档中展讯通信有限公司的产品的所有商标是展讯通信有限公司专有,但注明属于其他公司拥有的商标除外。

在提及其他公司及其产品时将使用各自公司所拥有的商标,这种使用的目的仅限于引用。

不作保证声明展讯通信有限公司不对此文档中的任何内容作任何明示或暗示的陈述或保证,而且不对特定目的的适销性及适用性或者任何间接、特殊或连带的损失承担任何责任。

保密声明本文档(包括任何附件)包含的信息是保密信息。

接收人了解其获得的本文档是保密的,除用于规定的目的外不得用于任何目的,也不得将本文档泄露给任何第三方。

目录1说明 (6)2编译环境及相关软件 (7)3Source Code目录结构 (8)4基本编译命令 (10)4.1全新编译整个项目[new] (10)4.2更新项目[update] (11)4.3单独编译模块 (11)4.4清除模块编译结果 (11)4.5清除所有编译结果[cleanall] (11)4.6生成可执行文件 (11)4.7编译FDL/bootloader (11)4.8编译NV (11)4.9编译MMI Resource 文件 (12)4.10编译PC模拟器工程 (12)5其它编译命令 (15)5.1编译Logel工具 (15)5.2pclint 扫描 (15)5.3编译完成net send提醒功能 (15)5.4编译命令的简写 (15)5.5多线程编译 (15)5.6分布式编译 (16)5.7编译出错暂停 (16)5.8生成编译选项 (16)6Makefile 工作流程 (17)6.1重要脚本 (17)6.2Makefile 执行流程 (18)6.3两种编译方式 (19)7模块修改及项目定制 (21)7.1添加或删除模块 (21)7.2修改模块 (21)7.3创建新项目 (22)7.4修改项目Feature Options (23)8第三方编译选项说明 (24)9相关使用技巧 (25)9.1查看log文件 (25)9.2makefile 报错:No rule to make target ` XXX ', needed by `yyy'. (25)9.3makefile 报错:Can't return outside a subroutine at ./make/perl_script/sprd_macro_check.pl line XXX (25)9.4Source Insight和ClearCase配置 (25)9.5鼠标右键命令行快捷方式设置 (28)9.6DOS下输入命令时用Tab键进行命令自动填充 (28)1 说明Build环境中实现了项目开发和维护使用的GNU标准应用脚本,基于这些应用脚本和相关make工具,Build环境可以完成项目全部代码的编译和二进制文件的生成,同时在此环境中可以通过脚本执行的方式产生其他软件以及开发工具,如fdl, bootloader, nv_parameter,resource等。

展讯平台MMI介绍

展讯平台MMI介绍

5
平台简介
Spreadtrum提供了一个完整的MMI开发平台。 包括MMI开发配套工具软件包和一套参考的MMI 源码。客户可以基于此方便的做二次开发。
2013-8-7
Proprietary and Confidential Information
6
平台结构
Call SMS CBS SS PB Game ….
GUI
Setting Menu Listbox STK Editbox Textbox Msgbox Animation Label …… WAP MMS Camera ……
2013-8-7
Proprietary and Confidential Information
8
MMI平台三个重要概念
• Application:应用,指MMI中的应用模块。例如:SMS,CC 等。一个应用可以包含多个窗口。 • Window:窗口,用于显示和处理送给此窗口的各种消息。例 如:按键消息、Timer消息等。一个窗口上可以有多个控件
22
GUI提供的控件(续)
• • • • • • • • • Animition Calendar Textbox Msgbox Prgbox Punctuation Selectionpage Label Softkey • • • • • • • • Statusbar Strokepage Block(68ad提供半透显示) Button Dropdownlist Richtext(68ad提供) Iconlist (68ad提供) Spellpage
2013-8-7
Proprietary and Confidential Information
28

详细介绍如何在展讯平台上添加菜单(最后附有源代码)

详细介绍如何在展讯平台上添加菜单(最后附有源代码)

展讯添加菜单1 添加新应用程序在MS_Code\MS_MMI\source\mmi_app\app目录下建立自己的文件Helloworld,并在其新建文件夹c、h,分别放需要的头文件和源文件。

2 添加开关增加自己的开关一般在工程的主mk里,我的工程是project_CG201_6620_64X32.mk MY APP_SUPPORT = TRUE ### RELEASE version# Option1:TRUE# Option2:FALSE3 添加自己的宏,要编译的源文件、头文件路径在make\app目录下的app.mk里添加ifeq ($(strip $(MYAPP_SUPPORT)), TRUE)MCFLAG_OPT += -D__MY APP__MINCPATH += MS_MMI/source/mmi_app/app/Helloworld/hMSRCPATH += MS_MMI/source/mmi_app/app/Helloworld/cSOURCES += myapp.c myapp_id.cendif在MS_MMI\source\resource\mmi_res_240x320下对应路径下Helloworld\MMI_RES_DEFAULT\IMAG存放图片在MS_MMI\source\resource\mmi_res_240x320下的str_table.xls中添加字符串内容4添加资源头文件和路径在目录make\resource下的resource.mk里添加ifeq ($(strip $(MYAPP_SUPPORT)),TRUE)SOURCES += Helloworld_mdu_def.hSRCPATH += MS_MMI/source/mmi_app/app/Helloworld/hendif5定义自己的MODULE在mmi_res_prj_def.h里,添加#ifdef __MY APP__RES_ADD_MODULE(MMI_MODULE_MYAPP,"\\Helloworld\\ Helloworld _mdu_def.h") #endif6添加菜单ID在mmi_menutable.h里ID_TOTAL之前添加#ifdef __MY APP__ID_MYAPP_HELLOWORLD,#endif7添加菜单信息在mmi_menutable.c里的数组menu_icon_pastime(娱乐)下添加#ifdef __MY APP__{ID_MYAPP_HELLOWORLD,TIP_NULL,{STXT_OK,TXT_NULL,STXT_RETURN},TX T_MYAPP, IMAGE_MY APP, 0,0,MENU_NULL},#endif并包含头文件#ifdef __MY APP__#include "myapp_text.h"#include "myapp_image.h"#endif8增加菜单ID响应函数在mainmenu_win.c里的函数HandleMainSecondMenuWinMsg里的语句switch (menu_id)里添加入口函数:#ifdef __MY APP__case ID_MY APP_HELLOWORLD:MY APP_EnterWin();break;#endif9添加初始化函数在mmimain.c里的函数InitMMIModule里的MMI_RegModuleNvEnd之前添加:#ifdef __MY APP__MY APP_AppInit();#endifHelloworld_mdu_def.h:#ifdef __MY APP__RES_ADD_IMG(IMAGE_MY APP,"\\MMI_RES_##\\IMAG\\myapp.png",IMG_CMP_PNG _ARGB,0)RES_ADD_STRING(TXT_MY APP,"Helloworld")#endifmyapp_text.h:#ifndef MY APP_TEXT_H#define MYAPP_TEXT_H#ifdef __MY APP__#include "sci_types.h"#include "mmi_module.h"#ifdef __cplusplusextern "C" {#endif#define MACRO_MDU_TYPE MACRO_MDU_TEXT#include "macro_mdu_def.h"typedef enum MYAPP_TEXT_ID_E{MY APP_TXT_NULL = ( MMI_MODULE_MY APP << 16 ) | MMI_SYS_RES_FLAG, #include "Helloworld_mdu_def.h"MY APP_TXT_MAX} MYAPP_TEXT_ID_E;#undef MACRO_MDU_TYPE#ifdef __cplusplus}#endif#endif#endifmyapp_image.h:#ifndef MY APP_IMAGE_H_#define MYAPP_IMAGE_H_#ifdef __MY APP__#include "sci_types.h"#include "mmi_imagefun.h"#include "mmi_module.h"#ifdef __cplusplusextern "C" {#endif#define MACRO_MDU_TYPE MACRO_MDU_IMAGE#include "macro_mdu_def.h"typedef enum MYAPP_IMAGE_ID_E{MY APP_IMAGE_NULL = ( MMI_MODULE_MYAPP << 16 ) | MMI_SYS_RES_FLAG, #include "Helloworld_mdu_def.h"MY APP_IMAGE_MAX_ID} MYAPP_IMAGE_ID_E;#undef MACRO_MDU_TYPE#ifdef __cplusplus}#endif#endif#endifmyapp.c#ifdef __MY APP__#include "window_parse.h"#include "mmk_type.h"#include "guilcd.h"#include "mmidisplay_data.h"#include "os_api.h"#include "mmk_timer.h"#include "mmiacc_id.h"#include "mmi_image.h"#include "mmipub.h"#include "myapp_id.h"#include "myapp_text.h"void MYAPP_AppInit(void){MY APP_RegWinIdNameArr();}MMI_RESULT_E HandleStartStatusMYAPPWinMsg(MMI_WIN_ID_T win_id,MMI_MESSAGE_ID_E msg_id,DPARAM param){MMI_RESULT_E recode = MMI_RESULT_TRUE;MMI_STRING_T string = {0};switch(msg_id){case MSG_OPEN_WINDOW:GUIWIN_SetSoftkeyTextId(win_id,COMMON_TXT_NULL,COMMON_TXT_NULL,STXT_RETURN,FALSE);MMK_SetAtvCtrl(win_id, MY APP_TEXT_CTRL_ID);MMI_GetLabelTextByLang(TXT_MY APP_CONTENT, &string);GUITEXTBOX_SetText(MY APP_TEXT_CTRL_ID , &string, FALSE);break;case MSG_FULL_PAINT:break;case MSG_APP_CANCEL:case MSG_CTL_CANCEL:MMK_CloseWin(win_id);break;default:recode = MMI_RESULT_FALSE;break;}return recode;}WINDOW_TABLE(MY APP_WIN_TAB) ={//CLEAR_LCD,WIN_PRIO(WIN_ONE_LEVEL),WIN_FUNC((uint32)HandleStartStatusMYAPPWinMsg),WIN_ID(MYAPP_OPTION_WIN_ID),WIN_TITLE(TXT_MY APP),CREATE_TEXTBOX_CTRL(0,MMI_TITLE_HEIGHT,MMI_MAINSCREEN_RIGHT_MAX_PIXEL ,MMI_MAINSCREEN_HEIGHT-MMI_FULLSCREEN_SOFTKEY_BAR_HEIGHT-1, MAINLCD_ID,MYAPP_TEXT_CTRL_ID),WIN_SOFTKEY(TXT_NULL, TXT_NULL, STXT_RETURN),//展讯平台自身提供的调用函数,用于响应按键函数。

展讯平台调试流程(自编)wenming

展讯平台调试流程(自编)wenming

Sprocomm 音频测试-流程简介:这里的音频测试是指整机测试上行,下行通道的测试,包括MIC (上行),喇叭/听筒(下行),主要测试内容包括电信号的测试以及声学信号的测试。

测试方法以及测试步骤: 1:下行通道测试测试主要包括:主板电信号的测试以及声音信号的测试。

测试项目:功率(W )/RMS 值,失真(THD_Ratio ),谐振点(f0),噪声等 测试方法:1:用“ResearchDownload ”软件对手机进行工程模式的载入载入完成之后重新安装电池开机完成指引之后即可进行测试。

2:调试打开audio tester 软件,选择对应的port 进行连接,选择smart phone (智能机),再选择连接,最后选择对应的模式进行测试即可。

3:打开AP ,连接手机,从AP 上读取数据 ① :电信号需要从手机上引线出来测试② :声音信号一方面可以通过标麦进行传导,另一方面也可以 通过CMU200进行传导NVEditor 使用方法(主要用于对调整后的手机参数进行文件式的方式整合存档) 首先要连接手机1:选择最新版本的RF 的nv.item 文件(file->open project ,选择nv.item ) 2:facility->import(导入通话音频NV 文件) 3:save imge手机关机并用数据线连接电脑打开download 软件点击按钮点击按钮进行载入操作ADB使用方法:(主要用于music参数的合入)1:ADB安装把安装包放入C盘,在环境变量中把path的值更改为Adb的位置即可,如果不行请重启电脑。

2:Adb导出audio.para文件(前提:USB连接上手机)+R然后输入cmd打开命令窗口在上述命令提示框内输入依次输入以下内容adb devicesadb rootadb pull /data/local/media/audio_para(此时默认存储地址为C:\Users\Administrator)如果想另存为其他文件夹,需要空一格然后把其他文件夹地址输入到adb pull /data/local/media/audio_para后面3:BIN文件的更新(通话参数calling合入射频RF)打开NVEditor →file →open project(选择RF参数) →facility →import(选择已经导出的calling.nv 参数) → file→save project→ file→save image注:以防万一多保存两次音量调试1:调节gain使功率达标并且声音较大2:调节EQ把FR比较突出的某个频点拉平3:通过ALC的调整来改善失真产生的破音4:通过调节滤波器等设置来减小底噪(首先打开dl_dis_switch主要是dl_ns_limit调大500~900)注:1:由于MIC的位置不同,所以根据不同模式MIC上行增益可以适当更改,一般耳机的增益大于听筒模式的增益(上行增益)2:内置PA与外置PA相比,内置PA需要调较高的增益,外置PA的增益调节较低NXP 回声消除1:TX可以调节VOL_Gain,调节声音大小(跟volume一样)调节非限行区域的四个数值(越大噪声抑制越好)压制回声。

展讯 开机流程介绍

展讯 开机流程介绍

L平台开机流程介绍展讯通信主讲人:Nick.Zhaod t r u mC on f i de nt i a l开机的条件¾VBAT is high.¾PBINT is high¾CHINT is high¾ALARM INTS pr e aS p r e a d t r u m C o n f i d e n t i a l ROM Code 软件流程StartInitialize the IRAM, Pin,UART and KeypadUSB Bootstrap Pin isSet?Key(0,0) is Pressed?Receive two 0x7e?Remap and Jump to 0x0Send the Version String and go to USB Boot ModeSend the Version Stringand go to UartBootMode Yes NoNo No YesYesd t r u mC on f i de nt i a lBefore __main•Code from tx_illdb.s•Work flow–Disable interrupt–Abnormal reset check–Initialize clock and EMC access timing for nor platform –Enter SVC mode and setup SVC stack pointer–BL PM_Init–B__mainS pr e aS p r e a d t r u m C o n fi d e n t i a l • 1. Copies nonroot (RO and RW) execution regions from their load addresses to their execution addresses.• 2. Zeroes ZI regions.• 3. Branches to __rt_entry.•The library function __rt_entry() runs the program as follows:• 1. Calls __rt_stackheap_init() to set up the stack and heap.• 2. Calls __rt_lib_init() to initialize referenced libraryfunctions, initialize the locale and, if necessary, set up argc and argv for main().• 3. Calls main(), the user-level root of the application.• 4. Calls exit() with the value returned by main().Enter __mainr e a d t ru mC on f i de nt i a lEnter Main•main(main.c)->SCI_KernelEnter(threadx_os.c)->tx_kernel_enter[_tx_initialize_kernel_enter(tx_api_thumb.h)]•_tx_initialize_kernel_enter(tx_ike.c)->–_tx_initialize_low_level(tx_illdb.s)–_tx_initialize_high_level(tx_ihl.c)–tx_application_define(threadx_os.c)->SCI_ApplicationDefine(init.c)–_tx_thread_schedule(tx_ts.s)•SCI_ApplicationDefine->–RM_SendRunModeRequest();–SaveHWRestartCondition();–SCI_InitHw();–SCI_InitRtos();–SCI_InitRef(0);S pS p r e a d t r u m C o n f i d e n t i a l 几个重要的模式¾CALIBRATION_MODE校准模式,APP 不起来,工厂生产校准时进入。

展讯入门文档

展讯入门文档

展讯学习文档一、编译 (2)二、下载 (2)三、抓LOG (5)四、模拟器调试 (7)五、菜单 (8)新添加菜单入口 (8)新添加二级菜单: (9)摄像头切换............................................................................................. 错误!未定义书签。

1)双摄像头(亚力通事例代码): (10)2)、单摄像头 (12)一、编译1、在DOS窗口(cmd.exe)进入到相应工程的 ms_code目录下才能进行编译。

(环境跟MTK一样)。

2、make p=sc66001_sp66011 m=apple id=1注:a,p=sc66001_sp66011 这个是工程的名字,一般工程的名字看主.mak文件如project_sc6600l_sp6601l.mk,然后去掉project_ 就是了,也可以从 build 文件夹下面直接看到。

)b,m=app 这个是模块名字,app 是相应的模块,我们主要的文件如:OEMOS.c,apple_wintab.c都是在这个模块,修改我们文件可以直接编译这个模块,与MTK类似。

具体可以用(make help参考使用说明,下面会列出常用的)c,id=1 这个表示使用分布式编译。

(有时候客户自己写了相应的P处理,编译命令可以自己咨询客户工程师。

)3、Make p= sc66001_sp66011 new (相当于MTK的new)4、Make p= sc66001_sp66011 (相当于MTK reamke)5、make p= sc66001_sp66011 m=resource (相当于MTK resgen 编资源)注:展讯的资源也是一个模块,展讯修改资源的定义跟MTK不一样,你修改菜单文件( mmi_menutable.c )是不用重新编译资源的,展讯菜单文件属于 app 模块,除非你加入或修改了字符串,图片,铃声,字库等资源(如修改apple_mdu_def.h),才需要重新编译资源。

展讯平台操作简介

展讯平台操作简介

终测 (Final Test)
终测是用电脑软件控制无线通信测试仪、电源、手机等设备,对手机进行各种操作,测试统计手机的各 种参数是否在软件设定范围内。 测试内容有:测量电池电压、建立呼叫、最大通话电流、接收机测试、发射机测试、信道切换、频段切换等。

所需硬件:PC 1台 GP-IB卡1块 无线通信测试仪(Agilent 8960或R&S CMU200) 1台 直流稳压电源1台 模拟电池 (可从系统接口供电则可以不用该电源) 直流稳压电源1台 模拟充电器 屏蔽盒及板测工装夹具 1台 电平转换盒1个 手机通信数据线 1条 各种连接线 测试SIM卡 (可选)
手机频段: GSM 有四个频段分别是EGSM(850M), GSM(900M), DCS( 1800M), PCS(1900M) GSM 为2G,GPRS 是2.5G,EDGE(或者叫EGPRS)是2.75G, WCDMA 是3G CDMA 有两个频段分别是800M,450M。 CDMA 是2G,CDMA1X 是2.5G,CDMA2000 是3G 此站测试前,需要用金机进行校准,金机禁止进行CALIBRATION 测试.
校准操作指南
选择校准加综 测 PROJECT
选择校准频段
测试不通过即 时停止
保存记录
选择非信令测 试
保存位置
选择综测频段
保存配置文件
读SN号
检查版本
选择此项
接收质量
选择此项
串口 串口速度
选择此项
综测仪型号
综测仪地址
选择此项
线损设置
点击此项
电源型号
电源地址
电压大小
版本号
CALIBRATION 测试过程及处理方法
1.开机过程,程控电源先给手机开机电压,手机开机,如果手机没有开机,观察程控电源 的状态. 如果有电压,没有电流,说明供电电路有问题,检查程控电源的正负极和source(反馈信号), 还有数据线的正负极,接口,更换数据线. 如果电压和电流有波动,说明PC和手机之间联系有问题,重新插拔数据线与PC接口,更 换数据线.或者软件DL错误造成. 2.READ SN是无法读取手机的SN号码,检查手机SN号码是否存在. 3.ADC(电池电量控制)是手机与数据线接口有问题. 4.AFC(自动频率控制)是手机和综测仪没有通讯,检查综测仪和RF CABLE,射频头 和主板匹配的问题. 5.PATHLOSS(接受增益控制)是射频信号不正常,检查综测仪和RF CABLE.( MTK 平 台独有) 6.APC(自动功率控制)是手机的发射功率不正常,检查综测仪和RF CABLE,射频头 和主板匹配的问题,调整CABLE LOSS,按照相应频段进行调整,正常值在-0.2 以内. 有的会测试PCL(功率控制等级),如果下线,按照相应频段的功率级调整LOSS 值,正 常值在-0.4-0.2之间. 7.AGC(自动增益控制)是射频信号不正常,检查综测仪和RF CABLE. 8.CALL是射频信号不正常,检查综测仪和RF CABLE,数据线. 9.TXP(发射功率)是手机发射信号不正常,检查综测仪和RF CABLE,调整CABLE LOSS,按照相应频段进行调整,正常值在-0.2以内. 10.RXP(接收功率)是手机接收信号不正常,检查综测仪和RF CABLE,调整CABLE LOSS,按照相应频段进行调整,正常值在-0.2以内. 11.Read Voltage 是手机关机电流不正常,检查数据线.

展讯客户化配置使用指南(驱动部分)

展讯客户化配置使用指南(驱动部分)

展讯通信有限公司 ·保密·
第4页 共33页
2005-7-22
客户化配置使用指南(驱动部分)
版本 1.0.0
SW-BASE-UG-0027
7 GPIO的配置使用 ..................................................................................................................23
5 系统引脚功能配置 ................................................................................................................17
5.1 各个引脚功能与总线驱动能力的定义.............................................................................17 5.2 全局的寄存器配置 .........................................................................................................18 5.3 GPIO的配置 ..................................................................................................................18
6.2.1 主屏的高度和宽度 ..................................................................................................20 6.2.2 检查LCD的指针是否正确 .......................................................................................20 6.2.3 让主屏工作在显示模式 ...........................................................................................20 6.2.4 得到主屏LCD缓冲区的首地址 ................................................................................20 6.2.5 得到附屏LCD缓冲区的首地址 ................................................................................20 6.2.6 得到主屏的操作函数指针。....................................................................................20 6.2.7 得到附屏的操作函数指针 .......................................................................................21 6.2.8 硬件复位 ................................................................................................................21 6.2.9 设置LCD的亮度......................................................................................................21 6.2.10 LCD_OPERATIONS_T中定义的各种函数的实现。...............................................21

展讯SharkPad客户指导文档

展讯SharkPad客户指导文档
第 5 章 客户化配置...................................................................................................................................A-4 5.1 Device、Product 层次结构.............................................................................................................A-4 5.2 系统版本维护变更.........................................................................................................................A-4 5.3 目录结构调整 ................................................................................................................................A-5 5.3.1 Sprd 设备产品定义 ...............................................................................................................A-5 5.3.2 供应商 Sprd 程序或库 .........................................................................................................A-8 5.4 集成外部 APK 模块.......................................................................................................................A-9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

窗口创建流程简介窗口在展讯平台中是一个至关重要的概念,与Windows操作系统相类似的,窗口在展讯平台中就是最终呈现给用户的一个应用程序。

在这里,我们可以把窗口看作一个应用程序,因为,它不但能够显示内容给用户,而且更为重要的是,窗口能够处理系统中所有的内部消息及发送到该窗口的外部消息。

一个应用程序是由一个或多个窗口构成的,例如Idle窗口只包含一个窗口,而短消息模块包含多个窗口。

应用程序都是通过窗口显示给用户,并最终实现人机交互。

下面我们来看下展讯平台的窗口创建流程。

图1动态窗口创建流程图2 静态窗口创建流程窗口分为静态窗口和动态窗口,静态窗口会在宏WINDOW_TABLE中先定义好窗口的属性,而动态窗口是在实现时动态创建窗口属性。

具体如何选择,根据应用的需要来选择。

展讯平台为用户提供了创建静态窗口和动态窗口的接口,分别为函数MMK_CreateWin和函数MMK_CreateWindow,具体如何创建窗口,可以参考展讯文档,这里主要讲述调用创建窗口接口后的流程。

通过上面两个流程图,我们可以看到静态窗口和动态窗口的创建会调用几个相同的函数MMK_AddTreeNode、TreeNodeNew和MMK_WindowTreeNodeConstruct。

这三个函数是为了创建窗口节点,窗口是通过树来管理的,如下图:图3 窗口管理展讯平台里退出当前窗口时,系统会执行注销当前窗口的操作,用树管理窗口的好处就是这时候系统会自动进入父窗口,从而达到用户希望的效果。

创建完窗口节点后,会创建窗口的一些基本属性,如背景、显示区域等,这个时候我们看不到其它的属性,如状态栏、菜单、编辑框等等。

静态窗口和动态窗口在这之后就会出现一些区别,静态窗口会在后面继续创建窗口其它的属性,这些属性在先前宏WINDOW_TABLE中已经定义好的,比如状态栏、标题栏、菜单栏、soft控件等。

这些属性的创建是在以下函数中进行的。

PUBLIC BOOLEAN MMK_ParseWinTab(MMI_HANDLE_T win_handle,uint32 *win_tab_ptr){…value_ptr = win_tab_ptr;while ((END_WIN != *value_ptr) && (CAF_END_WIN != *value_ptr)){ins = *value_ptr;value_ptr++;if ((FIRST_PARSE <= ins) && (END_WIN > ins)){result = MMKParseFunc[ins - FIRST_PARSE](win_handle,&value_ptr);//调用函数表中的函数来创建窗口的其它属性}else if ((CHILD_CTRL_FIRST <= ins) && (LAST_CHILD > ins)){result = GUIFORM_ParseChild((ins - CHILD_CTRL_FIRST),win_handle,&value_ptr);}else if ((CAF_PARSEWIN_FIRST <= ins) && (CAF_PARSEWIN_MAX > ins)){result = CAFParseFunc[ins - CAF_PARSEWIN_FIRST](win_handle,&value_ptr);}else{SCI_ASSERT(FALSE); /*assert verified*/ }if (!result){break;}}return (result);}LOCAL const PARSE_FUNC MMKParseFunc[] ={SetWinPrio,SetWinFunc,SetWinId,CreateMenuCtrl,CreatePopmenuCtrl,CreateMsgBoxCtrl,CreatePrgBoxCtrl,CreateTextCtrl,CreateListBoxCtrl,CreateEditTextCtrl,CreateEditPhonenumCtrl,CreateEditDigitalCtrl,CreateEditPasswordCtrl,CreateEditListCtrl,CreateEditDateCtrl,CreateEditTimeCtrl,CreateEditIPCtrl,CreateAnimCtrl,SetWinBackgroundID,CreateLabelCtrl,CreateButtonCtrl,SetWinStyle,CreateDropDownListCtrl,CreateIconListCtrl,CreateRichTextCtrl,CreateTabCtrl,CreateStatusBarCtrl,CreateSoftkeyCtrl,CreateTitleCtrl,SetWinMoveStyle,CreateTipsCtrl,CreateSettingList,CreateFormCtrl,CreateOwnDrawCtrl,CreateToolbarCtrl,SetWinSupportAngle,};而动态窗口在创建完基本的属性后,需要手动创建窗口的其它属性。

如以下代码:LOCAL void OpenFileListMainWin(BOOLEAN is_internal_call){if(!MMK_IsOpenWin(MMIFMM_OPEN_FILE_BYLAYER_WIN_ID)){MMI_WINDOW_CREATE_T win_create = {0};MMI_HANDLE_T win_handle = 0;MMI_CONTROL_CREATE_T create = {0};GUILIST_INIT_DATA_T init_data = {0};win_create.applet_handle = MMK_GetFirstAppletHandle();win_create.win_id = MMIFMM_OPEN_FILE_BYLAYER_WIN_ID;win_create.win_priority = WIN_ONE_LEVEL;win_create.add_data_ptr = (ADD_DATA)(is_internal_call);win_create.window_style = 0;win_create.window_move_style = MOVE_BY_SETTING;if (NULL == s_handle_func){win_create.func = MMIFMM_HandleOpenFileByLayerWin;}else{win_create.func = s_handle_func;}win_handle = MMK_CreateWindow( &win_create );//创建动态窗口//create softkeyif (0 != win_handle){GUISOFTKEY_INIT_DATA_T softkey_data = {0};MMI_CONTROL_CREATE_T softkey_create = {0};MMI_CTRL_ID_T softkey_ctrl_id = 0;softkey_data.leftsoft_id = STXT_OK;softkey_data.midsoft_id = TXT_NULL;softkey_data.rightsoft_id = STXT_RETURN;softkey_ctrl_id = MMITHEME_GetSoftkeyCtrlId();softkey_create.ctrl_id = softkey_ctrl_id;softkey_create.guid = SPRD_GUI_SOFTKEY_ID;softkey_create.parent_win_handle = win_handle;softkey_create.init_data_ptr = &softkey_data;MMK_CreateControl( &softkey_create );//创建soft控件MMK_SetWinSoftkeyCtrlId(win_handle, softkey_ctrl_id);}//create titleif (0 != win_handle){GUIWIN_CreateTitleDyna(win_handle, TXT_FMM_FILE_LIST);//创建标题栏}//create listif( 0 != win_handle ){init_data.both_rect = MMITHEME_GetWinClientBothRect(win_handle);//init_data.both_rect.h_rect = init_data.both_rect.v_rect = list_rect;init_data.type = GUILIST_TEXTLIST_E;init_data.is_dynamic_item_data = TRUE;create.ctrl_id = MMIFMM_OPEN_FILE_BYLAYER_LIST_CTRL_ID;create.guid = SPRD_GUI_LIST_ID;create.parent_win_handle = win_handle;create.init_data_ptr = &init_data;MMK_CreateControl( &create );//创建列表}}}当创建完窗口后就会通过发送同步消息来打开窗口,如下:MMK_SendMsg(win_node_ptr->base_node.handle, MSG_OPEN_WINDOW, PNULL);。

相关文档
最新文档