Android libusb库的使用

news2024/12/21 22:20:52

Download Data Center Software from Total Phase.

1 Aptiv DABR
Aptiv acquired Indian Unwired,Delphi Automotive USB Bridge / Hub,Hub中集成了UDC,upstream UDC连接的主机称为A-Host,downstream UDC被B-Host枚举成Relay device,2个UDC实现Host-to-Host功能。
DABR integrates Nios II/Cortex M0 and two SLS USB20SF, which means System Level Solutions USB 2.0 Device, Software Enumeration FIFO Interface, and there is an External FIFO Controller between two USB devices.

2 Microchip HFC Device
2.1 基本概念
HFC是Hub Feature Controller的缩写,其VID和PID为0x0424_0x7040。技术主要来源于收购的SMSC,该公司发明了HSIC接口(1.2V LVCMOS)。
USB HUB为什么没有port0?因为upstream就是port0,downstream口从port1开始。

2.2 HFC主要功能
1)IO桥接,包括GPIO/I2C/SPI/UART
2)FlexConnect,第一款支持FlexConnect的Hub是USB84604
3)CarPlay OTG Hub(另外一种独立销售的是USB CarPlay Dongle,也叫CarPlay盒子)

2.3 FlexConnect
Microchip Hub FlexConnect的技术实际是交换Hub Repeater的upstream port和downstream port。USB SETUP command的状态阶段的状态包是个ZLP。
Figure 2-1 MULTI-HOST BRIDGE SETUP PACKET

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pvb3NlbnBpbg==,size_16,color_FFFFFF,t_70

1)当ROLE_SWITCH_TYPE的值为00时,表示切换到H2H模式,此后内部的UDC1(Apple NCM和iAP2,VID和PID为0x0424_0x7010)连接到upstream,UDC2(Apple NCM和iAP2,VID和PID为0x0424_0x7020)连接到iPhone连接的那个downstream port,被iPhone枚举。
2)当ROLE_SWITCH_TYPE的值为01时,表示切换到flex模式,wValue只需使能HS port,不要使能SS port,否则电脑可能无法枚举hub。

2.4 APL xHCI LTSSM stuck issue
not warm reset yet, waiting 200ms
not enabled, trying warm reset again

This log shows ss port stuck issue.
Disable USB3 roothub port: Clear power Feature and Set BH_Reset Feature.
23 01 0008 port1 0000
23 03 001c port1 0000
Disable USB3 non roothub port: Set Rx.disabled Feature.
23 03 0005 0400|port1 0000
Add # define DEBUG at the first line of the hub.c file (above the header files) for enabling Linux dynamic debug log.

2.5 URLs
MicrochipTech/USB-Hub-Linux-Examples
https://github.com/MicrochipTech/USB-Hub-Linux-Examples

3 libusb库的使用
3.1 Linux查找libusb.h的路径
locate libusb.h
locate usb-1.0

3.2 libusb usbi_backend后端驱动
external/libusb/libusb/core.c

1)Linux
优先使用/dev/bus/usb/BBB/DDD(BBB是总线号,DDD是设备地址),如果该目录不存在,再使用/proc/bus/usb/BBB/DDD,最后才使用/dev/usbdev*.*。
Linux kernel usb_device内存释放的回调函数是usb_release_dev()。
2)Windows
使用动态库UsbDkHelper.dll(USB Development Kit)或者WinUsb。

3.3 Linux libusb调试
1)usbfs日志获取
echo 1 > /sys/module/usbcore/parameters/usbfs_snoop
dmesg -w | grep usb
2)usbfs使用内存调整
modprobe usbcore usbfs_memory_mb=64
3)60秒超时
可以将传输函数的实现都拷贝到自己的代码中,然后修改默认的60秒超时。

3.4 Hub libusb控制传输
1)获得Hub支持的端口数
bmRequestType:0xa0 /* LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_DEVICE */
bRequest:6 /* LIBUSB_REQUEST_GET_DESCRIPTOR */
wValue:SS是LIBUSB_DT_SUPERSPEED_HUB << 8,HS是LIBUSB_DT_HUB << 8
wIndex:0
wLength:SS是12,HS是sizeof(struct usb_hub_descriptor)
timeout:5000ms

返回的Hub描述符中的bNbrPorts是支持的端口数目。

2)获得Hub的portsc状态
bmRequestType:0xa3 /* LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_OTHER */
bRequest:0 /* LIBUSB_REQUEST_GET_STATUS */
wValue:0
wIndex:port1
wLength:4
timeout:1000ms

返回的0和1字节是wPortStatus,2和3字节是wPortChange,都是小端格式。

