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