public void setHardwareVersion(int version) { int newVersion = -1; try { // get version numbers ServiceLoader<MakelangeloHardwareProperties> knownHardware = ServiceLoader.load(MakelangeloHardwareProperties.class); Iterator<MakelangeloHardwareProperties> i = knownHardware.iterator(); while (i.hasNext()) { MakelangeloHardwareProperties hw = i.next(); if (hw.getVersion() == version) { hardwareProperties = hw.getClass().newInstance(); newVersion = version; break; } } } catch (Exception e) { e.printStackTrace(); Log.error("Hardware version instance failed. Defaulting to v2"); hardwareProperties = new Makelangelo2Properties(); newVersion = 2; } if (newVersion == -1) { Log.error("Unknown hardware version requested. Defaulting to v2"); hardwareProperties = new Makelangelo2Properties(); } hardwareVersion = newVersion; if (!hardwareProperties.canChangeMachineSize()) { this.setMachineSize( hardwareProperties.getWidth() * 0.1f, hardwareProperties.getHeight() * 0.1f); } saveConfigToLocal(); }
/** * These values should match * https://github.com/marginallyclever/makelangelo-firmware/firmware_rumba/configure.h * * @param translator * @param robot */ public MakelangeloRobotSettings(MakelangeloRobot robot) { // set up number format DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(); otherSymbols.setDecimalSeparator('.'); df = new DecimalFormat("#.###", otherSymbols); df.setGroupingUsed(false); double mh = 835 * 0.1; // mm > cm // Makelangelo 5 is 835mm. double mw = 835 * 0.1; // mm > cm // Makelangelo 5 is 835mm. robotUID = 0; isRegistered = false; limitTop = mh / 2; limitBottom = -mh / 2; limitRight = mw / 2; limitLeft = -mw / 2; paperColor = Color.WHITE; listeners = new ArrayList<MakelangeloRobotSettingsListener>(); shouldSignName = false; // paper area double pw = 420 * 0.1; // cm double ph = 594 * 0.1; // cm paperTop = ph / 2; paperBottom = -ph / 2; paperLeft = -pw / 2; paperRight = pw / 2; paperMargin = 0.9; maxFeedRate = 6500; currentFeedRate = 6500; maxAcceleration = 250; // pen diameter = 0.8f; zRate = 50; zOn = 90; zOff = 50; penDownColor = Color.BLACK; penUpColor = Color.BLUE; // diameter = circumference/pi // circumference is 20 teeth @ 2mm/tooth pulleyDiameter = 20.0 * 0.2 / Math.PI; isLeftMotorInverted = false; isRightMotorInverted = true; reverseForGlass = false; startingPositionIndex = 4; // default hardware version is 2 setHardwareVersion(2); // which configurations are available? try { configsAvailable = topLevelMachinesPreferenceNode.childrenNames(); } catch (Exception e) { Log.error(e.getMessage()); configsAvailable = new String[1]; configsAvailable[0] = "Default"; } // Load most recent config // loadConfig(last_machine_id); }