新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > CMMB標準緊急廣播m務的研究與應用

        CMMB標準緊急廣播m務的研究與應用

        作者: 時間:2009-11-17 來源:網絡 收藏

        2 EBP客戶端在終端上的設計實現
        2.1 EBP客戶端的設計模型
        本EBP(Emergeney Broadcasting Protocol,協議)客戶端從解析到展現一共分為以下4層,如圖3所示。

        本文引用地址:http://www.104case.com/article/152281.htm

        EBP解析層:主要負責從協議棧提供的位于0時隙(MF_ID=0)中表標識為0x10的復用子幀中解析出消息,并且抽象出相應的數據結構供上層使用。該層可編譯成庫,在移植時可以不作修改。
        EBP本地管理層:主要負責已經接收的消息本地相關的管理,如保存、獲取已接收的緊急廣播消息,刪除過期的緊急廣播消息等。該層在移植時需要做少量適配相應終端文件系統的工作。
        接口抽象層:根據以上2層抽象出供用戶UI層使用的統一接口。用戶UI層使用的所有接口都通過該層提供,并保持不變,在一定程度上減少了用戶UI層的移植工作。用戶UI層:主要負責緊急廣播消息數據對用戶的展現。針對不同的終端,如支持技術的手機、游戲機、PDA、車載GPS、MP4,其屏幕大小、分辨率、支持的UI系統等都可能存在差異,所以將本EBP客戶端移植到不同終端上時主要工作便是移植該層。抽象接口層、EBP本地管理層、EBP解析層構成了EBP客戶端的核心。
        2.2 EBP客戶端的處理流程
        (1)關鍵消息
        ①需要協議棧通知的消息:MSG_EBP_COME。當CMMB協議棧發現有緊急廣播消息時,給EBP客戶端發送預先定義好的MSG_EBP_COME消息。
        ②EBP客戶端核心給UI發送的消息:a.EBP_RECEIVE_OK,客戶端成功接收到新的緊急廣播消息,需要UI展現層做相應的展現;b.EBP_RECEIVE_TIMEOUT,客戶端接收緊急廣播消息超時失敗。
        (2)關鍵數據結構
        ①EBP_Index:緊急廣播索引,圖3所示的本地管理層通過該數據結構來管理本地保存的緊急廣播消息。
        ②EBP_Table:緊急廣播表,對應圖2所示的表標識為0x10的控制信息表的格式,圖3的解析層中第1次初步解析出的數據用該結構保存。
        ③EBP_MessageInfo:非觸發消息,圖3的解析層中解析出的非觸發消息用該結構保存。
        ④EBP_TriggerInfo:觸發消息,圖3的解析層中解析出的觸發消息用該結構保存。
        ⑤EBF_MsgInfo:緊急廣播消息,由于1個緊急廣播消息只可能是觸發或者非觸發中的1種,為了邏輯上和流程上便于處理,該結構聯合上述結構3、4,統一為1個結構。
        ⑥EBP:對本地管理層暴露的緊急廣播消息結構,對EBP_MsgInfo的封裝,加上一些上層需要用到的屬性域。
        ⑦EBP_CURSOR:本地管理層定義的數據結構,供接口層使用,通過該結構訪問響應的緊急廣播消息。
        ⑧EBP_LangContent:存儲非觸發緊急廣播消息中的語種相關信息。
        ⑨EBP_Ext:存儲非觸發緊急廣播消息中輔助信息的相關內容。
        (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);
        功能:創建游標。
        ⑤CMMB_EBP_CURSOR ebp_get_nextcur(EBP_CURSOR cur);
        功能:獲取當前游標cur游標的下一個游標。
        ⑥int8_t ebp_getebp(EBP_CURSOR cur,EBP_MESSAGE*msg);
        功能:獲取cur游標對應的緊急廣播消息具體內容填充在輸出參數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協議棧發送MSG_EBP_COME消息。收到該消息后,表明當前CMMB網絡中有緊急廣播消息。EBP客戶端使用ebp_receive_data(uint8_t*path)接口接收緊急廣播表。該接口同時設置標志位,在其進行緊急廣播消息接收的過程中,暫不響應新的MSG_EBP_COME消息。
        ②用ebp_table_decoder接口對緊急廣播表進行解析,得到1組EBP_Table數據。
        ③用ebp_message_decoder接口對EBP_Table數據進行進一步解析,得到1組EBP_MessageInfo或EBP_TriggerInfo數據,并檢查刪除已經接收過的消息,然后將新收到的緊急廣播消息封裝為EBP結構,并加入到已接收的EBP鏈上。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 安岳县| 聊城市| 泰顺县| 新巴尔虎右旗| 黎平县| 哈尔滨市| 囊谦县| 黄陵县| 阿克陶县| 嘉定区| 定陶县| 乡城县| 榕江县| 彭阳县| 叙永县| 绥德县| 绵阳市| 连平县| 茶陵县| 海宁市| 和顺县| 塔城市| 潮州市| 额尔古纳市| 勃利县| 民丰县| 利辛县| 阿克陶县| 巨野县| 九寨沟县| 和林格尔县| 密云县| 双鸭山市| 宜宾县| 德令哈市| 涞水县| 顺昌县| 德州市| 白玉县| 新乡县| 长汀县|