package RS232C; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import purejavacomm.CommPortIdentifier; import purejavacomm.SerialPort; import purejavacomm.SerialPortEvent; import purejavacomm.SerialPortEventListener; /** * RS232C シリアル送受信プログラム */ public class RS232CSndRcv { /** アプリケーション名 */ private static final String APP_NAME = "RS232CSndRcv"; /** ポートオープン時のタイムアウト(ミリ秒) */ private static final int OPEN_TIMEOUT = 2000; /** ポート名 */ private static final String PORT_NAME = "/dev/ttySC2"; /** 受信バッファサイズ */ private static final int BUFFER_SIZE = 1024; /** * RS232C シリアル送受信メインプログラム * * @param args */ public static void main(String[] args) { // CommPort識別子 CommPortIdentifier comID = null; try { // CommPort識別子を取得 comID = CommPortIdentifier.getPortIdentifier(PORT_NAME); // SerialPortオブジェクトを取得 SerialPort port = (SerialPort) comID.open(APP_NAME, OPEN_TIMEOUT); // ボー・レート、データビット、ストップビット、パリティを設定 port.setSerialPortParams(115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); // フロー制御無しに設定 port.setFlowControlMode(SerialPort.FLOWCONTROL_NONE); port.setInputBufferSize(BUFFER_SIZE); port.setOutputBufferSize(BUFFER_SIZE); final InputStream ins = port.getInputStream(); final OutputStream outs = port.getOutputStream(); final byte[] buffer = new byte[BUFFER_SIZE]; port.addEventListener(new SerialPortEventListener() { public void serialEvent(SerialPortEvent event) { // データ受信割り込み(イベント)か否かを判定します if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) { try { String rcvData = ""; // データを受信 while (ins.available() > 0) { int len = ins.available(); if (len > BUFFER_SIZE) { len = BUFFER_SIZE; } int n = ins.read(buffer, 0, len); rcvData = rcvData.concat(new String(buffer, 0, n)); } if (!rcvData.isEmpty()) { System.out.println("receive: " + rcvData); // 受信データをエコーバック System.out.println("sending: " + rcvData); outs.write(rcvData.getBytes()); } } catch (IOException e) { e.printStackTrace(); } } } }); // データ受信割り込み(イベント)を有効にします port.notifyOnDataAvailable(true); while (true) { try { Thread.sleep(100); } catch (InterruptedException ex) { ex.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } } }