詳細設計說明書短消息_第1頁
詳細設計說明書短消息_第2頁
詳細設計說明書短消息_第3頁
詳細設計說明書短消息_第4頁
詳細設計說明書短消息_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1 / 23 短消息短消息短消息短消息 詳細設計說明書詳細設計說明書詳細設計說明書詳細設計說明書MTK-M3 項目組康佳通信科技開發中心軟件所2005 年 5 月 8 日目錄目錄修改歷史修改歷史.31 整體結構及功能描述整體結構及功能描述.42 關鍵數據結構說明關鍵數據結構說明.53 主要存儲分配主要存儲分配.84 各子模塊實現及主要算法說明各子模塊實現及主要算法說明.84.1 初始化.84.2 短消息常見功能實現.10421 短消息的發送.104.2.2短消息的接收.124.2.3短消息的保存.134.2.4短消息的刪除.144.2.5編輯短消息.154.3 附加的一些 SMS 功能.154

2、.4 短消息設定.175 內部調用的主要函數說明內部調用的主要函數說明.176 模塊提供的外部接口函數說明模塊提供的外部接口函數說明.197 主要信號說明主要信號說明.198 相關文檔文件相關文檔文件.20修改歷史修改歷史時間時間修改人修改人版本版本修改內容修改內容2005-4-22張成衛1.0創建初始版本1 1 整體結構及功能描述整體結構及功能描述說明該程序應具有的功能,可采用IPO圖(即輸入一處理一輸出圖)的形式或文字描述。短消息部分的整體結構如下圖所示:SMS 大體分為以下幾層:UI 層,PS 層以及架構在這兩層之上的一些模塊(Setting,Ems,CB,Miscell 等)。其中 U

3、I 層其實是 mmi 層,是用戶和 ms 交互的接口層,而Ps 層則是與底層 PS 進行交互的接口層,其它的模塊都是在這兩層的基礎上建立起來的。SMS 上下層之間的協作通過上層調用下層的 ps 層接口函數來通信,比如說上層要實現一個發送一個消息的操作,它就要調用底層對應的提供的封裝好的相應的發送消息的函數接口。在這些封裝好的接口函數中,通過發送消息來實現最終的消息發送等操作。 SMS 部分的功能包括以下這些方面:1, 初始化過程。當從 L4 收到 SMS 準備就緒的 ind 后,開始進行更新 CB 頻道信息,取得當前有效的 SC 號碼,以及取得當前信箱的狀態信息等。當這些動作做完之后,MMI

4、SMS 才算是達到一個穩定狀態,并且用戶可以進入信箱列表,信息設定,CB菜單,以及發送 message 等。2, 短消息的一些常見功能,例如短消息的發送,接收,刪除,保存等等。另外就是短消息的這些常見的操作的組合操作了,如刪除全部,就是不停的循環直至所有的消息都被刪除掉;以及群組發送等功能,就是循環發送給一個數組中的所有的號碼。 Message ApplicationUISmsMoMtGuiInterface.cEngineSmsPshandler.cSettingSmsSettingsGuiInterface.cEMSEmsMiscell.cCBCellbroadcastSmsmiscell

5、MessagesMiscell.c3, 短消息一些附加的功能,比如:輸入法,文本格式,插入一些圖片,鈴聲,以及一些預定義的信息等。這些附加的功能信息在 SMS 部分的功能也是非常重要的,MT6219 支持 EMS 等。4, 短消息的設定模塊,這個模塊中包括 Profile 設定(包括 SC 號設定等),以及common 變量設定,存儲介質設定以及偏愛的傳輸網絡設定等。從下層的角度看,大致可以分成一下這些模塊:對短信的編輯;對短信的保存,以及對短信的各種操作等。其中的編輯指的就是對短信息的各種加工操作,包括修改文本格式,插入 object 對象,圖片,鈴聲等等;短信息的保存操作主要是指收件箱和發

6、件箱,收件箱主要是接收外部發來的消息,而發件箱則主要是保存從本機上發送出去的消息,這些消息可以是由于 ms用戶選擇得在發送同時保存或者是由于消息沒有成功發送而強制進行保存;對短信的各種操作例如有對短信的刪除,全部刪除,取出其中的號碼等。2 2 關鍵數據結構關鍵數據結構說明說明說明與本模塊相直接關聯的主要數據類型、主要常量、主要全局變量等。保存 sms 環境變量的數據結構類型:typedeftypedef structstruct S32S32 currHiliteIndex;/currHiliteIndex;/當前高亮的消息當前高亮的消息 indexindexS32S32 currBoxInd

