目标
目标是在Android平台上,利用原生SerialPort,开发一个串口demo,对串口进行测试(自发自收,rx接tx,能收发证明没问题)
1.权限
因为使用了原生的SerialPort,所以要声明一些权限
AndroidManifest.xml里需要声明此权限:
因为这个权限是系统级的,所以还要在AndroidManifest.xml添加
android:sharedUserId="android.uid.system"
另外应用还需要进行系统级别的签名:
签名下载地址
2.新建SerialManager.java和SerialPort.java
SerialManager和SerialPort 虽然原生系统有,但是是hide状态,应用层不能调用,既然这样那我们应用层自己新建这2个类吧,代码和framework层基本一致,(事实上运行时会走系统的SerialManager和SerialPort ,因为包名和类名一致)会调用JNI的C代码。
// SerialManager
package android.hardware;
import java.io.IOException;
public class SerialManager
{
public String[] getSerialPorts()
{
return null;
}
public SerialPort openSerialPort(String name, int speed) throws IOException
{
return null;
}
}
// SerialPort
package android.hardware;
import java.io.FileDescriptor;
import java.io.IOException;
import java.nio.ByteBuffer;
import android.os.ParcelFileDescriptor;
/**
* @hide
*/
public class SerialPort
{
private static final String TAG = "SerialPort";
// used by the JNI code
private int mNativeContext;
private final String mName;
private ParcelFileDescriptor mFileDescriptor;
/**
* SerialPort should only be instantiated by SerialManager
*
* @hide
*/
public SerialPort(String name)
{
mName = name;
}
/**
* SerialPort should only be instantiated by SerialManager Speed must be one
* of 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600,
* 19200, 38400, 57600, 115200, 230400, 460800, 500000, 576000, 921600,
* 1000000, 1152000, 1500000, 2000000, 2500000, 3000000, 3500000, 4000000
*
* @hide
*/
public