2017-02-20 13 views
0

직렬 포트를 통해 장치와 통신하는 데 jssc 라이브러리를 사용하고 있습니다. 표준 java SerialComm 라이브러리에는 getInputStream() 및 getOutputStream()의 두 가지 메소드가 있습니다.jssc getInputStream() getOutputstream()

왜 내가 이것을 필요로합니까? 나는 this 예에 따라 X 모뎀 구현하려는 및 XMODEM 생성자는 두 가지를 필요로 해, params : JSSC에서

public Xmodem(InputStream inputStream, OutputStream outputStream) 
{ 
    this.inputStream = inputStream; 
    this.outputStream = outputStream; 
} 


Xmodem xmodem = new Xmodem(serialPort.getInputStream(),serialPort.getOutputStream()); 

몇 가지 다른 방법이있다 그런 방법은 없습니다하지만 내가 궁금하네요?

답변

0

을 확장하고 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);