7、ex;/currBoxIndex;/當前的當前的 BoxBoxU16U16 MessagesScrnIdToDelHistoryNodes;/MessagesScrnIdToDelHistoryNodes;/從那個從那個 screenIdscreenId 開始刪除開始刪除 HistoryHistoryU16U16 MessagesScrnIdDelUptoHistoryNodes;/MessagesScrnIdDelUptoHistoryNodes;/刪除到那個刪除到那個 HistoryNodeHistoryNodeU16U16 msg_ind_index;/msg_ind_index;/消息

8、索引消息索引U16U16 msg_ind_chat_index;/chatmsg_ind_chat_index;/chat 中的消息索引中的消息索引U8U8 msg_ind_in_idle;/msg_ind_in_idle;/是否處于是否處于 idleidle 狀態狀態U8U8 msg_ind_after_call;/msg_ind_after_call;/是否要處在是否要處在 callcall 后處理后處理U8U8 msg_class0_ind;/msg_class0_ind;/是否屬于是否屬于 class0class0 類的消息類的消息U8U8msg_full_ind;/msgmsg_fu

9、ll_ind;/msg 空間是否已滿空間是否已滿U8U8 msg_exceed_ind;/msgmsg_exceed_ind;/msg 空間是否已超出空間是否已超出U8U8 msg_deliver_ind;/msgmsg_deliver_ind;/msg 已經傳輸已經傳輸U8U8 msg_waiting_ind;/msg_waiting_ind;/是否有等待處理的消息是否有等待處理的消息U8U8 msg_init;msg_init; /init/init toto bebe falsefalseU8U8number_from_phb;number_from_phb; /init/init to

10、to bebe 0 0S8S8smsPhoneNumbersmsPhoneNumber (MAX_DIGITS+1)*ENCODING_LENGTH;/sms(MAX_DIGITS+1)*ENCODING_LENGTH;/sms 的目的號碼的目的號碼#ifdef#ifdef _MMI_MESSAGES_TEMPLATE_MMI_MESSAGES_TEMPLATE_S8*S8* templatestemplates NUM_TEMPLATESNUM_TEMPLATES ;/;/存放所有的存放所有的 templatestemplates 的起始地址的起始地址S8S8scratchTemplRecs

11、cratchTemplRec NVRAM_SMS_TEMPL_RECORD_SIZE+ENCODING_LENGTHNVRAM_SMS_TEMPL_RECORD_SIZE+ENCODING_LENGTH ;/;/每每次暫存的一條次暫存的一條 TemplTempl#endif#endifS8*S8* numbersListnumbersList MAX_USE_NUMBERSMAX_USE_NUMBERS ;/;/存放從存放從 msgmsg 中取得的號碼中取得的號碼U8U8 PhbSmsInterfaceState;PhbSmsInterfaceState; /MMI_PHB_SMS_INTER

12、FACE/MMI_PHB_SMS_INTERFACE/sms/sms 中用到中用到 phbphb 時狀態時狀態 MMI_SEND_ONLY.MMI_SEND_ONLY.msg_display_list_enummsg_display_list_enumtoDisplayMessageList;toDisplayMessageList;/顯示顯示 MsgListMsgList 的情況的情況: : 可以為可以為 TO_DISPLAY_MESSAGE_LIST_NONETO_DISPLAY_MESSAGE_LIST_NONE/TO_DISPLAY_MESSAGE_LIST_INBOX/TO_DISP

13、LAY_MESSAGE_LIST_INBOX 等等.msg_send_case_enummsg_send_case_enum sendMessageCase;/sendMessageCase;/發送消息的方式發送消息的方式: : 可以是可以是SEND_CASE_SEND_ONLY.SEND_CASE_SEND_ONLY.等等msg_send_save_status_enummsg_send_save_status_enum sendSaveStatus;/sendSaveStatus;/發送保存狀態,已發送成發送保存狀態,已發送成功功? ? 保存成功保存成功? ?msg_status_enum

