您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 2015-07-03展讯基础知识介绍定时器窗口GUITF文件读写.
展讯基础知识介绍在线客户端部:曾献2009.10.13目录•展讯平台简介•展讯平台MMI软件开发介绍(对比MTK平台差异)•开发工具介绍•参考文献第一章展讯平台简介展讯平台简介•展讯通信有限公司,成立于2001年,总部上海,主要致力于无线通信及多媒体终端的核心芯片、专用软件和参考设计平台的开发。•展讯手机平台:1)硬件资源cpu:一般为ARM72)操作系统:ThreadX实时操作系统3)GSM/GPRS协议栈,物理层软件4)外设(LCD,keypad等),串口SIO等5)AT命令接口6)产品型号(基带芯片):SC6600H、SC6600I、SC6600R(这3种是目前市场上最常用的也是我们目前开发用的2G系列的平台)最新出了一个SC6600L.第二章展讯平台MMI软件开发介绍(对比MTK平台差异)MMI模块三个重要概念•Application:应用,指MMI中的应用模块。例如:SMS,CC等。一个应用可以有多个窗口。•Window:窗口,用于显示和处理送给此窗口的各种消息。例如:按键消息,Timer消息等。一个窗口可以有多个控件。•Control:控件,可以完成某种特定的功能。例如:编辑框,文本显示框,动画,弹出框等。1.窗口/屏幕(对比MTK)•a.框架的区别1)展讯平台,窗口是仿windows系统的框架,更多的使用消息处理机制,没有层的概念,显示效果比较单一化。2)MTK平台,屏幕上有层的特效。示例:在mtk上,进入一个新屏调用–EntryNewScreen(SCR_ID,ExitFunc,EntryFunc,NULL);–其中SCR_ID是自己定义的一个窗口枚举ID。在展讯上,调用MMK_CreateWin((uint32*)TEST_WIN_TAB,PNULL);–其中TEST_WIN_TAB是自己定义的一个uint32*型的全局常量窗口/屏幕(续上)LOCALMMI_RESULT_E//LOCAL==staticHandleTestWinMsg(MMI_WIN_ID_Twin_id,MMI_MESSAGE_ID_Emsg_id,DPARAMparam);WINDOW_TABLE(TEST_WIN_TAB)=//WINDOW_TABLE是一个宏,值为constuint32TEST_WIN_TAB[]{CLEAR_LCD,//清除lcdbufferWIN_PRIO(WIN_ONE_LEVEL),//窗口的优先级,WIN_ONE_LEVEL该值是一般优先级。WIN_FUNC((uint32)HandleTestWinMsg),//该窗口对应的消息处理函数。WIN_ID(TEST_WIN_ID),//TEST_WIN_ID为该窗口的ID,相当于MTK上的SCR_ID。……END_WIN//系统解析该窗口时的尾部标识};•WindowTable实际上是一个Const数组,主要是为了简化应用的界面开发,在MMI应用开发过程中,开发人员可以将一些固定的元素,如窗口的处理函数、优先级、ID、控件的固定属性等等放入这个Tabel中,再通过MMK_CreateWin创建打开这个窗口,同时MMIKernel会自动去解析这张Table中的内容,并搭建好整个窗口关系(窗口的空间分配、属性设置、与控件的组织等)。这些可以将很多界面性的开发独立处理,方便以后的扩充和修改。可以参考看下window_prase.h这个头文件.•TEST_WIN_TAB一般定义在Win.def内,使用例如:WIN_DEF(TEST_WIN_TAB)•TEST_WIN_ID定义在头文件(比如mmiacc_id.def)里,使用例如WIN_DEF_ID(TEST_WIN_ID,”TEST_WIN_ID”)窗口/屏幕(续上)•b.按键注册的区别在MTK上:一般使用:SetKeyHandler(Func_Ptr,KEY_VALUE,KEY_EVENT);来进行按键的注册。其中第一个参数Func_Ptr是该按键所调用的函数,KEY_VALUE为该按键的键值,KEY_EVENT为该按键的事件。在展讯上:按键的注册只需要在窗口消息处理函数里加上一个对应的switch消息即可。如注册一个左软键事件为:LOCALMMI_RESULT_E//LOCAL==staticHandleTestWinMsg(MMI_WIN_ID_Twin_id,MMI_MESSAGE_ID_Emsg_id,DPARAMparam){switch(msg_id){……caseMSG_KEYDOWN_OK://该消息对应MTK上的就是左软键按下时的操作{Func_Ptr();//对应的处理函数break;}……}}窗口/屏幕(续上)•c.启动一个窗口(进入一个新屏)在MTK上,只要函数里有调用EntryNewScreen(…),就会进入一个新屏幕。而在展讯上,启动一个新窗口需要调用:MMK_CreateWin((uint32*)WIN_TAB,NULL);该函数对WIN_TAB这个窗口表格进行解析,然后往WIN_TAB里边的消息处理函数发送消息。首先发送的第一条消息是:MSG_OPEN_WINDOW,接着发送第二条消息:MSG_FULL_PAINT,第一条消息可以做一些初始化操作等,第二条消息可用于绘制图形以及显示字符串等。如:LOCALMMI_RESULT_EHandleTestWinMsg(MMI_WIN_ID_Twin_id,MMI_MESSAGE_ID_Emsg_id,DPARAMparam){staticGUI_RECT_Trect={0};GUI_LCD_DEV_INFOlcd_dev_info={GUI_LCD_0,GUI_BLOCK_0};switch(msg_id){caseMSG_OPEN_WINDOW://第一条消息,一般做些初始化.{rect=CreateRect(0,0,LCD_WIDTH–1,LCD_HEIGHT–1);break;}caseMSG_FULL_PAINT://第二条消息,一般在这里doaction.{LCD_FillRect(&lcd_dev_info,rect,0xffff);//将该矩形填白,0xffff为白色对应的16进制。break;}……}}窗口/屏幕(续上)•d.窗口(屏幕)历史在MTK上,只要在EntryNewScreen(1,2,3,4)的第3个参数写入调用该函数的主函数,该屏幕就会被压入屏幕历史堆栈。如:voidMyAppScreenEntry(void){EntryNewScreen(SCR_ID,NULL,MyAppScreenEntry,MMI_FULL_SCREEN);……}而在展讯上,只要启动一个窗口,该窗口就会自动被压入窗口堆栈中,如果不关闭该窗口,它一直都是存在的。调用的接口是MMK_CreateWin((uint32*)WIN_TAB,NULL)。•e.窗口(屏幕)关闭在MTK上,关闭当前窗口直接调用:GoBackHistory();即可返回上一个历史屏幕,调用GoBacknHistory(n)即可返回到前第n个历史屏幕。调用GoBacktoHistory(SCR_ID)即可返回到指定的历史屏幕。红键按下时会回到IDLE界面。而在展讯上,关闭当前的窗口,调用的函数是:MMK_CloseWin(win_id),而返回到某个已经打开的窗口,可调用函数是:MMK_ReturnAppintedWin(win_id),而红键按下的时候,系统会有一个默认的处理函数直接返回到IDLE界面,即MMK_HandleRedKeyProcess(),当然,也可以注册自己的红键处理事件。2.定时器•在MTK上,定时器的创建只需要在定时器枚举里声明一个ID即可直接拿来使用,没有周期性的说法(运行一次还是循环运行),而且定时器与窗口无关。•在展讯平台上,定时器的ID就是一个变量,该定时器可以跟窗口有关亦可以无关,而且还可分为一次性或者周期性运行。1)若该定时器与窗口有关,创建该定时器时,定时器timeout一到就会往该窗口的消息处理函数发送MSG_TIMER消息,收到该消息后就可以做想做的事情。如:LOCALMMI_RESULT_EHandleTestWinMsg(MMI_WIN_ID_Twin_id,MMI_MESSAGE_ID_Emsg_id,DPARAMparam){staticuint8s_test_timer_id=0;//定时器声明,初始化为0。switch(msg_id){caseMSG_OPEN_WINDOW://第一条消息{s_test_timer_id=MMK_CreateWinTimer(win_id,1000,FALSE);//创建该窗口的一个定时器,定时1秒,一次性运行。break;}caseMSG_TIMER://定时器到来时传过来的消息ID{MMK_StopTimer(s_test_timer_id);s_test_timer_id=0;Timer_CallBack();//定时器到来时做的操作break;}……}}注:展讯上最多可以同时运行16个定时器。定时器是否循环使用定时器(续上)•2)与窗口无关的定时器:PUBLICSCI_TIMER_PTRSCI_CreateTimer(//创建成功则返回定时器指针,否则返回SCI_NULL.constchar*timer_name,//定时器的名称TIMER_FUNtimer_func,//定时器的回调函数uint32input,//回调函数的输入参数uint32timer_expire,//定时器的定时时间,单位为毫秒uint32auto_activate);//是否自动启动其中TIMER_FUN的定义为:typedefvoid(*TIMER_FUN)(uint32);例:voidTestTimerCallBack(uint32value)//回调函数{//ToDo:}LOCALMMI_RESULT_EHandleTestWinMsg(MMI_WIN_ID_Twin_id,MMI_MESSAGE_ID_Emsg_id,DPARAMparam){SCI_TIMER_PTRTimer_Ptr=SCI_NULL;switch(msg_id){caseMSG_OPEN_WINDOW://第一条消息{//创建与窗口无关的一个定时器,定时1秒,一次性运行。自动运行。Timer_Ptr=SCI_CreateTimer(“TestTimer”,TestTimerCallBack,0,1000,SCI_AUTO_ACTIVATE);break;}……}}若为SCI_NO_ACTIVATE,则需要调用SCI_ActiveTimer使之生效;3.文件操作•文件操作接口的区别•在MTK上,文件操作没有异步操作这种说法,但文件操作接口很丰富,诸如文件的创建、读写、定位、删除以及截断(Truncate)等。•而展讯上,文件操作有同步异步两种操作,涉及到文件读写操作就有异步操作,但接口没MTK上的丰富,比如展讯上没有文件截断。展讯的盘符必须是大写的字母,否则系统找不到路径,如T卡的盘符为“E”盘,而不能写成“e”盘。下面主要针对展讯常用的文件操作接口进行简述:•(1)文件的创建:SFS_HANDLESFS_CreateFile(//SFS_HANDLE为文件的句柄,是uint32型,返回值大于0表示操作成功。constuint16*file_name,//文件路径为Unicode,记得要转码。uint32access_mode,//访问模式:创建|读写等方式,用或操作。uint32share_mode,//共享模式:文件系统暂时无法实现uint32file_attri);//文件的属性:文件系统暂时无法实现。例如在T卡根目录下创建一个文本文件“123.txt“:SFS_HANDLEfile_handle=0;uint8*file_path=“E:\\123.txt”;uint16path_unicod
本文标题:2015-07-03展讯基础知识介绍定时器窗口GUITF文件读写.
链接地址:https://www.777doc.com/doc-3014723 .html