天天看點

Android Automotive車載嵌入式系統一、Android Auto二、Android Automotive

一、Android Auto

        Android Auto是一個Android端的App,是專門為駕駛環境而設計的,把手機的部分功能通過資料線連接配接,影射到汽車螢幕上。目前,支援Android Auto的應用比較少。主要是是兩類第三方應用,第一個是音視訊類,第二個是消息類。相關應用的開發沒有深入探索,有機會研究研究。

二、Android Automotive

       上面介紹Android Auto是手機為中心,通過資料線連接配接汽車。這種模型既有好處,也有壞處。好處是:資料和應用始終是一緻的,不存在需要資料同步的問題,手機上裝的軟體和已有的資料,接到汽車直接就有了。而壞處是,每次得拿出手機,汽車隻是手機一個外設,這種模式不便于對于汽車本身的控制和相關資料的擷取。如果是系統直接内置于汽車,那就是完全不一樣的體驗了。Android Automotive則是面向這個方向設計的。

Android automotive的系統架構圖如下:Android Automative是在原先Android的系統架構上增加了一些與車相關的(圖中虛線框中綠色背景的)子產品。

Android Automotive車載嵌入式系統一、Android Auto二、Android Automotive
  1. Car App:包括OEM和第三方開發的App
  2. Car API:提供給汽車App特有的接口
  3. Car Service:系統中與車相關的服務
  4. Vehicle Network Service:汽車的網絡服務
  5. Vehicle HAL:汽車的硬體抽象層描述

1、下面具體介紹一下每個子產品:

1.1  Car App

        包括 OEM廠商和第三方的apk,聲明代碼路徑如下,car_base下主要是系統的基礎平台,car.mk為添加的所有汽車制造的通用制造檔案,這個清單中,首字母大寫的子產品基本上都是汽車系統中專有的App。源碼位于android/packages/services/Car,當然我們自己也可以添加apk,這部分相對來說用到java比較多,後面有機會往更深層的學習。

Android Automotive車載嵌入式系統一、Android Auto二、Android Automotive

1.2 Car ApI

       提供給汽車app特有的接口。這些API是提供給Android automotive系統的app,對于其他平台(例如手機和平闆)通常是沒有意義的,是以這些API沒有包含在Android Framework SDK中。如圖是幾乎涵蓋了Android automotive所有的api接口。

Android Automotive車載嵌入式系統一、Android Auto二、Android Automotive

代碼的路徑位于:

Android Automotive車載嵌入式系統一、Android Auto二、Android Automotive

下面介紹一下關鍵的接口:

  1. car.java:包含了與車相關的基本API。例如:車輛後視鏡,門,座位,視窗等。
  2. app →menu:車輛應用菜單相關API。
  3. cluster:儀表盤相關API。
  4. media:多媒體相關API。
  5. hardware:車輛硬體相關API。
  6. navigation:導航相關API。
  7. settings:設定相關API。

1.3 Car Services

        Android Automative中的Car Service集中在一個App中。可以想象,這個App需要非常高的權限,是以這是一個系統App。Car Service并非一個服務,而是一系列的服務。這些服務都在ICarImpl.java構造函數中列了出來。

Android Automotive車載嵌入式系統一、Android Auto二、Android Automotive

還有幾個子產品沒有出現在上面的架構圖中。但它們也包含在了Android Automative系統中,這裡一并介紹一下。

  1. VMS:vehicle monitor service, 汽車其他服務監測,主要是監測其他程序。
  2. ODB2:  ODB全稱是On-Board Diagnostics。這是一種裝置于車中用以監控車輛運作狀态和回報異常的系統,可于車輛的子系統出現問題時,産生故障代碼和提醒訊号通知車主和車廠診斷維修
  3. VNS:    Vehicle Network Service, 

1.4 Vehicle HAL

車載HAL使用以下接口:

  • vehicle_prop_config_t const *(*list_properties)(..., int* num_properties)

     列出車載 HAL 所支援的所有屬性的配置。車輛網絡服務隻會使用受支援的屬性。
  • (*get)(..., vehicle_prop_value_t *data)

     讀取屬性的目前值。對于區域屬性,每個區域都可能具有不同的值。
  • (*set)(..., const vehicle_prop_value_t *data)

     為屬性寫入相應值。寫入的結果是按屬性進行定義。
  • (*subscribe)(..., int32_t prop, float sample_rate, int32_t zones)

     監視屬性值的變化,回調見下文。
  • (*release_memory_from_get)(struct vehicle_hw_device* device, vehicle_prop_value_t *data)

     釋放從 get 調用配置設定的記憶體。

車載HAL使用以下回調接口:

  • (*vehicle_event_callback_fn)(const vehicle_prop_value_t *event_data)

     通知車輛屬性值的變化。
  • (*vehicle_error_callback_fn)(int32_t error_code, int32_t property, int32_t operation)

     傳回全局車載 HAL級錯誤或每個屬性的錯誤。全局錯誤會導緻HAL重新啟動,這可能導緻包括應用在内的其他元件重新啟動。