Vehicle HAL(1)--整体介绍

article/2025/8/23 8:36:08

AOSP 官网介绍:

https://source.android.com/docs/automotive/vhal

VHAL 简介:

Android Automotive and Physical Car Interaction | Android Automotive OS Book

Vehicle HAL Properties:

https://source.android.com/docs/automotive/vhal/properties

system-properties:

https://source.android.com/docs/automotive/vhal/system-properties

vhal_debug:

https://source.android.com/docs/automotive/vhal/vhal_debug

1. Vehicle HAL 整体介绍

    此处的Vehicle HAL(vhal),主要介绍ard11上用hidl实现的vhal。后面vhal已经在ard13及以上迁移到aidl的实现。

(1)vhal的主要作用,处理clients(CarService, others hal) 的连接请求;

(2)与车辆通过can通信,实现车辆控制与信息反馈。

2. Vehicle HAL 要实现的功能有那些?

(1)实现IVehicle.hal接口,实现由它定义的功能,主要是属性get、set、update、传递;

(2)一个模拟的EmulatedVehicleHal,主体的功能实现部分;

(3)属性的解析和保持、更新;

(4)属性的订阅端管理;

3. Vehicle HAL 实现整体框图

4. Vehicle HAL 主要部分介绍

4.1 VehicleService

    main函数的主体,构建关键对象,启动vhal。

4.2 EmulatedVehicleHal

    EmulatedVehicleHal实现了vhal中关键的VehicleHal抽象类。

EmulatedVehicleHal::initStaticConfig():

EmulatedVehicleHal() > EmulatedVehicleHal::initStaticConfig() > mPropStore->registerProperty()

kVehicleProperties是静态配置好了的。

195  const ConfigDeclaration kVehicleProperties[]

android11/hardware/interfaces/automotive/vehicle/2.0/default/impl/vhal_v2_0/DefaultConfig.h

EmulatedVehicleHal 的关键函数 EmulatedVehicleHal::onPropertyValue(),传递属性变化给上层和模拟car:

351  void EmulatedVehicleHal::onPropertyValue(const VehiclePropValue& value, bool updateStatus) {
352      VehiclePropValuePtr updatedPropValue = getValuePool()->obtain(value);
353  
354      if (mPropStore->writeValue(*updatedPropValue, updateStatus)) {//更新属性
355          getEmulatorOrDie()->doSetValueFromClient(*updatedPropValue);//关键调用,Emulator,client,获取时通过socket走到can的另外一端
356          doHalEvent(std::move(updatedPropValue));//关键调用,返回变化到carservice
357      }
358  }

4.3 VehicleHalManager

   VehicleHalManager实现了IVehiclel接口,hal服务的主体。构建VehicleHalManager的关键过程有3步。

    VehicleHalManager(VehicleHal* vehicleHal): mHal(vehicleHal),//初始化mHalmSubscriptionManager(std::bind(&VehicleHalManager::onAllClientsUnsubscribed,this, std::placeholders::_1)) {//初始化mSubscriptionManagerinit();//调用自己的init()函数}

 

4.4 SubscriptionManager 

    SubscriptionManager 的作用主要是管理属性的订阅clients。


http://www.hkcw.cn/article/mkbXoISoDV.shtml

相关文章

网络渗透基础:信息收集

1.信息收集 whois xx.com 域名注册信息 注册人、电话、email Whois.chinaz.com kali自带whois工具 域名备案信息 Beian.miit.gov.cn Tianyancha.com Icp.chinaz.com 爱站 Sou.xiaolanben.com 2.子域名收集 收集方式 枚举:基于字典搜索引擎:googleh…

【LeetCode 热题 100】最小路径和 / 最长回文子串 / 最长公共子序列 / 编辑距离

