情况:定制设备,灯光板串口通信
参考:Android开发之串口通信:AndroidSerialPort - 简书
依赖:
implementation 'com.aill:AndroidSerialPort:1.0.8'
使用:
public class SerialManager {
//串口命令示例
private final String CMD_LIGHT_OPEN = "6a610111";
private final String CMD_LIGHT_CLOSE = "6a610110";
private SerialPort serialPort;
private InputStream inputStream;
private OutputStream outputStream;
private boolean isOpened = false;
private static SerialManager INSTANCE = null;
public static SerialManager getInstance() {
if (INSTANCE == null) {
synchronized (SerialManager.class) {
if (INSTANCE == null) {
INSTANCE = new SerialManager();
}
}
}
return INSTANCE;
}
/**
* 打开串口
*/
private void openSerial() {
init();
}
/**
* 关闭串口
*/
public void closeSerial() {
close();
}
/**
* 打开补光灯
*/
public void openLight() {
openSerial();
send(CMD_LIGHT_OPEN);
isOpened = true;
}
/**
* 关闭补光灯
*/
public void closeLight() {
openSerial();
send(CMD_LIGHT_CLOSE);
isOpened = false;
}
private void init() {
if (serialPort != null) {
return;
}
try {
//串口文件(根据设备)、波特率
serialPort = new SerialPort(new File("/dev/ttyS4"), 9600, 0);
inputStream = serialPort.getInputStream();
outputStream = serialPort.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
private void send(String s) {
try {
byte[] data = ByteUtil.hexStringToByteArray(s);
outputStream.write(data);
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
private void close() {
if (isOpened) {
closeLight();
}
try {
if (inputStream != null) {
outputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}