車載虛擬儀表人機(jī)界面,是駕駛員獲取汽車工況數(shù)據(jù)的主要界面,,便于駕駛員實時全面地掌握汽車工作狀態(tài),,有效地與汽車進(jìn)行人機(jī)交互,對保障汽車安全穩(wěn)定的行駛有著重要意義,,目前普遍使用的是Windows CE和Linux操作系統(tǒng),。Windows CE操作系統(tǒng)功能穩(wěn)定,有完善的技術(shù)支持,,但價格昂貴,、源代碼封閉、網(wǎng)絡(luò)可利用資源較少,;Linux操作系統(tǒng)的最大優(yōu)勢在于免費(fèi)和開源,,是車載信息顯示系統(tǒng)的主流操作系統(tǒng),但其并不是基于移動設(shè)備開發(fā)的,,不能完全滿足移動設(shè)備的需求,。
Android是Google開發(fā)的一款基于開源操作系統(tǒng)Linux的開放、開源移動平臺,,對于目前主流的嵌入式平臺支持良好,,Android系統(tǒng)的優(yōu)越性能己在多款移動設(shè)備上得到驗證,。它包括操作系統(tǒng)用戶界面和應(yīng)用程序而且不存在任何以往阻礙移動產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙。文中提出利用Android作為車載虛擬儀表軟件開發(fā)平臺,,在Android提供的應(yīng)用程序框架上來實現(xiàn)虛擬儀表的人機(jī)界面,。
1 系統(tǒng)硬件體系
雖然Android是作為一款手機(jī)軟件平臺進(jìn)行開發(fā)的應(yīng)用程序框架和應(yīng)用程序但其本質(zhì)是一個嵌入式軟件開發(fā)平臺。若將Android用于車載虛擬儀表系統(tǒng)的開發(fā),,需要對儀表系統(tǒng)應(yīng)用的特點(diǎn)進(jìn)行調(diào)整,,系統(tǒng)采用的硬件平臺是REAL210,CPU處理速度600 MHz~1 GHz,,基于Cortex—A8架構(gòu),。系統(tǒng)中主要的硬件模塊有音頻模塊、CAN模塊,、液晶顯示模塊,、串口和以太網(wǎng)通信模塊,如圖1所示,。
2 Android軟件系統(tǒng)的定制
由于Android最初是基于手機(jī)軟件開發(fā)平臺進(jìn)行設(shè)計的,而且其中大部分模塊都是為手機(jī)通信所設(shè)計,,為節(jié)約開發(fā)板資源,,需要將Android系統(tǒng)中不必要的組件剪裁掉,保留必要的最小系統(tǒng),。因此必須對框架進(jìn)行修改,,將與電話、短信等相關(guān)的模塊移除,。僅留下必需的Android的核心模塊,,包括Package Manager、System Service,、Input Service,、Hardware SerVice和System Server等。通過修改System Server的加載過程可以去掉不需要的服務(wù)和模塊,,另外還要實現(xiàn)底層硬件的驅(qū)動程序,,重新交叉編譯Linux 2.6內(nèi)核,并在驅(qū)動程序?qū)崿F(xiàn)的基礎(chǔ)上封裝函數(shù)庫,,以便Android的應(yīng)用程序通過JNI的方式訪問底層驅(qū)動,。經(jīng)過定制和修改過的Android系統(tǒng)架構(gòu)如圖2所示。
車載虛擬儀表人機(jī)界面的應(yīng)用程序需要進(jìn)行重新開發(fā),,主要是界面模塊,、CAN模塊、數(shù)據(jù)訪問模塊和告警模塊,。其中CAN模塊設(shè)計成Service的方式,。數(shù)據(jù)訪問模塊設(shè)計為Content Provider,。告警模塊采用的通知方式為Broadcast Receiver和Notifica。系統(tǒng)通電后,,在Android的System Server中首先啟動CAN模塊,,然后啟動主界面的程序。
3 應(yīng)用程序的設(shè)計與實現(xiàn)
應(yīng)用程序的系統(tǒng)架構(gòu),。通過PackageManager提供的各個APK的信息以菜單方式對各個功能模塊進(jìn)行調(diào)用,。
3.1 CAN模塊
CAN模塊用于數(shù)據(jù)的采集和處理,CAN模塊接到數(shù)據(jù)后,,要對數(shù)據(jù)進(jìn)行解析,,判斷出接收到的數(shù)據(jù)類型。最終得到所需要的值,。計算方法為根據(jù)參數(shù)所在數(shù)據(jù)域的字節(jié)位置提取其對應(yīng)的原始數(shù),,再根據(jù)該參數(shù)對應(yīng)的分辨率和偏移量得到參數(shù)值,其參數(shù)值的計算方法為:參數(shù)值=參數(shù)原始數(shù)×分辨率+偏移量,。通過編程計算出數(shù)據(jù)代表的實際發(fā)動機(jī)狀態(tài)值,,即可準(zhǔn)確地在車輛實時功能模塊中顯示當(dāng)前的車輛狀態(tài)。
3.2 數(shù)據(jù)訪問模塊
程序的數(shù)據(jù)訪問模塊,,采用Android系統(tǒng)內(nèi)置的SQLite數(shù)據(jù)庫,,對一些重要車況信息自動記憶存儲,便于分析和維修,,起到汽車“黑匣子”的作用,。存儲的車況信息可以通過點(diǎn)擊回放按鈕直接在儀表界面上回放,真實再現(xiàn)汽車行進(jìn)過程中的狀況,。
首先調(diào)用.openOrCreateDatabase()創(chuàng)建vehicle_database.db數(shù)據(jù)庫,,然后配置SQLite數(shù)據(jù)庫屬性通過。創(chuàng)建一個數(shù)據(jù)表分別定義:行駛?cè)掌?、出廠信息,、車速、轉(zhuǎn)速信號,、啟動,、停止時刻、行使里程,、報警信息等,。將黑匣子接收到的數(shù)據(jù)對應(yīng)數(shù)據(jù)表定義的格式通過.insert()向數(shù)據(jù)表中插入數(shù)據(jù),通過.delete()指定日期來刪除過期的數(shù)據(jù),。顯示歷史數(shù)據(jù)需要先通過DatePicker獲取用戶輸入的年,、月、日,并將具體日期數(shù)值提取出來,,將條件放入SQL查詢語句.query()中來查詢,,定義一個Cursor返回結(jié)果,然后創(chuàng)建一個數(shù)據(jù)適配器將Cursor的結(jié)果直接映射到ListView中的對應(yīng)的TextView上,。
3.3 功能模塊
功能模塊用于測控車輛的速度,、發(fā)動機(jī)轉(zhuǎn)速、水溫和燃油,、告警事件的顯示,。系統(tǒng)設(shè)計的功能模塊界面顯示如圖3所示。
3.4 告警模塊
告警模塊本身是一個Broadcast Receiver,,它負(fù)責(zé)接收其他模塊的告警事件,,超速、油量,、水溫,、油壓等,并將這些信息寫入數(shù)據(jù)庫,,同時調(diào)用告警顯示界面顯示對應(yīng)的信息或以Notification的方式在狀態(tài)欄進(jìn)行提示,。在Android系統(tǒng)中,所有的應(yīng)用程序之間都通過Binder進(jìn)行通信,,這種IPC機(jī)制是基于Linux底層驅(qū)動實現(xiàn)的,,與傳統(tǒng)的進(jìn)程間通信機(jī)制相比,它的執(zhí)行具有更高的效率和更好的擴(kuò)展性,。
4 結(jié)束語
利用Android作為人機(jī)界面所開發(fā)的框架通過對各個功能模塊的細(xì)化,,可以使系統(tǒng)設(shè)計更合理,,模塊結(jié)構(gòu)更獨(dú)立,,容易進(jìn)行軟件維護(hù)和代碼二次開發(fā),基于Android應(yīng)用程序框架設(shè)計的各個模塊,,可以進(jìn)行自由修改和替換,,提高了系統(tǒng)的可定制性,雖然Android是手機(jī)軟件開發(fā)平臺,,但憑借其優(yōu)秀的系統(tǒng)架構(gòu)設(shè)計和理念,,會有越來越多的車載虛擬儀表采用Android作為開發(fā)平臺。