驍龍820A汽車Android解決方案介紹--汽車網(wǎng)絡服務介紹
驍龍820A是一顆面向汽車推出系統(tǒng)芯片,在性能方面與820保持一致,但是820A更加主張安全這個概念。驍龍820A與驍龍602A處理器相比,計算性能更加強大,可以支持更多的汽車傳感器。而消息的傳遞就是依靠車內(nèi)網(wǎng)絡,這個的實現(xiàn)就不得不提VehicleNetworkService.cpp這個文件了,這個文件包含車內(nèi)網(wǎng)絡邏輯處理的核心邏輯了。
由于方法很多,所以小編會選取一部分關鍵函數(shù)和流程進行分析。
汽車消息處理VehicleHalMessageHandler
顧名思義,VehicleHalMessageHandler類就是消息的處理者,負責對收到的消息進行相應的處理工作。
構(gòu)造函數(shù)進行了looper和service的初始化工作,同時也初始化了索引和時間。析構(gòu)函數(shù)是在程序銷毀是調(diào)用,它的工作是消除一些鎖和刪除properties和事件。下圖的代碼是它的的構(gòu)造函數(shù)和析構(gòu)函數(shù)。
這個類的最重要的函數(shù)是handleMessage,代碼如下所示
它主要是接收兩種消息,分別時HAL_EVENT,HAL_ERROR,接收到消息然后做相應的處理。本文就以HAL_EVENT舉個例子。代碼如下:
從上面的代碼來看,我們只需要關注if(events != null)的部分,這里面主要是分發(fā)消息事件,隨后就銷毀事件。
分發(fā)事件是如何實現(xiàn)的呢?其實分發(fā)事件是在VehicleNetworkService里面實現(xiàn)的。其中mService就是VehicleNetworkService。
VehicleNetworkService
前面的疑問“消息分發(fā)的實現(xiàn)”將在下文VehicleNetworkService模塊里面詳細說明。下圖代碼是mService.dispatchHalEvents(*events)的具體實現(xiàn)方法。
代碼并不復雜,大概只是進行了兩步操作,
第一步給HalClientSpVector實例化出來的activeClients賦值;
第二步分發(fā)事件client->dispatchEvents().
PropertyValueCache
PropertyValueCache只有兩個方法,而且都為VehicleNetworkService服務,功能上是對實際PropertyValue的mCache存取。下面是writeToCache的實現(xiàn)代碼:
跟蹤代碼可知,先給vehicle_prop_value分配空間,然后再把需要改動的v賦值給value。然后這個方法在VehicleNetworkService的體現(xiàn)方法是
總結(jié)
本文主要介紹了Vehicle網(wǎng)絡服務三個主要類,這三個類的關系可以總結(jié)為下圖:
VehiclenetworkService與VehicleHalMessageHandler是相互服務的,即互相有調(diào)用關系,實現(xiàn)消息傳遞。而PropertyValueCache只是服務VehicleNetworkService,提供cache功能。





