From 7959d85dd43e043169ddb0797408380e1fd9ec29 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Fri, 17 May 2013 12:09:05 +1000 Subject: [PATCH 1/9] Allow uploader choice in upload.tool to specify a different platform vendor --- app/src/processing/app/debug/BasicUploader.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/processing/app/debug/BasicUploader.java b/app/src/processing/app/debug/BasicUploader.java index 1909c464a..de029c907 100644 --- a/app/src/processing/app/debug/BasicUploader.java +++ b/app/src/processing/app/debug/BasicUploader.java @@ -50,7 +50,13 @@ public class BasicUploader extends Uploader { TargetPlatform targetPlatform = Base.getTargetPlatform(); PreferencesMap prefs = Preferences.getMap(); prefs.putAll(Base.getBoardPreferences()); - prefs.putAll(targetPlatform.getTool(prefs.get("upload.tool"))); + String tool = prefs.get("upload.tool"); + if (tool.contains(":")) { + String[] split = tool.split(":", 2); + targetPlatform = Base.getCurrentTargetPlatformFromPackage(split[0]); + tool = split[1]; + } + prefs.putAll(targetPlatform.getTool(tool)); // if no protocol is specified for this board, assume it lacks a // bootloader and upload using the selected programmer. From b8c795e1845aa50b2fa0a8ee0730be5acae6e3cb Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Fri, 17 May 2013 12:49:23 +1000 Subject: [PATCH 2/9] Don't give up when loading hardware/ profile directories with some invalid directories This allows you to create hardware profiles that support both pre-1.5 and 1.5 onwards (boards.txt, cores, bootloader etc. in root for pre-1.5 and / directories containing 1.5 onward content. Still prints a warning if a hardware folder doesn't contain anything 1.5 compatible. --- app/src/processing/app/debug/TargetPackage.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/processing/app/debug/TargetPackage.java b/app/src/processing/app/debug/TargetPackage.java index 020cf89e3..6bc199b31 100644 --- a/app/src/processing/app/debug/TargetPackage.java +++ b/app/src/processing/app/debug/TargetPackage.java @@ -47,8 +47,16 @@ public class TargetPackage { if (!subFolder.exists() || !subFolder.canRead()) continue; String arch = subFolder.getName(); - TargetPlatform platform = new TargetPlatform(arch, subFolder, this); - platforms.put(arch, platform); + try { + TargetPlatform platform = new TargetPlatform(arch, subFolder, this); + platforms.put(arch, platform); + } catch (TargetPlatformException e) { + continue; + } + } + + if(platforms.size() == 0) { + throw new TargetPlatformException("No architecture directories with boards.txt files were found in hardware folder " + _folder.getName() + ". Is it pre-1.5?"); } } From fc8103c969bc314863274f9bc49abebb1ff782ec Mon Sep 17 00:00:00 2001 From: Mikal Hart Date: Sat, 8 Jun 2013 12:37:51 -0500 Subject: [PATCH 3/9] Minor typo correction formely->formerly --- libraries/SoftwareSerial/keywords.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/SoftwareSerial/keywords.txt b/libraries/SoftwareSerial/keywords.txt index 3f36dfc80..aaea17c20 100755 --- a/libraries/SoftwareSerial/keywords.txt +++ b/libraries/SoftwareSerial/keywords.txt @@ -1,6 +1,6 @@ ####################################### # Syntax Coloring Map for SoftwareSerial -# (formely NewSoftSerial) +# (formerly NewSoftSerial) ####################################### ####################################### From ad500ae24d9737090e84a5242d4914df8edc51a1 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 11 Jun 2013 14:47:15 +0200 Subject: [PATCH 4/9] Update incorrect docs in tonePitchFollower example The comments state that the speaker should be on pin 8, but the code references pin 9. Updated the comments to reflect the correct pin. --- .../examples/02.Digital/tonePitchFollower/tonePitchFollower.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/shared/examples/02.Digital/tonePitchFollower/tonePitchFollower.ino b/build/shared/examples/02.Digital/tonePitchFollower/tonePitchFollower.ino index e74c7b343..69caff744 100644 --- a/build/shared/examples/02.Digital/tonePitchFollower/tonePitchFollower.ino +++ b/build/shared/examples/02.Digital/tonePitchFollower/tonePitchFollower.ino @@ -4,7 +4,7 @@ Plays a pitch that changes based on a changing analog input circuit: - * 8-ohm speaker on digital pin 8 + * 8-ohm speaker on digital pin 9 * photoresistor on analog 0 to 5V * 4.7K resistor on analog 0 to ground From c24b3f6489a746908d0506d5af0b74ae4358539f Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 12 Jul 2013 16:22:39 +0200 Subject: [PATCH 5/9] IDE didn't stop if an invalid library is found --- app/src/processing/app/Base.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 72eae3f18..d2be82822 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -1169,10 +1169,15 @@ public class Base { continue; } - Library lib = Library.create(subfolder); - // (also replace previously found libs with the same name) - if (lib != null) - res.addOrReplace(lib); + try { + Library lib = Library.create(subfolder); + // (also replace previously found libs with the same name) + if (lib != null) + res.addOrReplace(lib); + } catch (IOException e) { + System.out.println(I18n.format(_("Invalid library found in {0}: {1}"), + subfolder, e.getMessage())); + } } return res; } From 8ab419fd1353057a00e6e94a7f8d948abcd04ce6 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 12 Jul 2013 19:50:57 +0200 Subject: [PATCH 6/9] Better error handling for missing preferences. Fixes #1471 --- app/src/processing/app/Editor.java | 8 ++-- app/src/processing/app/Sketch.java | 4 +- .../processing/app/debug/BasicUploader.java | 37 ++++++++++--------- app/src/processing/app/debug/Uploader.java | 11 +++--- .../app/helpers/PreferencesMap.java | 16 ++++++++ .../app/helpers/PreferencesMapException.java | 10 +++++ 6 files changed, 57 insertions(+), 29 deletions(-) create mode 100644 app/src/processing/app/helpers/PreferencesMapException.java diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 621d1bfc9..4b946a0a7 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -23,6 +23,7 @@ package processing.app; import processing.app.debug.*; +import processing.app.helpers.PreferencesMapException; import processing.app.syntax.*; import processing.app.tools.*; import processing.core.*; @@ -2543,9 +2544,10 @@ public class Editor extends JFrame implements RunnerListener { statusError(_("Error while burning bootloader.")); // error message will already be visible } - } catch (RunnerException e) { - statusError(_("Error while burning bootloader.")); - e.printStackTrace(); + } catch (PreferencesMapException e) { + statusError(I18n.format( + _("Error while burning bootloader: missing '{0}' configuration parameter"), + e.getMessage())); //statusError(e); } catch (Exception e) { statusError(_("Error while burning bootloader.")); diff --git a/app/src/processing/app/Sketch.java b/app/src/processing/app/Sketch.java index ee1c82f78..2fead5b88 100644 --- a/app/src/processing/app/Sketch.java +++ b/app/src/processing/app/Sketch.java @@ -1581,7 +1581,7 @@ public class Sketch { * Handle export to applet. */ public boolean exportApplet(String appletPath, boolean usingProgrammer) - throws RunnerException, IOException, SerialException { + throws Exception { prepare(); @@ -1660,7 +1660,7 @@ public class Sketch { } protected String upload(String buildPath, String suggestedClassName, boolean usingProgrammer) - throws RunnerException, SerialException { + throws Exception { Uploader uploader; diff --git a/app/src/processing/app/debug/BasicUploader.java b/app/src/processing/app/debug/BasicUploader.java index 1909c464a..b56c28ad0 100644 --- a/app/src/processing/app/debug/BasicUploader.java +++ b/app/src/processing/app/debug/BasicUploader.java @@ -37,6 +37,7 @@ import processing.app.Preferences; import processing.app.Serial; import processing.app.SerialException; import processing.app.helpers.PreferencesMap; +import processing.app.helpers.PreferencesMapException; import processing.app.helpers.StringReplacer; import static processing.app.I18n._; @@ -45,7 +46,7 @@ public class BasicUploader extends Uploader { public boolean uploadUsingPreferences(String buildPath, String className, boolean usingProgrammer) - throws RunnerException, SerialException { + throws Exception { // FIXME: Preferences should be reorganized TargetPlatform targetPlatform = Base.getTargetPlatform(); PreferencesMap prefs = Preferences.getMap(); @@ -71,7 +72,7 @@ public class BasicUploader extends Uploader { boolean waitForUploadPort = (t != null) && t.equals("true"); if (doTouch) { - String uploadPort = prefs.get("serial.port"); + String uploadPort = prefs.getOrExcept("serial.port"); try { // Toggle 1200 bps on selected serial port to force board reset. List before = Serial.list(); @@ -109,9 +110,9 @@ public class BasicUploader extends Uploader { prefs.put("build.path", buildPath); prefs.put("build.project_name", className); if (verbose) - prefs.put("upload.verbose", prefs.get("upload.params.verbose")); + prefs.put("upload.verbose", prefs.getOrExcept("upload.params.verbose")); else - prefs.put("upload.verbose", prefs.get("upload.params.quiet")); + prefs.put("upload.verbose", prefs.getOrExcept("upload.params.quiet")); boolean uploadResult; try { @@ -120,7 +121,7 @@ public class BasicUploader extends Uploader { // flushSerialBuffer(); // } - String pattern = prefs.get("upload.pattern"); + String pattern = prefs.getOrExcept("upload.pattern"); String[] cmd = StringReplacer.formatAndSplit(pattern, prefs, true); uploadResult = executeUploadCommand(cmd); } catch (Exception e) { @@ -211,7 +212,7 @@ public class BasicUploader extends Uploader { } public boolean uploadUsingProgrammer(String buildPath, String className) - throws RunnerException { + throws Exception { TargetPlatform targetPlatform = Base.getTargetPlatform(); String programmer = Preferences.get("programmer"); @@ -224,15 +225,15 @@ public class BasicUploader extends Uploader { PreferencesMap prefs = Preferences.getMap(); prefs.putAll(Base.getBoardPreferences()); prefs.putAll(targetPlatform.getProgrammer(programmer)); - prefs.putAll(targetPlatform.getTool(prefs.get("program.tool"))); + prefs.putAll(targetPlatform.getTool(prefs.getOrExcept("program.tool"))); prefs.put("build.path", buildPath); prefs.put("build.project_name", className); if (verbose) - prefs.put("program.verbose", prefs.get("program.params.verbose")); + prefs.put("program.verbose", prefs.getOrExcept("program.params.verbose")); else - prefs.put("program.verbose", prefs.get("program.params.quiet")); + prefs.put("program.verbose", prefs.getOrExcept("program.params.quiet")); try { // if (prefs.get("program.disable_flushing") == null @@ -241,7 +242,7 @@ public class BasicUploader extends Uploader { // flushSerialBuffer(); // } - String pattern = prefs.get("program.pattern"); + String pattern = prefs.getOrExcept("program.pattern"); String[] cmd = StringReplacer.formatAndSplit(pattern, prefs, true); return executeUploadCommand(cmd); } catch (Exception e) { @@ -249,7 +250,7 @@ public class BasicUploader extends Uploader { } } - public boolean burnBootloader() throws RunnerException { + public boolean burnBootloader() throws RunnerException, PreferencesMapException { TargetPlatform targetPlatform = Base.getTargetPlatform(); // Find preferences for the selected programmer @@ -272,7 +273,7 @@ public class BasicUploader extends Uploader { // Create configuration for bootloader tool PreferencesMap toolPrefs = new PreferencesMap(); - String tool = prefs.get("bootloader.tool"); + String tool = prefs.getOrExcept("bootloader.tool"); if (tool.contains(":")) { String[] split = tool.split(":", 2); TargetPlatform platform = Base.getCurrentTargetPlatformFromPackage(split[0]); @@ -291,20 +292,20 @@ public class BasicUploader extends Uploader { // Merge tool with global configuration prefs.putAll(toolPrefs); if (verbose) { - prefs.put("erase.verbose", prefs.get("erase.params.verbose")); - prefs.put("bootloader.verbose", prefs.get("bootloader.params.verbose")); + prefs.put("erase.verbose", prefs.getOrExcept("erase.params.verbose")); + prefs.put("bootloader.verbose", prefs.getOrExcept("bootloader.params.verbose")); } else { - prefs.put("erase.verbose", prefs.get("erase.params.quiet")); - prefs.put("bootloader.verbose", prefs.get("bootloader.params.quiet")); + prefs.put("erase.verbose", prefs.getOrExcept("erase.params.quiet")); + prefs.put("bootloader.verbose", prefs.getOrExcept("bootloader.params.quiet")); } try { - String pattern = prefs.get("erase.pattern"); + String pattern = prefs.getOrExcept("erase.pattern"); String[] cmd = StringReplacer.formatAndSplit(pattern, prefs, true); if (!executeUploadCommand(cmd)) return false; - pattern = prefs.get("bootloader.pattern"); + pattern = prefs.getOrExcept("bootloader.pattern"); cmd = StringReplacer.formatAndSplit(pattern, prefs, true); return executeUploadCommand(cmd); } catch (Exception e) { diff --git a/app/src/processing/app/debug/Uploader.java b/app/src/processing/app/debug/Uploader.java index 50d7a5e13..1a240831f 100644 --- a/app/src/processing/app/debug/Uploader.java +++ b/app/src/processing/app/debug/Uploader.java @@ -35,7 +35,6 @@ import java.util.Collection; import processing.app.I18n; import processing.app.Preferences; import processing.app.Serial; -import processing.app.SerialException; import processing.app.SerialNotFoundException; public abstract class Uploader implements MessageConsumer { @@ -52,11 +51,11 @@ public abstract class Uploader implements MessageConsumer { boolean verbose; public abstract boolean uploadUsingPreferences(String buildPath, String className, boolean usingProgrammer) - throws RunnerException, SerialException; + throws Exception; - public abstract boolean burnBootloader() throws RunnerException; + public abstract boolean burnBootloader() throws Exception; - protected void flushSerialBuffer() throws RunnerException, SerialException { + protected void flushSerialBuffer() throws Exception { // Cleanup the serial buffer try { Serial serialPort = new Serial(); @@ -87,14 +86,14 @@ public abstract class Uploader implements MessageConsumer { } protected boolean executeUploadCommand(Collection commandDownloader) - throws RunnerException { + throws Exception { String[] commandArray = new String[commandDownloader.size()]; commandDownloader.toArray(commandArray); return executeUploadCommand(commandArray); } protected boolean executeUploadCommand(String commandArray[]) - throws RunnerException + throws Exception { firstErrorFound = false; // haven't found any errors yet secondErrorFound = false; diff --git a/app/src/processing/app/helpers/PreferencesMap.java b/app/src/processing/app/helpers/PreferencesMap.java index e4729c166..cd3bb7dd2 100644 --- a/app/src/processing/app/helpers/PreferencesMap.java +++ b/app/src/processing/app/helpers/PreferencesMap.java @@ -245,6 +245,22 @@ public class PreferencesMap extends LinkedHashMap { return res; } + /** + * Returns the value to which the specified key is mapped, or throws a + * PreferencesMapException if not found + * + * @param k + * the key whose associated value is to be returned + * @return the value to which the specified key is mapped + * @throws PreferencesMapException + */ + public String getOrExcept(String k) throws PreferencesMapException { + String r = get(k); + if (r == null) + throw new PreferencesMapException(k); + return r; + } + @Override public String toString() { return toString(""); diff --git a/app/src/processing/app/helpers/PreferencesMapException.java b/app/src/processing/app/helpers/PreferencesMapException.java new file mode 100644 index 000000000..456e476fc --- /dev/null +++ b/app/src/processing/app/helpers/PreferencesMapException.java @@ -0,0 +1,10 @@ +package processing.app.helpers; + +@SuppressWarnings("serial") +public class PreferencesMapException extends Exception { + + public PreferencesMapException(String message) { + super(message); + } + +} From 7f87574f7e5c9268ad3b501dd45dd8c7a3cf3cab Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 12 Jul 2013 20:05:58 +0200 Subject: [PATCH 7/9] Hardened upload.tool property reading code for boards.txt Fixes #1464 --- app/src/processing/app/Editor.java | 8 ++++++++ app/src/processing/app/debug/BasicUploader.java | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 4b946a0a7..42413b267 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -2433,6 +2433,10 @@ public class Editor extends JFrame implements RunnerListener { if (serialMenu.getItemCount() == 0) statusError(e); else if (serialPrompt()) run(); else statusNotice(_("Upload canceled.")); + } catch (PreferencesMapException e) { + statusError(I18n.format( + _("Error while uploading: missing '{0}' configuration parameter"), + e.getMessage())); } catch (RunnerException e) { //statusError("Error during upload."); //e.printStackTrace(); @@ -2469,6 +2473,10 @@ public class Editor extends JFrame implements RunnerListener { if (serialMenu.getItemCount() == 0) statusError(e); else if (serialPrompt()) run(); else statusNotice(_("Upload canceled.")); + } catch (PreferencesMapException e) { + statusError(I18n.format( + _("Error while uploading: missing '{0}' configuration parameter"), + e.getMessage())); } catch (RunnerException e) { //statusError("Error during upload."); //e.printStackTrace(); diff --git a/app/src/processing/app/debug/BasicUploader.java b/app/src/processing/app/debug/BasicUploader.java index b56c28ad0..06e097373 100644 --- a/app/src/processing/app/debug/BasicUploader.java +++ b/app/src/processing/app/debug/BasicUploader.java @@ -51,7 +51,7 @@ public class BasicUploader extends Uploader { TargetPlatform targetPlatform = Base.getTargetPlatform(); PreferencesMap prefs = Preferences.getMap(); prefs.putAll(Base.getBoardPreferences()); - prefs.putAll(targetPlatform.getTool(prefs.get("upload.tool"))); + prefs.putAll(targetPlatform.getTool(prefs.getOrExcept("upload.tool"))); // if no protocol is specified for this board, assume it lacks a // bootloader and upload using the selected programmer. From f604881d408e64f3df40f587edaae3b6b59692e2 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 12 Jul 2013 21:09:45 +0200 Subject: [PATCH 8/9] assembly compile recipe is missing (C. A. Church) Fixes #1457 --- build/shared/revisions.txt | 1 + hardware/arduino/avr/platform.txt | 3 +++ 2 files changed, 4 insertions(+) diff --git a/build/shared/revisions.txt b/build/shared/revisions.txt index d9e9b863f..bad682ea5 100644 --- a/build/shared/revisions.txt +++ b/build/shared/revisions.txt @@ -17,6 +17,7 @@ ARDUINO 1.5.3 BETA * avr: Added support for Flash strings on String class (Jantje) * Added support for floating point numbers in String class (Tevin Zhang, SebiTimeWaster) * sam: Fixed String buffer overflows (Paul Stoffregen) +* avr: Added recipe for assembly files (C. A. Church) [libraries] * sam: Added CAN library (still in early stage of development) (Palliser) diff --git a/hardware/arduino/avr/platform.txt b/hardware/arduino/avr/platform.txt index 6bbe078ab..eaf946947 100644 --- a/hardware/arduino/avr/platform.txt +++ b/hardware/arduino/avr/platform.txt @@ -40,6 +40,9 @@ recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.flags} -mmcu={b ## Compile c++ files recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {build.extra_flags} {includes} "{source_file}" -o "{object_file}" +## Compile S files +recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.S.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {build.extra_flags} {includes} "{source_file}" -o "{object_file}" + ## Create archives recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} "{build.path}/{archive_file}" "{object_file}" From c70cba8fcdf77686a667a38ff5c2f5d0a867aeb6 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 15 Jul 2013 21:25:21 +0200 Subject: [PATCH 9/9] Fixed translated text string. Show warning message during loading of TargetPlatforms --- app/src/processing/app/debug/TargetPackage.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/processing/app/debug/TargetPackage.java b/app/src/processing/app/debug/TargetPackage.java index 6bc199b31..68c1a488c 100644 --- a/app/src/processing/app/debug/TargetPackage.java +++ b/app/src/processing/app/debug/TargetPackage.java @@ -23,11 +23,14 @@ */ package processing.app.debug; +import static processing.app.I18n._; + import java.io.File; import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; +import processing.app.I18n; import processing.app.helpers.filefilters.OnlyDirs; public class TargetPackage { @@ -51,12 +54,14 @@ public class TargetPackage { TargetPlatform platform = new TargetPlatform(arch, subFolder, this); platforms.put(arch, platform); } catch (TargetPlatformException e) { - continue; + System.out.println(e.getMessage()); } } - if(platforms.size() == 0) { - throw new TargetPlatformException("No architecture directories with boards.txt files were found in hardware folder " + _folder.getName() + ". Is it pre-1.5?"); + if (platforms.size() == 0) { + throw new TargetPlatformException(I18n + .format(_("No valid hardware definitions found in folder {0}."), + _folder.getName())); } }