[[短短消消息息]]详详细细设设计计说说明明书书[MTK-M3项目组]康佳通信科技开发中心软件所2005年5月8日详细设计说明书2目录修改历史....................................................................................................41整体结构及功能描述.............................................................................52关键数据结构说明.................................................................................73主要存储分配.......................................................................................114各子模块实现及主要算法说明...........................................................114.1初始化.............................................114.2短消息常见功能实现.................................134.2.1短消息的发送.................................134.2.2短消息的接收....................................154.2.3短消息的保存....................................164.2.4短消息的删除....................................174.2.5编辑短消息......................................184.3附加的一些SMS功能.................................184.4短消息设定.........................................205内部调用的主要函数说明...................................................................216模块提供的外部接口函数说明...........................................................237主要信号说明.......................................................................................23详细设计说明书38相关文档文件.......................................................................................24详细设计说明书4修改历史时间修改人版本修改内容2005-4-22张成卫1.0创建初始版本详细设计说明书51整体结构及功能描述说明该程序应具有的功能,可采用IPO图(即输入一处理一输出图)的形式或文字描述。短消息部分的整体结构如下图所示:SMS大体分为以下几层:UI层,PS层以及架构在这两层之上的一些模块(Setting,Ems,CB,Miscell等)。其中UI层其实是mmi层,是用户和ms交互的接口层,而Ps层则是与底层PS进行交互的接口层,其它的模块都是在这两层的基础上建立起来的。SMS上下层之间的协作通过上层调用下层的ps层接口函数来通信,比如说上层要实现一个发送一个消息的操作,它就要调用底层对应的提供的封装好的相应的发送消息的函数接口。在这些封装好的接口函数中,通过发送消息来实现最终的消息发送等操作。SMS部分的功能包括以下这些方面:1,初始化过程。当从L4收到SMS准备就绪的ind后,开始进行更新CB频道信息,取得当前有效的SC号码,以及取得当前信箱的状态信息等。当这些动作做完之后,MMISMS才算是达到一个稳定状态,并且用户可以进入信箱列表,信息设定,CB菜单,以及发送message等。2,短消息的一些常见功能,例如短消息的发送,接收,删除,保存等等。另外就是短消息的这些常见的操作的组合操作了,如删除全部,就是不停的循环直至所有的消息都被删除掉;以及群组发送等功能,就是循环发送给一个数组中的所有的号码。MessageApplicationUISmsMoMtGuiInterface.cEngineSmsPshandler.cSettingSmsSettingsGuiInterface.cEMSEmsMiscell.cCBCellbroadcastSmsmiscellMessagesMiscell.c详细设计说明书63,短消息一些附加的功能,比如:输入法,文本格式,插入一些图片,铃声,以及一些预定义的信息等。这些附加的功能信息在SMS部分的功能也是非常重要的,MT6219支持EMS等。4,短消息的设定模块,这个模块中包括Profile设定(包括SC号设定等),以及common变量设定,存储介质设定以及偏爱的传输网络设定等。从下层的角度看,大致可以分成一下这些模块:对短信的编辑;对短信的保存,以及对短信的各种操作等。其中的编辑指的就是对短信息的各种加工操作,包括修改文本格式,插入object对象,图片,铃声等等;短信息的保存操作主要是指收件箱和发件箱,收件箱主要是接收外部发来的消息,而发件箱则主要是保存从本机上发送出去的消息,这些消息可以是由于ms用户选择得在发送同时保存或者是由于消息没有成功发送而强制进行保存;对短信的各种操作例如有对短信的删除,全部删除,取出其中的号码等。详细设计说明书72关键数据结构说明msg_context_struct说明与本模块相直接关联的主要数据类型、主要常量、主要全局变量等。保存sms环境变量的数据结构类型:typedefstruct{S32currHiliteIndex;//当前高亮的消息indexS32currBoxIndex;//当前的BoxU16MessagesScrnIdToDelHistoryNodes;//从那个screenId开始删除HistoryU16MessagesScrnIdDelUptoHistoryNodes;//删除到那个HistoryNodeU16msg_ind_index;//消息索引U16msg_ind_chat_index;//chat中的消息索引U8msg_ind_in_idle;//是否处于idle状态U8msg_ind_after_call;//是否要处在call后处理U8msg_class0_ind;//是否属于class0类的消息U8msg_full_ind;//msg空间是否已满U8msg_exceed_ind;//msg空间是否已超出U8msg_deliver_ind;//msg已经传输U8msg_waiting_ind;//是否有等待处理的消息U8msg_init;//inittobefalseU8number_from_phb;//inittobe0S8smsPhoneNumber[(MAX_DIGITS+1)*ENCODING_LENGTH];//sms的目的号码#ifdef__MMI_MESSAGES_TEMPLATE__S8*templates[NUM_TEMPLATES];//存放所有的templates的起始地址S8scratchTemplRec[NVRAM_SMS_TEMPL_RECORD_SIZE+ENCODING_LENGTH];//每次暂存的一条Templ#endifS8*numbersList[MAX_USE_NUMBERS];//存放从msg中取得的号码U8PhbSmsInterfaceState;//MMI_PHB_SMS_INTERFACE//sms中用到phb时状态MMI_SEND_ONLY...msg_display_list_enumtoDisplayMessageList;//显示MsgList的情况:可以为TO_DISPLAY_MESSAGE_LIST_NONE//TO_DISPLAY_MESSAGE_LIST_INBOX等...msg_send_case_enumsendMessageCase;//发送消息的方式:可以是SEND_CASE_SEND_ONLY...等msg_send_save_status_enumsendSaveStatus;//发送保存状态,已发送成功?保详细设计说明书8存成功?msg_status_enummsg_status;//inittobeMSG_STATUS_NOT_READY//消息当前状态msg_waiting_ind_structmsg_waiting_info[MAX_WAITING_LINE_NUM];//inittozero//等待处理的消息信息msg_class0_msg_struct*msg_class0_p;//inittoNULL//class0类消息指针msg_deliver_report_struct*msg_deliver_report[MAX_STATUS_REPORT_NUM];//inittoNULL//msg的发送报告___信息#ifdefined(__MMI_MESSAGES_SEND_BY_GROUP__)||defined(__MMI_MESSAGES_SEND_TO_MANY__)msg_send_many_structmsg_send_info;//SendByGroup和SendToMany情况下的消息发送的纪录信息#endif#ifdefined(__MMI_SMART_MESSAGE_MT__)||(defined(__MMI_SMART_MESSAGE_MO__)&&!defined(__MMI_MESSAGES_EMS__))U16dest_port;#endif}msg_context_struct;msg_context_structg_msg_cntx;//上面这个全局变量g_msg_cntx是用来保存纪录sms的上下文环境变量的关键结构变量;//在整个sms的运行期间其着非常重要的作用另外一个比较重要的全局变量就是msg_msgbox_info_structmsgbox_info;这个全局变量是纪录所有的inbox和outbox的相关信息的,并且要注意的是:inbox,outbox以及awaitlist都是在同一个队列中,这个msgbox_info全剧变量是纪录所有的消息的一个结构数组。详细设计说明书9PendingSaveSendDataStruct下面这个数据结构是暂存发送的数据的:在sms中一个信息可能比较长,由几个子片段信息组成(一个子信息长度固定),在一个消息发送出去之前,暂存在这个变量中。typedefstruct{unsignedchartotalSegments;//总共有多少个子片段unsignedcharpresentSegments;//当前的片段unsignedcharnextSegment;//一个一个发送时下一个发送的片段unsignedchardcs;//编码方法__有gsm_7bit,8_bit,ucs2等unsignedcharudhi;//UserDataHeaderIndicator用户信息头标记unsignedcharmti;//MessageTypeIdentifier消息类型标记unsignedcharst;//Status消息处理状态报告;详细的取值范围见—smsal_st_enum//枚举类型中的定义//ParamsforSendingonlychar*