EBADF使用JNI在Android中读/写串口

时间:2014-09-09 15:18:23

标签: java android android-ndk serial-port java-native-interface

我在Android下访问串口时遇到问题。

为此,我使用JNI编写了一个串行库,具有打开,读写串口的简单功能。

private static class ReturnC{
    public int retcode;
    @SuppressWarnings("unused")
    public int errno;
    public String descripcionError;
}


private native ReturnC open_port(String portPath);
private native ReturnC set_speed(int fd, int speed);
...
private native ReturnC read_bytes_in_received_buffer(int fd, int cantidadMaximaALeer, byte[] buffer);
private native ReturnC send_buffer(int fs, byte[] buffer);
private native void close_port(int fd);

我在open_port调用中获取了开放端口的文件描述符,并使用它在读/写操作中引用该端口。

这很好用......有一段时间了。垃圾回收后,对fd的任何访问都会返回EBADF。果然,它已经不再有效了。如果我立即重新打开它,我可以继续使用该端口(在另一个或相同的fd编号下)。

所以,我猜它因为垃圾收集中发生的事情而被关闭了。我不是Java专家,尤其不是JNI专家,来自C背景。在我的世界中,文件描述符在显式关闭之前有效,或者进程退出,并且我很难在这里跟踪导致无效fd的条件。

我正在仔细阅读盛亮的JNI指南和规范,这有点过于庞大。有人可以帮忙吗?

0 个答案:

没有答案