⭐️个人主页:小羊 ⭐️所属专栏:LeetCode 热题 100 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 不同路径最小路径和最长回文子串最长公共子序列编辑距离 不同路径 不同路径 class Solution { public:int uniquePa…

PS图像处理软件|Photoshop 2025网盘下载与安装指南

对于Photoshop这款软件,相信大家都不会陌生。不管是平面设计专业的高材生,还是从事于设计工作、或业余需要修图的小伙伴,或多或少都用到过PS这款工具。但是,Adobe Photoshop的发展背景,又有多少人知晓呢? …

weaviate向量库从零开始——weaviate cloud数据向量化完整实例解析

在上篇《weaviate向量库从零开始——weaviate集合、对象管理从零代码开始详解》我们讲解了weaviate数据库对数据对象的相关操作,但是其相关检索操作并没有相关向量化数据的检索。只有我们启用了相关向量化模型才会对数据对象做向量化并生成相对的向量数据以作语义检…

NC65 startup.bat||sysConfig.bat||stop.bat闪退

NC65 双击 startup.bat NC65 双击 sysConfig.bat NC65 双击 stop.bat 闪退 sysConfig.bat不可以使用 选择sysConfig.bat右键编辑,加入下列代码 set JAVA_HOME"E:\NCsystem\yonyouzhengshi20250516\yonyouzhengshi\ufjdk"其中路径为home下面的ufjdk 原…

09《从依赖管理到容器化部署:Maven 全链路实战笔记,解锁 Java 项目自动化构建的终极奥秘》

目录 一、Maven 核心基础强化 (一)Maven 架构与工作原理 1. 核心组件解析 2. 工作流程图示​编辑 (二)项目结构深度实践 1. 标准目录扩展说明 2. 多模块项目典型结构示例​编辑 二、依赖管理高级进阶 (一&…

t006-艺体培训机构业务管理系统

项目演示视频 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装艺体培训机构业务管理系统软件来发挥其高效地…

贵州公路上300斤巨石砸汽车 地质灾害引发险情

贵州公路上300斤巨石砸汽车 地质灾害引发险情!5月28日,贵州毕节市七星关区何官屯镇的一条通村公路上发生落石事故。一块约300斤重的巨石砸中一辆过路汽车,导致车辆从路边高坎坠落。司机受轻伤,送医检查后当日返家,车损由保险公司处理。落石还击碎了附近民房的玻璃门,但无…

Whole-body Humanoid Robot Locomotion with Human Reference

Whole-body Humanoid Robot Locomotion with Human Reference 研究动机解决方案技术路线基于AMP从人类参考运动中学习人形机器人端到端强化学习 实验结果 Whole-body Humanoid Robot Locomotion with Human Reference 研究动机 传统机器人控制算法通常依赖对环境的准确建模&a…

行业沙龙 | 博睿数据联合承办2025 湾区金科(FinTech)沙龙——智能运维专场,分享主题演讲

日前,由深圳市金融科技协会主办、深圳金融AI生态联盟与博睿数据联合承办的湾区金科(FinTech)沙龙(第七十二期)——智能运维专场,在深圳成功举办。本次沙龙聚焦金融行业运维转型升级,旨在推动智能运维的蓬勃发展与广泛应用,助力金融…

鲜羊奶对青少年心理健康的 “技术向” 营养支持

在数字化浪潮席卷心理健康领域的今天,当我们聚焦 AI 心理测评、大数据情绪监测时,羊大师却从生物化学 “底层代码” 切入 —— 发现鲜羊奶中的营养成分,正以类似 “技术优化” 的逻辑,为青少年心理健康提供独特支撑。以下从三大 “…

【达梦数据库】临时表空间不足

问题1:SQL应用端报错:超出表空间限制 1、应用执行SQL的过程中,临时表空间占用率超过100%,报错: 2、查看数据库日志,未发现任何有关的报错; 3、增加临时表空间的数据文件1个,最大值…

InnoDB中的锁

InnoDB中的锁机制是MySQL中实现事务隔离和数据一致性的核心部分。它通过多种锁类型和等级,控制多个事务对同一数据的并发访问,保证数据的完整性与一致性。 主要锁类型 1.行锁(Row Lock) 定义:锁定单个行记录。InnoDB…

2025年OE SCI2区TOP,进化麻雀搜索算法ESSA+海洋阻尼器迟滞建模与辨识,深度解析+性能实测

目录 1.摘要2.麻雀搜索算法SSA原理3.ESSA算法4.结果展示5.参考文献6.代码获取7.读者交流 1.摘要 海洋阻尼器的机械性能通常具有高度非线性,以适应动态和冲击环境。阻尼器经过动态和冲击测试,发现其滞回曲线具有速率依赖性且呈非对称性。为了能够描述动态…

贝锐蒲公英工业路由器R300A海外版:支持多国4G频段,全球组网

为更好地满足全球部署和企业出海项目的多样化需求,贝锐蒲公英异地组网工业路由器R300A海外版全新上市,并已正式上架速卖通!无论是跨国分支机构协同办公,还是海外工厂设备远程运维,R300A海外版都能为企业提供灵活、高性…

SQL的查询优化

1. 查询优化器 1.1. SQL语句执行需要经历的环节 解析阶段:语法分析和语义检查,确保语句正确;优化阶段:通过优化器生成查询计划;执行阶段:由执行器根据查询计划实际执行操作。 1.2. 查询优化器 查询优化器…

为什么在我的Flask里面有两个路由,但是在网页里有一个却不能正确访问到智能体

1. /zhoushibo 能访问,/chat 直接浏览器访问报 Method Not Allowed 原因: /zhoushibo 路由是你用 app.route(/zhoushibo) 定义的,返回的是一个HTML网页,浏览器访问没问题。 /chat 路由你用的是 app.route(/chat, methods[POST])…

【笔记】suna部署之获取 Tavily API key

#工作记录 Tavily 注册 Tavily 账号5: 打开浏览器,访问 Tavily 官网Tavily AI。点击页面上的 “注册” 按钮,按照提示填写注册信息,如邮箱地址、设置密码等,完成注册流程。也可以选择使用 Google 或 GitHub 账号授权登…

openbmc kvm vnc client connection

1. VNC 介绍: VNC(Virtual Network Computing,虚拟网络计算) 是一种远程桌面协议(RDP 的替代方案),允许用户通过网络控制另一台计算机的图形界面。其核心特点是 跨平台、开源、基于帧缓冲&…