CMMB標準緊急廣播m務的研究與應用
2 EBP客戶端在終端上的設計實現(xiàn)
2.1 EBP客戶端的設計模型
本EBP(Emergeney Broadcasting Protocol,緊急廣播協(xié)議)客戶端從解析到展現(xiàn)一共分為以下4層,如圖3所示。本文引用地址:http://m.butianyuan.cn/article/152281.htm
EBP解析層:主要負責從CMMB協(xié)議棧提供的位于0時隙(MF_ID=0)中表標識為0x10的復用子幀中解析出緊急廣播消息,并且抽象出相應的數(shù)據結構供上層使用。該層可編譯成庫,在移植時可以不作修改。
EBP本地管理層:主要負責已經接收的緊急廣播消息本地相關的管理,如保存、獲取已接收的緊急廣播消息,刪除過期的緊急廣播消息等。該層在移植時需要做少量適配相應終端文件系統(tǒng)的工作。
接口抽象層:根據以上2層抽象出供用戶UI層使用的統(tǒng)一接口。用戶UI層使用的所有接口都通過該層提供,并保持不變,在一定程度上減少了用戶UI層的移植工作。用戶UI層:主要負責緊急廣播消息數(shù)據對用戶的展現(xiàn)。針對不同的終端,如支持CMMB技術的手機、游戲機、PDA、車載GPS、MP4,其屏幕大小、分辨率、支持的UI系統(tǒng)等都可能存在差異,所以將本EBP客戶端移植到不同終端上時主要工作便是移植該層。抽象接口層、EBP本地管理層、EBP解析層構成了EBP客戶端的核心。
2.2 EBP客戶端的處理流程
(1)關鍵消息
①需要CMMB協(xié)議棧通知的消息:MSG_EBP_COME。當CMMB協(xié)議棧發(fā)現(xiàn)有緊急廣播消息時,給EBP客戶端發(fā)送預先定義好的MSG_EBP_COME消息。
②EBP客戶端核心給UI發(fā)送的消息:a.EBP_RECEIVE_OK,客戶端成功接收到新的緊急廣播消息,需要UI展現(xiàn)層做相應的展現(xiàn);b.EBP_RECEIVE_TIMEOUT,客戶端接收緊急廣播消息超時失敗。
(2)關鍵數(shù)據結構
①EBP_Index:緊急廣播索引,圖3所示的本地管理層通過該數(shù)據結構來管理本地保存的緊急廣播消息。
②EBP_Table:緊急廣播表,對應圖2所示的表標識為0x10的控制信息表的格式,圖3的解析層中第1次初步解析出的數(shù)據用該結構保存。
③EBP_MessageInfo:非觸發(fā)消息,圖3的解析層中解析出的非觸發(fā)消息用該結構保存。
④EBP_TriggerInfo:觸發(fā)消息,圖3的解析層中解析出的觸發(fā)消息用該結構保存。
⑤EBF_MsgInfo:緊急廣播消息,由于1個緊急廣播消息只可能是觸發(fā)或者非觸發(fā)中的1種,為了邏輯上和流程上便于處理,該結構聯(lián)合上述結構3、4,統(tǒng)一為1個結構。
⑥EBP:對本地管理層暴露的緊急廣播消息結構,對EBP_MsgInfo的封裝,加上一些上層需要用到的屬性域。
⑦EBP_CURSOR:本地管理層定義的數(shù)據結構,供接口層使用,通過該結構訪問響應的緊急廣播消息。
⑧EBP_LangContent:存儲非觸發(fā)緊急廣播消息中的語種相關信息。
⑨EBP_Ext:存儲非觸發(fā)緊急廣播消息中輔助信息的相關內容。
(3)關鍵接口
(D int32_t ebp_receive_data(uint8_t*path);功能:接收緊急廣播表。
②static int32_t ebp_table_decoder(uint8_t*bur,int32_t len);
功能:解析緊急廣播表。
③static int32_t ebp_message_decoder(uint8_t* *buf_adr,uint32_t len);
功能:解析緊急廣播具體內容。
④CMMB_EBP_CURSOR ebp_create_cursor(void_t);
功能:創(chuàng)建游標。
⑤CMMB_EBP_CURSOR ebp_get_nextcur(EBP_CURSOR cur);
功能:獲取當前游標cur游標的下一個游標。
⑥int8_t ebp_getebp(EBP_CURSOR cur,EBP_MESSAGE*msg);
功能:獲取cur游標對應的緊急廣播消息具體內容填充在輸出參數(shù)msg中。
⑦static int32_t ebp_checkout(void_t);
功能:檢查索引并刪除過期EBP索引及相關文件。
⑧int8_t ebp_cancel_receive(void_t);
功能:取消緊急廣播消息接收。
⑨int32_t ebp_set_curfreq_ebpupdate(uint32_t cur_freq);
功能:設置頻點cur_freq的緊急廣播消息更新序號。
⑩static int8_t ebp_read_sared_ebp(EBP*ebp,EBP_Index*index)
功能:讀取本地保存的緊急廣播。
⑩int32_t ebp_suspend();
功能:阻塞緊急廣播消息接收線程。
⑩int32_t ebp_active(void_t*param);
功能:激活緊急廣播消息接收線程。
(4)主要流程
本EBP客戶端主要流程分為以下幾步:
①本客戶端啟動后,等待CMMB協(xié)議棧發(fā)送MSG_EBP_COME消息。收到該消息后,表明當前CMMB網絡中有緊急廣播消息。EBP客戶端使用ebp_receive_data(uint8_t*path)接口接收緊急廣播表。該接口同時設置標志位,在其進行緊急廣播消息接收的過程中,暫不響應新的MSG_EBP_COME消息。
②用ebp_table_decoder接口對緊急廣播表進行解析,得到1組EBP_Table數(shù)據。
③用ebp_message_decoder接口對EBP_Table數(shù)據進行進一步解析,得到1組EBP_MessageInfo或EBP_TriggerInfo數(shù)據,并檢查刪除已經接收過的消息,然后將新收到的緊急廣播消息封裝為EBP結構,并加入到已接收的EBP鏈上。
評論