Android Automotive车载嵌入式系统

一、Android Auto

        Android Auto是一个Android端的App,是专门为驾驶环境而设计的,把手机的部分功能通过数据线连接,影射到汽车屏幕上。目前,支持Android Auto的应用比较少。主要是是两类第三方应用,第一个是音视频类,第二个是消息类。相关应用的开发没有深入探索,有机会研究研究。

二、Android Automotive

       上面介绍Android Auto是手机为中心,通过数据线连接汽车。这种模型既有好处,也有坏处。好处是:数据和应用始终是一致的,不存在需要数据同步的问题,手机上装的软件和已有的数据,接到汽车直接就有了。而坏处是,每次得拿出手机,汽车只是手机一个外设,这种模式不便于对于汽车本身的控制和相关数据的获取。如果是系统直接内置于汽车,那就是完全不一样的体验了。Android Automotive则是面向这个方向设计的。

Android automotive的系统架构图如下:Android Automative是在原先Android的系统架构上增加了一些与车相关的(图中虚线框中绿色背景的)模块。

Android Automotive车载嵌入式系统_第1张图片

  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比较多,后面有机会往更深层的学习。

1.2 Car ApI

       提供给汽车app特有的接口。这些API是提供给Android automotive系统的app,对于其他平台(例如手机和平板)通常是没有意义的,所以这些API没有包含在Android Framework SDK中。如图是几乎涵盖了Android automotive所有的api接口。

Android Automotive车载嵌入式系统_第2张图片

代码的路径位于:

Android Automotive车载嵌入式系统_第3张图片

下面介绍一下关键的接口:

  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 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重新启动,这可能导致包括应用在内的其他组件重新启动。

你可能感兴趣的:(Android Automotive车载嵌入式系统)