Android USB 设备如何区分是打印机还是U盘

小白指南:轻松看懂USB接口有几种 想搞清楚usb接口有几种?从USB-A到Type-C,再到USB 3.0与USB 2.0的区别,这篇文章帮你轻松辨认各类接口,理解它们的用途和速度差异,再也不怕插错线。 阅读详情

项目中需要区分USB的连接设备是打印机还是电子秤,然后上网搜索到了一篇博客,根据这个博客写的一个小的例子:非常感谢hao2014_的这篇博客http://blog.youkuaiyun.com/u013686019/article/details/50409421


MainActivity:

package com.example.administrator.usbmanagertest;

import android.content.Context;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import java.util.HashMap;
import java.util.Iterator;

public class MainActivity extends AppCompatActivity {

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.sb);
    }

    public void showUsbList(View view) {
        UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);

        HashMap<String, UsbDevice> deviceList = manager.getDeviceList();

        Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();

        StringBuilder sb = new StringBuilder();
        while (deviceIterator.hasNext()){
            UsbDevice usbDevice = deviceIterator.next();
            sb.append("DeviceName="+usbDevice.getDeviceName()+"\n");
            sb.append("DeviceId="+usbDevice.getDeviceId()+"\n");
            sb.append("VendorId="+usbDevice.getVendorId()+"\n");
            sb.append("ProductId="+usbDevice.getProductId()+"\n");
            sb.append("DeviceClass="+usbDevice.getDeviceClass()+"\n");
            int deviceClass = usbDevice.getDeviceClass();
            if(deviceClass==0) {
                UsbInterface anInterface = usbDevice.getInterface(0);
                int interfaceClass = anInterface.getInterfaceClass();

                sb.append("device Class 为0-------------\n");
                sb.append("Interface.describeContents()="+anInterface.describeContents()+"\n");
                sb.append("Interface.getEndpointCount()="+anInterface.getEndpointCount()+"\n");
                sb.append("Interface.getId()="+anInterface.getId()+"\n");
                //http://blog.youkuaiyun.com/u013686019/article/details/50409421
                //http://www.usb.org/developers/defined_class/#BaseClassFFh
                //通过下面的InterfaceClass 来判断到底是哪一种的,例如7就是打印机,8就是usb的U盘
                sb.append("Interface.getInterfaceClass()="+anInterface.getInterfaceClass()+"\n");
                if(anInterface.getInterfaceClass()==7){
                    sb.append("此设备是打印机\n");
                }else if(anInterface.getInterfaceClass()==8){
                    sb.append("此设备是U盘\n");
                }
                sb.append("anInterface.getInterfaceProtocol()="+anInterface.getInterfaceProtocol()+"\n");
                sb.append("anInterface.getInterfaceSubclass()="+anInterface.getInterfaceSubclass()+"\n");
                sb.append("device Class 为0------end-------\n");
            }

            sb.append("DeviceProtocol="+usbDevice.getDeviceProtocol()+"\n");
            sb.append("DeviceSubclass="+usbDevice.getDeviceSubclass()+"\n");
            sb.append("+++++++++++++++++++++++++++\n");
            sb.append("                           \n");
        }

        textView.setText(sb);
    }
}


activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.administrator.usbmanagertest.MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="showUsbList"
        android:text="Show USB List" />
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <TextView
        android:textSize="25sp"
        android:id="@+id/sb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    </ScrollView>

</LinearLayout>


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


参考博客地址:


http://blog.youkuaiyun.com/u013686019/article/details/50409421

一、问题

现在有USB设备插入Android系统,那么如何得知插入的设备类型?是USB打印机,U盘,还是USB鼠标?


二、USB类型规定

对于USB类型,USB组织是有规定的,见:http://www.usb.org/

比如:

Base Class

Descriptor Usage

Description

00h

Device

Use class information in the Interface Descriptors

01h

Interface

Audio 

02h

Both

Communications and CDC Control

03h

Interface

HID (Human Interface Device)

05h

Interface

Physical

06h

Interface

Image

07h

Interface

Printer

三、Linux对USB设备类型定义

在kernel中,有两个结构体的相关成员表征USB设备的类型,第一个usb_device_descriptor:

