import ch.psi.pshell.serial.SerialPortDevice; import ch.psi.pshell.serial.SerialPortDeviceConfig; import static ch.psi.utils.BitMask.*; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /* * */ /** * */ public class LaserUE extends SerialPortDevice{ public LaserUE(String name, String port) { super(name, port, 921600, SerialPortDeviceConfig.DataBits.DB_8, SerialPortDeviceConfig.StopBits.SB_1, SerialPortDeviceConfig.Parity.None); this.setMode(Mode.FullDuplex); System.out.println("XXX"); new Thread(new Runnable() { @Override public void run() { while(!isClosed()){ try{ if (isInitialized()){ int rx; while ((rx = readByte()) >= 0) { onByte((byte) rx); } } } catch (Exception ex){ System.err.println(ex); } try { Thread.sleep(10); } catch (InterruptedException ex) { Logger.getLogger(LaserUE.class.getName()).log(Level.SEVERE, null, ex); } } } }).start(); } int value = 0; int count = 0; @Override protected int readByte() throws IOException { int ret = super.readByte(); System.out.print(ret); return ret; } @Override protected void onByte(int rx) { //System.out.print(rx); if (rx < 0) { count = 0; } else { int index = ((rx&BIT7) > 0) ? 2 : (((rx&BIT6) > 0) ? 1 : 0); if (count==index){ if (index ==0){ value = rx & 0x3F; } else if (index ==1){ value = ((rx& 0x3F)<<6) + value; } else if (index ==2){ value = ((rx& 0x0F)<<12) + value; this.setCache(value); count = 0; } else { count = 0; } } else{ count = 0; } } } }