/*
*
* Goko
* Copyright (C) 2013, 2016 PsyKo
*
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.goko.controller.grbl.v08.configuration;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.goko.core.common.measure.quantity.Length;
import org.goko.core.common.measure.quantity.LengthUnit;
import org.goko.core.common.measure.units.Unit;
/**
* Grbl configuration definition
*
* @author PsyKo
*
*/
public class GrblConfiguration {
private List<GrblSetting<?>> lstGrblSetting;
private GrblDoubleSetting stepsMmX;
private GrblDoubleSetting stepsMmY;
private GrblDoubleSetting stepsMmZ;
private GrblIntegerSetting stepPulse;
private GrblDoubleSetting defaultFeed;
private GrblDoubleSetting defaultSeek;
private GrblIntegerSetting stepPortInvertMask;
private GrblIntegerSetting stepIdleDelay;
private GrblDoubleSetting acceleration;
private GrblDoubleSetting junctionDeviation;
private GrblDoubleSetting arc;
private GrblDoubleSetting arcCorrection;
private GrblIntegerSetting decimalCount;
private GrblBooleanSetting reportInches;
private GrblBooleanSetting autoStart;
private GrblBooleanSetting invertStepEnable;
private GrblBooleanSetting hardLimits;
private GrblBooleanSetting homingCycle;
private GrblIntegerSetting homingInvertMask;
private GrblDoubleSetting homingFeed;
private GrblDoubleSetting homingSeek;
private GrblDoubleSetting homingDebounce;
private GrblDoubleSetting homingPullOff;
public GrblConfiguration(){
this.lstGrblSetting = new ArrayList<GrblSetting<?>>();
initSettings();
}
private void initSettings() {
registerSetting(stepsMmX = new GrblDoubleSetting("$0", 0.0));
registerSetting(stepsMmY = new GrblDoubleSetting("$1", 0.0));
registerSetting(stepsMmZ = new GrblDoubleSetting("$2", 0.0));
registerSetting(stepPulse = new GrblIntegerSetting("$3", 0));
registerSetting(defaultFeed = new GrblDoubleSetting("$4", 0.0));
registerSetting(defaultSeek = new GrblDoubleSetting("$5", 0.0));
registerSetting(stepPortInvertMask = new GrblIntegerSetting("$6", 0));
registerSetting(stepIdleDelay = new GrblIntegerSetting("$7", 0));
registerSetting(acceleration = new GrblDoubleSetting("$8", 0.0));
registerSetting(junctionDeviation = new GrblDoubleSetting("$9", 0.0));
registerSetting(arc = new GrblDoubleSetting("$10", 0.0));
registerSetting(arcCorrection = new GrblDoubleSetting("$11", 0.0));
registerSetting(decimalCount = new GrblIntegerSetting("$12", 0));
registerSetting(reportInches = new GrblBooleanSetting("$13", false));
registerSetting(autoStart = new GrblBooleanSetting("$14", false));
registerSetting(invertStepEnable = new GrblBooleanSetting("$15", false));
registerSetting(hardLimits = new GrblBooleanSetting("$16", false));
registerSetting(homingCycle = new GrblBooleanSetting("$17", false));
registerSetting(homingInvertMask = new GrblIntegerSetting("$18", 0));
registerSetting(homingFeed = new GrblDoubleSetting("$19", 0.0));
registerSetting(homingSeek = new GrblDoubleSetting("$20", 0.0));
registerSetting(homingDebounce = new GrblDoubleSetting("$21", 0.0));
registerSetting(homingPullOff = new GrblDoubleSetting("$22", 0.0));
}
public void setValue(String identifier, String value) {
for (GrblSetting<?> grblSetting : lstGrblSetting) {
if(StringUtils.equals(grblSetting.getIdentifier(), identifier)){
grblSetting.setValueFromString(value);
}
}
}
private void registerSetting(GrblSetting<?> setting){
lstGrblSetting.add(setting);
}
/**
* @return the lstGrblSetting
*/
public List<GrblSetting<?>> getLstGrblSetting() {
return lstGrblSetting;
}
/**
* @return the stepsMmX
*/
public GrblDoubleSetting getStepsMmX() {
return stepsMmX;
}
/**
* @return the stepsMmY
*/
public GrblDoubleSetting getStepsMmY() {
return stepsMmY;
}
/**
* @return the stepsMmZ
*/
public GrblDoubleSetting getStepsMmZ() {
return stepsMmZ;
}
/**
* @return the stepPulse
*/
public GrblIntegerSetting getStepPulse() {
return stepPulse;
}
/**
* @return the defaultFeed
*/
public GrblDoubleSetting getDefaultFeed() {
return defaultFeed;
}
/**
* @return the defaultSeek
*/
public GrblDoubleSetting getDefaultSeek() {
return defaultSeek;
}
/**
* @return the stepPortInvertMask
*/
public GrblIntegerSetting getStepPortInvertMask() {
return stepPortInvertMask;
}
/**
* @return the stepIdleDelay
*/
public GrblIntegerSetting getStepIdleDelay() {
return stepIdleDelay;
}
/**
* @return the acceleration
*/
public GrblDoubleSetting getAcceleration() {
return acceleration;
}
/**
* @return the junctionDeviation
*/
public GrblDoubleSetting getJunctionDeviation() {
return junctionDeviation;
}
/**
* @return the arc
*/
public GrblDoubleSetting getArc() {
return arc;
}
/**
* @return the arcCorrection
*/
public GrblDoubleSetting getArcCorrection() {
return arcCorrection;
}
/**
* @return the decimalCount
*/
public GrblIntegerSetting getDecimalCount() {
return decimalCount;
}
/**
* @return the reportInches
*/
public GrblBooleanSetting getReportInches() {
return reportInches;
}
public Unit<Length> getReportUnit(){
Unit<Length> unit = LengthUnit.MILLIMETRE;
if(getReportInches().getValue() == true){
unit = LengthUnit.INCH;
}
return unit;
}
/**
* @return the autoStart
*/
public GrblBooleanSetting getAutoStart() {
return autoStart;
}
/**
* @return the invertStepEnable
*/
public GrblBooleanSetting getInvertStepEnable() {
return invertStepEnable;
}
/**
* @return the hardLimits
*/
public GrblBooleanSetting getHardLimits() {
return hardLimits;
}
/**
* @return the homingCycle
*/
public GrblBooleanSetting getHomingCycle() {
return homingCycle;
}
/**
* @return the homingInvertMask
*/
public GrblIntegerSetting getHomingInvertMask() {
return homingInvertMask;
}
/**
* @return the homingFeed
*/
public GrblDoubleSetting getHomingFeed() {
return homingFeed;
}
/**
* @return the homingSeek
*/
public GrblDoubleSetting getHomingSeek() {
return homingSeek;
}
/**
* @return the homingDebounce
*/
public GrblDoubleSetting getHomingDebounce() {
return homingDebounce;
}
/**
* @return the homingPullOff
*/
public GrblDoubleSetting getHomingPullOff() {
return homingPullOff;
}
}