dav*_*and 8 usb android transfer
我是Android开发的新手,我最近一直在探索Usb Host.
有人能告诉我如何使用批量转移,以便我可以看到外部相机看到的东西,而不是在我的平板电脑上显示它?
相机:佳能Powershot A1300平板电脑:Iconia A200
我已经查看了堆栈溢出和其他一些论坛,但还没有找到关于如何使用批量传输或使用哪些常量作为检索某些数据的参数的良好解释.
我能够看到端点并与外部摄像头建立连接,但我不知道从哪里开始.
非常感谢任何帮助.
Dev*_*red 15
Android中的USB Host API相当薄,我的意思是,一旦你超越枚举接口/端点并创建连接,它就无法帮助你.然后,您将进行与原始USB数据传输通信的领域,其格式取决于您的摄像头所代表的设备类别.您的请求有点像蠕虫,所以我会尽我所能提供有用的资源.
遗憾的是,存储和媒体设备并不是最容易解释的设备类,因此如果您只是习惯于使用USB,可能会很困难.我能给出的最好建议是查看相机报告的接口类的设备类规范(大多数是Mass Storage或MTP),可以在这里找到:http://www.usb.org/developers/devclass_docs
spec文档将枚举您需要用于与设备通信的命令.我还建议您查看USB In a Nutshell,它可以很好地指出USB请求的构造方式,这可以帮助您将您在规范文档中看到的内容映射到以下方法中找到的参数UsbDeviceConnection
:http ://www.beyondlogic.org/usbnutshell/usb1.shtml
最初可能需要将少量控制命令发送到"端点0"以设置摄像机,然后剩余的传输可能会在批量端点上进行.
在Android术语中,控制请求只能使用同步发送UsbDeviceConnection.controlTransfer()
,这意味着此方法将一直阻塞,直到传输完成.填写此方法的参数可在设备类的规范文档中找到.
批量端点上的请求可以UsbDeviceConnection.bulkTransfer()
使用UsbRequest
实例通过OR异步同步发送.有了UsbRequest
你可以排队转移和再稍后检查(通过UsbDeviceConnection.requestWait()
对结果).
我在Github页面上有一些例子,它们使用主机API进行一些基本的中断和控制传输,以获取设备描述符等信息.也许其中一些对您也有帮助:https://github.com/devunwired/accessory-samples
关于您关于USB示例代码的问题:
在此代码中发出的请求只是所有USB设备必须响应的通用"获取配置描述符"请求(它是核心命令,而不是特定于类的).事实上,它是Android API获取您可以查询接口和端点的信息的请求.字段值来自核心USB规范(此命令具体在3.0规范中的9.4.3和9.6.3中定义):http://www.usb.org/developers/docs/或更有用的描述你可以在Nutshell中找到USB,它有更多的讨论:http://www.beyondlogic.org/usbnutshell/usb5.shtml#ConfigurationDescriptors
长度有些随意,这告诉驱动程序要读取或写入多少字节.大多数USB主机驱动程序将首先查询设备描述符,其中包括一个告诉主机设备支持的最大数据包大小的字段,然后将该大小用作未来请求的长度.一个功能齐全的驱动程序可能会生成此命令,然后首先检查长度字节(描述符的wTotalLength字段)以查看缓冲区是否足够大,如果没有则修改/重新发送.在这个例子中,为了简单起见,我只选择了64,因为这是协议定义为可支持的"最大"最大包大小.
再次,然后请求您的设备必须提供的特定数据,这些命令将在特定的类文档中找到,而不是核心规范.
归档时间: |
|
查看次数: |
5975 次 |
最近记录: |