我正在使用android主机API构建一个android通信设置。一切都很顺利。Arduino读取一条消息并更改一些LED并将接收到的字节发回。问题是从arduino中读出回声。每一秒的答案是0。大容量传输调用终止成功,但只接收到零。下一次读取返回上一次读取中预期的字符。例如:
发送接收
a ab 0a bx 0我不能对那里发生的事情指手画脚。也许有人能看到一个错误?另一个问题是关于在不同的ubs/串行转换器的不同线程上使用的控制传输(如下)。有人能告诉我在哪里获得这些代码的详细信息以及在数据表中找到它们的位置吗?
我的设置:
usb_connection.controlTransfer(0x21, 34, 0, 0, null, 0, 0);
usb_connection.controlTransfer(0x21, 32, 0, 0, new byte[] { (byte) 0x80,
0x25, 0x00, 0x00, 0x00, 0x00, 0x08 }, 7, 0);
usb_connection.controlTransfer(0x40, 0x03, 0x4138, 0, null, 0, 0);
for (;;) {
(...) synchronized (sSendLock) {
SendLock.wait(); // Thread waits, until notified
(...)
byte_buffer = new byte[1];// initialize buffer
byte_buffer[0]=(byte) data; //get data to send
usb_connection.bulkTransfer(endpOUT,byte_buffer,byte_buffer.length, 200); //send
usb_connection.bulkTransfer(endpIN,byte_buffer,byte_buffer.lenght,200);//receive
usb_connection_handler.sendMessage(Message.obtain(usb_connection_handler, 0));//notify UI Thread
}有什么想法吗?谢谢:-)
编辑:我修改了代码,只读了一点。它读取5位之前,以测试更多的接收。这并没有改变这种行为。send函数如下所示:
public void send_char(char b) {
data =(byte) b;
synchronized (sSendLock) {
sSendLock.notify();
}我希望所显示的代码摘录足够了。如果有任何问题,我很乐意提供更多的信息:-)我真的不知道如何解释这种行为。
编辑三:只是为了从评论中收集信息:
如果传输失败,则大容量传输函数返回-1,如果成功,则返回传输的位数。在这种情况下,我“接收”了一个零,函数接收了“零”位,并且没有覆盖缓冲区。从缓冲区中得到的零仍然是传输之前包含的缓冲区的初始零。
我最关心的问题之一就是控制权的转移。我为不同的芯片组找到了几个“版本”,但我不知道它们是从哪里来的。我无法在任何数据表中找到有关这些控制传输的任何要求或流程图。
问候
发布于 2016-04-13 13:20:10
@greenapps发现了这个错误。由于它是一种异步数据传输,并且不知道Arduino设备的时间,所以有必要重复大容量传输,直到接收到一些东西。我使用了一个for循环和一些迭代。一旦批量传输的返回值与原来的返回值不同,我就跳出循环并继续。
谢谢你的帮助
https://stackoverflow.com/questions/36578085
复制相似问题