我正在开发一个利用Android 3.2中的USB Host功能的项目.一般来说,我在USB /串行通信方面缺乏令人遗憾的缺乏知识和才能.我也无法找到任何我需要做的好示例代码.
我需要从USB通信设备上读取.
例如:当我通过Putty(在我的电脑上)连接时,我输入:
>GO
Run Code Online (Sandbox Code Playgroud)
设备开始为我喷出数据.俯仰/滚动/温度/校验.
例如:
$R1.217P-0.986T26.3*60
$R1.217P-0.986T26.3*60
$R1.217P-0.987T26.3*61
$R1.217P-0.986T26.3*60
$R1.217P-0.985T26.3*63
Run Code Online (Sandbox Code Playgroud)
我可以从Android设备发送初始'GO'命令,此时我收到'GO'的回音.
然后在任何后续读取上没有别的.
我该怎么做:1)发送'go'命令.2)读入结果数据流.
我正在使用的USB设备具有以下接口(端点).
设备类别:通讯设备(0x2)
接口:
接口#0类:通信设备(0x2)端点#0方向:入站(0x80)类型:中断(0x3)轮询间隔:255最大数据包大小:32属性:000000011
接口#1类:通信设备类(CDC)(0xa)端点#0地址:129编号:1方向:入站(0x80)类型:批量(0x2)轮询间隔(0)最大数据包大小:32属性:000000010
端点#1地址:2编号:2方向:出站(0x0)类型:批量(0x2)轮询间隔(0)最大数据包大小:32属性:000000010
我能够处理权限,连接到设备,找到正确的接口并分配端点.我只是想弄清楚使用哪种技术发送初始命令读取随后的数据.我尝试了bulkTransfer和controlTransfer的不同组合,没有运气.
谢谢.
我正在使用界面#1,如下所示:
public AcmDevice(UsbDeviceConnection usbDeviceConnection, UsbInterface usbInterface) {
Preconditions.checkState(usbDeviceConnection.claimInterface(usbInterface, true));
this.usbDeviceConnection = usbDeviceConnection;
UsbEndpoint epOut = null;
UsbEndpoint epIn = null;
// look for our bulk endpoints
for (int i = 0; i < usbInterface.getEndpointCount(); i++) {
UsbEndpoint ep = usbInterface.getEndpoint(i);
Log.d(TAG, "EP " + i + ": " + ep.getType());
if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) { …Run Code Online (Sandbox Code Playgroud) 目前我这样做是为了查看一个掩盖的USB设备列表(专门为我正在使用的设备屏蔽),如果它在那里,我继续,如果没有,那么我通知用户设备没有连接.通过USB外围控制器芯片制造商的.NET库为我提供了获取USB设备列表的方法.
是否存在USB设备断开连接的事件?
我正在寻找一种从Android设备与外部摄像头连接的方法.它需要成为外置摄像头的原因是因为我需要能够修改摄像头(移除红外滤镜)而且我不想破坏车载手机摄像头.
无论相机如何通过USB,蓝牙,WiFi或其他通信协议连接都无关紧要,这两个设备只需要能够在没有中间服务器/路由器的情况下进行通话.
我正在寻找一个解决方案:
最后一项要求不是必需的,但会很好.
我探讨的选项:
如果连接到IP摄像机没有中间人可以在代码Android和MJPEG和Android上(MJEPG)获取IP摄像头的视频流看起来很有希望.
我可以覆盖其他应用视频源吗?是否可以直接连接到IP摄像头?任何建议的选项非常感谢.
是否可以通过唯一标识符识别USB设备,例如操作系统具有Mac-ID,硬盘ID,以太网卡ID是否具有唯一标识符?我知道可以轻松更改USB分区的卷序列号,也可以在用户格式化时更改.
但是有ID可以使用WMI服务通过MFC(Visual C++或C#)检索某种"USB硬盘ID或USB硬件ID"吗?这样的标识符对于物理设备是否是唯一的?请澄清......
在选择"始终允许来自此计算机"后,我在连接我的4.2.2安卓设备与PC时遇到问题.
我在4.2.2 USB调试中选择了"始终允许来自这台电脑",第一次工作正常,但是当我尝试其他时间时,我的设备总是处于脱机状态.我已尝试使用另一个也是4.2.2的设备和USB调试弹出窗口,当我单击确定(不选择"始终允许从此计算机")时,设备列表变为在线状态.
我尝试了以下方法,但没有用
无论如何,一旦我选择了摆脱"始终允许从这台计算机"?
我最近开始写Xamarin,编写代码来查看连接到主机的设备时遇到了一些问题.
我已阅读SDK文档,所有文档都是用java编写的.我正在尝试将java更改为C#,我将其编码为查找附加的设备:
UsbManager manager = (UsbManager)GetSystemService (Context.UsbService);
display.Text += " /n inizializzo il manager";
display.Text += "numero dispositivi: ";
display.Text += manager.DeviceList.Count;
Run Code Online (Sandbox Code Playgroud)
使用"usb manager"应用程序,我可以看到所有的usb附加,有3个.但是这个代码看起来是0 usb附加.
我不明白为什么.
我希望能够从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个接口.
任何帮助,将不胜感激!
我似乎不同的抽象之间纠结的USB堆栈上..有什么不同betweeen IOCTL_USB_RESET和USBDEVFS_RESET解雇对一个USB设备?这两个调用最终会在接口上触发相同的低级操作,还是有区别?
我注意到USBDEVFS_RESET有时用'相当于重新插入和重新枚举设备'来描述,而我自己发现,触发IOCTL_USB_RESET(由libusb的usb_reset()调用完成)确实会触发重置消息dmesg但没有新的"枚举",这将导致通常我猜多线USB检测和识别消息.
由于IOCTL_USB_RESET解决我的问题(卡住usb设备)是不可行的,甚至不会触发重新计算,有没有机会USBDEVFS_RESET做得更好?
如何在没有电缆的情况下连接xcode中的设备.连接电缆很麻烦,而我的USB是松散的,因此它与PC断开连接.