车载 Android之 核心服务 - CarPropertyService 的VehicleHAL

news2024/11/20 21:22:21

前言:

本文是车载Android之核心服务-CarPropertyService的第二篇,了解一下CarPropertyService的VehicleHAL, 第一篇在车载 Android之 核心服务 - CarPropertyService 解析-CSDN博客,有兴趣的 朋友可以去看下。

本节介绍 AndroidAutomotiveOS中对于 VehicleHAL,即车辆硬件抽象层的定义。

前文中多次提到了 VehicleHAL,当提起 VehicleHAL的时候,它可能包含以下含义。

(1)由 AndroidAutomotiveOS定义的硬件抽象层接口,包括车辆属性和方法;

(2)由制造商根据硬件抽象层定义所实现的服务进程;

(3)在 CarService中,由Java实现的 VehicleHal辅助类。

        而在本节中,VehicleHAL主要指代的是第一种含义。而制造商提供的 VehicleHal服务进程是业务逻辑主要的实现者,非常重要,但只要满足了硬件抽象层所定义的方法和 行为,各制造商的具体实现可能很不一样,没有统一的范式,因此在本节中不过多展开分析。

        VehicleHAL是连通 CarService与制造商实现的车辆控制服务进程的桥梁,其中包括 种类繁多的车辆属性。那么,各种各样的车辆属性是如何被定义的? 有什么规则可循? 要 找到这些 问 题 的 答 案,就 需 要 更 深 入 地 了 解 VehicleHAL。本 节 通 过 源 码 进 一 步 分 析 VehicleHAL。

        说到 VehicleHAL,就 需 要 先 简 单 解 释 HAL 层 的 概 念。HAL 层 即 硬 件 抽 象 层 (HardwareAbstractionLayer)的缩写。按照谷歌官方的说法①,HAL 可定义一个标准接 口以供硬件供应商实现,这可让 Android忽略较低级别的驱动程序实现。

        根据上面的定义,就能知道 VehicleHAL 是车辆硬件抽象层。它的作用是定义了标准 的接口,让 CarService可以忽略各个汽车制造商的具体实现。换句话说,CarService调用 VehicleHAL定义的接口,而制造商们负责实现这些接口。

        下面来看 VehicleHAL的具体内容。

        VehicleHAL 的源码位于 hardware/interfaces/automotive/vehicle/2.0/路径下(截至 本书完成时,最新的 VehicleHAL版本为2.0)。主要的文件只有三个:

•IVehicle.hal。

•IVehicleCallback.hal。

•types.hal。

        这三个文件的定义方式、语法都遵循了 Android8.0中提出的 HIDL的定义规范②,这 里不做展开,有兴趣的读者可以阅读谷歌官网上的相关资料。

        其中,IVehicle.hal、IVehicleCallback.hal的定义都很简单,这两个文件中定义的是具 体的类和方法。例如,在IVehicle中定义了获取属性值的 get方法、订阅属性的subscribe 方法;IVehicleCallback中定义了属性变化时的回调方法onPropertyEvent,这些方法在之 前介 绍 CarPropertyService 的 内 容 时 有 所 提 及。 方 法 并 不 多,是 因 为 CarService 与 VehicleHAL的主要实现是基于“属性”的,因此用于定义具体数据结构和属性值的types. hal就显得格外重要了。

        1.车辆属性

        车辆相关属性值的定义都在types.hal文件中,具体来看types.hal中对各个属性的定 义格式。以 PERF_VEHICLE_SPEED属性为例,它代表了车速信号,具体定义如下:

其中,VehiclePropertyGroup、VehiclePropertyType、VehicleArea这几个枚举类型的定 义同样在该文件中可以找到。这里的 VehiclePropertyGroup:SYSTEM 等于0x10000000,VehiclePropertyType:FLOAT 等于0x00600000,VehicleArea:GLOBAL等于0x01000000。因 此该属性的值就是0x11600207。如果查看 CarSensorManager中车速属性的定义,会发现 该值和 CarSensorManager中的 SENSOR_TYPE_CAR_SPEED 属性的值一模一样,这就 是 CarSensorManager中的车速属性值的原始定义。

        VehicleHAL定义了标准的属性名称和值(为了保持版本的兼容性,这些属性值的定义 基本不会发生变化)。制造商在实现汽车服务的时候会通过定义好的属性值区分具体的功 能,同时 CarService中也是通过这些属性来控制具体功能的。

        仔细观察属性值的定义可以发现各个属性 的定义并不是随意为之的,而是有它的规则。 每个属性都是通过不同的掩码组合而来,因此 每个 属 性 的 不 同 位 有 各 自 的 含 义。 还 是 以 PERF_VEHICLE_SPEED 属 性 为 例,具 体 情 况如图5-3所示。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1351214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在 Ubuntu 20.04 上以独立模式设置 MinIO 对象存储服务器

前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。 如何在 Ubuntu 20.04 上以独立模式设置 MinIO 对象存储服务器 介绍 存储非结构化对象数据 blob 并使其可通过 …

jenkins +jmeter 报告乱码解决

问题:生产报告会乱码的问题,一般是有编码格式引起的。我遇到的问题是,jmeter需要读取csv的数据作为参数。但是我们并不知道csv保存是什么编码格式,有可能不是utf-8的编码格式,所以会导致中文乱码的问题 解决方案&#…

sealor安装k8s

文章目录 平台介绍sealos(github下载)百度网盘 部署删除污点命令补全验证 平台介绍 模块功能描述公共部分权限管理(登录)集成K8s自身RBAC授权公共部分命名空间选择展示不通命名空间资源仪表盘命名空间|计算资源|存储资源|节点状态展示主要指标状况k8s集群node|namespace|pv创建…

