/**
* POJO Object representation of a controller JSON file.
*/
/*
Copywrite 2016 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.utils;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.willwinder.universalgcodesender.AbstractController;
import com.willwinder.universalgcodesender.GrblController;
import com.willwinder.universalgcodesender.LoopBackCommunicator;
import com.willwinder.universalgcodesender.SmoothieController;
import com.willwinder.universalgcodesender.TinyGController;
import com.willwinder.universalgcodesender.XLCDCommunicator;
import com.willwinder.universalgcodesender.gcode.processors.ICommandProcessor;
import com.willwinder.universalgcodesender.gcode.util.CommandProcessorLoader;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author wwinder
*/
public class ControllerSettings {
private class ControllerConfig {
public String name;
public JsonElement args;
}
static public class ProcessorConfig {
public String name;
public Boolean enabled = true;
public Boolean optional = true;
public JsonObject args = null;
public ProcessorConfig(String name, Boolean enabled, Boolean optional, JsonObject args) {
this.name = name;
this.enabled = enabled;
this.optional = optional;
this.args = args;
}
}
public class ProcessorConfigGroups {
public ArrayList<ProcessorConfig> Front;
public ArrayList<ProcessorConfig> Custom;
public ArrayList<ProcessorConfig> End;
}
String Name;
Integer Version = 0;
ControllerConfig Controller;
ProcessorConfigGroups GcodeProcessors;
public enum CONTROLLER {
GRBL("GRBL"),
SMOOTHIE("SmoothieBoard"),
TINYG("TinyG"),
XLCD("XLCD"),
LOOPBACK("Loopback"),
LOOPBACK_SLOW("Loopback_Slow");
final String name;
CONTROLLER(String name) {
this.name = name;
}
public static CONTROLLER fromString(String name) {
for (CONTROLLER c : values()) {
if (c.name.equalsIgnoreCase(name)) {
return c;
}
}
return null;
}
}
public String getName() {
return Name;
}
public Integer getVersion() {
return Version;
}
/**
* Parse the "Controller" object in the firmware config json.
*
* "Controller": {
* "name": "GRBL",
* "args": null
* }
*/
public AbstractController getController() {
//String controllerName = controllerConfig.get("name").getAsString();
String controllerName = this.Controller.name;
CONTROLLER controller = CONTROLLER.fromString(controllerName);
switch (controller) {
case GRBL:
return new GrblController();
case SMOOTHIE:
return new SmoothieController();
case TINYG:
return new TinyGController();
case XLCD:
return new GrblController(new XLCDCommunicator());
case LOOPBACK:
return new GrblController(new LoopBackCommunicator());
case LOOPBACK_SLOW:
return new GrblController(new LoopBackCommunicator(100));
default:
throw new AssertionError(controller.name());
}
}
/**
* Get the list of processors from the settings in the order they should be
* applied.
*/
// TODO: Remove settings
public List<ICommandProcessor> getProcessors() {
List<ICommandProcessor> ret = new ArrayList<>();
ret.addAll(
CommandProcessorLoader.initializeWithProcessors(GcodeProcessors.Front));
ret.addAll(
CommandProcessorLoader.initializeWithProcessors(GcodeProcessors.Custom));
ret.addAll(
CommandProcessorLoader.initializeWithProcessors(GcodeProcessors.End));
return ret;
}
public ProcessorConfigGroups getProcessorConfigs() {
return this.GcodeProcessors;
}
}