展讯弹出窗口模块接口简介
- 格式:doc
- 大小:488.00 KB
- 文档页数:33
精心整理SMS模块简要介绍(展讯平台)2007.07.05一、SMS概述:1、基本概念ABCD231、ABCDE、删除F、保存G、阅读H、List管理(load)2、几个核心变量一、SMS概述:1、基本概念GSM0338v070200p.pdf Alphabetsandlanguage-specificinformationGSM0340v070400p.pdf TechnicalrealizationoftheShortMessageService(SMS) GSM0411v070000p.pdf Point-to-Point(PP)ShortMessageService(SMS)MSMOMTSMCVLRHLR短消息通信仅限于一个消息,换言之,一个消息的传输就构成了一次通信。
因此,业务是非对称的,一般认为移动起始短消息传输与移动终接短报文传输是两回事。
这并不阻碍实时对话,但系统认为不同的消息彼此独立,消息的传输总是由处于GSM 外部的短消息服务中心(SMSC)进行中继,消息有目的地或起源地,但只与用户和SMSC有关,而与其他GSM基础设施无关。
短消息的体系结构:GSM标准中定义的点-点短消息服务使得短消息能在移动台和短消息服务中心之间传递。
这些服务中心是通过称为SMS-GMSC的特定MSC同GSM网络联系的。
SME:ShortMessagingEntity短消息实体它可以接收或改善短消息,位于固话系统、移动基站或其他服务中心内;(MSCVLRHLR之间的协议使前者可以要求HLR搜索可找到的用户地址。
它与MSC与HLR之间的协议一起,能在移动台因超出覆盖区而丢失报文、随后又可找到时加以提示。
A、三种编码方式和字节个数:每个SMS的字节数:140Byte 长短信的头信息占用6个字节default模式:7bit编码格式,用于发送普通的ASCII字符140*8/7=160 个(160–7)*5=765(假定长短信的条数为5)unicode模式:含ucs2字符的短信140个(140–6)*5=670(假定长短信的条数为5)8bit模式:通常用于发送数据消息,如图片或铃声等,彩信会用到。
LCD 接口使用说明版本: 1.0.0SW-BASE-UG-00262004-06-09D2修订历史版本日期作者审核说明1.0.0 2004-06-09 Jim.zhang Draft重要声明版权声明版权所有 © 2004, 展讯通信有限公司,保留所有权利。
商标声明展讯通信有限公司和展讯通信有限公司的产品是展讯通信有限公司专有。
在提及其他公司及其产品时将使用各自公司所拥有的商标,这种使用的目的仅限于引用。
不作保证声明展讯通信有限公司不对此文档中的任何内容作任何明示或暗示的陈述或保证,而且不对特定目的的适销性及适用性或者任何间接、特殊或连带的损失承担任何责任。
保密声明本文档(包括任何附件)包含的信息是保密信息。
接收人了解其获得的本文档是保密的,除用于规定的目的外不得用于任何目的,也不得将本文档泄露给任何第三方。
目录1介绍 (5)1.1范围 (5)1.2参考文档 (5)1.3缩写和定义 (5)2概述 (6)2.1文件组织 (6)2.2LCD屏幕坐标 (6)2.3LCD操作概述 (6)3接口函数说明 (7)3.1LCD硬件初始化 (7)3.2关闭LCD (7)3.3获取LCD基本信息 (7)3.4刷新LCD (8)3.5LCD全屏刷新 (9)3.6进入/退出睡眠 (9)3.7调节LCD的对比度 (10)4附录 (11)4.1数据结构 (11)4.1.1LCD信息结构 LCD_INFO_T (11)4.1.2LCD ID类型 LCD_ID_E (11)4.1.3LCD错误类型 ERR_LCD_E (12)1 介绍1.1 范围本文描述LCD驱动软件的向上层如MMI所提供的API,作为应用程序设计人员必须的参考文档。
1.2 参考文档无1.3 缩写和定义LCD Liquid Crystal DisplayMMI Man-Machine Interface2 概述2.1 文件组织lcd_api.h该文件定义了所有的LCD接口函数,上层调用LCD提供的函数时需要包含该文件。
展讯平台软件调试介绍Spreadtrum7/21/2009培训目的¾能够使用展讯提供的调试工具对开发中的问题进行调试¾能够分析几种常见ASSERT主要内容展讯调试工具简介调试方法展讯调试工具简介主要的调试工具有: ¾Dloader¾NVEditor¾Channel Server¾Logel¾Phone Tester¾DSP Log Dloader(1功能:下载程序设置界面:双击可以选择下载文件路径选择端口选择项目选择下载速率制作打包文件选择是否下载Nand Flash下载配置:大小页选择分区策略选择分区策略¾始终分区¾出现不兼容分区时停止下载¾出现不兼容分区,使用Flash中原有分区进行下载¾出现不兼容分区,使用FDL中的分区方式进行分区注:此配置项只对NAND FLASH有效备份信息配置:将NV保存到本地选择需要保留的信息正在下载:下载成功:下载失败:Dloader(4打包文件特别说明:展讯升级工具中使用打包文件来进行升级操作,打包文件中不仅包含了所有的下载文件,还包含了下载项目的地址信息,这样可以降低产线升级工具配置出错的可能性,同时简化了操作。
打包文件的制作方法:DloadeR 在配置好所有的配置项后,点击左图中的按钮,然后按照提示即可完成打包文件的制作。
点击这个按钮进行打包操作展讯调试工具简介¾Downloader¾NVEditor¾Channel Server¾Logel¾Phone Tester¾DSP Log功能:•对fixed NV参数进行读取,编辑,保存,下载•擦除NV•从手机中读出NV Item修改某项数据:选择菜单[File\save image]保存并生成二进制数据文件:选择菜单[File\Save to phone]直接下载到手机中——手机需要在下载模式如果需要保留校准参数需要选择上获取手机NV数据:选择菜单[File\LoadFromPhone(boot mode]来获取数据在下载模式下从保留区域处获取下载的nvitem数据。
展讯平台Trace 工具使用对于专业的测试人员,测试应该始终接上log 线进行测试,这样就会尽可能保留出错时候的信息,这些信息不一定对于每一类的bug 都有用,但对于一些难重现的问题有可能这样的习惯就记录下了一些重要的Debug 信息,给软件人员解决问题极大的帮助。
测试人员遇到ASSERT 的时候,一定要尽可能详细的记录下操作步骤,测试此问题的重现概率,同时记录下全部的ASSERT 信息,关于ASSERT 信息详见本文档3.2.1。
需要注意的是,测试人员一定要用对应版本的ChannelServer 和log 工具进行测试,否则会导致底层的一些消息的解析不正确,给解决一些和底层有关的bug 带来困难。
1、ChannelServer 的设置使用• 运行ChannelServer.exe• 点击右下角托盘中的ChannelServer 小图标• 在弹出的对话框中的进行配置(成功后,小图标变绿色)图一2、Logel –使用说明• 选择Server — IP Setting 配置ChannelServer 的IP 地址和端口――和ChannelServer 中的设置保持一致(一般不需要修改)• 连结到ChannelServer ,并开始记录――需要先运行ChannelServer以下为刚开始启动Logel 工具的界面:图二以下为正在抓Trace 信息的界面:图三测试版本一定要用debug 版本,release 版本遇到assert 会自动重启,debug 版本会断在程序assert 的地方,这样可以获得assert 时的现场信息,以便于debug 。
当然,重要版本根据情况也应该同时用release 版本做一些各个功能模块的自动重启的测试,电流测试等,以保证release 版本也没有问题。
测试过程中遇到assert ,不要拔下电池,打开ChanelServer.exe 和Logel.exe , 连上手机,选择logel 里面菜单 Assert / Open Assert Frame , 打开一个调试窗口,在此窗口下输入0,会出现了下图所示的信息(如果是测试的时候连着log ,此窗口会自动弹出):图四然后在Assert Information这个窗口里输入1,(有可能第一次或者前几次输入1都出现的和上面输入0一样的信息,请多输入几次,直到出现类似以下的信息为止):图五如上图所示:这一项信息是记录软硬件版本号以及产生Assert 的位置(文件名,行号),以及当前线程(或中断服务程序)的信息。
函数1.设置字体颜色#if defined(UI_WATCH_STYLE_128X128BAR)GUIEDIT_SetFontColor(MMISET_SET_DIVERT_NUMBER_CTRL_ID,MMI_BLACK_COLOR);#endif2.显示输入法#if defined(UI_WATCH_STYLE_128X128BAR)GUIEDIT_SetDispImIcon(MMIBT_PIN_EDITBOX_CTRL_ID,&is_display_im,&is_display_num); #endif3.idleHandleIdleMsg(idle入口函数)IdleWin_HandleMsg(idle按键注册)4. MMK_RunWinProc(窗口跟踪函数) MMK_RunCtrlProc(控件跟踪函数)5. MMITHEME_GetMenuProc 菜单回调函数6. MMITHEME_GetCommonMenuTheme设置菜单tiemer7. MMITHEME_GetSecondMenuTheme设置二级菜单的风格数据8.6. MMK_DispatchToHandle mmk消息分配函数7. MMITHEME_GetMenuProc设置各种style风格的控件的回调函数GUIMENU_PROCESS_T结构typedef struct{void (*InitMenu)(GUIMENU_CTRL_T*); //init menuvoid (*DestoryMenu)(GUIMENU_CTRL_T*); //destory menuvoid (*DisplayMenu)(GUIMENU_CTRL_T*); //display menu(必须实现)void (*DisplaySpecialMenu)(GUIMENU_CTRL_T*); //display menu(处理主菜单震动拖选效果)void (*ShowScrollItemStr)(GUIMENU_CTRL_T*); //display scroll item stringMMI_RESULT_E (*HandleMenuUpKey)(GUIMENU_CTRL_T*); //handle menu up key(必须实现)MMI_RESULT_E (*HandleMenuDownKey)(GUIMENU_CTRL_T*); //handle menu down key(必须实现)BOOLEAN (*HandleMenuLeftKey)(GUIMENU_CTRL_T*,MMI_MESSAGE_ID_E); //handle menu left key,return is handle cancel(返回是否需要处理)BOOLEAN (*HandleMenuRightKey)(GUIMENU_CTRL_T*,MMI_MESSAGE_ID_E); //handle menu right key,return is handle ok(返回是否需要处理)BOOLEAN (*HandleMenuNumKey)(uint16,GUIMENU_CTRL_T*); //handle menu number key(返回是否需要处理)void (*HandleMenuTpDown)(GUI_POINT_T*,GUIMENU_CTRL_T*); //handle menu tp down(必须实现)BOOLEAN (*HandleMenuTpUp)(GUI_POINT_T*,GUIMENU_CTRL_T*);//handle menu tp up(必须实现)(返回是否需要处理)void (*HandleMenuTpMove)(GUI_POINT_T*,GUIMENU_CTRL_T*); //handle menu tp move(必须实现)void (*HandleMenuTpScroll)(uint16,GUIMENU_CTRL_T*); //handle menu scroll bar tpvoid (*AdjustFirstAndDisplay)(GUIMENU_CTRL_T*, BOOLEAN); //调整first_item_index索引并重新显示(非主菜单,实现)uint16 (*GetCurItemTop)(GUIMENU_CTRL_T*); //获得当前Item的Top值(POP风格弹出二级时,实现)BOOLEAN (*MoveInit)(GUIMENU_CTRL_T*); //移动信息初始化BOOLEAN (*MoveDestory)(GUIMENU_CTRL_T*); //移动信息销毁BOOLEAN (*HandleMenuOk)(GUIMENU_CTRL_T*, MMI_MESSAGE_ID_E); //handle menu ok(返回mmimenu是否已经处理)MMI_RESULT_E (*HandleMenuTimer)(GUIMENU_CTRL_T*, MMI_MESSAGE_ID_E, DPARAM); //handle menu timerBOOLEAN (*HandleMenuCancelKey)(GUIMENU_CTRL_T*, MMI_MESSAGE_ID_E); //handle menu cancel(返回mmimenu是否已经处理)BOOLEAN (*HandleMenuEndKey)(GUIMENU_CTRL_T*); //handle menu endBOOLEAN (*SearchMenuId)(GUIMENU_CTRL_T*, MMI_MENU_ID_T); // 判断指定的item id是否存在(已无用,可删)void (*HandleMenuModifyRect)(GUIMENU_CTRL_T*); //handle menu modify rect(必须实现)MMI_RESULT_E (*HandleSpecialMsg)(GUIMENU_CTRL_T*, MMI_MESSAGE_ID_E, DPARAM); //display menuvoid (*GetItemPtr)(GUIMENU_CTRL_T*, uint16, uint16, GUIMENU_MAINMENU_INFO_T* ); // 获取指定页指定索引的静态item内容信息(用于主菜单)GUIMENULIST_ITEM_INFO_T* (*GetItemInfoPtr)(GUIMENU_CTRL_T*, uint16, uint16);// 获取指定页指定索引的静态item信息(用于主菜单)uint16 (*GetTotalItemNum)(GUIMENU_CTRL_T*, uint16); // 获取指定页的总item数(用于分页型的风格)uint16 (*GetLineNumPage)(GUIMENU_CTRL_T *); // 获取一个有多少行(非主菜单实现)BOOLEAN (*ResetDisplayItem)(GUIMENU_CTRL_T *, int16*, BOOLEAN); // 修正显示位置,获取相对于现在的偏移量void (*CalculateRect)(GUIMENU_CTRL_T *, uint16); // 计算menu的区域BOOLEAN (*U_SetPageInfo)(GUIMENU_CTRL_T *, uint16, void *); // 设置U动画信息} GUIMENU_PROCESS_T;窗口风格Guimenu控件把一种风格对应的消息处理函数封装成一个结构,开放给应用使用。
展讯学习文档一、编译 (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),才需要重新编译资源。
窗口创建流程简介窗口在展讯平台中是一个至关重要的概念,与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,};而动态窗口在创建完基本的属性后,需要手动创建窗口的其它属性。