14、msg_status_enum msg_status;msg_status; /init/init toto bebe MSG_STATUS_NOT_READYMSG_STATUS_NOT_READY /消息當前狀態消息當前狀態msg_waiting_ind_structmsg_waiting_ind_struct msg_waiting_infoMAX_WAITING_LINE_NUM;msg_waiting_infoMAX_WAITING_LINE_NUM; /init/init toto zerozero /等待處理的消息信息等待處理的消息信息msg_class0_msg_struct*

15、msg_class0_msg_struct* msg_class0_p;msg_class0_p; /init/init toto NULLNULL/class0/class0 類消息指針類消息指針msg_deliver_report_struct*msg_deliver_report_struct* msg_deliver_reportMAX_STATUS_REPORT_NUM;msg_deliver_reportMAX_STATUS_REPORT_NUM; /init/init toto NULLNULL/msg/msg 的發送報告的發送報告_ _ _ _ _ _ 信息信息#if#if d

16、efined(_MMI_MESSAGES_SEND_BY_GROUP_)defined(_MMI_MESSAGES_SEND_BY_GROUP_) | defined(_MMI_MESSAGES_SEND_TO_MANY_)defined(_MMI_MESSAGES_SEND_TO_MANY_)msg_send_many_structmsg_send_many_struct msg_send_info;/Sendmsg_send_info;/Send ByBy GroupGroup 和和 SendSend ToTo ManyMany 情況情況下的消息發送的紀錄信息下的消息發送的紀錄信息#end

17、if#endif#if#if defined(_MMI_SMART_MESSAGE_MT_)defined(_MMI_SMART_MESSAGE_MT_) | (defined(_MMI_SMART_MESSAGE_MO_)&!defined(_MMI_MESSAGES_EMS_)(defined(_MMI_SMART_MESSAGE_MO_)&!defined(_MMI_MESSAGES_EMS_)U16U16 dest_port;dest_port;#endif#endifmsg_context_struct;msg_context_struct;msg_context_s

18、tructmsg_context_struct g_msg_cntx;g_msg_cntx;/上面這個全局變量 g_msg_cntx 是用來保存紀錄 sms 的上下文環境變量的關鍵結構變量;/在整個 sms 的運行期間其著非常重要的作用另外一個比較重要的全局變量就是msg_msgbox_info_structmsg_msgbox_info_struct msgbox_info;msgbox_info;這個全局變量是紀錄所有的 inbox 和 outbox 的相關信息的,并且要注意的是:inbox,outbox 以及 awaitlist 都是在同一個隊列中,這個 msgbox_info 全劇變量

19、是紀錄所有的消息的一個結構數組。下面這個數據結構是暫存發送的數據的:在 sms 中一個信息可能比較長,由幾個子片段信息組成(一個子信息長度固定),在一個消息發送出去之前,暫存在這個變量中。typedeftypedef structstruct unsignedunsigned charchartotalSegmentstotalSegments ;/;/總共有多少個子片段總共有多少個子片段unsignedunsigned charcharpresentSegmentspresentSegments ; ;/當前的片段當前的片段unsignedunsigned charcharnextSegme

20、ntnextSegment ;/;/一個一個發送時下一個發送的片段一個一個發送時下一個發送的片段unsignedunsigned charchardcs;/dcs;/編碼方法編碼方法_有有 gsm_7bit,8_bit,ucs2gsm_7bit,8_bit,ucs2 等等unsignedunsigned charcharudhi;/Userudhi;/User DataData HeaderHeader IndicatorIndicator 用戶信息頭標記用戶信息頭標記unsignedunsigned charcharmti;/mti;/ MessageMessage TypeType Ide

21、ntifierIdentifier 消息類型標記消息類型標記unsignedunsigned charcharst;/Statusst;/Status 消息處理狀態報告;詳細的取值范圍見消息處理狀態報告;詳細的取值范圍見smsal_st_enumsmsal_st_enum /枚舉類型中的定義枚舉類型中的定義/ ParamsParams forfor SendingSending onlyonlychar*char*phNumberphNumber ;/;/發送的目的號碼發送的目的號碼unsignedunsigned charcharnumber(20+2)*2;/number(20+2)*2;

