标签: usb

C++ USB编程

我是硬件编程(尤其是USB)的新手,所以请耐心等待我和我的问题.我正在使用C++,我需要向微处理器板上的USB端口发送/接收一些数据(字节数组).

现在,我之前做过一些串口编程,我知道对于串口,你必须打开一个端口,设置,执行i/o,最后关闭端口.我猜使用USB端口,它不像我上面提到的那么简单.

我知道我想使用Microsoft标准驱动程序并实现标准Windows IO命令来实现这一点,因为我认为微处理器板没有驱动程序供我进行交互.

如果有人能指出我正确的方向,通过标准的Windows IO命令与USB端口(打开,设置,i/o)"对话"所需的步骤,我会非常感激.非常感谢!!

c++ windows usb

22
推荐指数
2
解决办法
4万
查看次数

如何在Windows和Java下与USB设备通信?

我想在Windows和Java下与USB设备进行通信,但我找不到一个好的库.我不希望用户必须安装任何额外的硬件或设备驱动程序才能使其工作.也就是说,我希望能够像其他Windows应用程序一样与USB进行交互.

我熟悉jUSB和JSR 80,但两者似乎都是死的项目(至少对于Windows而言).

java windows usb

21
推荐指数
2
解决办法
4万
查看次数

使用C++在Windows中检测USB插入/删除事件

我正在为需要处理USB插入/删除事件的现有应用程序编写扩展.我知道感兴趣的设备的VID/PID.但是,我没有访问窗口句柄,所以我不知道是否RegisterDeviceNotification会有很多用处,除非有办法通过获取句柄WINAPI.使用C++检测USB插入/移除事件的最佳方法是什么?

Microsoft网站上的此示例代码显示了如何通过WMI接收事件通知:

如何修改以接收USB插入/移除事件?或者,我还有另一种方法吗?我正在使用Visual Studio 2008.谢谢.

附加信息

这是我到目前为止(减去错误处理):

DEFINE_GUID(GUID_INTERFACE_CP210x, 0x993f7832, 0x6e2d, 0x4a0f, 0xb2, 0x72, 0xe2, 0xc7, 0x8e, 0x74, 0xf9, 0x3e);

MyClass::MyClass()
{
    // Generate message-only window
    _pWndClassEx = (WNDCLASSEX *)malloc( sizeof(WNDCLASSEX) );
    memset( _pWndClassEx, 0, sizeof(WNDCLASSEX) );
    _pWndClassEx->cbSize = sizeof(WNDCLASSEX);
    _pWndClassEx->lpfnWndProc = (WNDPROC)WndProc; // function which will handle messages
    _pWndClassEx->hInstance = GetCurrentModule();
    _pWndClassEx->lpszClassName = pClassName;
    atom = RegisterClassEx( _pWndClassEx );
    _hWnd = CreateWindowEx( 0, pClassName, pWindowName, 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, NULL, NULL ); …
Run Code Online (Sandbox Code Playgroud)

c++ usb events asynchronous virtual-serial-port

21
推荐指数
3
解决办法
4万
查看次数

通过USB将原始ZPL发送到Zebra打印机

通常,当我将Zebra LP 2844-Z插入USB端口时,计算机将其视为打印机,我可以像其他任何通用打印机一样从记事本打印到它.但是,我的应用程序有一些条形码功能.我的应用程序解析一些输入并生成内存中的ZPL字符串.如何将此ZPL数据发送到USB设备?

usb zpl zebra-printers

21
推荐指数
5
解决办法
10万
查看次数

在Mac上读取和写入USB(HID)中断端点

我正在尝试与一个相当具体的USB设备进行通信,并开发Windows和Mac代码.

该设备是带有HID接口(3级)的USB设备,带有两个端点,一个中断输入和一个中断输出.设备的性质使得只有在从主机请求数据时才从输入端点上的设备发送数据:主机向其发送设备在其输入中断端点上响应的数据.将数据传输到设备(写入)要简单得多......

Windows的代码非常简单:我获得了设备的句柄,然后调用ReadFile或WriteFile.显然,大部分底层异步行为都被抽象出来了.它似乎工作正常.

然而,在Mac上,它有点粘.我尝试了很多东西,没有一个已经完全成功,但这里有两件似乎最有希望的东西......

1.)尝试通过IOUSBInterfaceInterface访问设备(作为USB),遍历端点以确定输入和输出端点,并(希望)使用ReadPipe和WritePipe进行通信.不幸的是,我无法打开界面,返回值(kIOReturnExclusiveAccess)注意到某些东西已经让设备独占打开.我已经尝试使用IOUSBinterfaceInterface183,因此我可以调用USBInterfaceOpenSeize,但这会导致相同的返回错误值.

