Openharmony的usb从框架到hdf驱动流程梳理
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的封装,在此不做表述。好的,正好开始:
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相关文章:
Openharmony的usb从框架到hdf驱动流程梳理
HDF框架实现了用户层与内核层进行通信的管理框架,关于其简易通信示例在以下两篇博文中有所介绍, 一个例子了解通过Openharmony的HDF框架实现简易驱动的流程https://blog.csdn.net/procedurecode/article/details/128906246 Openharmony的用户态应用通过HDF框架驱动消息机制…...
Apache Doris 基础 -- 数据表设计(数据模型)
Versions: 2.1 1、模型概览 本主题从逻辑角度介绍了Doris中的数据模型,以便您可以在不同的业务场景中更好地使用Doris。 基本概念 本文主要从逻辑的角度描述Doris的数据模型,旨在帮助用户在不同的场景更好地利用Doris。 在Doris中,数据在…...
“雪糕刺客”爆改“红薯刺客”,钟薛高给了消费品牌哪些启示?
夏日袭来,一支价格高昂却让人眼前一亮的雪糕,曾一度成为市场热议的焦点。然而,随着消费者对性价比的日益关注,曾经的“雪糕刺客”钟薛高,其创始人林盛近期以直播带货红薯开启他的还债之路,高打情怀“直播自…...
多输入多输出非线性对象的模型预测控制—Matlab实现
本示例展示了如何在 Simulink 中设计多输入多输出对象的闭环模型预测控制。该对象有三个操纵变量和两个测量输出。 一、非线性对象的线性化 运行该示例需要同时安装 Simulink 和 Simulink Control Design。 % 检查是否同时安装了 Simulink 和 Simulink Control Design if ~m…...
多项分布模拟及 Seaborn 可视化教程
多项分布 简介 多项分布是二项分布的推广,它描述了在 n 次独立试验中,k 种不同事件分别出现次数的离散概率分布。与二项分布只能有两种结果(例如成功/失败)不同,多项分布可以有 k 种(k ≥ 2)及…...
学计算机,我错了吗?
今天,我的一位朋友告诉我,终于找到一家小公司入职,年前 1 月辞职,本想休息一段时间,没成想,休息到 6 月份,现在程序员真的越来越难找工作了。 肯定有人在想,现在这种行情࿰…...
学习小心意——简单的循坏语句
for循坏 基本语法格式 for 变量 in 序列:代码块 示例代码如下 for i in range(10):print(i)#输出结果:0 1 2 3 4 5 6 7 8 9 简单案例代码如下 利用for语句遍历序列 # 遍历字符串打印每个字母 for letter in "python":print(letter)# 遍历列表并打印每个元素 a …...
C++ 类方法解析:内外定义、参数、访问控制与静态方法详解
C 类方法 类方法,也称为成员函数,是属于类的函数。它们用于操作或查询类数据,并封装在类定义中。类方法可以分为两种类型: 类内定义方法: 直接在类定义内部声明和定义方法。类外定义方法: 在类定义内部声明方法,并在…...
pytorch+YOLOv8-1
1.工具开发 2.idea配置pytorch环境 默认安装新版本torch pip install torch 3.pytorch验证 4. print(torch.cuda.is_available()) 输出结果为 False 说明我只能用cpu...
JavaScript 基础 - 对象
对象 对象是一种无序的数据集合,可以详细的描述描述某个事物。 注意数组是有序的数据集合。它由属性和方法两部分构成。 语法 声明一个对象类型的变量与之前声明一个数值或字符串类型的变量没有本质上的区别。 <script>let 对象名 {属性名:属性值…...
代码随想录第23天|回溯part3 组合与分割
39.组合总和 class Solution { public:vector<vector<int>> res;vector<int> path;void backTracking(vector<int>& candidates,int target,int sum,int n,int step){if(n > 150) return;if(sum > target) return;if(sum target){res.push_…...
nginx和proxy_protocol协议
目录 1. 引言2. HTTP server的配置3. Stream server的配置3.1 作为proxy_protocol的前端服务器3.2 作为proxy_protocol的后端服务器1. 引言 proxy_protocol 是haproxy开发的一种用于在代理服务器和后端服务器之间传递客户端连接信息的协议。使用 proxy_protocol 的主要优势是能…...
【pytorch】数据转换/增强后保存
数据转换 from PIL import Image from pathlib import Path import matplotlib.pyplot as plt import numpy as npimport torch import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = tight # orig_im...
超越Devin!姚班带队,他们创大模型编程新世界纪录
超越Devin!SWEBench排行榜上迎来了新玩家—— StarShip CodeGen Agent,姚班带队初创公司OpenCSG出品,以23.67%的成绩获得全球第二名的成绩。 同时创造了非GPT-4o基模的最高纪录(SOTA)。 我们都知道,SWEBe…...
江苏大信环境科技有限公司:环保领域的开拓者与引领者
2009 年,江苏大信环境科技有限公司在宜兴环保科技工业园成立。自创立之始,该公司便笃定坚守“诚信为本、以质量求生存、以创新谋发展”这一经营理念,全力以赴为客户构建专业的工业有机废气治理整体解决方案,进而成为国家高新技术企…...
关于 Bean 容器的注入方式,99 % 的人都答不全!
引言:在使用 Spring 框架开发应用程序时,依赖注入是一个至关重要的概念。而对于 Bean 容器的注入方式,虽然我们可能都有一定的了解,但实际上很多人在被问及这个问题时可能并不能完整地回答。本文将深入探讨 Spring 中 Bean 容器的…...
Spring的@Async注解及其用途
Spring 的 Async 注解是 Spring Framework 4.2 版本引入的功能,它用于支持异步方法执行。当一个方法标注了 Async,Spring 会在一个单独的线程中调用该方法,从而不会阻塞主线程的执行。 Async 注解的用途: 提高性能:通…...
JS(DOM、事件)
DOM 概念:Document Object Model,文档对象模型。将标记语言的各个组成部分封装为对应的对象: Document:整个文档对象Element:元素对象Attribute:属性对象Text:文本对象Comment:注释对象 JavaScript通过DOM,就能够对HTML进行操作: 改变 HTML 元素的内…...
学习小心意——python的构造方法和析构方法
构造方法和析构方法分别用于初始化对象的属性和释放类占有的资源 构造方法_init_() 语法格式如下: class 类名:def __init__(self, 参数1, 参数2, ...):# 初始化代码self.属性1 参数1self.属性2 参数2# ... 示例代码如下 class Student:def __init__(self):s…...
GB/T 23995-2009 室内装饰装修用溶剂型醇酸木器涂料检测
溶剂型醇酸木器涂料是指以醇酸树脂为主要成膜物,通过氧化干燥成膜的溶剂型木器涂料适用于室内木制品表面的保护及装饰。 GB/T 23995-2009室内装饰装修用溶剂型醇酸木器涂料检测项目: 测试指标 测试方法 在容器中状态 GB/T 23995 细度 GB/T 6753.1 …...
Matlab代码源码实现:复杂环境下的非饱和非均质土坡三维稳定性分析极限研究
Matlab代码源码实现:复杂条件下非饱和非均质土坡三维稳定性极限分析MATLAB 代码的功能介绍文章,涵盖了代码的整体目标、结构、功能模块及其在工程与科研中的应用价值。一、项目背景与研究目标 本 MATLAB 程序集旨在实现 复杂条件下非饱和非均质土坡的三维…...
IGBT驱动电路设计避坑指南:从选型到PCB布局的8个关键点
IGBT驱动电路设计避坑指南:从选型到PCB布局的8个关键点 在电力电子领域,IGBT驱动电路的设计质量直接决定了整个系统的可靠性和效率。我曾亲眼见过一个价值百万的变频器项目,因为驱动电阻选型不当导致批量烧毁,团队不得不连续加班三…...
手把手教你用王思鱼指纹浏览器(Windows版)绕过主流检测站点
实战指南:Windows指纹浏览器配置与主流检测站点绕过验证 指纹浏览器正逐渐成为数字身份管理领域的重要工具,它能有效解决多账号运营、隐私保护等场景下的浏览器指纹追踪问题。不同于传统虚拟机的笨重方案,这类工具通过精准修改浏览器底层参数…...
Auto-Video-Generator:智能视频全流程自动化的内容创作解决方案
Auto-Video-Generator:智能视频全流程自动化的内容创作解决方案 【免费下载链接】auto-video-generateor 自动视频生成器,给定主题,自动生成解说视频。用户输入主题文字,系统调用大语言模型生成故事或解说的文字,然后进…...
直流电机双闭环调速控制系统仿真模型 转速电流双闭环PI控制 Matlab/Simulink仿真模型 带报告
直流电机双闭环调速控制系统仿真模型 转速电流双闭环PI控制 Matlab/Simulink仿真模型 带报告在 Simulink 里搭建直流电机双闭环调速系统,而是通过连接模块来实现。这段代码会自动计算 PI 控制器的参数,DC_Motor_Dual_Loop 的仿真模型。 🛠️ …...
HuggingFace Transformers库中Tokenizer与Model的高效实践指南
1. 为什么Tokenizer和Model是NLP项目的基石 第一次接触HuggingFace Transformers库时,我被Tokenizer和Model这两个组件的配合方式惊艳到了。想象一下,Tokenizer就像一位专业的翻译官,把人类能看懂的文字转换成计算机能理解的数字密码…...
雷赛HBS86闭环步进驱动方案代码功能说明
某雷赛86闭环步进驱动方案 HBS86H 86闭环电机驱动器/混合伺服驱动器。原理图PCB代码。整体方案打包。代码无错误无警告。一、方案概述 雷赛HBS86闭环步进驱动方案基于TI的DSP2803x系列芯片构建,该方案整合了原理图、PCB设计以及配套代码,形成一套完整的…...
5G时代下,MEC如何让无人驾驶不再‘卡顿’?——边缘计算实战解析
5G时代下,MEC如何让无人驾驶不再‘卡顿’?——边缘计算实战解析 当一辆无人驾驶汽车以60公里时速行驶时,每100毫秒的延迟就会导致1.67米的制动距离差异。这正是边缘计算技术(MEC)在智能交通领域大显身手的核心场景——…...
新手福音:通过快马平台零代码基础创建你的第一个workbuddy任务管理应用
作为一个刚接触编程的新手,想要自己动手做一个任务管理应用却不知从何下手?最近我发现了一个超友好的工具——InsCode(快马)平台,完全零基础就能做出一个功能完整的workbuddy任务管理器。下面分享我的实践过程,希望能帮到同样想入…...
ncmdumpGUI:彻底解决网易云音乐NCM格式限制的图形化工具
ncmdumpGUI:彻底解决网易云音乐NCM格式限制的图形化工具 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经遇到这样的情况:在网…...