22、/unsignedunsigned charcharstatusstatus ;/;/狀態信息狀態信息unsignedunsigned charchartimestamp6;/timestamp6;/時間戳時間戳/prepare/prepare forfor newnew interface,interface, 04160416unsignedunsigned shortshortmsgboxindex;/msgBoxmsgboxindex;/msgBox 中的紀錄索引中的紀錄索引 / TakeTake a a contiguouscontiguous bufferbuffer soso t

23、hatthat wewe cancan re-use!re-use!/下邊這幾個域是用來保存用戶的下邊這幾個域是用來保存用戶的 msgmsg 中的信息的中的信息的unsignedunsigned charcharTPUDMMI_SMS_MAX_MSG_SEGTPUDMMI_SMS_MAX_MSG_SEG * * 160;/160;/最長保存信息最長保存信息unsignedunsigned char*char*TPUD_pMMI_SMS_MAX_MSG_SEG;/TPUD_pMMI_SMS_MAX_MSG_SEG;/每個每個 segseg 信息的指真信息的指真unsignedunsigned c

24、harcharTPUDLenMMI_SMS_MAX_MSG_SEG;/TPUDLenMMI_SMS_MAX_MSG_SEG;/每一個每一個 segseg 中信息的長中信息的長度度/MTK/MTK JoyJoy addedadded forfor errorerror SIMSIM handler,handler, 10/0710/07unsignedunsigned charcharTPUD_udhiMMI_SMS_MAX_MSG_SEG;/TPUD_udhiMMI_SMS_MAX_MSG_SEG;/對每一個對每一個 segseg 保存一保存一個用戶信息的頭標記個用戶信息的頭標記unsigne

25、dunsigned shortshortl4indexMMI_SMS_MAX_MSG_SEG;/l4l4indexMMI_SMS_MAX_MSG_SEG;/l4 層中的每一個層中的每一個msg_segmsg_seg 對應的索引對應的索引PendingSaveSendDataStruct;PendingSaveSendDataStruct;對應這個數據結構,定義的一個全局變量:PendingSaveSendDataStructPendingSaveSendDataStruct PendingSaveSendData;PendingSaveSendData;這個也是一個非常重要的全局變量,它里邊暫

26、保存了當前正要待發送的數據信息的相關信息,為下面調用底層的發送消息的命令提供了一個數據暫存空間,當 L4 層向協議棧發送出消息時,就從這個結構中取相應的數據,然后發送消息。特別注意的是:在 sms 中 inbox,outbox,以及 awaitbox 這些并不是單獨分開的,它們是實際上的一個隊列,而采用動態分界的方法來區分的,outbox 在前面,inbox 在后邊,在 save的時候,首先 save 到 outbox 中,然后后邊的所有的 msgentry 依次網后面移一個單位。由 totoaloutbox 和 totalinbox 來分別動態的決定發件箱和收件箱的范圍。在 delete 時

27、,如果 delete 掉 outbox 或者 inbox 中的某一個,那么后面的一次網前移動一個 msgentry 單位。 3 3 主要存儲分配主要存儲分配說明:根據需要,說明本模塊的存儲分配。在 NVRAM 中主要的存儲空間分配:NVRAM_EF_SMS_LIDNVRAM_EF_SMS_LID 所占的空間大小為:31*84其中 record_size = 84 numberOfRecords = 31NVARM_EF_SMS_CB_SMS_LIDNVARM_EF_SMS_CB_SMS_LID 所占的空間大小為:30*94其中 NVRAM_SMS_CB_MSG_CONTENT 紀錄 CB_MS

28、G 的內容NVRAM_EF_SMS_CB_SMS_INFO_LIDNVRAM_EF_SMS_CB_SMS_INFO_LID 所占的空間大小為:20紀錄 NVRAM_SMS_CB_MSG_INFO 信息的NVRAM_EF_SMS_CB_CHNL_LIDNVRAM_EF_SMS_CB_CHNL_LID 所占的空間大小 352NVRAM_EF_EMS_MY_PICTURE_NAME_LIDNVRAM_EF_EMS_MY_PICTURE_NAME_LID 空間大小 140NVRAM_EF_EMS_MY_ANIMATION_NAME_LIDNVRAM_EF_EMS_MY_ANIMATION_NAME_L

