当前位置:编程学习 > wap >>

android host通讯问题 bulkTransfer返回-1

package com.example.usbdemo;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.content.Context;
import android.hardware.usb.UsbConstants;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbEndpoint;
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
static final String TAG = "MainActivity";
Context mContext = MainActivity.this;
UsbManager manager;
//byte[] bytes = new byte[8];
private static int TIMEOUT = 2000;
private boolean forceClaim = true;
UsbEndpoint endpoint;
byte[] buffer= new byte[65];  //65字节
int[]  intBuffer = new int[65];

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

manager = (UsbManager) getSystemService(Context.USB_SERVICE);
Button startBtn = (Button) findViewById(R.id.scanBtn);
intBuffer[0] = 0x00;
intBuffer[1] = 0x37;
for (int i = 2; i < 65; i++) {
intBuffer[i] = 00;
}
for (int i = 0; i < 65; i++) {
buffer[i] = (byte) (intBuffer[i]&0xFF);
}
startBtn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i(TAG, "on click");

Timer timer = new Timer();
timer.schedule(task, 0, 10000);
}
});
}

TimerTask task = new TimerTask() {

@Override
public void run() {
// TODO Auto-generated method stub
Log.i(TAG, "in run");
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
deviceList.remove("/dev/bus/usb/002/002");
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
Log.i(TAG, "deviceList lenght-->" + deviceList.size() + "\n"
+ "deviceList-->" + deviceList + "\n" + "keySet-->"
+ deviceList.keySet());
UsbDevice device = null;
int vendorId = 0;
int productId = 0;
String deviceName = null;
while (deviceIterator.hasNext()) {
device = deviceIterator.next();
vendorId = device.getVendorId();
productId = device.getProductId();
deviceName = device.getDeviceName();
Log.i(TAG, "vendorId-->" + vendorId + "\n" + "productId-->"
+ productId + "\n" + "deviceName-->" + deviceName);

}
int count = device.getInterfaceCount();
Log.i(TAG, "interfacecount-->" + count);
UsbInterface intf = device.getInterface(0);
Log.i(TAG, "endpointcount-->" + intf.getEndpointCount());
final UsbDeviceConnection connection = manager.openDevice(device);
boolean a = connection.claimInterface(intf, forceClaim);
Log.i(TAG,
"a-->" + a + "\n" + "permission-->"
+ manager.hasPermission(device) + "\n"
+ "serial-->" + connection.getSerial() + "\n"
+ "endpoint0-->" + intf.getEndpoint(0) + "\n"
+ "endpoint1-->" + intf.getEndpoint(1));
for (int i = 0; i < intf.getEndpointCount(); i++) {
UsbEndpoint ep = intf.getEndpoint(i);
Log.i(TAG, "direction-->" + ep.getDirection() + "\n"
+ "class-->" + intf.getInterfaceClass());

if (UsbConstants.USB_CLASS_HID == intf.getInterfaceClass()
&& ep.getDirection() == UsbConstants.USB_DIR_OUT) {
endpoint = ep;
Log.i(TAG, "endpoint in if-->" + ep);
}
}
new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
Log.i(TAG, "in run thread");
int b = connection.bulkTransfer(endpoint, buffer,
buffer.length, 10000);
Log.i(TAG, "b-->" + b);

}
}).start();

}
};

}
通过打印Log,发现vendorId 、productId等等都可以获取,但是b总是返回-1.请问大神我哪儿出错了? --------------------编程问答-------------------- 同样的问题?项下,楼主这个问题处理的怎么样了,我在4.0.4系统上可以正常返回数据长度,但在4.1.1系统上就返回-1!! --------------------编程问答-------------------- 我的还是没有进展,有进展再讨论下。。 --------------------编程问答-------------------- 楼主解决问题了吗?
我也碰到了这个问题,设备信息读取正常,但是bulktransfer总是返回-1 --------------------编程问答-------------------- 这个要熟悉自己的HID外设,通讯协议要弄清楚。
我当时一直返回-1是由于我的android设备没有HID外设的驱动(猜测),后来换了个pad(三星的手机试了下)就成功了。 --------------------编程问答-------------------- 我做过类似的开发,我的读写都能成功,我的设备是一个自己开发的usb摄像头设备,返回小数据量的bulkTransfer 操作是成功的,但是我去读一幅图像的时候,好像只能返回10K多的数据,问如何操作这类设备的读大数据的问题呢! --------------------编程问答--------------------
引用 5 楼 lgyjwps 的回复:
我做过类似的开发,我的读写都能成功,我的设备是一个自己开发的usb摄像头设备,返回小数据量的bulkTransfer 操作是成功的,但是我去读一幅图像的时候,好像只能返回10K多的数据,问如何操作这类设备的读大数据的问题呢!


我也遇到同样的问题,每次只读取了16384字节数据(16kb),摄像头一副图像有900K左右,怎么办呢?

网上博客上有人也遇到了这个问题,貌似系统代码里做了限制
http://han21912.lofter.com/post/c3919_2db138 --------------------编程问答-------------------- 今天遇到同样的问题,楼主现在对这个问题有什么看法没? --------------------编程问答-------------------- 我遇到这一个问题,外设第一次插上的时候,使用bulktransfer发送指令正常,第二次调用的时候却会返回-1,以后一直返回-1 --------------------编程问答-------------------- 跪求指导。同样的问题。 --------------------编程问答-------------------- --------------------编程问答-------------------- 我碰到了这个问题    原因是我的endpoint错了   
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,