[cpp]  view plain  copy
 print ?
  1. include/uapi/linux/usb/ch9.h  
  2. /* USB_DT_DEVICE: Device descriptor */  
  3. struct usb_device_descriptor {  
  4.     __u8  bDeviceClass;  
  5.     __u8  bDeviceSubClass;  
  6.     __u8  bDeviceProtocol;  
  7. } __attribute__ ((packed));  
bDeviceClass成员值区别不同的USB设备,如果该值为0呢?看上边:

Base Class

Descriptor Usage

Description

00h

Device

Use class information in the Interface Descriptors

就在第二个结构体usb_interface_descriptor中:

[cpp]  view plain  copy
 print ?
  1. include/uapi/linux/usb/ch9.h  
  2. struct usb_interface_descriptor {  
  3.     __u8  bInterfaceClass;  
  4.     __u8  bInterfaceSubClass;  
  5.     __u8  bInterfaceProtocol;  
  6. } __attribute__ ((packed));  
bInterfaceClass成员即是。

比如,对于USB打印机设备,定义如下:

[cpp]  view plain  copy
 print ?
  1. include/uapi/linux/usb/ch9.h  
  2. /* 
  3.  * Device and/or Interface Class codes 
  4.  * as found in bDeviceClass or bInterfaceClass 
  5.  * and defined by www.usb.org documents 
  6.  */  
  7. #define USB_CLASS_PER_INTERFACE     0   /* for DeviceClass */  
  8. #define USB_CLASS_AUDIO         1  
  9. #define USB_CLASS_COMM          2  
  10. #define USB_CLASS_HID           3  
  11. #define USB_CLASS_PHYSICAL      5  
  12. #define USB_CLASS_STILL_IMAGE       6  
  13. #define USB_CLASS_PRINTER       7  
  14. #define USB_CLASS_MASS_STORAGE      8  
  15. #define USB_CLASS_HUB           9  
  16. #define USB_CLASS_CDC_DATA      0x0a  
  17. #define USB_CLASS_CSCID         0x0b    /* chip+ smart card */  
  18. #define USB_CLASS_CONTENT_SEC       0x0d    /* content security */  
  19. #define USB_CLASS_VIDEO         0x0e  
  20. #define USB_CLASS_WIRELESS_CONTROLLER   0xe0  
  21. #define USB_CLASS_MISC          0xef  
  22. #define USB_CLASS_APP_SPEC      0xfe  
  23. #define USB_CLASS_VENDOR_SPEC       0xff  
  24.   
  25. drivers/usb/gadget/printer.c  
  26. static struct usb_interface_descriptor intf_desc = {  
  27.     .bLength =      sizeof intf_desc,  
  28.     .bDescriptorType =  USB_DT_INTERFACE,  
  29.     .bNumEndpoints =    2,  
  30.     .bInterfaceClass =  USB_CLASS_PRINTER,  
  31.     .bInterfaceSubClass =   1,  /* Printer Sub-Class */  
  32.     .bInterfaceProtocol =   2,  /* Bi-Directional */  
  33.     .iInterface =       0  
  34. };  
对上了,不是?!

四、HAL层和Framework层

HAL层的usbhost.c文件为我们获取Linux driver中USB设备的信息提供了便利,除了USB设备类型,还可以得到USB设备的厂商名称、产品名称、序列号等:

system/core/libusbhost/usbhost.c


usbhost.c该文件中提供的方法在JNI中调用:

frameworks/base/services/jni/com_android_server_UsbHostManager.cpp


上面代码截图信息量很大!很重要!很重要!很重要!很重要!重要的地方说四遍。

1、调用usbhost.c文件中方法获取USB设备信息

2、获取的信息一部分传到UsbInterface.java,APP部分调用UsbInterface类获取信息

[java]  view plain  copy
 print ?
  1. frameworks/base/core/java/android/hardware/usb/UsbInterface.java  
  2. public class UsbInterface implements Parcelable {  
  3.     private final int mId;  
  4.     private final int mClass;  
  5.     private final int mSubclass;  
  6.     private final int mProtocol;  
  7.     private final Parcelable[] mEndpoints;  
  8. }  
3、 获取的信息另一部分通过调用 UsbHostManager.java中的usbDeviceAdded()方法,把信息写到 UsbDevice.java中, APP部分调用UsbDevice类获取信息

