我想尝试在Mac上使用libusb创建一个用户空间设备驱动程序,但我很困惑从哪里开始.在SDK安装程序(我从http://www.ellert.se/twain-sane获得)中,它说了一些我在计算机上找不到的示例.
有谁能描述如何在OS X上设置libusb进行开发?我可以使用Xcode吗?我应该在代码中包含哪些内容?
我们如何在Python中查询连接的USB设备信息?我想获得UID设备名称(例如:SonyEricsson W660),设备路径(例如:/ dev/ttyACM0)
还有什么是上述信息中最好的参数,用于识别设备何时再次连接?(UID?)
我正在研究Ubuntu 11.04.
ATM我有这个代码(使用pyUSB)
busses = usb.busses()
for bus in busses:
devices = bus.devices
for dev in devices:
print repr(dev)
print "Device:", dev.filename
print " idVendor: %d (0x%04x)" % (dev.idVendor, dev.idVendor)
print " idProduct: %d (0x%04x)" % (dev.idProduct, dev.idProduct)
print "Manufacturer:", dev.iManufacturer
print "Serial:", dev.iSerialNumber
print "Product:", dev.iProduct
Run Code Online (Sandbox Code Playgroud)
问题是我没有得到所需的输出,会粘贴一个例子:
<usb.legacy.Device object at 0x1653990>
Device:
idVendor: 4046 (0x0fce)
idProduct: 53411 (0xd0a3)
Manufacturer: 1
Serial: 3
Product: 2
Run Code Online (Sandbox Code Playgroud)
首先我没有文件名,这对我来说最重要.我假设它是/ dev/ttyACM0等部分.其次,我猜每个USB设备都有一些UID,或者我应该同时使用Vendor或Product id?
编辑:显然我有一些设置问题,我想我使用错误的USB库.(使用libusb0.1)ATM.这就是我将Device(dev.filename)字符串设为空的原因.如果有人可以请告诉他在什么操作系统上他正在使用什么USB库以及我认为它将解决我的问题的哪个版本的PyUSB.
我正在尝试通过USB将我的python应用程序接口与NFC设备连接.最好的选择似乎是pyusb,但我不能让它连接到libusb后端.我一直在
ValueError:没有可用的后端
我查看了堆栈跟踪,发现usb/backend/libusb10.py
(这是pyusb的一部分)正在尝试加载libusb-1.0.dll
以用作后端,但它无法找到它.这不是它不在我的道路上,它根本不在我的电脑上!
我安装了libusb-win32(http://libusb.org/wiki/libusb-win32),但生成的目录似乎只包含libusb0.dll.libusb-1.0.dll在哪里???
我很想知道在哪里获得该DLL,或者甚至不同的建议让pyusb在Windows 7上运行.
我有一个C程序在标题中有#include部分.
我已将libusb-1.0.0下载到我的电脑上.如果我只是将libusb-1.0.0文件夹复制到我的C程序所在的文件夹,它将无法正常工作.因此,我想我必须以某种方式将libuse-1.-.-安装到我的C程序所在的文件夹中.但是,我不知道如何安装它.
有人可以帮帮我吗 谢谢!
如何最正确地使用libusb与连接的USB设备通信?
具体来说,如何将数据传输到USB设备,从设备接收信息,找出所连接设备的名称,是否有存储等.
更具体地说,我将在Mac OS X机器上运行它,所以我知道我不能只使用Windows头文件.
如果对libusb和USB设备有一个很好的解释,这也会有所帮助.
我libusb_open
在Linux上调用C++(在Raspberry Pi上运行但使用Exagear虚拟化为x86)时遇到了麻烦.
我可以找到一个使用的设备,libusb_get_device_list
但它似乎将设备转换为设备处理程序使用libusb_open
导致问题,即使它返回0(成功),但没有其他命令工作.它给了我错误:
libusb: error [op_open] getcap failed (22)
Run Code Online (Sandbox Code Playgroud)
我希望我已经提供了足够的信息 - 如果没有,请告诉我,我可以添加更多信息.
提前致谢!
UPDATE
一点挖掘表明以下命令产生错误(在libusb中):
r = ioctl(hpriv->fd, IOCTL_USBFS_GET_CAPABILITIES, &hpriv->caps);
Run Code Online (Sandbox Code Playgroud)
哪里IOCTL_USBFS_GET_CAPABILITIES
是_IOR('U', 26, __u32)
.挖掘显示错误22来自ioctl
无效论证.我仍然试图取消这个,但是非常感谢任何帮助.
我正在尝试将我的PC作为Android 2.3.4设备的USB主机,以便能够开发API而无需实际的"附件".为此,我需要将PC建立为USB主机和"设备"(在我的例子中是运行2.3.4的Nexus One).
我从http://android.serverbox.ch/开始使用libusb代码作为PC端的基础,以及Android端的DemoKit代码和Android文档.
这两个似乎很好地协商连接,并且接口被"声称"但在实际的批量传输尝试中死亡.在OSX上,错误是-5(LIBUSB_ERROR_NOT_FOUND),在Ubuntu Linux上(作为root)错误是-1(LIBUSB_ERROR_IO).(最近发布的每个版本都有最新的libusb 1.0.8).
这是代码.关于问题的其他评论欢迎,虽然这主要是一个概念验证,所以我真的只是在寻找批量转移不起作用的原因:
#include <stdio.h>
#include <libusb.h>
#include <string.h>
#define ENDPOINT_BULK_IN 0x83
#define ENDPOINT_BULK_OUT 0x03 // Have tried 0x00, 0x01 and 0x02
#define VID 0x18D1
#define PID 0x4E11
#define ACCESSORY_PID 0x2D00
#define ACCESSORY_ADB_PID 0x2D01 // Can't get this to work, if ADB is active, can't get handle on device
/*
ON OSX
gcc adktest.c -I/usr/local/include -o adktest -lusb-1.0.0 -I/usr/local/include -I/usr/local/include/libusb-1.0
ON UBUNTU
gcc adktest.c -I/usr/include -o adktest -lusb-1.0 -I/usr/include -I/usr/include/libusb-1.0
Testing on Nexus …
Run Code Online (Sandbox Code Playgroud) 我希望能够从USB计步器读取数据.我在Java中尝试这个,我正在使用LibUsb和Usb4Java库.我似乎无法声称usb管道或类似的东西.
我正在使用的代码:
final Context context = new Context();
int result = LibUsb.init(context);
if (result < 0)
{
throw new LibUsbException("Unable to initialize libusb", result);
}
DeviceHandle handle = LibUsb.openDeviceWithVidPid(context, vid, pid);
if (handle != null)
{
Device d = LibUsb.getDevice(handle);
int res = LibUsb.claimInterface(handle, 0);
Run Code Online (Sandbox Code Playgroud)
Int res返回'-3',即'LIBUSB_ERROR_ACCESS'
设备已找到但不可索赔.USB设备只有1个接口.
任何帮助,将不胜感激!
我正在开发一个通过jni使用libusb的应用程序.此应用程序目前仅针对root,usb-host Android 3+计算机.
方案如下:
<java Activity>
loads <jni_wrapper.so>
which wraps <my_main_lib.so>
that uses <libusb.so>
that needs rw access to: /dev/bus/usb/<device>
Run Code Online (Sandbox Code Playgroud)
所有.so本机库都是我在/ system/lib上安装(作为root)的基础结构的一部分,然后由简单用户运行的java Activities可以使用它们.
这意味着整个USB通信必须从原生方面完成.
我得到了一切正常工作,除了一个问题 - usb权限:/ dev/bus/usb/entries的默认权限是(0660,uid = root,gid = usb).
显然,运行本机代码的标准java进程不符合上述任何要求,迫使我"chmod 666"相应的/ dev条目,以使其正常工作.
但是,这个解决方案并不是那么好,因为它不会在重新启动或拔出/重新插入设备后继续存在(权限会回到0660).
我正在寻找的解决方案需要:
我想到的方向:
有任何想法吗?:-)
谢谢!
我正在学习在Ubuntu 12.10上第一次使用libusb v1.0.0.这是我用来尝试理解如何使用此API的一些小测试代码:
#include <libusb-1.0/libusb.h>
...
libusb_device **list;
libusb_get_device_list(ctx, &list); // Returns 11 USB devices which is correct.
for (size_t idx = 0; list[idx] != NULL; idx ++)
{
libusb_device *dev = list[idx];
libusb_device_descriptor desc = {0};
int rc = libusb_get_device_descriptor(dev, &desc);
Run Code Online (Sandbox Code Playgroud)
此时,rc == 0,意味着它应该已经成功完成.来源:*libusb_get_device_descriptor()*的文档.
但结构desc
总是空的.没有任何字段被设置.如果我将上面的最后两行更改为:
libusb_device_descriptor desc = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int rc = libusb_get_device_descriptor(dev, &desc);
Run Code Online (Sandbox Code Playgroud)
...然后当libusb_get_device_descriptor()
返回时,我看到desc
保持不变,向我确认我没有得到我对此API的期望.
我还尝试以a.out
root 身份运行,以防万一这需要提升权限.进行谷歌搜索libusb_get_device_descriptor
并没有让我到任何地方.
我跑来试试这段代码的相关命令:
sudo …
Run Code Online (Sandbox Code Playgroud) libusb ×10
c++ ×3
usb ×3
android ×2
python ×2
adk ×1
android-ndk ×1
c ×1
java ×1
libusb-1.0 ×1
linux ×1
macos ×1
macports ×1
permissions ×1
pyusb ×1
raspberry-pi ×1
ubuntu ×1
windows-7 ×1