Openharmony的usb从框架到hdf驱动流程梳理

ops/2024/9/30 6:19:46/

​ HDF框架实现了用户层与内核层进行通信的管理框架,关于其简易通信示例在以下两篇博文中有所介绍,

  • 一个例子了解通过Openharmony的HDF框架实现简易驱动的流程

https://blog.csdn.net/procedurecode/article/details/128906246

  • Openharmony的用户态应用通过HDF框架驱动消息机制实现的通信实例

https://blog.csdn.net/procedurecode/article/details/128921897

​ 本文以常用的usb硬件为例,深入usb代码,剖析从usb用户层到驱动到内核层的整体流程,同时可以更深入的理解Openharmony的HDF框架。本文讲解从框架层开始,NAPI接口简单来说就是对框架层提供的接口进行的ets的封装,在此不做表述。好的,正好开始:

usbhdf_12">1.关于usb调用hdf驱动流程

OpenDevice接口为例

1.1 UsbSrvClient类

// 1.首先获取UsbSrvClient实例
UsbSrvClient &g_usbClient = UsbSrvClient::GetInstance();
// 2.OpenDevice
//	base/usb/usb_manager/interfaces/kits/js/napi/src/usb_info.cpp
g_usbClient.OpenDevice(dev, pipe);
// 3.UsbSrvClient::OpenDevice
// base/usb/usb_manager/interfaces/innerkits/native/src/usb_srv_client.cpp
int32_t UsbSrvClient::OpenDevice(const UsbDevice &device, USBDevicePipe &pipe)int32_t ret = proxy_->OpenDevice(device.GetBusNum(), device.GetDevAddr());

在UsbSrvClient类中proxy_成员类型为如下所示:

// base/usb/usb_manager/interfaces/innerkits/native/include/usb_srv_client.h
sptr<IUsbSrv> proxy_ = nullptr;

proxy_在UsbSrvClient类的构造函数中调用Connect()方法实现初始化。

int32_t UsbSrvClient::Connect()
{std::lock_guard<std::mutex> lock(mutex_);if (proxy_ != nullptr) {return UEC_OK;}sptr<ISystemAbilityManager> sm = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();if (sm == nullptr) {USB_HILOGE(MODULE_USB_INNERKIT, "fail to get SystemAbilityManager");return UEC_INTERFACE_GET_SYSTEM_ABILITY_MANAGER_FAILED;}sptr<IRemoteObject> remoteObject = sm->CheckSystemAbility(USB_SYSTEM_ABILITY_ID);if (remoteObject == nullptr) {USB_HILOGE(MODULE_USB_INNERKIT, "GetSystemAbility failed.");return UEC_INTERFACE_GET_USB_SERVICE_FAILED;}proxy_ = iface_cast<IUsbSrv>(remoteObject);USB_HILOGI(MODULE_USB_INNERKIT, "Connect UsbService ok.");sptr<IRemot

http://www.ppmy.cn/ops/46994.html

相关文章

云安全服务有什么威胁?

在云安全服务中&#xff0c;会面临着各种安全威胁&#xff0c;这些安全威胁会给企业造成严重的影响&#xff0c;接下来就让小编来给大家介绍一下云安全服务中的安全威胁有哪些吧&#xff01; 一、虚拟化安全威胁 云计算中的核心技术有虚拟化技术&#xff0c;但是虚拟化环境中也…

Flink中因java的泛型擦除导致的报错及解决

【报错】 Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The return type of function Custom Source could not be determined automatically, due to type erasure. You can give type information hints by using th…

一文速通23种设计模式——单例模式、工厂模式、建造者模式、原型模式、代理模式、装饰器模式、组合模式、组合模式、桥接模式、观察者模式、策略模式……

一文速通23种设计模式 写在前面 本文基于结城浩所著《图解设计模式》&#xff0c;其中所使用代码皆为Java版本。 随书代码下载地址-点击“随书下载” 全文15205字&#xff0c;全部读完需要约20分钟。 目录 一文速通23种设计模式写在前面 第一部分 适应设计模式迭代器模式 (…

如何实现区域公司和专业公司合理有效的衔接?

对于集团公司来说&#xff0c;各区域公司、专业公司的管理问题成为困扰管理者的难题。特别是在信息壁垒比较严重的情况下&#xff0c;各个单位往往各自为政、自行其是&#xff0c;缺乏有效的沟通和协作&#xff0c;导致整体管理效率低下。那么应该如何实现区域公司和专业公司合…

钉钉企业内部H5微应用或小程序之钉消息推送

钉钉简单的推送钉消息 一、钉钉准备工作 首先进入钉钉开放平台 你得有企业内部微应用或者小程序 没有创建的话去看我另一篇文章有说明 钉钉开放平台创建企业内部H5微应用或者小程序-CSDN博客 看不懂话也可以参考官方文档&#xff1a;创建应用 - 钉钉开放平台 二、开发的准备…

vscode快捷键英文单词对照表

今天想改我的vscode快捷键&#xff0c;unfoldall这条跟我其他的ide都不一样&#xff0c;我得挨个记……但是ctrlshiftp一打开快捷键 点击右侧齿轮进行快捷键录制&#xff0c;但是我这次点左边进去查看了一下unfoldall当前是什么 后来看到了……这些oem_5是什么鬼&#xff1f; {…

小程序内的分包与数据共享

一:数据共享 小程序内的数据共享和vue当中不一样,vue当中的vue实例可以使得所有的组件都能this.store 但是小程序它只有page对象,和组件实例对象.对于vue而言,vue实例可以使得添加的组件都有. 但是page对象页面对象,不能使得页面内部有.只能使得这个页面内能访问.vue实例,会…

服务器硬件基础知识:从零开始了解你的数字工作马

在现代社会&#xff0c;服务器是我们数字世界的基石。无论是网站、云服务还是大数据处理&#xff0c;背后都有强大的服务器在默默工作。对于许多人来说&#xff0c;服务器的工作原理和组成可能显得神秘且复杂。今天&#xff0c;我们将通过一篇通俗易懂的文章&#xff0c;逐步揭…