3)LTSSM状态的设置
bmRequestType:0x23 /* LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_OTHER */
bRequest:3 /* LIBUSB_REQUEST_SET_FEATURE */
wValue:5 /* USB_PORT_FEAT_LINK_STATE */
wIndex:port1 | link_state << 8
wLength:0
timeout:1000ms

其中link_state的值的范围从0到15,默认是5(LTSSM.RxDetect),详细内容参考xHCI spec page392。
设置link_state到LTSSM.Disabled后,对该端口BH_Reset或者removal-insertion,该port将强制进入HS模式。

4)HS或者SS port复位
bmRequestType:0x23 /* LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_OTHER */
bRequest:1 or 3 /* LIBUSB_REQUEST_CLEAR{SET}_FEATURE */
wValue:8 /* USB_PORT_FEAT_POWER */
wIndex:port1
wLength:0
timeout:1000ms

对于roothub port,需要Clear Feature和Set Feature成对出现;对于非roothub port,只需要Clear Feature,不需要Set Feature,否则SS port口无法复位。
Clearing power feature can disable USB3 LTSSM.
For BH_RESET, only set 0x1c to wValue, other fields are the same as LIBUSB_REQUEST_SET_FEATURE.

3.5 libusb zerocopy
libusb version 1.0.21: libusb_dev_mem_alloc()
https://forums.developer.nvidia.com/t/usbfs-zerocopy-not-working/66091/7
Linux下more命令C语言实现

for Linux Makefile
CFLAGS = -I/usr/include/libusb-1.0
LDFLAGS = -L/lib/x86_64-linux-gnu -lusb-1.0

4 Abbreviations
HUB3CV:USB 3 Hub Command Verifier Ver. 2.1.12.1
SMSC:Smart Mixed-Signal Connectivity
UCH:USB Controller Hub
USB BH reset:Bigger Hammer or Brad Hosler,表示warm reset;you may be confused why the USB 3.0 spec calls the same type of reset "warm reset" in some places and "BH reset" in other places. "BH" reset is supposed to stand for "Big Hammer" reset, but it also stands for "Brad Hosler". Brad died shortly after the USB 3.0 bus specification was started, and they decided to name the reset after him. The suggestion was made shortly before the spec was finalized, so the wording is a bit inconsistent.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/653304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个床垫的故事

这是学习笔记的第 2460篇文章 这是一个床垫的真实故事&#xff0c;想起来还是蛮感慨的&#xff0c;真是太魔幻了。 起因是我哥搬家&#xff0c;有一个很新的品牌床垫&#xff0c;因为新房子那边买家具已经送了一个床垫了&#xff0c;所以就多出来一个床垫&#xff0c;他打算把…

autogpt的使用,还有出现的问题

AutoGPT简介 AutoGPT是一个实验性开源应用程序&#xff0c;展示了GPT-4语言模型的功能。该程序由GPT-4驱动&#xff0c;将LLM“思想”链接在一起&#xff0c;以自主实现您设定的任何目标。作为GPT-4完全自主运行的首批例子之一&#xff0c;AutoGPT突破了人工智能的极限。 注&a…

Opencv-C++笔记 (6) : opencv-图片和视频操作

文章目录 一、读取函数imread二、图片窗口函数namedWindow三、 图片保存Imwrite和显示函数Imshow四、视频数据的读取五、摄像头直接调用 一、读取函数imread cv::Mat cv::imread(const String & filename,int flagsIMREAD_COLOR)filename&#xff1a;需要读取图像的文件名…

Linux运维监控学习笔记4

Zabbix相关的一些概念&#xff1a; Zabbix用户和用户群组&#xff1a; 用户&#xff1a;Zabbix提供多用户管理&#xff0c;不同的用户可以设置不同的权限&#xff0c;不同的语言和不同的报警方式。 1&#xff09;创建用户&#xff1a;点击“创建用户”按钮&#xff1a; 2&…

NOTA PEG7 Azide,NOTA-七聚乙二醇叠氮,新型双功能整合剂

NOTA PEG7 Azide中NOTA及其衍生物是新型双功能整合剂之一。NOTA及其衍生物具有良好的配位和鳌合能力&#xff0c;可作为过渡金属离子的配体。叠氮化物基团可以参与铜催化的与炔部分的点击化学反应。 聚乙二醇在科研领域运用广泛&#xff0c;聚乙二醇具有良好的水溶性&#xff0…

【FPGA入门】第一篇、Verilog基本语法常识

目录 第一部分、不同的变量类型 1、wire和reg的区别 2、如何对变量进行赋值呢&#xff1f; 3、什么是阻塞&#xff1f;什么是非阻塞&#xff1f; 第二部分、变量位宽的定义 1、各种系统默认情况 2、变量位宽声明方式 3、表明位宽的情况下&#xff0c;赋值方式 4、两个模…

来自一个敲了5年代码的网络安全工程师的自述(目前薪资30K)

