標籤:
之前在做WinCE車載方案時,曾做過一個小工具TraceMonitor,用於顯示WinCE系統上應用程式的調試資訊,特別是在實車調試時,用於顯示CAN盒與主機之間的串口資料。因為需要搶佔市場先機,經常在新車上市前,就得配合CAN解碼盒廠商同步調試車機端軟體。這時候,TraceMonitor就可能派上大用場。遇到說不清是哪一邊的問題時,抓資料一看,就清清楚楚了。有時終端客戶的機器出現了原車功能異常的問題,也可以直接運行該工具,即時抓取串口資料提供給我們以分析問題原因。不過該工具需要商務應用程式做特殊處理,不具備通用性,並且是在應用程式層實現,使用時可能會對效能有影響,但比沒有強了。有一次跟GYP一起調試RK3188安卓車載導航,車機端始終收不到資料,硬體工程師說CAN盒肯定會發,糾結半天,最後只能用USB轉串口板接出來在電腦上看,資料是有的,但框架格式不對。如果Android上也有一個可以即時抓取串口資料的工具就方便多了。
前文《Android(Linux)線路規程的使用》中已經提到,在調整Android底層串口通訊的架構時使用了線路規程,意外發現可以很方便地在驅動中監測串口收發的資料,再寫一個應用配合顯示就可以了。說幹就幹,折騰點小工具,方便自己,也方便別人。
思路有了,實現並不複雜,先寫一個字元驅動bonovo_mon,用於緩衝線路規程裡發送和接收到的資料,應用程式ComMon則使用FileInputStream讀取字元裝置資料並顯示。為了使用時方便,實現了資料幀過濾、十六進位顯示、資料儲存、發送儲存的資料到指定郵箱等功能,比WinCE下的TraceMonitor強大不少,可以監測通訊串口上的所有資料,業務APP無需做任何特殊處理,而且僅在字元驅動bonovo_mon被開啟時才向線路規程註冊請求快取資料,所以不運行ComMon時,對系統幾乎沒有任何影響。
ComMon的介面及主要功能的使用如下所示。
Android(Linux)即時監測串口資料