---更新
7/30/2010 --- 显然,Apple IOUSBHIDDriver会早期与设备匹配,这可能会阻止打开IOUSBInterfaceInterface.从一些挖掘中可以看出,防止IOUSBHIDDriver匹配的常见方法是编写具有更高探测分数的无代码kext(内核扩展).这将提前匹配,阻止IOUSBHIDDriver打开设备,理论上应该允许我打开接口并直接写入和读取端点.这没关系,但我更希望不必在用户机器上安装额外的东西.如果有人知道一个可靠的选择,我会感谢这些信息.

2.)将设备作为IOHIDDeviceInterface122(或更高版本)打开.为了读取,我设置了一个异步端口,事件源和回调方法,在数据就绪时调用 - 当数据从输入中断端点上的设备发送时.但是,要写入数据 - 设备需要 - 来初始化响应我找不到办法.我很难过.setReport通常写入控制端点,而且我需要一个不期望任何直接响应,没有阻塞的写入.

我在网上看了看并尝试过很多东西,但没有一个能给我带来成功.有什么建议?我不能使用很多Apple HIDManager代码,因为其中大部分是10.5+,我的应用程序也必须在10.4上运行.

c++ macos usb hid kernel-extension

20
推荐指数
1
解决办法
2万
查看次数

如何确定给定的驱动器号是本地,映射还是USB驱动器?

鉴于驱动器的字母,我如何确定它是什么类型的驱动器?

例如,E:\是USB驱动器,网络驱动器还是本地硬盘驱动器.

.net c# usb path

20
推荐指数
3
解决办法
2万
查看次数

Android反向网络共享或使用USB电缆访问LAN或互联网

我想使用usb线从android使用我的局域网/互联网.这样我就可以利用局域网的速度了.我可以通过usb电缆连接到系统(access deskto ip).但是无法访问网络中的任何其他计算机,也无法访问Internet.怎么做.试过各种选择.网络桥接/ interenet共享没有任何作用.我们有什么办法可以改变路由或网关设置来实现这个目标.

usb android lan

20
推荐指数
1
解决办法
5万
查看次数

如何限制复制使用的缓存,以便仍有可用于其他缓存的内存?

基本情况:

我在openSuSE中复制一些NTFS磁盘.每个都是2TB.当我这样做时,系统运行缓慢.

我的猜测:

我相信这可能是由于缓存.Linux决定丢弃有用的缓存(例如kde4膨胀,虚拟机磁盘,LibreOffice二进制文件,Thunderbird二进制文件等),而是用复制磁盘中的东西填充所有可用内存(总共24 GB),这些内容只读一次,然后写,再也没用过.因此,每当我使用这些应用程序(或kde4)时,需要再次读取磁盘,并再次读取磁盘上的膨胀使得事情冻结/打嗝.

由于缓存消失以及这些膨胀的应用程序需要大量缓存的事实,这使得系统非常慢.

由于它是USB,磁盘和磁盘控制器不是瓶颈,因此使用ionice不会使它更快.

我相信这是缓存,而不仅仅是主板太慢,因为如果我停止一切复制,它仍会运行一段时间,直到它重新读取所有内容.如果我重新启动复制,它需要一分钟才能再次出现波动.但是,我可以将它限制在大约40 MB/s,并且它再次运行得更快(不是因为它具有正确的缓存,而是因为主板总线为系统磁盘提供了大量额外带宽).我可以完全接受主板的IO功能被完全消耗的性能损失(100%使用,意味着0%的浪费功率让我开心),但我不能接受这种缓存机制在这个特定用途中表现如此糟糕案件.

