AutoMotive介绍

AutoMotive整体架构

在这里插入图片描述
从这幅图中我们可以看出,Android AutoMotive是在原先Android的系统架构上增加了一些与车相关的(图中虚线框中的)模块。

1.Car Apps:汽车系统中专有的App(/platform/packages/apps/Car/)

├─Dialer 拨号盘
├─Hvac 空调
├─LatinIME 输入法键盘
├─Launcher 主界面
├─LensPicker
├─libs car apps通用lib库
│ ├─car-apps-common
│ ├─car-broadcastradio-support
│ ├─car-media-common
│ ├─car-settings-lib
│ ├─car-stream-ui-lib
│ └─specs
├─LocalMediaPlayer
├─Media
├─Messenger
├─Overview (空文件夹)
├─Radio 收音机
├─Settings 设置
├─Stream (空文件夹)
├─SystemUpdater 系统更新
└─UserManagement (空文件夹)

2.Car API:提供给汽车App特有的接口(/platform/packages/services/Car/car-lib)

先整体看下/platform/packages/services/Car下的目录:
├─car-cluster-logging-renderer 仪表盘渲染服务(APK)
├─car-default-input-service 输入服务(APK)
├─car-lib Car API(jar包)供APP调用
├─car-maps-placeholder 地图安装检测(APK)
├─car-support-lib Car support lib兼容包
├─car-systemtest-lib test包
├─car-usb-handler USB检测枚举(APK)
├─car_product
├─evs 外部视景系统,支持后视摄像头和环绕视图显示(c++应用)
├─obd2-lib 监控车辆运行状态和回报异常,产生故障代码和提醒讯号(jar包)
├─procfs-inspector
├─service Car Service(APK)
├─tests 测试包
├─tools
├─TrustAgent 信任凭证(APK)
└─vehicle-hal-support-lib

