을 확장하고 JSSC SerialPortEventListener
인터페이스를 구현하는 사용자 정의 클래스를 제공 할 수 있습니다. 이 클래스는 직렬 포트에서 데이터를 받아 버퍼에 저장합니다. 또한 버퍼에서 데이터를 가져 오는 read()
메서드를 제공합니다.
:
private class PortOutputStream extends OutputStream {
SerialPort serialPort = null;
public PortOutputStream(SerialPort port) {
serialPort = port;
}
@Override
public void write(int data) throws IOException,SerialPortException {
if (serialPort != null && serialPort.isOpened()) {
serialPort.writeByte((byte)(data & 0xFF));
} else {
Log.e(TAG, "cannot write to serial port.");
throw new IOException("serial port is closed.");
}
// you may also override write(byte[], int, int)
}
당신이 당신의 Xmodem
개체를 인스턴스화하기 전에 스트림을 모두 만들 수 있습니다
private class PortInputStream extends InputStream implements SerialPortEventListener {
CircularBuffer buffer = new CircularBuffer(); //backed by a byte[]
@Override
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR() && event.getEventValue() > 0) {
// exception handling omitted
buffer.write(serialPort.readBytes(event.getEventValue()));
}
}
@Override
public int read() throws IOException {
int data = -1;
try {
data = buffer.read();
} catch (InterruptedException e) {
Log.e(TAG, "interrupted while waiting for serial data.");
}
return data;
}
@Override
public int available() throws IOException {
return buffer.getLength();
}
마찬가지로 OutputStream
을 확장하고 직렬 인터페이스를 쓰는 사용자 정의 PortOutputStream
클래스를 제공 할 수 있습니다
// omitted serialPort initialization
InputStream pin = new PortInputStream();
serialPort.addEventListener(pin, SerialPort.MASK_RXCHAR);
OutPutStream pon = new PortOutputStream(serialPort);
Xmodem xmodem = new Xmodem(pin,pon);