[java]  view plain  copy
 print ?
  1. frameworks/base/core/java/android/hardware/usb/UsbDevice.java  
  2. public class UsbDevice implements Parcelable {  
  3.     private final String mName;  
  4.     private final int mVendorId;  
  5.     private final int mProductId;  
  6.     private final int mClass;  
  7.     private final int mSubclass;  
  8.     private final int mProtocol;  
  9.     private final Parcelable[] mInterfaces;  
  10. }  
接下来,我们就看下如此关键的 usbDeviceAdded()方法:

[java]  view plain  copy
 print ?
  1. frameworks/base/services/java/com/android/server/usb/UsbHostManager.java  
  2. /* Called from JNI in monitorUsbHostBus() to report new USB devices */  
  3. private void usbDeviceAdded(String deviceName, int vendorID, int productID,  
  4.     int deviceClass, int deviceSubclass, int deviceProtocol,  
  5.     /* array of quintuples containing id, class, subclass, protocol 
  6.        and number of endpoints for each interface */  
  7.     int[] interfaceValues,  
  8.    /* array of quadruples containing address, attributes, max packet size 
  9.       and interval for each endpoint */  
  10.     int[] endpointValues) {  
  11.     synchronized (mLock) {  
  12.         for (intf = 0; intf < numInterfaces; intf++) {  
  13.             int interfaceId = interfaceValues[ival++];  
  14.             int interfaceClass = interfaceValues[ival++];  
  15.             int interfaceSubclass = interfaceValues[ival++];  
  16.             int interfaceProtocol = interfaceValues[ival++];  
  17.             int numEndpoints = interfaceValues[ival++];  
  18.             interfaces[intf] = new UsbInterface(interfaceId, interfaceClass,  
  19.                     interfaceSubclass, interfaceProtocol, endpoints);  
  20.         }  
  21.         UsbDevice device = new UsbDevice(deviceName, vendorID, productID,  
  22.                 deviceClass, deviceSubclass, deviceProtocol, interfaces);  
  23.         mDevices.put(deviceName, device);  
  24.     }  
  25. }  

五、APP层

经过上面分析,获取USB设备类型等信息,已经心有成竹了,使用UsbDevice、UsbInterface两个类即可。其中, UsbInterface类是包含在 UsbDevice类中的:

[java]  view plain  copy
 print ?
  1. frameworks/base/core/java/android/hardware/usb/UsbDevice.java  
  2. public class UsbDevice implements Parcelable {  
  3.     private final Parcelable[] mInterfaces;  
  4.       
  5.     /** 
  6.      * Returns the {@link UsbInterface} at the given index. 
  7.      * 
  8.      * @return the interface 
  9.      */  
  10.     public UsbInterface getInterface(int index) {  
  11.         return (UsbInterface)mInterfaces[index];  
  12.     }  
  13. }  
之后,就是如何使用UsbDevice类了。

USB设备属于热插拔设备,一旦系统监测到其热插拔时间,会有相应事件上报:

[java]  view plain  copy
 print ?
  1. frameworks/base/core/java/android/hardware/usb/UsbManager.java  
  2. /** 
  3.  * This intent is sent when a USB device is attached to the USB bus when in host mode. 
  4.  */  
  5. public static final String ACTION_USB_DEVICE_ATTACHED =  
  6.         "android.hardware.usb.action.USB_DEVICE_ATTACHED";  
  7.   
  8. /** 
  9.  * This intent is sent when a USB device is detached from the USB bus when in host mode. 
  10.  */  
  11. public static final String ACTION_USB_DEVICE_DETACHED =  
  12.         "android.hardware.usb.action.USB_DEVICE_DETACHED";  
所以,注册监听事件的广播即可,如:


[java]  view plain  copy
 print ?
  1. class UsbDeviceEventReceiver extends BroadcastReceiver {  
  2.     @Override  
  3.     public void onReceive(Context context, Intent intent) {  
  4.         UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);  
  5.     }  
  6. }  
  7.   
  8. mReceiver = new UsbDeviceEventReceiver();  
  9. IntentFilter filter = new IntentFilter();  
  10. filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);  
  11. filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);  
  12. registerReceiver(mReceiver, filter);  

六、结束

Android流程:driver->HAL->Framework->APP,几乎所有模块都是这个模式,对于一个外设,如果这几个部分都清楚的话心里会特别明亮。



