据目前公开的统计,全球有超过2000万辆汽车搭载了骁龙调制解调器。在全球移动处理器的市场发展趋势趋于饱和状态下,Qualcomm与Google公司合作,开发了基于骁龙820A新一代的车载信息娱乐系统。除了单纯将我们的汽车与互联网连接以外,骁龙820A处理器旨在通过软件更新支持信息娱乐系统升级,帮助汽车升级最新特性和差异化体验。
令人可喜的是,国内众多厂商也紧跟时代潮流,跟进高度集成的新技术,为汽车的更新换代添砖加瓦。2017年6月28日,高通和吉利汽车集团在MWC上海2017宣布,吉利汽车集团选择高通骁龙汽车平台集成在其汽车的下一代信息娱乐系统中。
在上一篇中,小编初步介绍了车载的软件框架基础。这篇是关于车载系统的Vehicle HAL方面的有关技术细节。
Vehicle HAL接口
之前我们也提到过,HAL接口定义可以实现的属性和包含的元数据,接口给予可实现的属性例如读,写,和提交等,这些属性是特定功能的抽象。下面这张图可以很形象的展现HAL接口实现的层次关系。
HAL支持的属性list_properties
vehicle_prop_config_t const *(*list_properties)
(struct vehicle_hw_device* device, int* num_properties);
这个接口列出了车载的HAL层的支持属性的配置,只有支持的属性,车载网络系统才会使用它。
具体实现如下
获取属性值 get
int (*get)
(struct vehicle_hw_device* device, vehicle_prop_value_t *data);
这个接口是读取属性的当前值。对于分区属性,每个区域可能具有不同的值。
具体实现如下:
设置属性值set
int (*set)
(struct vehicle_hw_device* device, const vehicle_prop_value_t *data);
设置一个属性值。写入的结果是根据属性定义的。具体实现如下:
释放内存release_memory_from_get
void (*release_memory_from_get)
(struct vehicle_hw_device* device, vehicle_prop_value_t *data);
释放从get调用分配的内存,具体实现如下:
监控属性值subscribe
int (*subscribe)
(struct vehicle_hw_device* device, int32_t prop, float sample_rate, int32_t zones);
监控属性值的改变,对于zoned属性,所有的回调都是基于请求的,如果zoned=0,则可以请求所有的支持特性。
程序会通过线程来监控具体模块的车载状态,例如驾驶状态、排档位置、制动状态等等。
#define VEHICLE_PROPERTY_GEAR_SELECTION (0x00000400)
#define VEHICLE_PROPERTY_CURRENT_GEAR (0x00000401)
#define VEHICLE_PROPERTY_PARKING_BRAKE_ON (0x00000402)
#define VEHICLE_PROPERTY_DRIVING_STATUS (0x00000404)
#define VEHICLE_PROPERTY_FUEL_LEVEL_LOW (0x00000405)
... ...
#define VEHICLE_PROPERTY_HVAC_FAN_SPEED (0x00000500)
#define VEHICLE_PROPERTY_HVAC_FAN_DIRECTION (0x00000501)
Android的Vehicle HAL层,简单来说,就是对Linux内核驱动程序的封装,向上提供稳定的接口,屏蔽低层的实现细节。也就是说820A的车载系统的HAL层是需要Qualcomm实现的,这样可以保证软件的移植性。对于不同配置的车辆来说,具体功能是不同的。
Qualcomm汽车技术讨论组 QQ群号:566131670