29、ID 空間大小 140NVRAM_EF_EMS_MY_MELODY_NAME_LIDNVRAM_EF_EMS_MY_MELODY_NAME_LID 空間大小 1404 4 各子模塊實現及主要算法說明各子模塊實現及主要算法說明說明:用圖表(例如流程圖、判定表等)輔以必要的說明來表示本程序的邏輯流程。詳細說明本程序所選用的算法,具體的計算公式和計算步驟。4.14.1 初始化初始化下面用流程圖來說明本程序的邏輯流程:開始首先注冊好對應的消息處理函數,當PRT_MSG_ID_MMI_SMS_READY_IND 消息從L4 層到送來時,調用對應的mmi_msg_handle_ready_ind()函數來

30、處理對應的這個消息首先,分別得到 Inbox 和 OutBox 以及 DraftBox 對應的listSize,即分別得到了收件箱,發件箱以及草稿箱中紀錄條目多少。然后設置對應的 hint(提示信息)包括 totalInbox,totalOutBox 以及totalDraftBox 中的信息數目,以便后面顯示用。更新 MsgMenuList。看 inbox,outbox 還是draftbox 曾經出現?如果是 inbox 曾經出現的話,那么就進入inbox_list 的 scrn 下。并且同時在進入inbox_list 下同時,調用mmi_msg_inbox_list_get_item()得到

31、 inbox_list 下的 items 并顯示出來。如果是 outbox 曾經出現的話,那么就進入outbox_list 的 scrn 下并同時在進入outbox_list 下同時,調用mmi_msg_outbox_list_get_item()得到 outbox_list下的 items 并顯示出來。如果是 draftbox 曾經出現的話,那么就進入draftbox_list 的 scrn 下并同時在進入 draft_list下同時,調用mmi_msg_draftbox_list_get_item()得到draftbox_list 下的 items并顯示出來。結束在短消息中初始化時另外一個

32、重要的工作要做的就是:生成 MailBoxList 并顯示出來。顯示 MailBoxList 之前必須先要生成這個 List 首先。在這個 List 中用戶可以看到所有完整的已收到的 inbox 中的信息,和所有在 outbox 中保存的信息。這樣在 inbox 中不完整的信息將會被 hidden 隱藏起來。構造用來顯示的 MailboxList 時,inboxList 不僅包括 inbox 還有 awaitList 中的信息。所有的 inbox,outbox 以及 awaited 消息總共共享一個 list 結構,他們總和加起來不會超過這個 mailbox 的大小。4.24.2 短消息常見功

33、能實現短消息常見功能實現 4 42 21 1 短消息的發送短消息的發送下面是短消息發送流程:首先,發送一個短消息前必須首先檢查當前 active 的 SC 號碼(服務中心號碼)是否為空,如果是空的,那么 sms 就不會發送這個消息而只是將它保存起來。然后檢查 FDN 是否開啟,如果它是開啟的狀態時還要首先檢查 SC 號碼與 DA 目的號碼地址是否都在 FDL 中;如果 FDN 沒有開啟,那么就直接發送,如果 FDN 開啟并且不是 SC和 DA 都在 FDL 中,那么要保存起來不發送。當發送 SMS 時候,首先要將它壓縮成合適的格式,因為 SMS 可以有多個 Seg;發送時只要當所有的 Seg

34、返回的結果都沒有錯時才任務發送成功;否則,當所有的 seg 返回的結果都到達時,如果其中的一個沒有成功,就通知 user 發送不成功。開始首先檢查 SC是否為空?NYSave sms檢查是否 FDN開啟?發送PRT_MSG_ID_MMI_SMS_FDN_CHECK_REQ 命令進行 FDL 檢查,根據返回的消息PRT_MSG_ID_MMI_SMS_FDN_CHECK_RSP 對應信息知道 SC 和 DA 是否都在 FDL 中NN對于待發送的消息進行打包 pack記下所有的 seg 數為 m,把這所有的 m 個 seg 作為一個整體發送出去,在發送時每次發送一個 seg,調用PRT_MSG_ID