USB免驱原理与实现:从标准协议到驱动安装全解析 USB(通用串行总线)作为现代计算机连接外设的核心接口,其通信依赖于设备描述符与主机驱动的匹配。当设备遵循USB协议定义的标准设备类(如HID、CDC、MSC)时,操作系统可通过内置的通用驱动自动识别,实现即插即用,这便是“免驱”的技术基础。其核心价值在于简化用户操作,提升硬件兼容性与使用体验,广泛应用于U盘、键盘鼠标等常见外设。然而,对于功能特殊的设备(如特定USB转串口芯片或专用编程器),仍需安装厂商提供的特定驱动。本文以FTDI、CH340等常见芯片为例,深入剖析免驱条件与驱动安装方案,并探讨开发者如 阅读详情

相关推荐

Android 11 默认授予第三方 USB 权限的 Framework 方案

Android USB Host 下,第三方应用访问外接设备要经过 UsbManager 权限检查,Android 11 在 requestPermission 与 hasPermission 链路上更严格,扫码枪、串口模块常反复弹出授权框。无人值守设备没人点允许,业务会卡在 SecurityException。理解 UsbUserPermissionManager、UsbService 与 usb_permissions.xml 的关系,用资源 overlay 或白名单补丁实现默认授予,可让自助终端、工业

weixin_33889245的博客 518

Android之USB打印

文章目录前言一、效果图二、使用步骤1.UsbPrinter类2.ESCUtil类3.BytesUtil工具类4.Activity使用 前言 最近公司需要连接芯烨云的串口打印机,因为云打印有很多弊端,这个大家都懂,费什么话,上菜! 一、效果图 常规出牌,先来效果图,不然你们都不感兴趣往下看了! 二、使用步骤 1.UsbPrinter类 有注释就不用多讲什么了吧! package com.example.cashiersystem.utils; import android.annotation.S

叶已初秋的博客 1万+

Android USB通信与打印机

本文介绍了如何在Android应用中通过USB与打印机进行通信,并提供了相应的源代码。在移动设备的普及和便携性的提高下,越来越多的人选择在Android手机上进行打印操作。为了实现Android手机与打印机之间的通信,我们需要使用Android的USB通信功能。至此,我们已经完成了Android手机通过USB与打印机进行通信的基本流程。根据具体的打印机型号和通信协议,我们可以在权限被授予时执行相应的打印功能代码。首先,我们需要准备一个支持USB通信的打印机,并确保打印机的驱动程序已经正确安装。

DevGlider的博客 1107

Android系统下 USB打印机设备节点

Android系统下 USB打印机设备节点实现指南 在现代的Android应用中,USB打印机的集成可以极大地提高用户体验。实现USB打印机设备节点的过程可能会让初学者感到复杂,但通过将其分解为几个步骤,我们可以让这个过程变得简单易懂。本文将指导你如何在Android系统下实现USB打印机设备节点。 流程概述 步骤表格 以...

weixin_32475629的博客 509

Android 获取Usb设备类型

