1 package com.neuronrobotics.sdk.addons.kinematics.gcodebridge;
3 import java.io.DataInputStream;
4 import java.io.DataOutputStream;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.io.OutputStream;
9 import java.io.StringReader;
10 import java.io.StringWriter;
11 import java.util.ArrayList;
12 import java.util.HashMap;
14 import com.neuronrobotics.sdk.addons.kinematics.AbstractLink;
15 import com.neuronrobotics.sdk.addons.kinematics.LinkConfiguration;
16 import com.neuronrobotics.sdk.addons.kinematics.LinkType;
17 import com.neuronrobotics.sdk.common.DeviceManager;
18 import com.neuronrobotics.sdk.common.IFlushable;
19 import com.neuronrobotics.sdk.common.Log;
20 import com.neuronrobotics.sdk.common.NonBowlerDevice;
21 import com.neuronrobotics.sdk.util.ThreadUtil;
23 import gnu.io.NRSerialPort;
35 private DataInputStream
ins=
null;
36 private DataOutputStream
outs=
null;
39 private HashMap<LinkConfiguration,IGCodeChannel>
links =
new HashMap<LinkConfiguration,IGCodeChannel>();
62 throw new RuntimeException(
"Gcode devices only support 2 heaters");
67 if(
links.get(axis)!=
null)
69 String gcodeAxis =
"";
98 throw new RuntimeException(
"Gcode devices only support 4 axis");
135 }
catch (IOException e) {
141 }
catch (IOException e) {
149 }
catch (IOException e) {
163 throw new RuntimeException(
"Failed to connect to the serial device");
165 ins=
new DataInputStream(
serial.getInputStream());
166 outs =
new DataOutputStream(
serial.getOutputStream());
174 return new ArrayList<String>();
176 @SuppressWarnings(
"resource")
181 if(
ins.available()>0){
182 java.util.Scanner s =
new java.util.Scanner(
ins).useDelimiter(
"\\A");
183 ret =s.hasNext() ? s.next() :
"";
185 }
catch (IOException e) {
195 if(!line.endsWith(
"\r\n"))
199 outs.write(line.getBytes());
202 }
catch (IOException e) {
206 long start = System.currentTimeMillis();
208 while(ret.contentEquals(
"") &&
251 if(distance !=0 && seconds>0){
252 int feedrate = (int)Math.abs((distance/(seconds/60)));
264 String[] currentPosStr = m114.split(
"Count")[0].split(
" ");
266 for(String s:currentPosStr){
269 if(s.contains(thisLink.
getAxis())){
270 String [] parts = s.split(
":");
272 thisLink.
setValue(Double.parseDouble(parts[1]));
abstract double getCurrentPosition()
void setDeviceTheoreticalMin(double deviceTheoreticalMin)
void setDeviceTheoreticalMax(double deviceTheoreticalMax)
ArrayList< String > getNamespacesImp()
void disconnectDeviceImp()
GCodeDeviceConfiguration getConfiguration()
GcodeDevice(NRSerialPort serial)
void setTimeoutMs(int timeoutMs)
boolean connectDeviceImp()
AbstractLink getHeater(LinkConfiguration axis)
HashMap< LinkConfiguration, IGCodeChannel > links
void flush(double seconds)
GCodeDeviceConfiguration config
String runLine(String line)
AbstractLink getLink(LinkConfiguration axis)
static void info(String message)
static void error(String message)
static void wait(int time)
void setValue(double value)