diff --git a/app/src/cc/arduino/contributions/BuiltInCoreIsNewerCheck.java b/app/src/cc/arduino/contributions/BuiltInCoreIsNewerCheck.java index 800756c19..3dcda9272 100644 --- a/app/src/cc/arduino/contributions/BuiltInCoreIsNewerCheck.java +++ b/app/src/cc/arduino/contributions/BuiltInCoreIsNewerCheck.java @@ -33,14 +33,12 @@ import cc.arduino.contributions.filters.BuiltInPredicate; import cc.arduino.contributions.filters.InstalledPredicate; import cc.arduino.contributions.packages.ContributedPackage; import cc.arduino.contributions.packages.ContributedPlatform; -import cc.arduino.view.Event; import processing.app.Base; import processing.app.BaseNoGui; import processing.app.I18n; import processing.app.PreferencesData; import javax.swing.*; -import java.awt.event.ActionEvent; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; diff --git a/app/src/cc/arduino/view/preferences/Preferences.java b/app/src/cc/arduino/view/preferences/Preferences.java index eb4078982..ffeaf53dc 100644 --- a/app/src/cc/arduino/view/preferences/Preferences.java +++ b/app/src/cc/arduino/view/preferences/Preferences.java @@ -48,7 +48,13 @@ import static processing.app.I18n.tr; public class Preferences extends javax.swing.JDialog { private final Language[] languages; + + // Languages that are not translated at least to 65% are + // kept in the "missingLanguages" array until they have enough + // translated strings. + @SuppressWarnings("unused") private final Language[] missingLanguages; + private final WarningItem[] warningItems; private final Base base; diff --git a/app/src/processing/app/AbstractMonitor.java b/app/src/processing/app/AbstractMonitor.java index 976041eaf..e8cc0df75 100644 --- a/app/src/processing/app/AbstractMonitor.java +++ b/app/src/processing/app/AbstractMonitor.java @@ -13,7 +13,6 @@ import java.awt.event.WindowEvent; @SuppressWarnings("serial") public abstract class AbstractMonitor extends JFrame implements ActionListener { - private boolean monitorEnabled; private boolean closed; private StringBuffer updateBuffer; @@ -78,7 +77,6 @@ public abstract class AbstractMonitor extends JFrame implements ActionListener { updateTimer = new Timer(33, this); // redraw serial monitor at 30 Hz updateTimer.start(); - monitorEnabled = true; closed = false; } @@ -86,7 +84,6 @@ public abstract class AbstractMonitor extends JFrame implements ActionListener { public void enableWindow(boolean enable) { onEnableWindow(enable); - monitorEnabled = enable; } protected abstract void onEnableWindow(boolean enable); diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 2ef29d54e..3990aa07e 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -748,7 +748,7 @@ public class Base { try { File file = createNewUntitled(); if (file != null) { - Editor editor = handleOpen(file, true); + handleOpen(file, true); } } catch (IOException e) { diff --git a/app/src/processing/app/EditorLineStatus.java b/app/src/processing/app/EditorLineStatus.java index 253f3919d..b1ad221df 100644 --- a/app/src/processing/app/EditorLineStatus.java +++ b/app/src/processing/app/EditorLineStatus.java @@ -24,13 +24,10 @@ package processing.app; import java.awt.*; import java.awt.geom.Rectangle2D; -import java.util.Map; - import javax.swing.JComponent; import processing.app.helpers.OSUtils; import processing.app.helpers.PreferencesMap; -import processing.app.syntax.SketchTextArea; /** diff --git a/app/src/processing/app/Preferences.java b/app/src/processing/app/Preferences.java index 8dc00c137..d53f5b0d8 100644 --- a/app/src/processing/app/Preferences.java +++ b/app/src/processing/app/Preferences.java @@ -21,12 +21,8 @@ package processing.app; -import processing.app.helpers.PreferencesHelper; import processing.app.helpers.PreferencesMap; -import java.awt.*; -import java.io.File; - /** * Storage class for user preferences and environment settings. diff --git a/app/test/processing/app/AutoformatProducesOneUndoActionTest.java b/app/test/processing/app/AutoformatProducesOneUndoActionTest.java index 8c5243a66..33314b4a1 100644 --- a/app/test/processing/app/AutoformatProducesOneUndoActionTest.java +++ b/app/test/processing/app/AutoformatProducesOneUndoActionTest.java @@ -34,7 +34,6 @@ import org.junit.Test; import processing.app.helpers.SketchTextAreaFixture; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; public class AutoformatProducesOneUndoActionTest extends AbstractGUITest { diff --git a/app/test/processing/app/macosx/SystemProfilerParserTest.java b/app/test/processing/app/macosx/SystemProfilerParserTest.java index 1476822c4..2fce4d00f 100644 --- a/app/test/processing/app/macosx/SystemProfilerParserTest.java +++ b/app/test/processing/app/macosx/SystemProfilerParserTest.java @@ -33,50 +33,55 @@ import org.junit.Test; import processing.app.TestHelper; import static org.junit.Assert.assertEquals; +import static processing.app.macosx.SystemProfilerParser.extractVIDAndPID; + +import java.io.IOException; +import java.io.InputStream; public class SystemProfilerParserTest { @Test public void shouldCorrectlyParse() throws Exception { - String output = TestHelper.inputStreamToString(SystemProfilerParserTest.class.getResourceAsStream("system_profiler_output.txt")); + String output = getFileContent("system_profiler_output.txt"); + assertEquals("0X2341_0X0044", extractVIDAndPID(output, "/dev/cu.usbmodemfa121")); + assertEquals("0X2341_0X0044", extractVIDAndPID(output, "/dev/tty.usbmodemfa121")); - assertEquals("0X2341_0X0044", new SystemProfilerParser().extractVIDAndPID(output, "/dev/cu.usbmodemfa121")); - assertEquals("0X2341_0X0044", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodemfa121")); + output = getFileContent("system_profiler_output2.txt"); + assertEquals("0X2341_0X8036", extractVIDAndPID(output, "/dev/cu.usbmodemfd131")); + assertEquals("0X2341_0X8036", extractVIDAndPID(output, "/dev/tty.usbmodemfd131")); - output = TestHelper.inputStreamToString(SystemProfilerParserTest.class.getResourceAsStream("system_profiler_output2.txt")); + output = getFileContent("system_profiler_output3.txt"); + assertEquals("0X2341_0X8041", extractVIDAndPID(output, "/dev/cu.usbmodemfd121")); + assertEquals("0X2341_0X8041", extractVIDAndPID(output, "/dev/tty.usbmodemfd121")); - assertEquals("0X2341_0X8036", new SystemProfilerParser().extractVIDAndPID(output, "/dev/cu.usbmodemfd131")); - assertEquals("0X2341_0X8036", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodemfd131")); + output = getFileContent("system_profiler_output4.txt"); + assertEquals("0X2341_0X0041", extractVIDAndPID(output, "/dev/cu.usbmodem411")); + assertEquals("0X2341_0X0041", extractVIDAndPID(output, "/dev/tty.usbmodem411")); - output = TestHelper.inputStreamToString(SystemProfilerParserTest.class.getResourceAsStream("system_profiler_output3.txt")); + output = getFileContent("system_profiler_output5.txt"); + assertEquals("0X2341_0X8041", extractVIDAndPID(output, "/dev/cu.usbmodem621")); + assertEquals("0X2341_0X8041", extractVIDAndPID(output, "/dev/tty.usbmodem621")); - assertEquals("0X2341_0X8041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/cu.usbmodemfd121")); - assertEquals("0X2341_0X8041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodemfd121")); + output = getFileContent("system_profiler_output6.txt"); + assertEquals("0X2341_0X8041", extractVIDAndPID(output, "/dev/cu.usbmodem1421")); + assertEquals("0X2341_0X8041", extractVIDAndPID(output, "/dev/tty.usbmodem1421")); - output = TestHelper.inputStreamToString(SystemProfilerParserTest.class.getResourceAsStream("system_profiler_output4.txt")); + output = getFileContent("system_profiler_output7.txt"); + assertEquals("0X2341_0X8036", extractVIDAndPID(output, "/dev/cu.usbmodem24131")); + assertEquals("0X2341_0X8036", extractVIDAndPID(output, "/dev/tty.usbmodem24131")); + assertEquals("0X0403_0X6015", extractVIDAndPID(output, "/dev/cu.usbserial-DN0031EV")); + assertEquals("0X0403_0X6015", extractVIDAndPID(output, "/dev/tty.usbserial-DN0031EV")); - assertEquals("0X2341_0X0041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/cu.usbmodem411")); - assertEquals("0X2341_0X0041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodem411")); + output = getFileContent("system_profiler_output8.txt"); + assertEquals("0X03EB_0X2157", extractVIDAndPID(output, "/dev/tty.usbmodemfd132")); - output = TestHelper.inputStreamToString(SystemProfilerParserTest.class.getResourceAsStream("system_profiler_output5.txt")); + // OSX El Capitan + output = getFileContent("system_profiler_output9.txt"); + assertEquals("0X2341_0X8036", extractVIDAndPID(output, "/dev/tty.usbmodemFA121")); + } - assertEquals("0X2341_0X8041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/cu.usbmodem621")); - assertEquals("0X2341_0X8041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodem621")); - - output = TestHelper.inputStreamToString(SystemProfilerParserTest.class.getResourceAsStream("system_profiler_output6.txt")); - - assertEquals("0X2341_0X8041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/cu.usbmodem1421")); - assertEquals("0X2341_0X8041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodem1421")); - - output = TestHelper.inputStreamToString(SystemProfilerParserTest.class.getResourceAsStream("system_profiler_output7.txt")); - - assertEquals("0X2341_0X8036", new SystemProfilerParser().extractVIDAndPID(output, "/dev/cu.usbmodem24131")); - assertEquals("0X2341_0X8036", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodem24131")); - assertEquals("0X0403_0X6015", new SystemProfilerParser().extractVIDAndPID(output, "/dev/cu.usbserial-DN0031EV")); - assertEquals("0X0403_0X6015", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbserial-DN0031EV")); - - output = TestHelper.inputStreamToString(SystemProfilerParserTest.class.getResourceAsStream("system_profiler_output8.txt")); - - assertEquals("0X03EB_0X2157", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodemfd132")); + private String getFileContent(String filename) throws IOException { + InputStream resource = SystemProfilerParserTest.class.getResourceAsStream(filename); + return TestHelper.inputStreamToString(resource); } } diff --git a/app/test/processing/app/macosx/system_profiler_output9.txt b/app/test/processing/app/macosx/system_profiler_output9.txt new file mode 100644 index 000000000..ca82cedd4 --- /dev/null +++ b/app/test/processing/app/macosx/system_profiler_output9.txt @@ -0,0 +1,117 @@ +USB: + + USB 2.0 Bus: + + Host Controller Driver: AppleUSBEHCIPCI + PCI Device ID: 0x1c2d + PCI Revision ID: 0x0005 + PCI Vendor ID: 0x8086 + + Hub: + + Product ID: 0x2513 + Vendor ID: 0x0424 (SMSC) + Version: b.b3 + Speed: Up to 480 Mb/sec + Location ID: 0xfa100000 / 1 + Current Available (mA): 1000 + Current Required (mA): 2 + Extra Operating Current (mA): 0 + Built-In: Yes + + Arduino Leonardo: + + Product ID: 0x8036 + Vendor ID: 0x2341 + Version: 1.00 + Speed: Up to 12 Mb/sec + Manufacturer: Arduino LLC + Location ID: 0xfa120000 / 3 + Current Available (mA): 1000 + Current Required (mA): 500 + Extra Operating Current (mA): 0 + + BRCM20702 Hub: + + Product ID: 0x4500 + Vendor ID: 0x0a5c (Broadcom Corp.) + Version: 1.00 + Speed: Up to 12 Mb/sec + Manufacturer: Apple Inc. + Location ID: 0xfa110000 / 4 + Current Available (mA): 1000 + Current Required (mA): 94 + Extra Operating Current (mA): 0 + Built-In: Yes + + Bluetooth USB Host Controller: + + Product ID: 0x8281 + Vendor ID: 0x05ac (Apple Inc.) + Version: 1.51 + Speed: Up to 12 Mb/sec + Manufacturer: Apple Inc. + Location ID: 0xfa113000 / 2 + Current Available (mA): 1000 + Current Required (mA): 0 + Extra Operating Current (mA): 0 + Built-In: Yes + + USB 2.0 Bus: + + Host Controller Driver: AppleUSBEHCIPCI + PCI Device ID: 0x1c26 + PCI Revision ID: 0x0005 + PCI Vendor ID: 0x8086 + + Hub: + + Product ID: 0x2513 + Vendor ID: 0x0424 (SMSC) + Version: b.b3 + Speed: Up to 480 Mb/sec + Location ID: 0xfd100000 / 1 + Current Available (mA): 1000 + Current Required (mA): 2 + Extra Operating Current (mA): 0 + Built-In: Yes + + USB Keyboard: + + Product ID: 0x2000 + Vendor ID: 0x040b (Weltrend Semiconductor) + Version: 2.05 + Speed: Up to 1.5 Mb/sec + Manufacturer: Generic + Location ID: 0xfd130000 / 4 + Current Available (mA): 1000 + Current Required (mA): 100 + Extra Operating Current (mA): 0 + + USB OPTICAL MOUSE: + + Product ID: 0x2510 + Vendor ID: 0x093a (Pixart Imaging, Inc.) + Version: 1.00 + Speed: Up to 1.5 Mb/sec + Manufacturer: PIXART + Location ID: 0xfd120000 / 3 + Current Available (mA): 1000 + Current Required (mA): 100 + Extra Operating Current (mA): 0 + + IR Receiver: + + Product ID: 0x8242 + Vendor ID: 0x05ac (Apple Inc.) + Version: 0.16 + Speed: Up to 1.5 Mb/sec + Manufacturer: Apple Computer, Inc. + Location ID: 0xfd110000 / 2 + Current Available (mA): 1000 + Current Required (mA): 100 + Extra Operating Current (mA): 0 + Built-In: Yes + + + diff --git a/app/test/processing/app/syntax/PdeKeywordsTest.java b/app/test/processing/app/syntax/PdeKeywordsTest.java index 29c6b4675..f59deac21 100644 --- a/app/test/processing/app/syntax/PdeKeywordsTest.java +++ b/app/test/processing/app/syntax/PdeKeywordsTest.java @@ -32,8 +32,6 @@ package processing.app.syntax; import org.fife.ui.rsyntaxtextarea.TokenTypes; import org.junit.Test; import processing.app.AbstractWithPreferencesTest; -import processing.app.BaseNoGui; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; diff --git a/arduino-core/src/cc/arduino/contributions/GPGDetachedSignatureVerifier.java b/arduino-core/src/cc/arduino/contributions/GPGDetachedSignatureVerifier.java index a09bd12fd..216c6dbcb 100644 --- a/arduino-core/src/cc/arduino/contributions/GPGDetachedSignatureVerifier.java +++ b/arduino-core/src/cc/arduino/contributions/GPGDetachedSignatureVerifier.java @@ -97,13 +97,13 @@ public class GPGDetachedSignatureVerifier extends SignatureVerifier { private PGPPublicKey readPublicKey(InputStream input, String keyId) throws IOException, PGPException { PGPPublicKeyRingCollection pgpPub = new PGPPublicKeyRingCollection(PGPUtil.getDecoderStream(input), new BcKeyFingerprintCalculator()); - Iterator keyRingIter = pgpPub.getKeyRings(); + Iterator keyRingIter = pgpPub.getKeyRings(); while (keyRingIter.hasNext()) { - PGPPublicKeyRing keyRing = (PGPPublicKeyRing) keyRingIter.next(); + PGPPublicKeyRing keyRing = keyRingIter.next(); - Iterator keyIter = keyRing.getPublicKeys(); + Iterator keyIter = keyRing.getPublicKeys(); while (keyIter.hasNext()) { - PGPPublicKey key = (PGPPublicKey) keyIter.next(); + PGPPublicKey key = keyIter.next(); if (Long.toHexString(key.getKeyID()).toUpperCase().endsWith(keyId)) { return key; diff --git a/arduino-core/src/cc/arduino/contributions/SignatureVerificationFailedException.java b/arduino-core/src/cc/arduino/contributions/SignatureVerificationFailedException.java index 32f7d4d1d..77136cb46 100644 --- a/arduino-core/src/cc/arduino/contributions/SignatureVerificationFailedException.java +++ b/arduino-core/src/cc/arduino/contributions/SignatureVerificationFailedException.java @@ -33,6 +33,7 @@ import processing.app.I18n; import static processing.app.I18n.tr; +@SuppressWarnings("serial") public class SignatureVerificationFailedException extends Exception { public SignatureVerificationFailedException(String filename) { diff --git a/arduino-core/src/cc/arduino/utils/ArchiveExtractor.java b/arduino-core/src/cc/arduino/utils/ArchiveExtractor.java index d892e9ec2..1fc007997 100644 --- a/arduino-core/src/cc/arduino/utils/ArchiveExtractor.java +++ b/arduino-core/src/cc/arduino/utils/ArchiveExtractor.java @@ -164,7 +164,7 @@ public class ArchiveExtractor { while (stripPath > 0) { slash = name.indexOf("/", slash); if (slash == -1) { - throw new IOException("Invalid archive: it must contains a single root folder"); + throw new IOException("Invalid archive: it must contain a single root folder"); } slash++; stripPath--; @@ -174,7 +174,7 @@ public class ArchiveExtractor { // Strip the common path prefix when requested if (!name.startsWith(pathPrefix)) { - throw new IOException("Invalid archive: it must contains a single root folder while file " + name + " is outside " + pathPrefix); + throw new IOException("Invalid archive: it must contain a single root folder while file " + name + " is outside " + pathPrefix); } name = name.substring(pathPrefix.length()); if (name.isEmpty()) { @@ -185,7 +185,7 @@ public class ArchiveExtractor { File outputLinkedFile = null; if (isLink) { if (!linkName.startsWith(pathPrefix)) { - throw new IOException("Invalid archive: it must contains a single root folder while file " + linkName + " is outside " + pathPrefix); + throw new IOException("Invalid archive: it must contain a single root folder while file " + linkName + " is outside " + pathPrefix); } linkName = linkName.substring(pathPrefix.length()); outputLinkedFile = new File(destFolder, linkName); diff --git a/arduino-core/src/processing/app/SketchCode.java b/arduino-core/src/processing/app/SketchCode.java index 0e3f26560..54d070775 100644 --- a/arduino-core/src/processing/app/SketchCode.java +++ b/arduino-core/src/processing/app/SketchCode.java @@ -53,11 +53,6 @@ public class SketchCode { private boolean modified; - /** - * where this code starts relative to the concat'd code - */ - private int preprocOffset; - private Object metadata; public SketchCode(File file) { @@ -190,16 +185,6 @@ public class SketchCode { } - public void setPreprocOffset(int preprocOffset) { - this.preprocOffset = preprocOffset; - } - - - public void addPreprocOffset(int extra) { - preprocOffset += extra; - } - - /** * Load this piece of code from a file. */ diff --git a/arduino-core/src/processing/app/macosx/Platform.java b/arduino-core/src/processing/app/macosx/Platform.java index a7a6a75bb..31118c47f 100644 --- a/arduino-core/src/processing/app/macosx/Platform.java +++ b/arduino-core/src/processing/app/macosx/Platform.java @@ -172,7 +172,7 @@ public class Platform extends processing.app.Platform { } try { - String vidPid = new SystemProfilerParser().extractVIDAndPID(devicesListOutput, serial); + String vidPid = SystemProfilerParser.extractVIDAndPID(devicesListOutput, serial); if (vidPid == null) { return super.resolveDeviceAttachedTo(serial, packages, devicesListOutput); diff --git a/arduino-core/src/processing/app/macosx/SystemProfilerParser.java b/arduino-core/src/processing/app/macosx/SystemProfilerParser.java index 2e1d77462..73f692bf3 100644 --- a/arduino-core/src/processing/app/macosx/SystemProfilerParser.java +++ b/arduino-core/src/processing/app/macosx/SystemProfilerParser.java @@ -19,19 +19,12 @@ public class SystemProfilerParser { private static final String DEV_TTY_USBMODEM = "/dev/tty.usbmodem"; private static final String DEV_CU_USBMODEM = "/dev/cu.usbmodem"; - private final Pattern vidRegex; - private final Pattern serialNumberRegex; - private final Pattern locationRegex; - private final Pattern pidRegex; + private static final Pattern serialNumberRegex = Pattern.compile("^Serial Number: (.+)$"); + private static final Pattern locationRegex = Pattern.compile("^Location ID: (.+)$"); + private static final Pattern pidRegex = Pattern.compile("^Product ID: (.+)$"); + private static final Pattern vidRegex = Pattern.compile("^Vendor ID: (.+)$"); - public SystemProfilerParser() { - this.serialNumberRegex = Pattern.compile("^Serial Number: (.+)$"); - this.locationRegex = Pattern.compile("^Location ID: (.+)$"); - this.pidRegex = Pattern.compile("^Product ID: (.+)$"); - this.vidRegex = Pattern.compile("^Vendor ID: (.+)$"); - } - - public String extractVIDAndPID(String output, String serial) throws IOException { + public synchronized static String extractVIDAndPID(String output, String serial) throws IOException { BufferedReader reader = new BufferedReader(new StringReader(output)); String devicePrefix; @@ -80,7 +73,7 @@ public class SystemProfilerParser { String computedDevicePath = device.get(DEVICE_PATH); String computedDevicePathMinusChar = computedDevicePath.substring(0, computedDevicePath.length() - 1); String serialMinusChar = serial.substring(0, serial.length() - 1); - if (computedDevicePath.equals(serial) || computedDevicePathMinusChar.equals(serialMinusChar)) { + if (computedDevicePath.equalsIgnoreCase(serial) || computedDevicePathMinusChar.equalsIgnoreCase(serialMinusChar)) { return (device.get(VID) + "_" + device.get(PID)).toUpperCase(); } } diff --git a/build/linux/dist/arduino b/build/linux/dist/arduino index 178766745..d4e7f1965 100755 --- a/build/linux/dist/arduino +++ b/build/linux/dist/arduino @@ -3,9 +3,9 @@ APPDIR="$(dirname -- "$(readlink -f -- "${0}")" )" for LIB in \ - $APPDIR/java/lib/rt.jar \ - $APPDIR/java/lib/tools.jar \ - $APPDIR/lib/*.jar \ + "$APPDIR"/java/lib/rt.jar \ + "$APPDIR"/java/lib/tools.jar \ + "$APPDIR"/lib/*.jar \ ; do CLASSPATH="${CLASSPATH}:${LIB}" @@ -17,18 +17,19 @@ export LD_LIBRARY_PATH export PATH="${APPDIR}/java/bin:${PATH}" -if [[ "$@" == *"--upload"* || "$@" == *"--verify"* || "$@" == *"--get-pref"* || "$@" == *"--install-board"* || "$@" == *"--install-library"* ]] ; then - SPLASH="" -else - SPLASH="-splash:$APPDIR/lib/splash.png" -fi - export JAVA_TOOL_OPTIONS=`echo $JAVA_TOOL_OPTIONS | sed 's|-javaagent:/usr/share/java/jayatanaag.jar||g'` JAVA=java -if [ -x $APPDIR/java/bin/java ]; then +if [ -x "$APPDIR/java/bin/java" ]; then JAVA=$APPDIR/java/bin/java fi -$JAVA -DAPP_DIR="$APPDIR" -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel $SPLASH processing.app.Base "$@" +# Collect options to java in an array, to properly handle whitespace in options +JAVA_OPTIONS=("-DAPP_DIR=$APPDIR" "-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel") + +if [[ "$@" != *"--upload"* && "$@" != *"--verify"* && "$@" != *"--get-pref"* && "$@" != *"--install-board"* && "$@" != *"--install-library"* ]] ; then + JAVA_OPTIONS+=("-splash:$APPDIR/lib/splash.png") +fi + +"$JAVA" "${JAVA_OPTIONS[@]}" processing.app.Base "$@" diff --git a/hardware/arduino/avr/libraries/HID/HID.cpp b/hardware/arduino/avr/libraries/HID/HID.cpp index 1a432fffd..ce9a6a08e 100644 --- a/hardware/arduino/avr/libraries/HID/HID.cpp +++ b/hardware/arduino/avr/libraries/HID/HID.cpp @@ -54,6 +54,11 @@ int HID_::getDescriptor(USBSetup& setup) return -1; total += res; } + + // Reset the protocol on reenumeration. Normally the host should not assume the state of the protocol + // due to the USB specs, but Windows and Linux just assumes its in report mode. + protocol = HID_REPORT_PROTOCOL; + return total; } @@ -140,7 +145,7 @@ bool HID_::setup(USBSetup& setup) HID_::HID_(void) : PluggableUSBModule(1, 1, epType), rootNode(NULL), descriptorSize(0), - protocol(1), idle(1) + protocol(HID_REPORT_PROTOCOL), idle(1) { epType[0] = EP_TYPE_INTERRUPT_IN; PluggableUSB().plug(this);