- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在扩展 BaseIOIOLooper 以打开 UART 设备并发送消息。我正在使用回读进行测试,其中我通过一条线路发送一个数据包,并在另一条线路上接收该数据包并将其打印出来。因为我不希望 InputStream.read() 方法阻塞,所以我在不同的线程中处理数据包形成和输入。我已将问题范围缩小到 InputStream.read() 方法,该方法返回 -1 (没有读取字节,但也不异常(exception))。这是 Looper 线程中的样子:
@Override
protected void setup() throws ConnectionLostException, InterruptedException {
log_.write_log_line(log_header_ + "Beginning IOIO setup.");
// Initialize IOIO UART pins
// Input at pin 1, output at pin 2
try {
inQueue_ = MinMaxPriorityQueue.orderedBy(new ComparePackets())
.maximumSize(QUEUESIZE).create();
outQueue_ = MinMaxPriorityQueue.orderedBy(new ComparePackets())
.maximumSize(QUEUESIZE).create();
ioio_.waitForConnect();
uart_ = ioio_.openUart(1, 2, 38400, Uart.Parity.NONE, Uart.StopBits.ONE);
// Start InputHandler. Takes packets from ELKA on inQueue_
in_= new InputHandler(inQueue_, uart_.getInputStream());
in_.start();
// Start OutputHandler. Takes packets from subprocesses on outQueue_
out_= new OutputHandler(outQueue_);
out_.start();
// Get output stream
os_=uart_.getOutputStream();
// Set default target state
setTargetState(State.TRANSFERRING);
currInPacket_[0]=1; //Initial value to start transferring
log_.write_log_line(log_header_ + "IOIO setup complete.\n\t" +
"Input pin set to 1\n\tOutput pin set to 2\n\tBaud rate set to 38400\n\t" +
"Parity set to even\n\tStop bits set to 1");
} catch (IncompatibilityException e) {
log_.write_log_line(log_header_+e.toString());
} catch (ConnectionLostException e) {
log_.write_log_line(log_header_+e.toString());
} catch (Exception e) {
log_.write_log_line(log_header_+"mystery exception: "+e.toString());
}
}
并且在InputHandler线程中:
@Override
public void run() {
boolean notRead;
byte i;
log_.write_log_line(log_header_+"Beginning InputHandler thread");
while (!stop) {
i = 0;
notRead = true;
nextInPacket = new byte[BUFFERSIZE];
readBytes = -1;
//StringBuilder s=new StringBuilder();
//TODO re-implement this with signals
while (i < READATTEMPTS && notRead) {
try {
// Make sure to adjust packet size. Done manually here for speed.
readBytes = is_.read(nextInPacket, 0, BUFFERSIZE);
/* Debugging
for (int j=0;j<nextInPacket.length;j++)
s.append(Byte.toString(nextInPacket[j]));
log_.write_log_line(log_header_+s.toString());
*/
if (readBytes != -1) {
notRead = false;
nextInPacket= new byte[]{1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0};
synchronized (q_) {
q_.add(nextInPacket);
}
//log_.write_log_line(log_header_ + "Incoming packet contains valid data.");
} else i++;
} catch (IOException e) {
log_.write_log_line(log_header_ + "mystery exception:\n\t" + e.toString());
}
}
if (i>=READATTEMPTS)
log_.write_log_line(log_header_+"Too many read attempts from input stream.");
/*
try {
sleep(100);
} catch (InterruptedException e) {
log_.write_log_line(log_header_+"fuck");
}
*/
}
}
在示波器上,引脚 1 和 2 都读取振荡电压,尽管幅度非常高,这是值得关注的。要点是无法从 InputHandler 类中的 InputStream 中读取任何内容。有什么想法吗?
最佳答案
从 read()
返回的
-1 仅应在 UART 关闭时发生。在 Uart
对象上显式调用 close()
或在 IOIO
对象上调用 softReset()
可能会导致关闭。
Android 日志可能会为您提供一些有关正在发生的情况的线索。
您在示波器上看到的读数很可疑:“非常高的幅度”有多高?您应该只能在这些引脚上看到 0V 或 3.3V,或者在引脚由于某种原因未打开(或关闭)的情况下处于 float 状态。
关于java - IOIO UART 读回问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34325957/
我正在扩展 BaseIOIOLooper 以打开 UART 设备并发送消息。我正在使用回读进行测试,其中我通过一条线路发送一个数据包,并在另一条线路上接收该数据包并将其打印出来。因为我不希望 Inpu
Closed. This question is off-topic。它当前不接受答案。
我和许多其他人一样,在从 Eclipse 构建时遇到了 IOIO OTG 与 PC 连接的问题。 我们使用的是 ADT 版本的 eclipse,所有库都已正确导入。当运行 HelloIOIOConso
我有一个 fragment Activity 和一个 fragment 类;我正在尝试设置,以便当用户点击我的 fragment 类中的 Switch 时,oncheckchangedlistener
规则文件名为 50-ioio.rules,文本为: ACTION=="add", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", SYMLINK+="IOIO%n", MOD
我正在尝试制作一个简单的应用程序,它在 Android 设备(Alcatel One Touch 4030D,Android 4.1.1)上运行并从 IOIO Mint 的模拟输入引脚读取数据。通过蓝
我是一名优秀的程序员,十分优秀!