Android Automo
tive车载嵌入式系统由什么组成?
回帖(1)
2021-12-27 11:15:40
一、Android Auto
Android Auto是一个Android端的App,是专门为驾驶环境而设计的,把手机的部分功能通过数据线连接,影射到汽车屏幕上。目前,支持Android Auto的应用比较少。主要是是两类第三方应用,第一个是音视频类,第二个是消息类。相关应用的开发没有深入探索,有机会研究研究。
二、Android Automotive
上面介绍Android Auto是手机为中心,通过数据线连接汽车。这种模型既有好处,也有坏处。好处是:数据和应用始终是一致的,不存在需要数据同步的问题,手机上装的软件和已有的数据,接到汽车直接就有了。而坏处是,每次得拿出手机,汽车只是手机一个外设,这种模式不便于对于汽车本身的控制和相关数据的获取。如果是系统直接内置于汽车,那就是完全不一样的体验了。Android Automotive则是面向这个方向设计的。
Android automotive的系统架构图如下:Android Automative是在原先Android的系统架构上增加了一些与车相关的(图中虚线框中绿色背景的)模块。
- Car App:包括OEM和第三方开发的App
- Car API:提供给汽车App特有的接口
- Car Service:系统中与车相关的服务
- Vehicle Network Service:汽车的网络服务
- 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接口。
代码的路径位于:
下面介绍一下关键的接口:
- car.java:包含了与车相关的基本API。例如:车辆后视镜,门,座位,窗口等。
- app →menu:车辆应用菜单相关API。
- cluster:仪表盘相关API。
- media:多媒体相关API。
- hardware:车辆硬件相关API。
- navigation:导航相关API。
- settings:设置相关API。
1.3 Car Services
Android Automative中的Car Service集中在一个App中。可以想象,这个App需要非常高的权限,所以这是一个系统App。Car Service并非一个服务,而是一系列的服务。这些服务都在ICarImpl.java构造函数中列了出来。
还有几个模块没有出现在上面的架构图中。但它们也包含在了Android Automative系统中,这里一并介绍一下。
- VMS:vehicle monitor service, 汽车其他服务监测,主要是监测其他进程。
- ODB2: ODB全称是On-Board Diagnostics。这是一种装置于车中用以监控车辆运行状态和回报异常的系统,可于车辆的子系统出现问题时,产生故障代码和提醒讯号通知车主和车厂诊断维修
- 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 Auto
Android Auto是一个Android端的App,是专门为驾驶环境而设计的,把手机的部分功能通过数据线连接,影射到汽车屏幕上。目前,支持Android Auto的应用比较少。主要是是两类第三方应用,第一个是音视频类,第二个是消息类。相关应用的开发没有深入探索,有机会研究研究。
二、Android Automotive
上面介绍Android Auto是手机为中心,通过数据线连接汽车。这种模型既有好处,也有坏处。好处是:数据和应用始终是一致的,不存在需要数据同步的问题,手机上装的软件和已有的数据,接到汽车直接就有了。而坏处是,每次得拿出手机,汽车只是手机一个外设,这种模式不便于对于汽车本身的控制和相关数据的获取。如果是系统直接内置于汽车,那就是完全不一样的体验了。Android Automotive则是面向这个方向设计的。
Android automotive的系统架构图如下:Android Automative是在原先Android的系统架构上增加了一些与车相关的(图中虚线框中绿色背景的)模块。
- Car App:包括OEM和第三方开发的App
- Car API:提供给汽车App特有的接口
- Car Service:系统中与车相关的服务
- Vehicle Network Service:汽车的网络服务
- 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接口。
代码的路径位于:
下面介绍一下关键的接口:
- car.java:包含了与车相关的基本API。例如:车辆后视镜,门,座位,窗口等。
- app →menu:车辆应用菜单相关API。
- cluster:仪表盘相关API。
- media:多媒体相关API。
- hardware:车辆硬件相关API。
- navigation:导航相关API。
- settings:设置相关API。
1.3 Car Services
Android Automative中的Car Service集中在一个App中。可以想象,这个App需要非常高的权限,所以这是一个系统App。Car Service并非一个服务,而是一系列的服务。这些服务都在ICarImpl.java构造函数中列了出来。
还有几个模块没有出现在上面的架构图中。但它们也包含在了Android Automative系统中,这里一并介绍一下。
- VMS:vehicle monitor service, 汽车其他服务监测,主要是监测其他进程。
- ODB2: ODB全称是On-Board Diagnostics。这是一种装置于车中用以监控车辆运行状态和回报异常的系统,可于车辆的子系统出现问题时,产生故障代码和提醒讯号通知车主和车厂诊断维修
- 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重新启动,这可能导致包括应用在内的其他组件重新启动。
举报
更多回帖