35、_MMI_SMS_SEND_MSG_REQ循環進行,直到m 全部發送NY接收到SEND_MSG_RSP消息,然后判斷該消息是否成功設置對應的SEND_STATUS為 SEND_FAIL已發送的消息個數計數器+然后看期待回應的消息的是否全部到達?NY判斷 SEND_STATUS 是否為 FAIL 情況?YN是否需要對信息進行保存?YNSAVESMS 對信息進行保存4.2.24.2.2 短消息的接收短消息的接收Inform User 信息已經成功發送,不是send_to_many 和 send_to_group 情況時,需要刪除 Edit_Buffer結束開始收到 new_msg_ind 消息,說

36、明有的消息到來對應的 nvram 中計數 sms 到來的量+1查看 sms 中的 total_seg 是否為0 或者 total_segcurr_seg 或者total_seg=curr_seg=max_seg+1?yn說明短消息已經完整,開始進行下面的工作看是否 curr_screen 處于 inbox_list 下,如果是,那么要更新 inbox_list并且要通知用戶新的消息到來到 awaited_list 隊列中查找,看有沒有和這個 list 當中的相匹配的,如果有,然后再查看看它是否完整。如果完整的話,把它從 awaitBoxList 中刪掉,加入到inBoxList 中。如果不完整

37、的話,加入到 awaitBoxList 中,等待后面來的其他 seg 段的消息。并且同時開啟一個 timer,如果當這個timer 時間 out 時還沒有后續其他消息到來的話,那么就從awaitBoxList 中刪掉,并且添加到 inboxList 中。這是 sms 接收過程的簡略流程圖。4.2.34.2.3 短消息的保存短消息的保存短消息的保存比較簡單,他所做的工作就是首先把 sms 進行打包,然后對所有的segments 一個一個的進行保存工作。下面是保存短消息的流程圖:對上面流程圖的解釋:即當第一個 seg 的 SET_MSG_RSP 消息收到時,看返回消息是否 Success,如果不是

38、,那么直接通知用戶保存消息有錯誤發生,然后退出。如果是,那么還要看是否所有的 segs 都已經成功的進行 SET_MSG 的動作: 如果沒有,那么繼續對后面的未保存的 seg 消息調用前面的那個發送消息PRT_MSG_ID_MMI_SMS_SET_MSG_REQ,要求進行 SMS 的保存動作; 如果全部都已經成功的保存,那么首先要對于那個 SMS_EDIT_BUFF 進行 Release動作,然后再通知 user 已經成功的保存了 sms。開始對 sms 進行打包,調用mmi_frm_sms_pack_sms()將 sms 所有的 segs 合并在一起,并記下所有的 total_seg發送PR

39、T_MSG_ID_MMI_SMS_SET_MSG_REQ消息給 L4 層對 sms 中的每一個 seg 分別進行保存得到 SET_MSG_RSP 消息,根據返回的結果是否 success,決定下面進行怎樣操作?這中間也有一個循環的過程,即只有當所有的 seg 消息都保存返回 success 時候,才release buffer 并且通知 user。否則當其中一個不是 success 時,就通知用戶有錯誤發生。4.2.44.2.4 短消息的刪除短消息的刪除當刪除一個消息時,是對所有 sms 中的所有 segs 一個一個進行刪除的,每個 seg 都調用刪除短消息的命令,每次刪除時都會返回一個對應的

40、狀態信息,如果其中一個的刪除返回狀態為非 success 的話,那么就終止后面的刪除動作;否則,全部的返回狀態都是success,說明整個消息的刪除是成功的,然后更新對應的 mailbox 中的 num 和 list 狀態信息。下面是短消息的刪除流程圖:開始刪除假如說一個 sms 中的 segments 的數目是 m 個首先取出其中 seg 最小的一個,向 L4 層發送下面PRT_MSG_ID_MMI_SMS_DEL_MSG_REQ 消息,等待刪除的返回結果判斷返回消息是否是 Success?N直接終止后面的刪除動作,結束。Y判斷是否所有的 Seg 都已經刪除?NY更新對應的 mailbox

41、中的 num 和 list,這個過程也是通過發送消息來實現的。分別是 PRT_MMI_GET_SMS_NUM_REQ 和PRT_MMI_GET_SMS_LIST_REQ 消息。然后根據返回的信息,更新 mailbox 中的對應的狀態信息。關于刪除所有的 inbox 或 outbox 中的信息,根據不同的 mailbox 設置不同的delete_flag。在deleteAll 的 rsp 到來之后,看是否 success,然后得到 mailbox 的 number 和 list 并更新對應的 mailbox 的狀態。對于 inbox 情況,通知 user 并且如果在刪除時來了新的短消息,那么還要