在进行关于USB设备相关的开发过程中,就会考虑一个问题,在插入USB设备时,会判断这个设备是U盘,鼠标 键盘,usb手写笔,打印设备等等 USB类型规定 而UsbHostManager.java中的usbDeviceAdded()方法,把信息写到UsbDevice.java中,APP部分调用UsbDevice类获取信息 UsbDevices.java类如下: public class UsbDevice implements Parcelable { private final String

安卓兼职framework和app工程师的博客 3031

USB OTG = 让这个 USB 口既能当设备连电脑,也能当主机接 U 盘等外设。

USB OTG = 让这个 USB 口既能当设备连电脑,也能当主机接 U 盘等外设。后,同一个 Type-C / micro-USB 口可以。手机连 PC 充电/传文件时,手机是 Device。(常读成「USB OTG」)插 U 盘、接打印机。

weixin_40388758的博客 38

android 检测USB是U盘还是外设

1 UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);              HashMap deviceList = manager.getDeviceList();              Iterator deviceIterator = deviceList.values(

u012254541的博客 5659

AndroidUSBPrinterDemo 安卓USB连接打印机Demo

AndroidUSBPrinterDemo 安卓USB连接打印机Demo,安卓USB连接打印机实现打印Demo,封装了打印工具类方便使用

安卓蓝牙USB连接热敏打印机二

安卓USB Host连接热敏打印机,测试成功!!!

konkon2012的博客 7472

在matlab中运行自带的模块(以CCSDS LDPC Decoder模块为例)

最新版的获取需要注册 MathWorks 账户 访问账户注册页面:www.mathworks.cn/mwaccount/register。下载新版本或历史版本的MATLAB,请登陆:https://www.mathworks.cn/downloads 并下载。点击此处可以拷贝调用例程的命令,在matlab命令行输入即可自动获取代码。可以看到页面中写了该模块需要在R2022b以上版本使用。运行.m文件可以生成simulink运行所需要的数据。可以看到左侧下载到了官方历程的文件。之后双击slx文件即可打开。

qq_28455081的博客 885

Oracle集群管理-19.3升级19.18 opatchauto总结(java报错,resume oneoffs缺失目录)

t. (那个认为补丁已经打上了,但是oneoffs目录里面没有。将安装包文件的权限全部改成777.就继续执行了上述命令 ,此时使用opatch lsinv也是报错 ,在正常执行opatchauto apply。1 创建目录,存放补丁包,并赋予权限。于是使用如下命令对补丁进行回滚。

oradbm的博客 1415

企业U盘管理软件有哪些?别再把“禁用USB”当安全了

单纯禁用U盘无法有效防止数据外泄,因员工可通过手机、网盘、邮件、IM等多通道外传。真正有效的方案应是“通道治理”:区分设备类型(如U盘、手机、移动硬盘),按岗位设置禁用、只读、审批或白名单策略,并联动文件审计、外发管控、日志留存与审批流程,实现从设备到文件的闭环管理。选型需关注设备识别精度、策略灵活性及跨系统联动能力,核心目标不是“禁用U盘”,而是“管住数据外发”。

Anquan_zsxy的博客 389

k8s重装1.28.2+calico+踩坑收集+InPlacePodVerticalScaling

它提供了从镜像构建(通过 Dockerfile)、镜像管理(上传、下载、存储等)、容器创建、运行、网络配置(可以为容器分配自定义的网络,如 bridge 网络、host 网络等)到容器编排(通过 Docker Compose 可以简单地编排多个容器的启动和关联关系)等一整套完整的解决方案。它的核心功能是启动和管理容器的生命周期。sudo apt update这个可以经常用,是来更新软件包的,它不下载,所以没风险,但是经常会报错,别问,问就是某种强大的力量,所以用镜像或者代理或者巴拉巴拉。

SsjjsS2019的博客 2553

获取usb设备类型

项目中需要区分USB的连接设备是打印机还是电子秤,然后上网搜索到了一篇博客,根据这个博客写的一个小的例子:非常感谢hao2014_的这篇博客http://blog.youkuaiyun.com/u013686019/article/details/50409421 MainActivity: [java] view plain copy  

仓仓 1万+

深入解析进化算法中的选择与多样性

在计算科学的世界里,最优雅的解决方案往往源于最古老的智慧——大自然。进化算法(Evolutionary Algorithms, EAs)正是这样一种受达尔文自然选择学说启发的强大工具。它们通过模拟“适者生存”的过程,在庞大的可能性海洋中搜寻最优解。。:指的是深入挖掘和优化已知的优质解。这就像在一片已知的沃土上精耕细作,力求获得最高产量。强大的选择压力会促进这一过程。:指的是在整个搜索空间中寻找全新的、可能更优的解。这好比派遣探险队去发现新大陆,充满了未知与机遇。保持种群的多样性是探索的关键。

weixin_62533513的博客 716

OpenClaw安装方式那么多,但建议大家还是用云厂商吧

OpenCloud的安装方式多样,包括One-liner、npm、pnpm和Hackable等。One-liner提供高效的单行命令安装;npm和pnpm作为Node.js包管理工具,分别提供常规和高性能的安装选项;Hackable则支持定制化安装。不同系统(macOS、Windows)和终端(PowerShell、CMD)的操作步骤各有特点,用户需根据自身技术背景选择合适的安装方式。官方推荐使用闲置计算资源或云部署方案以获得更佳体验。

涛涛讲AI 1400

秒懂所有USB接口类型,USB接口大全

请问,有数据线吗?话说,小编的座位在办公区第一排的位置,对面就是公司最豪华、使用率最高的会议室。高到什么程度呢?就是预定会议室就像抢购火车票一样——提前两天开放预订,晚半分钟都订不到的那种...

tiandiren111的专栏 5万+

Open Dynamics Engine(ODE)物理引擎基础教程(I)——特点介绍

下一教程 Open Dynamics Engine(ODE)物理引擎基础教程(II)——相关概念 (在这一教程中将学习刚体、关节、碰撞的概念在ODE中的特点) 本文结构引言介绍特点使用ODE总结 引言 本文翻译自ODE官方教程英文版,有些地方增加了自己的理解。这一节介绍ODE的相关概念。 基础教程英文原版链接【http://ode.org/wiki/index.php?title=Manua...

腿足机器人领域 1677

USB接口终极指南:从2.0到USB4全解析

本文全面解析USB接口类型,从物理形态和传输协议两大维度进行系统分类。物理接口分为主流通用型(Type-A、Micro-USB、Type-C)和淘汰/小众专用型,其中Type-C因支持正反插和多功能成为未来统一标准。传输协议版本决定性能,USB4v2.0最高支持80Gbps速率和240W供电。重点分析了主流接口与协议组合,指出Type-C存在"假Type-C"(仅USB2.0)的选购陷阱,并提供快速识别技巧。此外还介绍了雷电协议、OTG功能、视频输出等高级应用,强调Type-C USB4

上市公司前技术负责人,20 年软硬件深耕 + 百人研发团队管理经验,名校理工科背景加持。从技术攻坚到团队掌舵,沉淀海量项目实战与管理心得,专注分享软硬件干货、疑难问题解决方案,既是靠谱知识传播者,也盼链接优质项目共成长。 5996

YOLOv11改进 | Neck篇 | 轻量化跨尺度跨通道融合颈部CCFM助力YOLOv11有效涨点

到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的平均质量分98分,后期我会根据各种最新的前沿顶会进行论文复现,也会对一些老的改进机制进行补充,目前本专栏免费阅读(暂时,大家尽早关注不迷路~)如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~YOLOv11有效涨点专栏——本专栏持续复习各种顶会内容——科研必备​ycb。

Snu77的博客 8081

点云目标检测:open3d多窗口联动可视化

多个模型之间的对比除了指标之外,还需要可以直接直观的对比可视化结果,这次介绍一下如何使用open3d同时打开两个窗口分别加载两个模型的结果进行对比,同时实现两个窗口的联动,也就是当一个窗口拖动或者缩放时另外一个窗口也跟着做同样的变换。

zhaoguanhua的博客 4688

usb hub区分端口_车载系统数据传输——USB线基础知识

“ 最近一段时间痴迷ADAS系统的数据通信,花了一些时间去研究ADAS系统之间的数据传输和通讯系统,现阶段成型的文件比较少,我自己也是个小白,那就从最基础的东西上慢慢研究,本文的主要内容就是:USB线的基础知识储备。”通用串行总线(UniversalSerial Bus,缩写:USB),USB通信协议支持USB数据线上的数据传送(USB协议之后我们会涉及到)。现阶段我们的USB物理结构种类众多,使...

weixin_39738380的博客 881

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

了解USB接口的类型与特点

USB(Universal Serial Bus)中文名称为通用串行总线,是一种快速同步传输的双向串行接口标准,用于规范电脑、移动设备等与外部设备的连接和通讯,由英特尔、微软等几家公司联合成立USB-IF组织并研发和制定了USB传输协议。USB在手机、电脑、鼠标、键盘、摄影器材、电视机、游戏机、充电器、磁盘等设备中得到广泛应用,并支持各种操作系统(windows、MAC、Linux 等)。

爱吃猫的鱼 2305

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android usb micro,朝夕相伴不知芳名? 来补补USB接口知识

自打苹果的MacBook首先采用USBType-C接口后,外界纷纷质疑苹果激进地使用这么“奇葩”的接口岂不是会为用户带来很多不便?谁知,不到一年Android厂商纷纷推出使用USBType-C接口的设备,苹果再一次成功带动了整个行业的发展方向,就像指纹识别。不过话说回来,要不是USBType-C火了,你见到它真能认出来吗?即便现在看看手中设备的接口,你真的能叫出它们的名字,或者知道它们怎么“...

weixin_36202273的博客 698

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: 切换host的工具switchhost
下一篇: C语言中%p,%u,%lu都有什么用处
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值