我正在尝试在使用MCP2200的自定义设备与android设备之间建立USB通信。 对于我的应用程序需求,我必须使用异步通信。 自定义设备应该向Android平板电脑发送一个字节,而后者需要以5个字节进行响应。我将通信放在单独的线程中。这是run()函数:
public void run() {
while (usb_connected && communicating_usb) {
//reception request
readbuffer.clear();
readbuffer.rewind();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
req.initialize(connection, endpointin);
req.queue(readbuffer, 1);
connection.requestWait();
toto=readbuffer.get(0);
inbuffer="__"+Byte.toString(toto);
req.close();
if(toto==toe){//the correct value was received
received=1;//correct reception flag
tmpbuffer.clear();
tmpbuffer.rewind();
writebuffer.clear();
writebuffer.rewind();
int mocx;
int mocy;
if (perty.isOfset()) {
if (move_y > 128) mocx = move_x + 6;
else if (move_y < 127) mocx = move_x - 3;
else mocx = move_x;
} else {
mocx = move_x;
}
mocy = move_y;
if (mocx > 255) mocx = 255;
if (mocx < 0) mocx = 0;
int x1 = mocx % 16;
int x2 = (mocx - x1) / 16;
int y1 = mocy % 16;
int y2 = (mocy - y1) / 16;
int to_send=0;
if (perty.getSpeed_level() == 1) to_send= sendcount + 0x80;
else if (perty.getSpeed_level() == 2)
to_send = sendcount + 0x90;
else if (perty.getSpeed_level() == 3)
to_send = sendcount + 0xA0;
else if (perty.getSpeed_level() == 4)
to_send = sendcount + 0xB0;
tmpbuffer.putInt(to_send);
to_send = x1 + 0xC0;
tmpbuffer.putInt(to_send);
to_send = x2 + 0xD0;
tmpbuffer.putInt(to_send);
to_send = y1 + 0xE0;
tmpbuffer.putInt(to_send);
to_send = y2 + 0xF0;
tmpbuffer.putInt(to_send);
sendcount++;
if (sendcount == 16) sendcount = 0;
while(writebuffer.capacity()-writebuffer.remaining()!=0){
writebuffer.rewind();
writebuffer.clear();
}
for(int rectifier=0;rectifier<5;rectifier++){writebuffer.put(rectifier,tmpbuffer.get(3+rectifier*Integer.SIZE/Byte.SIZE));
}
reqout.initialize(connection, endpointout);
reqout.queue(writebuffer,5);
connection.requestWait();
reqout.close();
toto=0x00;
}
}
}
此过程在Samsung Galaxy Tab(Android 5.1.1)上可以很好地工作,但在其他平板电脑上却表现得很奇怪: -Sony Xperia Z2平板电脑(Android 6.0.1):读取的值始终为0。无论我从自定义设备发送什么。我也通过允许0作为正确值来解决了这个问题(不是真正的解决方案,但它使它运行了)。对于发送(从平板电脑到自定义设备),我总是收到带有正确值的奇怪值,直到我在循环中(通过睡眠功能)添加了10 ms的延迟。它像魅力一样运作。 -Sonny Xperia Z Ultra(Android 5.1.1):与Z2平板电脑相同的问题,但延迟功能似乎无法解决问题,我在随机接收时只能得到255。 -OnePlus 3(Android 8.0.0):即使启用了OTG存储,该应用程序甚至无法检测到OTG电缆。几周前,它确实做到了,但现在似乎无法检测到它。
请帮助!头痛已经超过了两个星期,而且我似乎还没有任何确切的理由说明这些东西不起作用。 谢谢。