42、判斷如果在 list 中有任何 record,就設置 icon 提示用戶有信息的消息。其它的象發送消息給很多人send_to_many 以及群組發送消息 send_by_group 等這些情況,其實 send_to_many 就是根據選定的要求發送的號碼數組,一個一個的調用發送短消息的接口函數進行發送;send_by_group 類似,只不過 group 在這應該是 send_to_many 的特殊情況。4.2.54.2.5 編輯短消息編輯短消息這里短消息支持彩信,圖片,聲音,動畫等都支持,因此在編輯短消息時,允許用戶輸入字符,插入 objects 對象,以及可以選擇文本格式等。編輯文本時,每

43、次輸入一個字符時首先要檢查在 inputbox 中是否還有剩余空間(特別注意當字符有擴展字符時,應該把對應的剩余長度減 1。當長度滿足時,檢查字符類型。如果是 ucs2 編碼而且當前 dcs(編碼類型)為 GSM 7_bit 時,要設置 DCS 為 UCS2。如果上面設置 OK,添加這個字符進去然后看結果是否 OK。如果不,提示音響起通知用戶。添加對象 Object 時,要看這個 Object 對象的格式是否能夠被 MMI SMS 識別。如果能識別,添加這個 Object。但結果很可能出錯,有可能由于空間不足等原因導致添加不成功。如果不成功的話,要提示 user 沒有添加成功;當然成功的添加也

44、要提示user。選擇文本格式時,如果用戶選擇了一種字體大小和 style,這個 font 格式會被紀錄下來,下次重新進入輸入文本框下時,這個文本格式就要被設置成前面記錄下來的文本格式,后面輸入字符時全部按照當前設置好的當前這個文本格式來。對齊方式,在每一個 paragraph 的開頭添加的。記下當前的文本格式設置并且檢查這個文本格式是否允許被輸入。如果可以,設置當前 alignment 已經改變的標志。下次重新進入文本輸入框時,文本格式這些設置的值將會重新被更新成新的值。4.34.3 附加的一些附加的一些 SMSSMS 功能功能SMS 的一些附加功能,包括短消息的格式 Format 的設定,字

45、體 Font 的大小以及 style的設定,新的段落 new_paragraph 的劃分,以及還可以插入一些鈴聲,圖片,簡單的動畫等等,這些是 EMS 支持的。 其實這些也就是短信的編輯的過程,下面看看這個輸入 Text 時:結束插入 object 時:開始首先判斷剩余 space是否夠用?檢查字符的類型,如果字符類型是 UCS2 而當前 DCS 并不是 ucs2 時,設置當前的 dcs 為ucs2。yn看結果result 是否為 ok?YN把這個 char 添加到 ems 的 text_buffer 中,按照當前的 text_format 和 allign_format。后面這兩個量是量個全

46、局變量來保存的,當下次重新進入文本輸入框時,按照保存的這些text_format 以及 alignt_romat 輸入。結束開始首先看這個 object 的類型是否能夠被識別?YNLoad_Object 把這個對象載入到 Ems 中由于 object 棧的空間可能造成返回 fail 結果把結果 result 返回給 user4.44.4 短消息設定短消息設定短消息設置部分包括 模式設定,狀態設定,存儲位置設定,信息優先網絡傳送設定等。這個部分比較簡單,實際就是把這些設定好的數值保存在 nvram 中。模式設定,包括設置 SC 地址(服務中心號碼)以及最大有效期,消息類型,模式名稱等等。模式設定

47、編輯完成之后,通過向 l4 層發送消息來進行模式設定值的保存,這個消息是PRT_MMI_SMS_SET_SC_ADDR_REQ 以及 PRT_MMI_SET_POST_PARAMS_REQ 消息,然后返回該消息對應的響應信息。狀態設定,狀態設定包括設定一些是否發送報告,以及返回發送路徑等等;這些設定得實現跟模式設定相似也是發送相應的消息。后面的存儲位置設定跟優先傳送網絡的設定,實現也是相同,只是發送的消息不一樣,發送消息后,把對應的得值保存在 NVRAM 中的對應位置,供后發送消息時用。5 5 內部調用的主要函數說明內部調用的主要函數說明說明本函數的實現,參數賦值和調用方式。voidvoid

48、mmi_msg_send_msg_reqmmi_msg_send_msg_req (U8*(U8* number,number, U16U16 replyindex,replyindex, U8U8 hidenumscreen)hidenumscreen)/本函數實現發送消息的請求,即當要進行回復消息或者發送消息時調用的/其中的參數說明:/number-要發送的目的號碼/replyIndex-回復時哪一條消息索引,如果不是回復時,本選項置為/ MMI_FRM_SMS_INVALID_INDEX/hidenumscreen-BOOL 值標志是否隱藏顯示發送目的號碼,1:隱藏,0:顯示/對于本函數

49、的調用一般不是直接調用的,都是封裝在消息回復,僅發送消息,發送且保存等/這些函數中的,而這些函數都是事先注冊好了一些 HilightHandler,當對應的 menu被高亮/度顯示時,會調用這些 handler,在這些 HilightHandler 中注冊好了 lsk 及 rsk對應的處理/函數,當按下 LSK 時(一般都是左鍵),就會調用這些封裝起來的函數,從而調用這個結束/mmi_msg_send_msg_req()請求。voidvoid mmi_msg_save_msg_req(void)mmi_msg_save_msg_req(void)/本函數實現了保存短消息/參數:無/其實這個函數

50、跟上面的函數調用方式相似,也是被封裝在一些特定的函數中,這里就是被封/裝在 mmi_msg_save_msg_to_entry 中,而這個函數實現被注冊為一個特定的 save menu 的/HilightHandler 中的,然后當這個特定的 menu 被高亮顯示時,就是執行到這個函數。voidvoid mmi_msg_send_and_save_msg_reqmmi_msg_send_and_save_msg_req (U8*(U8* number,number, U16U16 replyindex)replyindex)/本函數實現的是發送并保存消息的請求。/參數說明:/number-是發

51、送消息的目的號碼/replyIndex-是在回復消息時的回復消息的索引/函數調用跟前面的相似。下面還有很多的調用方式類似的函數:voidvoid mmi_msg_save_msg_after_send_reqmmi_msg_save_msg_after_send_req (U8(U8 status,status, void*void* number)number)/本函數實現在發送之后保存短消息的請求/參數說明:/status-發送的返回狀態,是否成功/number-發送的目的地號碼voidvoid mmi_msg_search_phbmmi_msg_search_phb (void)(voi

52、d)/本函數實現搜索電話簿得到需要的號碼/參數說明:無/調用方式,直接調用,它是被封裝在 mmi_msg_phone_number_empty()里邊的,這個函數就是/當 InputBox 為 Empty 時被注冊好的回調函數;在 sms 文本輸入編輯框中,當文本框中沒有內/容時,左軟鍵被注冊為這個 mmi_msg_search_phb()函數。/當左軟件被按下時,調用這個函數進入 phb 中的 list 查找用戶想要的號碼。voidvoid mmi_msg_send_msg_to_manymmi_msg_send_msg_to_many (void)(void)/本函數實現的是一次發送給多個

53、目的號碼的情況/參數說明:無/調用方式-跟前面其它的調用相似。/它的實現實際上就是對這 many 個號碼(最大支持 10 個號碼)調用前面的發送消息請求的函數/mmi_msg_send_msg_req。當向第一個 smsPhbNumber 發送完消息之后,在對應的返回結果回/來時,會調用對應的 mmi_msg_send_msg_rsp()函數,它就會查看看是否給所有的目的號碼都/發送出去消息了,如果還有沒有發送出去的,那么就繼續調用 mmi_msg_send_msg_req 函數對/后面的號碼進行發送。/如果全部的都發送完了,那么就 ReleaseEMSEditBuffer(),刪除 screenNodes 結束。voidvoid mmi_msg_send_msg_to_groupmmi_msg_send_msg_to_group (U16(U16 cnt,cnt, U16*U16* PhbIndex)PhbIndex)/本函數實現的是發送消息給一個群組的情況/參數說明:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論