天天看點

《BREW進階與精通——3G移動增值業務的營運、定制與開發》連載之90——BREW中的日志接口功能

版權聲明:本文為半吊子子全棧工匠(wireless_com,同公衆号)原創文章,未經允許不得轉載。 https://blog.csdn.net/wireless_com/article/details/6045556

SDK中的ILOGGER 接口為 AEE 層提供了通用記錄的功能,共有三種主要的實作,應用程式作者通過使用以下一個ClassID 建立 ILOGGER 執行個體:

–  AEECLSID_LOGGER_FILE 向檔案發送日志項;

–  AEECLSID_LOGGER_SERIAL 向串行端口發送日志項;

–  AEECLSID_LOGGER_WIN 向 BREW Simulator輸出視窗發送日志項。

不管是檔案實作還是串行記錄實作都按以下資料包格式将資料輸出到各自 的輸出媒介:

----------------------------- | BREW 頭檔案 | 包資料 | -----------------------------

但串行記錄實作将這些日志包按以下格式包裝在 HDLC 幀中:

---------------- | BREW 頭檔案 | 包資料 | 16b FCS | 8b HDLC 标記 | ------------------

其中16 位 FCS(幀檢查序列)是 RFC 1171 中指定的 16 位 CRC;8 位 HDLC 标記的值為 0x7E,如果在 BREW 頭檔案、包資料或 16b FCS 中存在此标記, 則必須用 8 位值 0x7D 進行轉義并與 0x20 進行“異或”運算。 而且,如果轉義值 0x7D 存在,也必須以相同方法進行轉義。例如: 在資料中 -> 在輸出流中 0x7E -> 0x7D、0x5E 0x7D -> 0x7D、0x5D 這些值稍後必須由接收軟體進行反轉義。記錄到串行端口時,在 ILOGGER 接口訓示資料包已成功發送和資料包完全送出串行端口之間會存在一個延遲,這是由于低級别串行接口引入的緩沖延遲引起的。

是以,應用程式開發者應該注意:如果發送完最後一個包後,ILOGGER 接口被過快釋放,則通過串行端口接收的資料包有可能被截斷。為避免這種情況,可能要在發送完最後一個資料包和釋放 ILOGGER 接口之間引入一個延遲。

ILogger 接口的視窗實作将用以下格式,将所有外發日志寫入模拟器的輸出視窗:

bkt:XX typ:XX cID:XX iID:XX FILENAME LINENUMBER MESSAGE ARGS

其中:

bkt: 日志存儲

typ: 日志類型

cID: 目前正在運作的 BREW 應用程式的ClassID

iID: 使用者定義的執行個體 ID

FILENAME: 發送日志的可選檔案名

LINENUMBER: 發送日志的可選行号

MESSAGE: 使用者定義的文本消息

ARGS: 使用

ILOGGER_PutMsg()

的可選參數

編譯某個版本的應用時,如果定義 AEE_LOG_DISABLE 常量,該常量可以使用預處理器删除幾乎所有的 ILOGGER 接口函數功能,執行個體建立過程函數、擷取參數函數、設定參數函數除外。如果希望如此,必須在應用程式包含 AEELogger.h 之前定義此常量。

這樣,開發者不但可以在模拟器上實時調測應用,還可以通過模拟器的輸出視窗以及日志檔案來調試目标手機上的應用程式。