SerialEcho.java
import java.io.*;
import java.util.*;
import javax.comm.*;
public class SerialEcho implementsRunnable,SerialPortEventListener{
static CommPortIdentifier portId;
static Enumeration portList;
BufferedReader br;
BufferedWriter bw;
String echoMsg;
SerialPort serialPort;
Thread readThread;
public static void main(String[] args) {
//시스템의 모든 포트 리스트를 가져옴.
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
//현재 포트타입이 시리얼 포트일 경우
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL){
// MS-windows에서 시리얼 포트 이름은“COM1”,”COM2”…
if (portId.getName().equals("COM1")) {
// if (portId.getName().equals("/dev/term/a")) {àSolaris에서
//시리얼 통신을 위한 포트 생성
SerialEcho reader = new SerialEcho();
}
}
}
}
public SerialEcho() {
try{
serialPort = (SerialPort) portId.open("SerialEcho", 2000);
} catch (PortInUseException e) {}
try {
br = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(serialPort.getOutputStream()));
} catch (IOException e) {}
try {
//시리얼 포트에 데이터가 수신되기를 기다림.
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {}
// input data가 들어오면 수신 통보
serialPort.notifyOnDataAvailable(true);
try{
serialPort.setSerialPortParams(19200, // Baud Rate
SerialPort.DATABITS_8, // Data Bits
SerialPort.STOPBITS_1, // Stop Bits
SerialPort.PARITY_NONE); // Parity
} catch (UnsupportedCommOperationException e) {}
readThread = new Thread(this);
readThread.start();
}
public void run() {
try {
Thread.sleep(20000);
} catch (InterruptedException e) {}
}
public void serialEvent(SerialPortEvent event){
switch(event.getEventType()){
case SerialPortEvent.BI: // Break interrupt
case SerialPortEvent.OE: // Overrun error
case SerialPortEvent.FE: // Framing error
case SerialPortEvent.PE: // Parity error.
case SerialPortEvent.CD: // Carrier detect
case SerialPortEvent.CTS: // Clear to send
case SerialPortEvent.DSR: // Data set ready
case SerialPortEvent.RI: // Ring indicator.
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break; // Output buffer is empty
// Data available at the serial port.
case SerialPortEvent.DATA_AVAILABLE:
byte[] readBuffer = new byte[20];
try{
while(true){
echoMsg = br.readLine();
System.out.println("Echo: " + echoMsg);
bw.write(echoMsg,0,echoMsg.length());
bw.newLine();
bw.flush();
}
}catch (IOException e) {}
break;
}
}
'Programming > JAVA' 카테고리의 다른 글
[EKOO의 JAVA를 이용한 자료구조:7회] Tree (1) (0) | 2006.03.23 |
---|---|
자바로 시리얼 통신 프로그램 (0) | 2006.03.06 |
자바 시리얼 통신 설명 자료[펌] (0) | 2006.03.06 |
자바코드를 울트라에디트상에서 컴파일/실행하기 (0) | 2006.03.04 |
500001 자바강좌 리스트 (0) | 2006.02.24 |