/platform/packages/services/Car/car-lib目录:
├─annotation 自定义注解
├─app
│ └─menu Car应用菜单UI VIEW相关
├─cluster 仪表盘相关
│ └─renderer 渲染相关
├─content
│ └─pm 提供与包管理相关的car特定API
├─diagnostic 汽车诊断
├─drivingstate 驾驶状态信息
├─hardware 车辆硬件相关
│ ├─cabin 座舱
│ ├─hvac 通风空调(hvac是Heating,ventilation,air conditioning的缩写)
│ ├─power 电源相关
│ └─property 传感器属性设置与监听
├─input 输入事件
├─media 汽车特定音频API
├─navigation 为仪表集群提供导航状态的API
├─settings 存储汽车配置值的管理器
├─storagemonitoring 存储监测
├─test 只用于测试
├─trust ble认证
├─user 用户管理
├─vms 监测其他进程(Vehicle Monitor Service)
└─*.java/*.aidl Car应用直接调用的基本API和常量定义

3.Car Services:系统中与车相关的服务(/platform/packages/services/Car/service)

Android AutoMotive中的Car Service集中在一个App中。Car Service并非一个服务,而是一系列的服务。这些服务都在ICarImpl.java构造函数中列了出来。
├─cluster 仪表盘
│ ├─InstrumentClusterService.java 负责与car的仪表组进行交互
├─garagemode
│ ├─GarageModeService.java 控制车库模式
├─hal 与hal通信
│ ├─DiagnosticHalService.java 与VehicleHal调用和回调
│ ├─InputHalService.java 与VehicleHal调用和回调
│ ├─PowerHalService.java 与VehicleHal调用和回调
│ ├─PropertyHalService.java 与VehicleHal调用和回调
│ ├─VmsHalService.java 与VehicleHal调用和回调
│ ├─VehicleHal.java 与HalClient调用和回调
│ ├─HalClient.java 与hal调用和回调
├─monitoring 监视器
│ ├─CarMonitoringService.java 监视应用程序资源使用
├─pm 包管理
│ ├─CarPackageManagerService.java car包管理
├─storagemonitoring 存储监测
├─systeminterface
├─user
│ ├─CarUserService.java 管理汽车用户
├─AppFocusService.java 应用焦点管理
├─CarAudioService.java 音频
├─CarBluetoothService.java 蓝牙
├─CarConfigurationService.java 解析JSON配置文件(car_config)
├─CarDiagnosticService.java 汽车诊断
├─CarDrivingStateService.java 推断车辆当前行驶状态
├─CarInputService.java 键入输入
├─CarLocationService.java 存储/获取位置
├─CarNightService.java 日/夜模式
├─CarPowerManagementService.java 电源管理
├─CarProjectionService.java 投影与语音操作
├─CarPropertyService.java 属性配置
├─CarStorageMonitoringService.java storage监控
├─CarTestService.java 测试/模拟车辆HAL的服务
├─CarUxRestrictionsManagerService.java 监听当前驾驶状态
├─PerUserCarServiceHelper.java PerUserCarService当前用户可操作的服务
├─SystemActivityMonitoringService.java 监视AMS
├─SystemStateControllerService.java //TODO
├─VmsPublisherService.java publish vms
├─VmsSubscriberService.java subscrib vms
└─*.java 其它java bean/帮助类/工具类

4.Vehicle HAL:汽车的硬件抽象层描述(/platform/hardware/interfaces/automotive)├─audiocontrol 音源管理

│ └─1.0
│ │ Android.bp
│ │ IAudioControl.hal 定义跨进程调用方法
│ │ types.hal 定义跨进程传递数据类型
│ │
│ ├─default
│ │ Android.bp
│ │ android.hardware.automotive.audiocontrol@1.0-service.rc
│ │ AudioControl.cpp IAudioControl实现
│ │ AudioControl.h
│ │ service.cpp 注册AudioControl服务
│ │
│ └─vts vts测试

├─evs
│ └─1.0
│ │ Android.bp
│ │ IEvsCamera.hal 定义跨进程调用evs camera方法
│ │ IEvsCameraStream.hal 定义跨进程回调evs camera数据流方法
│ │ IEvsDisplay.hal 定义跨进程调用evs display方法
│ │ IEvsEnumerator.hal 定义跨进程调用枚举evs camera/evs display方法
│ │ types.hal 定义跨进程传递数据类型
│ │
│ ├─default
│ │ Android.bp
│ │ android.hardware.automotive.evs@1.0-service.rc
│ │ EvsCamera.cpp IEvsCamera实现
│ │ EvsCamera.h
│ │ EvsDisplay.cpp IEvsDisplay实现
│ │ EvsDisplay.h
│ │ EvsEnumerator.cpp IEvsEnumerator实现
│ │ EvsEnumerator.h
│ │ service.cpp 注册EvsEnumerator服务
│ │ ServiceNames.h
│ │
│ └─vts vts测试

└─vehicle
└─2.0
│ Android.bp
│ IVehicle.hal 定义跨进程调用方法
│ IVehicleCallback.hal 定义跨进程回调方法
│ types.hal 定义跨进程传递数据类型

└─default
│ Android.bp
│ android.hardware.automotive.vehicle@2.0-service.rc
│ VehicleService.cpp 注册VehicleHalManager服务

├─common 公共类
│ ├─include
│ │ └─vhal_v2_0
│ │ ConcurrentQueue.h
│ │ Obd2SensorStore.h
│ │ RecurrentTimer.h
│ │ SubscriptionManager.h
│ │ VehicleHal.h
│ │ VehicleHalManager.h
│ │ VehicleObjectPool.h
│ │ VehiclePropConfigIndex.h
│ │ VehiclePropertyStore.h
│ │ VehicleUtils.h
│ │ VmsUtils.h
│ │
│ └─src
│ Obd2SensorStore.cpp
│ SubscriptionManager.cpp
│ VehicleHalManager.cpp
│ VehicleObjectPool.cpp
│ VehiclePropertyStore.cpp
│ VehicleUtils.cpp
│ VmsUtils.cpp

├─impl 具体实现类
│ └─vhal_v2_0
│ │ CommBase.h
│ │ DefaultConfig.h
│ │ EmulatedVehicleHal.cpp
│ │ EmulatedVehicleHal.h
│ │ FakeValueGenerator.h
│ │ JsonFakeValueGenerator.cpp
│ │ JsonFakeValueGenerator.h
│ │ LinearFakeValueGenerator.cpp
│ │ LinearFakeValueGenerator.h
│ │ PipeComm.cpp
│ │ PipeComm.h
│ │ SocketComm.cpp
│ │ SocketComm.h
│ │ VehicleEmulator.cpp
│ │ VehicleEmulator.h
│ │
│ └─proto
│ Android.bp
│ VehicleHalProto.proto
└─tests

5.HAL接口

IVehicle.hal:
getAllPropConfigs() generates (vec propConfigs);
列出车载 HAL 所支持的所有属性的配置

getPropConfigs(vec<int32_t> props)
generates (StatusCode status, vec propConfigs);
根据给定的属性id返回指定的属性配置列表

get(VehiclePropValue requestedPropValue)
generates (StatusCode status, VehiclePropValue propValue);
获取车辆属性值

set(VehiclePropValue propValue) generates (StatusCode status);
设置车辆属性值

subscribe(IVehicleCallback callback, vec options) generates (StatusCode status);
监视属性值的变化

unsubscribe(IVehicleCallback callback, int32_t propId) generates (StatusCode status);
取消监视属性值的变化

IVehicleCallback.hal:
oneway onPropertyEvent(vec propValues);
当属性值变化时

oneway onPropertySet(VehiclePropValue propValue);
当属性值被设置时

oneway onPropertySetError(StatusCode errorCode, int32_t propId, int32_t areaId);
当属性值设置错误时

6.CarService启动流程

在这里插入图片描述

7.应用入口

编译/platform/packages/services/Car/car-lib生成jar包,导入应用中可以使用相关api。

例:
Car car = Car.createCar(context, handler);
CarAudioManager carAudioManager = car.getCarManager(Car.AUDIO_SERVICE);

获取CarService中各个对应service的CarXXXManager类调用方法或者监听回调。

8.整体调用

在这里插入图片描述

后记

HIDL编译
系统定义的所有.hal接口,都可以通过hidl-gen工具转换成对应的代码。

使用方法:hidl-gen -o output-path -L language (-r interface-root) fqname

参数说明:
-o:存放hidl-gen产生的中间文件的路径。

-L: 语言类型,包括c++, c+±headers, c+±sources, export-header, c+±impl, java, java-constants, vts, makefile, androidbp, androidbp-impl, hash等。hidl-gen可根据传入的语言类型产生不同的文件。

fqname: 完全限定名称的输入文件。比如本例中android.hardware.gunder@1.0,要求在源码目录下必须有hardware/interfaces/ gunder /1.0/目录。
对于单个文件来说,格式如下:package@version::fileName,比如android.hardware. gunder @1.0::types.Feature。
对于目录来说。格式如下package@version,比如android.hardware. gunder @1.0。

-r: 格式package:path,可选,对fqname对应的文件来说,用来指定包名和文件所在的目录到Android系统源码根目录的路径。如果没有制定,前缀默认是:android.hardware,目录是Android源码的根目录。

例子:
hidl-gen -o hardware/interfaces/gunder/1.0/default/ -Lc+±impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gunder@1.0

可以使用hidl-gen 查看帮助

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值