90 lines
2.3 KiB
Java
90 lines
2.3 KiB
Java
![]() |
package android.serialport;
|
|||
|
|
|||
|
import java.io.File;
|
|||
|
import java.io.FileDescriptor;
|
|||
|
import java.io.FileInputStream;
|
|||
|
import java.io.FileOutputStream;
|
|||
|
import java.io.IOException;
|
|||
|
import java.io.InputStream;
|
|||
|
import java.io.OutputStream;
|
|||
|
|
|||
|
/**
|
|||
|
* 串口通信,打开串口,读写数据
|
|||
|
*/
|
|||
|
public class SerialPort {
|
|||
|
|
|||
|
private FileDescriptor mFd;
|
|||
|
private FileInputStream mFileInputStream;
|
|||
|
private FileOutputStream mFileOutputStream;
|
|||
|
|
|||
|
static {
|
|||
|
System.loadLibrary("serial_port");
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 打开串口
|
|||
|
*
|
|||
|
* @param device
|
|||
|
* @param baudrate
|
|||
|
*/
|
|||
|
public SerialPort(File device, int baudrate) throws IOException {
|
|||
|
if (!device.canRead() || !device.canWrite()) {
|
|||
|
try {
|
|||
|
Process su;
|
|||
|
su = Runtime.getRuntime().exec("su");
|
|||
|
String cmd = "chmod 777 " + device.getAbsolutePath();
|
|||
|
su.getOutputStream().write(cmd.getBytes());
|
|||
|
su.getOutputStream().flush();
|
|||
|
int waitFor = su.waitFor();
|
|||
|
boolean canRead = device.canRead();
|
|||
|
boolean canWrite = device.canWrite();
|
|||
|
if (waitFor != 0 || !canRead || !canWrite) {
|
|||
|
throw new SecurityException();
|
|||
|
}
|
|||
|
} catch (Exception e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
mFd = open(device.getAbsolutePath(), baudrate);
|
|||
|
|
|||
|
if (mFd == null) {
|
|||
|
throw new IOException();
|
|||
|
}
|
|||
|
mFileInputStream = new FileInputStream(mFd);
|
|||
|
mFileOutputStream = new FileOutputStream(mFd);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 关闭串口
|
|||
|
*/
|
|||
|
public void closePort() {
|
|||
|
if (this.mFd != null) {
|
|||
|
try {
|
|||
|
this.close();
|
|||
|
this.mFd = null;
|
|||
|
this.mFileInputStream = null;
|
|||
|
this.mFileOutputStream = null;
|
|||
|
} catch (Exception var2) {
|
|||
|
var2.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public InputStream getInputStream() {
|
|||
|
return mFileInputStream;
|
|||
|
}
|
|||
|
|
|||
|
public OutputStream getOutputStream() {
|
|||
|
return mFileOutputStream;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* JNI,设备地址和波特率
|
|||
|
*/
|
|||
|
private native static FileDescriptor open(String path, int baudrate);
|
|||
|
|
|||
|
private native void close();
|
|||
|
|
|||
|
|
|||
|
}
|