public class SerialConnector { private Context mContext; private ISerialListener mListener; // 인터페이스 처리 private Handler mHandler; private SerialMonitorThread mSerialThread;
public SerialConnector(Context context, ISerialListener listener, Handler handler) { mContext = context; mListener = listener; mHandler = handler; }
public void initialize() { List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(sUsbManager); if (availableDrivers.isEmpty()) { mListener.onReceive(Constants.MSG_SERIAL_ERROR, 0, 0, "Error: There is no available device. \n", null); return; }
sDriver = availableDrivers.get(0); if(sDriver == null) { mListener.onReceive(Constants.MSG_SERIAL_ERROR, 0, 0, "Error: Driver is Null \n", null); return; }
try { sPort.open(mConnection); if(BaudRate.isEmpty()){ // 통신 속도 설정값 가져와서 세팅 sPort.setParameters(9600, 8, 1, 0); // baudrate:9600, dataBits:8, stopBits:1, parity:N } else { sPort.setParameters(Integer.parseInt(BaudRate), Integer.parseInt(DataBit), Integer.parseInt(StopBit), Integer.parseInt(Parity)); } } catch (IOException e) { mListener.onReceive(Constants.MSG_SERIAL_ERROR, 0, 0, "Error: Cannot open port \n" + e.toString() + "\n", null); } finally { }
startThread(); }
public void finalize() { try { sDriver = null; stopThread();
sPort.close(); sPort = null; } catch(Exception ex) { mListener.onReceive(Constants.MSG_SERIAL_ERROR, 0, 0, "Error: Cannot finalize serial connector \n" + ex.toString() + "\n", null); } }
/***************************************************** * private methods ******************************************************/ // start thread private void startThread() { mListener.onReceive(Constants.MSG_SERIAL_ERROR, 0, 0, "Start serial monitoring thread \n", null); if(mSerialThread == null) { mSerialThread = new SerialMonitorThread(); mSerialThread.start(); } } // stop thread private void stopThread() { if(mSerialThread != null && mSerialThread.isAlive()) mSerialThread.interrupt(); if(mSerialThread != null) { mSerialThread = null; } }
/***************************************************** * Sub classes, Handler, Listener ******************************************************/ public class SerialMonitorThread extends Thread { @Override public void run() { byte readBuffer[] = new byte[4096];
while(!Thread.interrupted()) { if(sPort != null) { Arrays.fill(readBuffer, (byte)0x00);
try { // Read and Display to Terminal int numBytesRead = sPort.read(readBuffer, 1000); if(numBytesRead > 0) {
// Print message length Message msg = mHandler.obtainMessage(Constants.MSG_READ_DATA_COUNT, numBytesRead, 0, new String(readBuffer)); mHandler.sendMessage(msg);
} // End of if(numBytesRead > 0) } catch (IOException e) { Message msg = mHandler.obtainMessage(Constants.MSG_SERIAL_ERROR, 0, 0, "Error # run: " + e.toString() + "\n"); mHandler.sendMessage(msg); } }
try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); break; }
} // End of while() loop finalizeThread(); } // End of run() } // End of SerialMonitorThread
}
|