Merge remote-tracking branch 'arduino/master' into HEAD

This commit is contained in:
Cristian Maglie 2015-10-21 15:53:59 +02:00
commit c102995e92
18 changed files with 193 additions and 95 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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) {

View File

@ -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;
/**

View File

@ -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.

View File

@ -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 {

View File

@ -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);
}
}

View File

@ -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

View File

@ -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;

View File

@ -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<PGPPublicKeyRing> keyRingIter = pgpPub.getKeyRings();
while (keyRingIter.hasNext()) {
PGPPublicKeyRing keyRing = (PGPPublicKeyRing) keyRingIter.next();
PGPPublicKeyRing keyRing = keyRingIter.next();
Iterator keyIter = keyRing.getPublicKeys();
Iterator<PGPPublicKey> 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;

View File

@ -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) {

View File

@ -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);

View File

@ -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.
*/

View File

@ -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);

View File

@ -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();
}
}

View File

@ -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 "$@"

View File

@ -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);