本人是一名敲了5年半代码的网络安全工程师&#xff0c;目前在杭州工作&#xff0c;月薪目前是在30.6K左右&#xff0c;经历过两次跳槽&#xff0c;第一次跳槽拿到了12K的offer&#xff0c;第二次跳槽拿到18K的offer。一直到目前为止的30K左右。 说到这里再给大家提个醒&#x…

SpringBoot整合定时任务技术Quartz

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ RequestMapping注解 &#x1f680;Quartz应用场…

好消息!PMP证书还没过期的宝子,可以增持免考CSPM-2证书

2021年10月&#xff0c;中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系&#xff0c;开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会&#xff08;CAS&#xff09;组织开展的项…

如何使用hexo next主题,新建一个专栏

文章目录 backgroundIntroHow to do that&#xff1f;&#x1f388; background 今天突发奇想&#xff0c;想要在自己的博客中增加一个新的专栏&#xff0c;记录自己的一些随想。起因是不想让博客成为一个纯粹记录技术成长的网站&#xff0c;&#xff08;毕竟如果真的有人要看…

PostgreSQL(八)锁的相关操作

目录 一、锁存在的意义二、表级锁1.ACCESS SHARE2.ROW SHARE3.ROW EXCLUSIVE4.SHARE UPDATE EXCLUSIVE5.SHARE6.SHARE ROW EXCLUSIVE7.EXCLUSIVE8.ACCESS EXCLUSIVE9.表级锁模式冲突表10.示例一11.示例二 三、行级锁1.FOR UPDATE2.FOR NO KEY UPDATE3.FOR SHARE4.FOR KEY SHARE…

那个准点下班的人,比我先升职了...

前言 二黑最近心态很崩。 和他同期一道进公司的陈琪又升了一级&#xff0c;可是明明大家在进公司时&#xff0c;喜子不论是学历还是工作经验&#xff0c;样样都不如自己&#xff0c;眼下不过短短的两年时间便一跃在自己的职级之上&#xff0c;这着实让他有几分不甘心。 二黑…

Unity 安装负责音频的 wwise

很多游戏的音频用的是 wwise 先下载 https://www.audiokinetic.com/zh/download 安装的时候要选sdk 就是20g的那个 然后运行 选择unity 可以看到这个界面 好&#xff0c;现在开始要安装离线包 直接项目里点 第二个 装好后 他会提示你 无法找到unity安装的地址 1 打开你的 …

干货 | 电路中为何需要串联小电阻?

电路中串联小电阻是电路设计中常见的一种技术手段&#xff0c;它可以在电路中起到多种作用。在本文中&#xff0c;我将从不同的角度分析串联小电阻的作用&#xff0c;深入探讨为何需要在电路中串联小电阻。 一、串联小电阻的概念和作用 串联小电阻是指在电路中串联一个电阻&am…

使用hutool实现entity转map、map转entity,以及entity转entity

前言 在项目开发中&#xff0c;entity的数据结构一般用来传参以及结果响应&#xff0c;但是在某些场景下&#xff0c;map可以实现list无法实现的效果。 比如&#xff1a;实现根据不同等级的用户&#xff0c;可以看到的数据的数量不一样。等级低的用户看到的某些字段是经过加密…

Redis入门 - 发布订阅

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis入门 - 发布订阅 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-pub-sub.html Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收…

基于Java Web的墓地管理系统的设计与实现+第五稿+文档

博主介绍&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 基于Java Web的墓地管理系统的设计与实现第五稿文档 视频演示 视频去哪了呢&#xff1f;_哔哩哔哩_bilibili 系统介绍 3.3 角色分析 本系统一共分为…

微信小程序9大方面测试点全方位总结

微信小程序无需下载安装&#xff0c;用户在微信扫一扫或搜索即可使用&#xff0c;小程序版本类型可分为&#xff1a;开发版、体验版、正式版。 开发版、体验版无需审核&#xff0c;只需要给微信号权限&#xff0c;经过扫小程序的二维码就能访问&#xff0c;正式版本需要经过微…

计网期末复习篇

五层协议 协议字段数据单元 PDU 典型协议 (协议字段) 网络连接设备 寻址方式 物理层 比特流 以太网协议 232、485、449、x25、以串口方式、网卡 物理层不寻址 数据链路层 帧 ppp协议 broadcast协议 网桥、网络交换机(特点有题) MAC地址(48bit) 网络层 (重点) 网络分…

Spark SQL 内置函数

文章目录 一、Spark SQL内置函数&#xff08;一&#xff09;内置函数概述1、10类内置函数2、两种使用方式 &#xff08;二&#xff09;内置函数演示1、通过编程方式使用内置函数upper()2、通过SQL语句的方式使用内置函数upper()3、演示其它内置函数的使用 二、自定义函数&#…