mirror of
https://github.com/arduino/Arduino.git
synced 2024-12-10 21:24:12 +01:00
Merge pull request #4006 from cmaglie/sys_prof_parse_fix
SystemProfilerParse fix for OSX El Capitan
This commit is contained in:
commit
a396f2ad53
@ -33,50 +33,55 @@ import org.junit.Test;
|
|||||||
import processing.app.TestHelper;
|
import processing.app.TestHelper;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static processing.app.macosx.SystemProfilerParser.extractVIDAndPID;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
public class SystemProfilerParserTest {
|
public class SystemProfilerParserTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldCorrectlyParse() throws Exception {
|
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"));
|
output = getFileContent("system_profiler_output2.txt");
|
||||||
assertEquals("0X2341_0X0044", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodemfa121"));
|
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"));
|
output = getFileContent("system_profiler_output4.txt");
|
||||||
assertEquals("0X2341_0X8036", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodemfd131"));
|
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"));
|
output = getFileContent("system_profiler_output6.txt");
|
||||||
assertEquals("0X2341_0X8041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodemfd121"));
|
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"));
|
output = getFileContent("system_profiler_output8.txt");
|
||||||
assertEquals("0X2341_0X0041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodem411"));
|
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"));
|
private String getFileContent(String filename) throws IOException {
|
||||||
assertEquals("0X2341_0X8041", new SystemProfilerParser().extractVIDAndPID(output, "/dev/tty.usbmodem621"));
|
InputStream resource = SystemProfilerParserTest.class.getResourceAsStream(filename);
|
||||||
|
return TestHelper.inputStreamToString(resource);
|
||||||
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"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
117
app/test/processing/app/macosx/system_profiler_output9.txt
Normal file
117
app/test/processing/app/macosx/system_profiler_output9.txt
Normal 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
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -172,7 +172,7 @@ public class Platform extends processing.app.Platform {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String vidPid = new SystemProfilerParser().extractVIDAndPID(devicesListOutput, serial);
|
String vidPid = SystemProfilerParser.extractVIDAndPID(devicesListOutput, serial);
|
||||||
|
|
||||||
if (vidPid == null) {
|
if (vidPid == null) {
|
||||||
return super.resolveDeviceAttachedTo(serial, packages, devicesListOutput);
|
return super.resolveDeviceAttachedTo(serial, packages, devicesListOutput);
|
||||||
|
@ -19,19 +19,12 @@ public class SystemProfilerParser {
|
|||||||
private static final String DEV_TTY_USBMODEM = "/dev/tty.usbmodem";
|
private static final String DEV_TTY_USBMODEM = "/dev/tty.usbmodem";
|
||||||
private static final String DEV_CU_USBMODEM = "/dev/cu.usbmodem";
|
private static final String DEV_CU_USBMODEM = "/dev/cu.usbmodem";
|
||||||
|
|
||||||
private final Pattern vidRegex;
|
private static final Pattern serialNumberRegex = Pattern.compile("^Serial Number: (.+)$");
|
||||||
private final Pattern serialNumberRegex;
|
private static final Pattern locationRegex = Pattern.compile("^Location ID: (.+)$");
|
||||||
private final Pattern locationRegex;
|
private static final Pattern pidRegex = Pattern.compile("^Product ID: (.+)$");
|
||||||
private final Pattern pidRegex;
|
private static final Pattern vidRegex = Pattern.compile("^Vendor ID: (.+)$");
|
||||||
|
|
||||||
public SystemProfilerParser() {
|
public synchronized static String extractVIDAndPID(String output, String serial) throws IOException {
|
||||||
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 {
|
|
||||||
BufferedReader reader = new BufferedReader(new StringReader(output));
|
BufferedReader reader = new BufferedReader(new StringReader(output));
|
||||||
|
|
||||||
String devicePrefix;
|
String devicePrefix;
|
||||||
@ -80,7 +73,7 @@ public class SystemProfilerParser {
|
|||||||
String computedDevicePath = device.get(DEVICE_PATH);
|
String computedDevicePath = device.get(DEVICE_PATH);
|
||||||
String computedDevicePathMinusChar = computedDevicePath.substring(0, computedDevicePath.length() - 1);
|
String computedDevicePathMinusChar = computedDevicePath.substring(0, computedDevicePath.length() - 1);
|
||||||
String serialMinusChar = serial.substring(0, serial.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();
|
return (device.get(VID) + "_" + device.get(PID)).toUpperCase();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user