Android UWB——UWB HAL接口

在Android UWB技术的实现中,使用了AIDL来实现底层硬件的交互,本文简要介绍UWB HAL接口的相关代码实现。


AIDL,Android Interface Definition Language,基于安卓平台的接口定义语言。

在Android的UWB框架实现中,UWB Native Stack部分使用了AIDL来实现UWB HAL AIDL接口,与UWB Vendor Stack的硬件底层进行交互。UWB Framework与UWB HAL AIDL接口。

UWB HAL接口

  AOSP框架UWB协议栈使用FiRa定义的UCI接口作为HAL surface。

        HAL接口使用IUwbChip::sendUciMessage()和IUwbClientCallback::onUciMessage()来发送和接收UCI命令、应答和通知。

        所有Android UWB供应商都需要支持FiRa规范定义的消息。UWB框架向后兼容,可与UWB供应商在设备上实施的任何UCI版本配合使用。由于AOSP UWB框架是一个模块,因此它可以选择性地从针对主要FiRa标准版本的UCI规范草案中添加对已批准变更请求(Change Requests, CRs)的支持。实施的任何此类CR草案都可能发生变化。

来自UWB框架的HAL调用流程

初始化硬件抽象层接口

顶层UWB架构中调用IUwb.open()调用硬件抽象层接口。

UWB HAL通过onHalEvent()返回UWB架构,可以看到在接口定义时限定为oneway,也就是仅从UWB HAL传递到底层。

然后继续调用coreInit。以及发送后续的UCI命令(通过sendUciMessage接口发送命令),到UWB Controller进行处理。

然后,UWB Controller通过onUciMessage回调接口,将UCI的响应和通知(RSP或NTF)返回顶层UWB Framework。

通过这一系列的操作,实现UWB Stack的初始化。

FiRa会话的开始与结束

在Android中UWB的实现,是基于FiRa联盟制定的标准,而在实现上,均通过UCI命令来实现。

FiRa会话的启动包括SESSION_INIT_CMD、APP_CONFIG_CMD、START_CMD。开始测距获得测距数据之后,通过UCI_MSG_RANGE_DATA_NTF得到测距数据,进而可以供上层应用使用。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容