【java爬虫】股票数据获取工具前后端代码

前面我们有好多文章都是在介绍股票数据获取工具,这是一个前后端分离项目 后端技术栈:springboot,sqlite,jdbcTemplate,okhttp 前端技术栈:vue,element-plus,echarts,ax…

Matlab论文插图绘制模板第133期—函数极坐标折线图

在之前的文章中,分享了Matlab函数折线图的绘制模板: 函数三维折线图: 函数网格曲面图: 函数曲面图: 函数等高线图: 函数等高线填充图: 进一步,再来分享一下函数极坐标折线图。 先来…

IPA打包过程中的Invalid Bundle Structure错误如果解决

在iOS应用程序开发中,打包和发布应用程序是一个必要的步骤。有的时候在打包的过程中可能会遇到一些错误,其中一个比较常见的错误是"Invalid Bundle Structure"。这个错误通常意味着应用程序的文件结构不正确,而导致的无法成功打包应…

webshell检测方式深度剖析 --- Pixy系列二(数据流分析)

开篇 书接上文,这次我们来聊聊数据流分析,数据流分析的内容非常广泛,我们力求深入浅出通俗易懂,在简短的篇幅内将这一概念描述清楚。 简单来说,数据流分析是一种用来获取相关数据沿着程序执行路径流动的信息分析技术…

如何移除视频中的背景音乐或人物声音

移除视频声音是将视频指定的声音移除,可以选择移除人物声音还是视频的背景音乐,方便实现二次创作。 小编给大家推荐一些方法帮助大家更轻松地移除视频中的背景音乐或人物声音,有兴趣的朋友请自行百度查找,或小程序查找 1、方法&a…

autograd与逻辑回归

一、autograd—自动求导系统 torch.autograd.backward() torch.autograd.backward()是PyTorch中用于计算梯度的函数。以下是对该函数的参数的解释: 功能:自动求取梯度 • tensors: 用于求导的张量,如 loss • retain_graph : 保存计算图 •…

密码学:带密钥的消息摘要算法一数字签名算法

文章目录 前言手写签名和数字签名前置知识点:消息摘要算法数字签名算法数字签名算法的由来数字签名算法在实际运用的过程附加:签名和摘要值的解释 数字签名算法的家谱数字签名算法的消息传递模型经典数字签名算法-RSA实现 数字签名标准算法-DSA实现 圆曲…

汽车架构解析:python cantools库快速解析arxml

文章目录 前言一、安装cantools二、官方说明文档三、cantools方法1、解析message的属性2、解析pdu中的signals3、根据message查找signals4、报文组成bytes 总结 前言 曾经有拿cantools来解析过dbc,用得比较浅,不知道可以用来解析arxml。最近有个需求需要…

Linux安装nginx(带http ssl)

nginx安装 nginx文件 以及gcc pcre zlib openssl 网盘下载 1.安装gcc yum -y install gcc gcc-c 2.安装pcre rpm -ivh pcre-8.32-17.el7.x86_64.rpm --force --nodeps rpm -ivh pcre-devel-8.32-17.el7.x86_64.rpm --force --nodeps 3.安装zlib tar -zxvf zlib-1.2.11.ta…

mfc100u.dll文件丢失,有五种不同解决方法

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到mfc100u.dll文件”。那么,mfc100u.dll文件到底是什么?为什么会出现丢失的情况?本文将详细介绍mfc100u.dll文件的作用以及丢失的原因,并…

冒泡排序-排序算法

前言 如果有6个人站成一排,要将他们按从矮到高的顺序排列。你可能有多种方式来完成。但是如果其中有一个人特别高,比他身边的人高,在队伍中特别明显,你可以轻易看出那个最高的需要和身边的人交换位置,这是冒泡排序的核…

服务器硬件及RAID磁盘阵列详解

文章目录 一、服务器硬件服务器常见故障 二、RAID磁盘阵列详解1、RAID磁盘阵列概述2、RAID 0(条带化存储)3、RAID 1(镜像存储)4、RAID 55、RAID 66、RAID 10(先做镜像,再做条带)7、RAID 01(先做条带&#x…

计算机视觉 - 了解Mosaic数据增强

一、简述 数据增强包含各种扩展和增强机器学习和深度学习模型数据集的技术。这些方法跨越不同的类别,每种方法都会改变数据以引入多样性并提高模型的稳健性。几何变换(例如旋转、平移、缩放和翻转)会修改图像方向和结构。颜色和对比度调整会改变图像外观,包括亮度、对比度和…

贪心算法part04 860柠檬水找零 406根据身高重建队列

860 柠檬水找零 406 根据身高重建队列 452 用最少数量的箭引爆气球

使用ffmpeg实现视频裁剪并保持清高晰度

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 ffmpeg -i source.mp4 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable-…

Redis集群架构解密:打造高性能分布式缓存引擎

目录 1、前言 2、Redis集群概述 3、Redis集群架构的内部原理 4、Redis集群的实现方式 5、Redis集群的实现方式如何选择 6、Redis集群的搭建 7、结语 1、前言 在当今的互联网时代,随着用户数量的不断增长和业务流量的不断增加,对于高性能的缓存系…

线性代数笔记3 1.1

学习视频: 2.2 矩阵运算(二)_哔哩哔哩_bilibili 包括内容: p10矩阵运算(二) p11特殊矩阵 p12逆矩阵(一) p13逆矩阵(二)