From 28ad89d694e57e30b50df46959fdd37afe45af49 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 20 Oct 2015 19:21:13 +0200 Subject: [PATCH 1/2] Make SystemProfilerParser.extractVIDAndPID() static There is no need to instantiate a SystemProfilerParser object each time extractVIDAndPID is invoked. Added also `synchronized` keword to avoid reentrance problems if the method is being used in multiple threads. --- .../app/macosx/SystemProfilerParserTest.java | 79 ++++++++++--------- .../src/processing/app/macosx/Platform.java | 2 +- .../app/macosx/SystemProfilerParser.java | 17 ++-- 3 files changed, 46 insertions(+), 52 deletions(-) diff --git a/app/test/processing/app/macosx/SystemProfilerParserTest.java b/app/test/processing/app/macosx/SystemProfilerParserTest.java index 1476822c4ab..a958282a278 100644 --- a/app/test/processing/app/macosx/SystemProfilerParserTest.java +++ b/app/test/processing/app/macosx/SystemProfilerParserTest.java @@ -33,50 +33,51 @@ 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")); - - assertEquals("0X2341_0X0044", new SystemProfilerParser().extractVIDAndPID(output, "/dev/cu.usbmodemfa121")); - assertEquals("0X2341_0X0044", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodemfa121")); - - output = TestHelper.inputStreamToString(SystemProfilerParserTest.class.getResourceAsStream("system_profiler_output2.txt")); - - assertEquals("0X2341_0X8036", new SystemProfilerParser().extractVIDAndPID(output, "/dev/cu.usbmodemfd131")); - assertEquals("0X2341_0X8036", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodemfd131")); - - output = TestHelper.inputStreamToString(SystemProfilerParserTest.class.getResourceAsStream("system_profiler_output3.txt")); - - assertEquals("0X2341_0X8041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/cu.usbmodemfd121")); - assertEquals("0X2341_0X8041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodemfd121")); - - output = TestHelper.inputStreamToString(SystemProfilerParserTest.class.getResourceAsStream("system_profiler_output4.txt")); - - assertEquals("0X2341_0X0041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/cu.usbmodem411")); - assertEquals("0X2341_0X0041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodem411")); - - output = TestHelper.inputStreamToString(SystemProfilerParserTest.class.getResourceAsStream("system_profiler_output5.txt")); - - 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")); + String output = getFileContent("system_profiler_output.txt"); + assertEquals("0X2341_0X0044", extractVIDAndPID(output, "/dev/cu.usbmodemfa121")); + assertEquals("0X2341_0X0044", 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 = getFileContent("system_profiler_output3.txt"); + assertEquals("0X2341_0X8041", extractVIDAndPID(output, "/dev/cu.usbmodemfd121")); + assertEquals("0X2341_0X8041", extractVIDAndPID(output, "/dev/tty.usbmodemfd121")); + + output = getFileContent("system_profiler_output4.txt"); + assertEquals("0X2341_0X0041", extractVIDAndPID(output, "/dev/cu.usbmodem411")); + assertEquals("0X2341_0X0041", extractVIDAndPID(output, "/dev/tty.usbmodem411")); + + output = getFileContent("system_profiler_output5.txt"); + assertEquals("0X2341_0X8041", extractVIDAndPID(output, "/dev/cu.usbmodem621")); + assertEquals("0X2341_0X8041", extractVIDAndPID(output, "/dev/tty.usbmodem621")); + + output = getFileContent("system_profiler_output6.txt"); + assertEquals("0X2341_0X8041", extractVIDAndPID(output, "/dev/cu.usbmodem1421")); + assertEquals("0X2341_0X8041", extractVIDAndPID(output, "/dev/tty.usbmodem1421")); + + 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")); + + output = getFileContent("system_profiler_output8.txt"); + assertEquals("0X03EB_0X2157", extractVIDAndPID(output, "/dev/tty.usbmodemfd132")); + } - 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/arduino-core/src/processing/app/macosx/Platform.java b/arduino-core/src/processing/app/macosx/Platform.java index a7a6a75bb91..31118c47f72 100644 --- a/arduino-core/src/processing/app/macosx/Platform.java +++ b/arduino-core/src/processing/app/macosx/Platform.java @@ -172,7 +172,7 @@ public Map resolveDeviceAttachedTo(String serial, Map Date: Tue, 20 Oct 2015 23:17:18 +0200 Subject: [PATCH 2/2] Fixed parsing for SystemProfiler on Macosx El Capitan Should alleviate #3928 --- .../app/macosx/SystemProfilerParserTest.java | 4 + .../app/macosx/system_profiler_output9.txt | 117 ++++++++++++++++++ .../app/macosx/SystemProfilerParser.java | 2 +- 3 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 app/test/processing/app/macosx/system_profiler_output9.txt diff --git a/app/test/processing/app/macosx/SystemProfilerParserTest.java b/app/test/processing/app/macosx/SystemProfilerParserTest.java index a958282a278..2fce4d00f67 100644 --- a/app/test/processing/app/macosx/SystemProfilerParserTest.java +++ b/app/test/processing/app/macosx/SystemProfilerParserTest.java @@ -74,6 +74,10 @@ public void shouldCorrectlyParse() throws Exception { output = getFileContent("system_profiler_output8.txt"); assertEquals("0X03EB_0X2157", extractVIDAndPID(output, "/dev/tty.usbmodemfd132")); + + // OSX El Capitan + output = getFileContent("system_profiler_output9.txt"); + assertEquals("0X2341_0X8036", extractVIDAndPID(output, "/dev/tty.usbmodemFA121")); } private String getFileContent(String filename) throws IOException { 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 00000000000..ca82cedd4ec --- /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/arduino-core/src/processing/app/macosx/SystemProfilerParser.java b/arduino-core/src/processing/app/macosx/SystemProfilerParser.java index 2ab97f116ad..73f692bf367 100644 --- a/arduino-core/src/processing/app/macosx/SystemProfilerParser.java +++ b/arduino-core/src/processing/app/macosx/SystemProfilerParser.java @@ -73,7 +73,7 @@ public synchronized static String extractVIDAndPID(String output, String serial) 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(); } }