/*
* Mocks what GRBL would do when connected to a GrblCommunicator.
*/
/*
Copywrite 2013 Will Winder
This file is part of Universal Gcode Sender (UGS).
UGS is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
UGS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with UGS. If not, see <http://www.gnu.org/licenses/>.
*/
package com.willwinder.universalgcodesender.mockobjects;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author wwinder
*/
public class MockGrbl {
public PipedInputStream in;
public ByteArrayOutputStream out;
public PipedOutputStream local_out;
public MockGrbl() {
// This isn't joined to a stream becaues I can manipulate it.
this.out = new ByteArrayOutputStream();
// These two guys are joined so that the Serial object doesn't notice.
this.local_out = new PipedOutputStream();
try {
this.in = new PipedInputStream(this.local_out);
} catch (IOException ex) {
Logger.getLogger(MockGrbl.class.getName()).log(Level.SEVERE, null, ex);
}
}
public String readStringFromGrblBuffer() {
String str;
try {
str = this.out.toString(Charset.defaultCharset().name());
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(MockGrbl.class.getName()).log(Level.SEVERE, null, ex);
str = "Exception in mock class";
}
this.out.reset();
return str;
}
public byte readByteFromGrblBuffer() {
byte b = 0x0;
byte arr[];
// Null stream.
if (this.out.size() == 0){
return b;
}
// Grab the first byte
arr = this.out.toByteArray();
b = arr[0];
this.out.reset();
// If there were multiple bytes, copy the rest back into the ostream.
//if (arr.length > 1) {
this.out.write(arr, 1, arr.length - 1);
//}
return b;
}
public void addOkFromGrbl() throws IOException {
this.local_out.write("ok\r\n".getBytes(Charset.defaultCharset().name()));
}
}