diff --git a/platformio/boards/adafruit.json b/platformio/boards/adafruit.json index cf4018f8..9fb2dda4 100644 --- a/platformio/boards/adafruit.json +++ b/platformio/boards/adafruit.json @@ -6,9 +6,10 @@ "f_cpu": "8000000L", "mcu": "atmega32u4", "usb_product": "Adafruit Flora", - "pid": "0x8004", "variant": "flora", - "vid": "0x239A" + "hwid": [ + ["0x239A", "0x8004"] + ] }, "frameworks": ["arduino"], "name": "Adafruit Flora", @@ -34,9 +35,10 @@ "f_cpu": "8000000L", "mcu": "atmega32u4", "usb_product": "Bluefruit Micro", - "pid": "0x800A", "variant": "bluefruitmicro", - "vid": "0x239A" + "hwid": [ + ["0x239A", "0x800A"] + ] }, "frameworks": ["arduino"], "name": "Adafruit Bluefruit Micro", @@ -82,9 +84,10 @@ "f_cpu": "8000000L", "mcu": "atmega32u4", "usb_product": "Feather 32u4", - "pid": "0x800C", "variant": "feather32u4", - "vid": "0x239C" + "hwid": [ + ["0x239A", "0x800C"] + ] }, "frameworks": ["arduino"], "name": "Adafruit Feather", diff --git a/platformio/boards/arduino.json b/platformio/boards/arduino.json index 54939b59..811faf56 100644 --- a/platformio/boards/arduino.json +++ b/platformio/boards/arduino.json @@ -5,10 +5,12 @@ "extra_flags": "-DARDUINO_ARCH_AVR -DARDUINO_AVR_LILYPAD_USB", "f_cpu": "8000000L", "mcu": "atmega32u4", - "pid": "0x9208", "usb_product": "LilyPad USB", "variant": "leonardo", - "vid": "0x1B4F" + "hwid": [ + ["0x1B4F", "0x9207"], + ["0x1B4F", "0x9208"] + ] }, "frameworks": ["arduino"], "name": "Arduino LilyPad USB", @@ -160,10 +162,14 @@ "extra_flags": "-DARDUINO_ARCH_AVR -DARDUINO_AVR_ESPLORA", "f_cpu": "16000000L", "mcu": "atmega32u4", - "pid": "0x803c", "usb_product": "Arduino Esplora", "variant": "leonardo", - "vid": "0x2341" + "hwid": [ + ["0x2341", "0x003C"], + ["0x2341", "0x803C"], + ["0x2A03", "0x003C"], + ["0x2A03", "0x803C"] + ] }, "frameworks": ["arduino"], "name": "Arduino Esplora", @@ -229,10 +235,14 @@ "extra_flags": "-DARDUINO_ARCH_AVR -DARDUINO_AVR_LEONARDO", "f_cpu": "16000000L", "mcu": "atmega32u4", - "pid": "0x8036", "usb_product": "Arduino Leonardo", "variant": "leonardo", - "vid": "0x2341" + "hwid": [ + ["0x2341", "0x0036"], + ["0x2341", "0x8036"], + ["0x2A03", "0x0036"], + ["0x2A03", "0x8036"] + ] }, "frameworks": ["arduino"], "name": "Arduino Leonardo", @@ -361,10 +371,14 @@ "extra_flags": "-DARDUINO_ARCH_AVR -DARDUINO_AVR_MICRO", "f_cpu": "16000000L", "mcu": "atmega32u4", - "pid": "0x8037", "usb_product": "Arduino Micro", "variant": "micro", - "vid": "0x2341" + "hwid": [ + ["0x2341", "0x0037"], + ["0x2341", "0x8037"], + ["0x2A03", "0x0037"], + ["0x2A03", "0x8037"] + ] }, "frameworks": ["arduino"], "name": "Arduino Micro", @@ -556,10 +570,14 @@ "extra_flags": "-DARDUINO_ARCH_AVR -DARDUINO_AVR_ROBOT_CONTROL", "f_cpu": "16000000L", "mcu": "atmega32u4", - "pid": "0x8038", "usb_product": "Robot Control", "variant": "robot_control", - "vid": "0x2341" + "hwid": [ + ["0x2341", "0x0038"], + ["0x2341", "0x8038"], + ["0x2A03", "0x0038"], + ["0x2A03", "0x8038"] + ] }, "frameworks": ["arduino"], "name": "Arduino Robot Control", @@ -583,10 +601,14 @@ "extra_flags": "-DARDUINO_ARCH_AVR -DARDUINO_AVR_ROBOT_MOTOR", "f_cpu": "16000000L", "mcu": "atmega32u4", - "pid": "0x8039", "usb_product": "Robot Motor", "variant": "robot_motor", - "vid": "0x2341" + "hwid": [ + ["0x2341", "0x0039"], + ["0x2341", "0x8039"], + ["0x2A03", "0x0039"], + ["0x2A03", "0x8039"] + ] }, "frameworks": ["arduino"], "name": "Arduino Robot Motor", @@ -631,10 +653,14 @@ "extra_flags": "-DARDUINO_ARCH_AVR -DARDUINO_AVR_YUN", "f_cpu": "16000000L", "mcu": "atmega32u4", - "pid": "0x8041", "usb_product": "Arduino Yun", "variant": "yun", - "vid": "0x2341" + "hwid": [ + ["0x2341", "0x0041"], + ["0x2341", "0x8041"], + ["0x2A03", "0x0041"], + ["0x2A03", "0x8041"] + ] }, "frameworks": ["arduino"], "name": "Arduino Yun", @@ -660,11 +686,13 @@ "f_cpu": "84000000L", "mcu": "sam3x8e", "cpu": "cortex-m3", - "pid": "0x003e", "usb_product": "Arduino Due", "variant": "arduino_due_x", - "vid": "0x2341", - "ldscript": "sam3x8e.ld" + "ldscript": "sam3x8e.ld", + "hwid": [ + ["0x2341", "0x003D"], + ["0x2A03", "0x003D"] + ] }, "frameworks": ["arduino"], "name": "Arduino Due (Programming Port)", @@ -688,11 +716,13 @@ "f_cpu": "84000000L", "mcu": "sam3x8e", "cpu": "cortex-m3", - "pid": "0x003e", "usb_product": "Arduino Due", "variant": "arduino_due_x", - "vid": "0x2341", - "ldscript": "sam3x8e.ld" + "ldscript": "sam3x8e.ld", + "hwid": [ + ["0x2341", "0x003E"], + ["0x2A03", "0x003E"] + ] }, "frameworks": ["arduino"], "name": "Arduino Due (USB Native Port)", @@ -716,11 +746,13 @@ "f_cpu": "48000000L", "mcu": "samd21g18a", "cpu": "cortex-m0plus", - "pid": "0x804d", "usb_product": "Arduino Zero", "variant": "arduino_zero", - "vid": "0x2341", - "ldscript": "flash_with_bootloader.ld" + "ldscript": "flash_with_bootloader.ld", + "hwid": [ + ["0x2341", "0x804D"], + ["0x03EB", "0x2157"] + ] }, "frameworks": ["arduino"], "name": "Arduino Zero (Programming Port)", @@ -744,11 +776,14 @@ "f_cpu": "48000000L", "mcu": "samd21g18a", "cpu": "cortex-m0plus", - "pid": "0x804d", "usb_product": "Arduino Zero", "variant": "arduino_zero", - "vid": "0x2341", - "ldscript": "flash_with_bootloader.ld" + "ldscript": "flash_with_bootloader.ld", + "hwid": [ + ["0x2341", "0x804D"], + ["0x2341", "0x004D"], + ["0x2341", "0x824D"] + ] }, "frameworks": ["arduino"], "name": "Arduino Zero (USB Native Port)", diff --git a/platformio/boards/digistump.json b/platformio/boards/digistump.json index b367c5de..24634358 100644 --- a/platformio/boards/digistump.json +++ b/platformio/boards/digistump.json @@ -83,10 +83,11 @@ "mcu": "at91sam3x8e", "cpu": "cortex-m3", "ldscript": "sam3x8e.ld", - "pid": "0x078A", "usb_product": "Digistump DigiX", "variant": "digispark_digix", - "vid": "0x16D0" + "hwid": [ + ["0x16D0", "0x078A"] + ] }, "frameworks": ["arduino"], "name": "Digistump DigiX", diff --git a/platformio/boards/engduino.json b/platformio/boards/engduino.json index a08639cf..5e7c1c48 100644 --- a/platformio/boards/engduino.json +++ b/platformio/boards/engduino.json @@ -5,10 +5,11 @@ "core": "arduino", "f_cpu": "8000000L", "mcu": "atmega32u4", - "pid": "0x9208", "usb_product": "EngduinoV1", "variant": "engduinov1", - "vid": "0x1B4F" + "hwid": [ + ["0x1B4F", "0x9208"] + ] }, "frameworks": ["arduino"], "name": "Engduino 1", @@ -32,10 +33,11 @@ "core": "arduino", "f_cpu": "8000000L", "mcu": "atmega32u4", - "pid": "0x9208", "usb_product": "EngduinoV2", "variant": "engduinov2", - "vid": "0x1B4F" + "hwid": [ + ["0x1B4F", "0x9208"] + ] }, "frameworks": ["arduino"], "name": "Engduino 2", @@ -59,10 +61,11 @@ "core": "arduino", "f_cpu": "8000000L", "mcu": "atmega32u4", - "pid": "0x9208", "usb_product": "EngduinoV3", "variant": "engduinov3", - "vid": "0x1B4F" + "hwid": [ + ["0x1B4F", "0x9208"] + ] }, "frameworks": ["arduino"], "name": "Engduino 3", diff --git a/platformio/boards/microduino.json b/platformio/boards/microduino.json index 3336fc2e..64e88ec5 100644 --- a/platformio/boards/microduino.json +++ b/platformio/boards/microduino.json @@ -131,9 +131,10 @@ "core": "arduino", "f_cpu": "16000000L", "mcu": "atmega32u4", - "pid": "0x8036", "variant": "32u4", - "vid": "0x2341" + "hwid": [ + ["0x2341", "0x8036"] + ] }, "frameworks": ["arduino"], "name": "Microduino Core USB (ATmega32U4@16M,5V)", diff --git a/platformio/boards/misc.json b/platformio/boards/misc.json index 87fd21a7..2bbc53ac 100644 --- a/platformio/boards/misc.json +++ b/platformio/boards/misc.json @@ -50,11 +50,12 @@ "f_cpu": "84000000L", "mcu": "at91sam3x8e", "cpu": "cortex-m3", - "pid": "0x003e", "usb_product": "Arduino Due", "variant": "arduino_due_x", - "vid": "0x2341", - "ldscript": "sam3x8e.ld" + "ldscript": "sam3x8e.ld", + "hwid": [ + ["0x2341", "0x003E"] + ] }, "frameworks": ["arduino"], "name": "SainSmart Due (Programming Port)", @@ -78,11 +79,12 @@ "f_cpu": "84000000L", "mcu": "at91sam3x8e", "cpu": "cortex-m3", - "pid": "0x003e", "usb_product": "Arduino Due", "variant": "arduino_due_x", - "vid": "0x2341", - "ldscript": "sam3x8e.ld" + "ldscript": "sam3x8e.ld", + "hwid": [ + ["0x2341", "0x003E"] + ] }, "frameworks": ["arduino"], "name": "SainSmart Due (USB Native Port)", @@ -322,10 +324,11 @@ "extra_flags": "-DARDUINO_ARCH_AVR", "f_cpu": "16000000L", "mcu": "atmega32u4", - "pid": "0x8036", "usb_product": "RedBearLab Blend", "variant": "leonardo", - "vid": "0x2341" + "hwid": [ + ["0x2341", "0x8036"] + ] }, "frameworks": ["arduino"], "name": "RedBearLab Blend", @@ -350,10 +353,11 @@ "extra_flags": "-DARDUINO_ARCH_AVR", "f_cpu": "8000000L", "mcu": "atmega32u4", - "pid": "0x2404", "usb_product": "RedBearLab Blend", "variant": "micro", - "vid": "0x03EB" + "hwid": [ + ["0x03EB", "0x2404"] + ] }, "frameworks": ["arduino"], "name": "RedBearLab Blend Micro 3.3V/8MHz", @@ -378,10 +382,11 @@ "extra_flags": "-DARDUINO_ARCH_AVR", "f_cpu": "16000000L", "mcu": "atmega32u4", - "pid": "0x2404", "usb_product": "RedBearLab Blend", "variant": "micro", - "vid": "0x03EB" + "hwid": [ + ["0x03EB", "0x2404"] + ] }, "frameworks": ["arduino"], "name": "RedBearLab Blend Micro 3.3V/16MHz (overclock)", @@ -428,10 +433,11 @@ "extra_flags": "-DARDUINO_ARCH_AVR -DAVR_LEONARDO", "f_cpu": "8000000L", "mcu": "atmega32u4", - "pid": "0x6096", "usb_product": "LightUp", "variant": "leonardo", - "vid": "0x1d50" + "hwid": [ + ["0x1d50", "0x6096"] + ] }, "frameworks": ["arduino"], "name": "LightUp", @@ -524,9 +530,13 @@ "f_cpu": "8000000L", "mcu": "atmega32u4", "variant" : "quirkbot", - "vid": "0xf055", - "pid": "0xf055", - "usb_product": "Quirkbot" + "usb_product": "Quirkbot", + "hwid": [ + ["0x2886", "0xf004"], + ["0x2886", "0xf005"], + ["0x2886", "0xf006"], + ["0x2886", "0xf007"] + ] }, "frameworks": ["arduino"], "name": "Quirkbot", diff --git a/platformio/boards/sparkfun.json b/platformio/boards/sparkfun.json index 79285509..6bf11499 100644 --- a/platformio/boards/sparkfun.json +++ b/platformio/boards/sparkfun.json @@ -26,10 +26,12 @@ "extra_flags": "-DARDUINO_ARCH_AVR -DAVR_PROMICRO16", "f_cpu": "16000000L", "mcu": "atmega32u4", - "pid": "0x9206", "usb_product": "SparkFun Pro Micro", "variant": "sparkfun_promicro", - "vid": "0x1B4F" + "hwid": [ + ["0x1B4F", "0x9205"], + ["0x1B4F", "0x9206"] + ] }, "frameworks": ["arduino"], "name": "SparkFun Pro Micro 5V/16MHz", @@ -53,10 +55,12 @@ "extra_flags": "-DARDUINO_ARCH_AVR -DAVR_PROMICRO8", "f_cpu": "8000000L", "mcu": "atmega32u4", - "pid": "0x9204", "usb_product": "SparkFun Pro Micro", "variant": "sparkfun_promicro", - "vid": "0x1B4F" + "hwid": [ + ["0x1B4F", "0x9203"], + ["0x1B4F", "0x9204"] + ] }, "frameworks": ["arduino"], "name": "SparkFun Pro Micro 3.3V/8MHz", @@ -80,10 +84,12 @@ "extra_flags": "-DARDUINO_ARCH_AVR -DAVR_FIOV3", "f_cpu": "8000000L", "mcu": "atmega32u4", - "pid": "0xF101", "usb_product": "SparkFun Fio v3", "variant": "sparkfun_promicro", - "vid": "0x1B4F" + "hwid": [ + ["0x1B4F", "0xF100"], + ["0x1B4F", "0xF101"] + ] }, "frameworks": ["arduino"], "name": "SparkFun Fio V3 3.3V/8MHz", @@ -107,10 +113,12 @@ "extra_flags": "-DARDUINO_ARCH_AVR -DAVR_MAKEYMAKEY", "f_cpu": "16000000L", "mcu": "atmega32u4", - "pid": "0x2B75", "usb_product": "SparkFun MaKey", "variant": "sparkfun_promicro", - "vid": "0x1B4F" + "hwid": [ + ["0x1B4F", "0x2B74"], + ["0x1B4F", "0x2B75"] + ] }, "frameworks": ["arduino"], "name": "SparkFun Makey Makey", diff --git a/platformio/builder/scripts/frameworks/arduino.py b/platformio/builder/scripts/frameworks/arduino.py index 74deb272..ce1d4333 100644 --- a/platformio/builder/scripts/frameworks/arduino.py +++ b/platformio/builder/scripts/frameworks/arduino.py @@ -118,8 +118,8 @@ ARDUINO_VERSION = int( ARDUINO_USBDEFINES = [] if "usb_product" in BOARD_BUILDOPTS: ARDUINO_USBDEFINES = [ - "USB_VID=${BOARD_OPTIONS['build']['vid']}", - "USB_PID=${BOARD_OPTIONS['build']['pid']}", + "USB_VID=${BOARD_OPTIONS['build']['hwid'][0][0]}", + "USB_PID=${BOARD_OPTIONS['build']['hwid'][0][1]}", 'USB_PRODUCT=\\"%s\\"' % (env.subst( "${BOARD_OPTIONS['build']['usb_product']}").replace('"', "")), 'USB_MANUFACTURER=\\"%s\\"' % (env.subst( diff --git a/platformio/builder/tools/pioupload.py b/platformio/builder/tools/pioupload.py index 5fe2e416..814e6a95 100644 --- a/platformio/builder/tools/pioupload.py +++ b/platformio/builder/tools/pioupload.py @@ -84,17 +84,14 @@ def AutodetectUploadPort(env): break else: board_build_opts = env.get("BOARD_OPTIONS", {}).get("build", {}) - board_hwid = ("%s:%s" % ( - board_build_opts.get("vid"), - board_build_opts.get("pid") - )).replace("0x", "") - for item in get_serialports(): if "VID:PID" not in item['hwid']: continue env.Replace(UPLOAD_PORT=item['port']) - if board_hwid in item['hwid']: - break + for hwid in board_build_opts.get("hwid"): + board_hwid = ("%s:%s" % (hwid[0], hwid[1])).replace("0x", "") + if board_hwid in item['hwid']: + break if "UPLOAD_PORT" in env: print "Auto-detected UPLOAD_PORT/DISK: %s" % env['UPLOAD_PORT']