# free
             total       used       free     shared    buffers     cached
Mem:      24731556   24531876     199680          0    8834056   12998916
-/+ buffers/cache:    2698904   22032652
Swap:      4194300      24764    4169536
Run Code Online (Sandbox Code Playgroud)

我也在Ubuntu上做了同样的事情,这导致整个系统挂起.;)

为了澄清,我不是要求如何为"系统"留出内存,而是为了"缓存".我知道缓存内存会在需要时自动返回给系统,但我的问题是它不会保留用于缓存特定的东西.

题:

有没有办法告诉这些复制操作限制内存使用,所以一些重要的事情仍然被缓存,因此任何减速是由于正常的磁盘使用而不重读相同的常用文件?例如,是否允许将每个进程/用户/文件系统的最大内存设置用作缓存/缓冲区?

linux filesystems usb caching file-copying

20
推荐指数
1
解决办法
2万
查看次数

关注Honeycomb或更高版本Android版本的外部USB存储器的更改

我有一台运行Android Honeycomb的数码单反相机和三星Galaxy Tab.使用USB电缆将DSLR连接到平板电脑(通过USB套件在平板电脑上启用主机功能).我希望在用户使用此外置摄像头拍照时收到通知,以便将此图像下载到平板电脑或使用它做其他事情,例如显示包含从图像中获取的元信息的Toast通知.

至于我获得允许监视更改的所有现有工具(如FileObserver使用底层inotify机制MediaContentProvider等),需要查看特定文件或文件系统路径.这很好,直到我们在2.x和更早版本的Android版本中获得了块层协议支持 - 当你连接设备时,它已被安装在设备文件系统的某个地方,你可以使用这个挂载点作为这些工具的观察点.

由于Honeycomb Google已经将访问外部USB设备的方式改为Media Transfer Protocol其中PTP的一部分.现在,当我将外部USB设备连接到Android设备时,我将看不到任何挂载点(我正在使用adb shell和后续mount命令获取它们).此外,MTP实现使用存储ID,它显然充当更高级别的抽象,并且只是普通的整数值.我希望有一种方法能够以某种方式将这些存储ID转换为真正的路径/ mountpoint /但是显然似乎没有.

考虑到MediaScanner已经在我的设备上运行的Android ,我猜想Intent当设备可以访问的媒体文件发生变化时,可以通过特殊的广播来管理这个问题,所以我开始寻找已经存在且适合Intents被通知但没有运气-我只找到ACTION_MEDIA_MOUNTED并且ACTION_MEDIA_REMOVED当设备被连接和断开分别被仅广播.这意味着MediaScanner在重新安装之前无法注意到设备上的任何更改(我使用库存应用程序对其进行了双重检查 - 在您拔下插头并将其插入Android设备之前,它不会在相机上看到任何新创建的图像再次).

试图获得外部SD卡的这个挂载路径,我使用了Environment.getExternalStorageDirectory()API调用,但它产生了模拟Galaxy的sdcard路径,而/mnt/sdcard不是相机的路径.所以它对我也不起作用.

我设法解决这个问题,只是发起了定期Timer活动,AsyncTask并作为一个TimerTask.此任务会初始化USB连接,打开设备,扫描整个设备内存,仅获取最后拍摄的照片,然后关闭设备描述符和USB连接.

它看起来并不像做,考虑到它需要做的所有这些行动每一个可能是很经常的时间的最好的和有效的方式,说每5秒或10秒.它肯定会很快耗尽电池并产生不必要的系统I/O,仅用于拍摄最后拍摄的照片并将其与之前拍摄的照片进行比较(99%是相同的图像),但我没有找到任何更好的工作解决方案这样做.拥有基于事件的通知的观察者机制会好得多.

所以我的问题是有更有效的方式来通知Honeycomb或更高版本的Android版本的外部USB存储器的更改,而不是上面描述的那些?

usb android usb-drive android-intent mtp

20
推荐指数
1
解决办法
1095
查看次数

在Mac上嗅USB流量?

有没有办法嗅到Mac上的USB端口?我看过libusb#usblib,但我找不到任何适用于Mac的东西.

macos usb

20
推荐指数
2
解决办法
2万
查看次数