diff --git a/platformio/boards/adafruit.json b/platformio/boards/adafruit.json index 9fb2dda4..6200608e 100644 --- a/platformio/boards/adafruit.json +++ b/platformio/boards/adafruit.json @@ -7,7 +7,7 @@ "mcu": "atmega32u4", "usb_product": "Adafruit Flora", "variant": "flora", - "hwid": [ + "hwids": [ ["0x239A", "0x8004"] ] }, @@ -36,7 +36,7 @@ "mcu": "atmega32u4", "usb_product": "Bluefruit Micro", "variant": "bluefruitmicro", - "hwid": [ + "hwids": [ ["0x239A", "0x800A"] ] }, @@ -85,7 +85,7 @@ "mcu": "atmega32u4", "usb_product": "Feather 32u4", "variant": "feather32u4", - "hwid": [ + "hwids": [ ["0x239A", "0x800C"] ] }, diff --git a/platformio/boards/arduino.json b/platformio/boards/arduino.json index 602c066e..dab169e5 100644 --- a/platformio/boards/arduino.json +++ b/platformio/boards/arduino.json @@ -7,7 +7,7 @@ "mcu": "atmega32u4", "usb_product": "LilyPad USB", "variant": "leonardo", - "hwid": [ + "hwids": [ ["0x1B4F", "0x9207"], ["0x1B4F", "0x9208"] ] @@ -164,7 +164,7 @@ "mcu": "atmega32u4", "usb_product": "Arduino Esplora", "variant": "leonardo", - "hwid": [ + "hwids": [ ["0x2341", "0x003C"], ["0x2341", "0x803C"], ["0x2A03", "0x003C"], @@ -237,7 +237,7 @@ "mcu": "atmega32u4", "usb_product": "Arduino Leonardo", "variant": "leonardo", - "hwid": [ + "hwids": [ ["0x2341", "0x0036"], ["0x2341", "0x8036"], ["0x2A03", "0x0036"], @@ -268,7 +268,7 @@ "mcu": "atmega32u4", "usb_product": "Arduino Leonardo ETH", "variant": "leonardo", - "hwid": [ + "hwids": [ ["0x2A03", "0x8040"], ["0x2A03", "0x0040"] ] @@ -402,7 +402,7 @@ "mcu": "atmega32u4", "usb_product": "Arduino Micro", "variant": "micro", - "hwid": [ + "hwids": [ ["0x2341", "0x0037"], ["0x2341", "0x8037"], ["0x2A03", "0x0037"], @@ -601,7 +601,7 @@ "mcu": "atmega32u4", "usb_product": "Robot Control", "variant": "robot_control", - "hwid": [ + "hwids": [ ["0x2341", "0x0038"], ["0x2341", "0x8038"], ["0x2A03", "0x0038"], @@ -632,7 +632,7 @@ "mcu": "atmega32u4", "usb_product": "Robot Motor", "variant": "robot_motor", - "hwid": [ + "hwids": [ ["0x2341", "0x0039"], ["0x2341", "0x8039"], ["0x2A03", "0x0039"], @@ -662,7 +662,7 @@ "f_cpu": "16000000L", "mcu": "atmega328p", "variant": "standard", - "hwid": [ + "hwids": [ ["0x2341", "0x0043"], ["0x2341", "0x0001"], ["0x2A03", "0x0043"] @@ -689,7 +689,7 @@ "mcu": "atmega32u4", "usb_product": "Arduino Yun", "variant": "yun", - "hwid": [ + "hwids": [ ["0x2341", "0x0041"], ["0x2341", "0x8041"], ["0x2A03", "0x0041"], @@ -721,7 +721,7 @@ "mcu": "atmega32u4", "usb_product": "Arduino Yun Mini", "variant": "yun", - "hwid": [ + "hwids": [ ["0x2A03", "0x8050"], ["0x2A03", "0x0050"] ] @@ -751,7 +751,7 @@ "mcu": "atmega32u4", "usb_product": "Arduino Industrial 101", "variant": "yun", - "hwid": [ + "hwids": [ ["0x2A03", "0x8056"], ["0x2A03", "0x0056"] ] @@ -781,7 +781,7 @@ "mcu": "atmega32u4", "usb_product": "Linino One", "variant": "yun", - "hwid": [ + "hwids": [ ["0x2A03", "0x8001"], ["0x2A03", "0x0001"] ] @@ -813,7 +813,7 @@ "usb_product": "Arduino Due", "variant": "arduino_due_x", "ldscript": "sam3x8e.ld", - "hwid": [ + "hwids": [ ["0x2341", "0x003D"], ["0x2A03", "0x003D"] ] @@ -843,7 +843,7 @@ "usb_product": "Arduino Due", "variant": "arduino_due_x", "ldscript": "sam3x8e.ld", - "hwid": [ + "hwids": [ ["0x2341", "0x003E"], ["0x2A03", "0x003E"] ] @@ -873,7 +873,7 @@ "usb_product": "Arduino Zero", "variant": "arduino_zero", "ldscript": "flash_with_bootloader.ld", - "hwid": [ + "hwids": [ ["0x2341", "0x804D"], ["0x03EB", "0x2157"] ] @@ -903,7 +903,7 @@ "usb_product": "Arduino Zero", "variant": "arduino_zero", "ldscript": "flash_with_bootloader.ld", - "hwid": [ + "hwids": [ ["0x2341", "0x804D"], ["0x2341", "0x004D"], ["0x2341", "0x824D"] diff --git a/platformio/boards/digistump.json b/platformio/boards/digistump.json index 24634358..87e4b4b5 100644 --- a/platformio/boards/digistump.json +++ b/platformio/boards/digistump.json @@ -85,7 +85,7 @@ "ldscript": "sam3x8e.ld", "usb_product": "Digistump DigiX", "variant": "digispark_digix", - "hwid": [ + "hwids": [ ["0x16D0", "0x078A"] ] }, diff --git a/platformio/boards/engduino.json b/platformio/boards/engduino.json index 5e7c1c48..9d76376e 100644 --- a/platformio/boards/engduino.json +++ b/platformio/boards/engduino.json @@ -7,7 +7,7 @@ "mcu": "atmega32u4", "usb_product": "EngduinoV1", "variant": "engduinov1", - "hwid": [ + "hwids": [ ["0x1B4F", "0x9208"] ] }, @@ -35,7 +35,7 @@ "mcu": "atmega32u4", "usb_product": "EngduinoV2", "variant": "engduinov2", - "hwid": [ + "hwids": [ ["0x1B4F", "0x9208"] ] }, @@ -63,7 +63,7 @@ "mcu": "atmega32u4", "usb_product": "EngduinoV3", "variant": "engduinov3", - "hwid": [ + "hwids": [ ["0x1B4F", "0x9208"] ] }, diff --git a/platformio/boards/espressif.json b/platformio/boards/espressif.json index c8b3a1e8..a3db71e2 100644 --- a/platformio/boards/espressif.json +++ b/platformio/boards/espressif.json @@ -134,7 +134,7 @@ "ldscript": "esp8266.flash.4m1m.ld", "mcu": "esp8266", "variant": "nodemcu", - "hwid": [ + "hwids": [ ["0x10C4", "0xEA60"] ] }, @@ -162,7 +162,7 @@ "ldscript": "esp8266.flash.4m1m.ld", "mcu": "esp8266", "variant": "nodemcu", - "hwid": [ + "hwids": [ ["0x10C4", "0xEA60"] ] }, diff --git a/platformio/boards/intel.json b/platformio/boards/intel.json index e74bdd39..33e35e3c 100644 --- a/platformio/boards/intel.json +++ b/platformio/boards/intel.json @@ -8,7 +8,7 @@ "mcu": "ARCv2EM", "usb_product": "Genuino 101", "variant": "arduino_101", - "hwid": [ + "hwids": [ ["0x8087", "0x0AB6"] ] }, @@ -18,11 +18,8 @@ "upload": { "maximum_ram_size": 81920, "maximum_size": 196608, - "use_1200bps_touch": true, "protocol": "script", - "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": false + "require_upload_port" : true }, "url": "https://www.arduino.cc/en/Main/ArduinoBoard101", "vendor": "Intel" diff --git a/platformio/boards/lattice.json b/platformio/boards/lattice.json index ce31a2e4..02e699f9 100755 --- a/platformio/boards/lattice.json +++ b/platformio/boards/lattice.json @@ -6,7 +6,7 @@ "cpu": "fpga", "mcu": "ice40hx1k", "variant": "1k", - "hwid": [ + "hwids": [ ["0x0403", "0x6010"] ] }, @@ -28,7 +28,7 @@ "cpu": "fpga", "mcu": "ice40hx1k", "variant": "1k", - "hwid": [ + "hwids": [ ["0x0403", "0x6010"] ] }, diff --git a/platformio/boards/microchippic32.json b/platformio/boards/microchippic32.json index b5a949be..83af9110 100644 --- a/platformio/boards/microchippic32.json +++ b/platformio/boards/microchippic32.json @@ -16,8 +16,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://store.digilentinc.com/cerebot-32mx4-limited-time-see-chipkit-pro-mx4/", "vendor": "Digilent" @@ -40,8 +39,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://www.microchip.com/Developmenttools/ProductDetails.aspx?PartNO=TDGL004", "vendor": "Digilent" @@ -64,8 +62,7 @@ "maximum_size": 126976, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://store.digilentinc.com/chipkit-mx3-microcontroller-board-with-pmod-headers/", "vendor": "Digilent" @@ -88,8 +85,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://store.digilentinc.com/chipkit-pro-mx4-embedded-systems-trainer-board/", "vendor": "Digilent" @@ -112,8 +108,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://store.digilentinc.com/chipkit-pro-mx7-advanced-peripherals-embedded-systems-trainer-board/", "vendor": "Digilent" @@ -136,8 +131,7 @@ "maximum_size": 122880, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://www.element14.com/community/community/knode/dev_platforms_kits/element14_dev_kits/microchip-chipkit/chipkit_pi", "vendor": "element14" @@ -160,8 +154,7 @@ "maximum_size": 126976, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://store.digilentinc.com/chipkit-cmod-breadboardable-mz-microcontroller-board/", "vendor": "Digilent" @@ -184,8 +177,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://www.seeedstudio.com/wiki/CUI32Stem", "vendor": "SeeedStudio" @@ -208,8 +200,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://www.schmalzhaus.com/UBW32/", "vendor": "UBW32" @@ -232,8 +223,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://www.schmalzhaus.com/UBW32/", "vendor": "UBW32" @@ -256,8 +246,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://www.pontech.com/productdisplay/uav100", "vendor": "PONTECH" @@ -280,8 +269,7 @@ "maximum_size": 122880, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://store.digilentinc.com/chipkit-dp32-dip-package-prototyping-microcontroller-board/", "vendor": "Digilent" @@ -304,8 +292,7 @@ "maximum_size": 122880, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://fubarino.org/mini/", "vendor": "Fubarino" @@ -328,8 +315,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://fubarino.org/sd/index.html", "vendor": "Fubarino" @@ -352,8 +338,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://store.digilentinc.com/chipkit-max32-microcontroller-board-with-mega-r3-headers/", "vendor": "Digilent" @@ -376,8 +361,7 @@ "maximum_size": 258048, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "https://www.olimex.com/Products/Duino/PIC32/PIC32-PINGUINO/open-source-hardware", "vendor": "Olimex" @@ -400,8 +384,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://www.4dsystems.com.au/product/Picadillo_35T/", "vendor": "4DSystems" @@ -424,8 +407,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://quick240.com/quicki/", "vendor": "PONTECH" @@ -448,8 +430,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://store.digilentinc.com/chipkit-uc32-basic-microcontroller-board-with-uno-r3-headers/", "vendor": "Digilent" @@ -472,8 +453,7 @@ "maximum_size": 126976, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://store.digilentinc.com/chipkit-uno32-basic-microcontroller-board-retired-see-chipkit-uc32/", "vendor": "Digilent" @@ -496,8 +476,7 @@ "maximum_size": 520192, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://store.digilentinc.com/chipkit-wf32-wifi-enabled-microntroller-board-with-uno-r3-headers/", "vendor": "Digilent" @@ -520,8 +499,7 @@ "maximum_size": 2080768, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://store.digilentinc.com/chipkit-wi-fire-wifi-enabled-mz-microcontroller-board/", "vendor": "Digilent" @@ -544,8 +522,7 @@ "maximum_size": 2080768, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://store.digilentinc.com/", "vendor": "Digilent" @@ -568,8 +545,7 @@ "maximum_size": 122880, "protocol": "stk500v2", "require_upload_port" : true, - "speed": 115200, - "wait_for_upload_port": true + "speed": 115200 }, "url": "http://shop.openbci.com/", "vendor": "OpenBCI" diff --git a/platformio/boards/microduino.json b/platformio/boards/microduino.json index 64e88ec5..1a0aa341 100644 --- a/platformio/boards/microduino.json +++ b/platformio/boards/microduino.json @@ -132,7 +132,7 @@ "f_cpu": "16000000L", "mcu": "atmega32u4", "variant": "32u4", - "hwid": [ + "hwids": [ ["0x2341", "0x8036"] ] }, diff --git a/platformio/boards/misc.json b/platformio/boards/misc.json index c91426b6..a8cc9e5a 100644 --- a/platformio/boards/misc.json +++ b/platformio/boards/misc.json @@ -75,7 +75,7 @@ "usb_product": "Arduino Due", "variant": "arduino_due_x", "ldscript": "sam3x8e.ld", - "hwid": [ + "hwids": [ ["0x2341", "0x003E"] ] }, @@ -104,7 +104,7 @@ "usb_product": "Arduino Due", "variant": "arduino_due_x", "ldscript": "sam3x8e.ld", - "hwid": [ + "hwids": [ ["0x2341", "0x003E"] ] }, @@ -348,7 +348,7 @@ "mcu": "atmega32u4", "usb_product": "RedBearLab Blend", "variant": "leonardo", - "hwid": [ + "hwids": [ ["0x2341", "0x8036"] ] }, @@ -377,7 +377,7 @@ "mcu": "atmega32u4", "usb_product": "RedBearLab Blend", "variant": "micro", - "hwid": [ + "hwids": [ ["0x03EB", "0x2404"] ] }, @@ -406,7 +406,7 @@ "mcu": "atmega32u4", "usb_product": "RedBearLab Blend", "variant": "micro", - "hwid": [ + "hwids": [ ["0x03EB", "0x2404"] ] }, @@ -457,7 +457,7 @@ "mcu": "atmega32u4", "usb_product": "LightUp", "variant": "leonardo", - "hwid": [ + "hwids": [ ["0x1d50", "0x6096"] ] }, @@ -553,7 +553,7 @@ "mcu": "atmega32u4", "variant" : "quirkbot", "usb_product": "Quirkbot", - "hwid": [ + "hwids": [ ["0x2886", "0xf004"], ["0x2886", "0xf005"], ["0x2886", "0xf006"], @@ -770,7 +770,7 @@ "mcu": "atmega32u4", "usb_product": "Arduboy", "variant": "leonardo", - "hwid": [ + "hwids": [ ["0x2341", "0x0036"], ["0x2341", "0x8036"] ] @@ -800,7 +800,7 @@ "mcu": "atmega32u4", "usb_product": "Arduboy DevKit", "variant": "leonardo", - "hwid": [ + "hwids": [ ["0x2341", "0x0036"], ["0x2341", "0x8036"] ] diff --git a/platformio/boards/sparkfun.json b/platformio/boards/sparkfun.json index 6bf11499..44d5cb52 100644 --- a/platformio/boards/sparkfun.json +++ b/platformio/boards/sparkfun.json @@ -28,7 +28,7 @@ "mcu": "atmega32u4", "usb_product": "SparkFun Pro Micro", "variant": "sparkfun_promicro", - "hwid": [ + "hwids": [ ["0x1B4F", "0x9205"], ["0x1B4F", "0x9206"] ] @@ -57,7 +57,7 @@ "mcu": "atmega32u4", "usb_product": "SparkFun Pro Micro", "variant": "sparkfun_promicro", - "hwid": [ + "hwids": [ ["0x1B4F", "0x9203"], ["0x1B4F", "0x9204"] ] @@ -86,7 +86,7 @@ "mcu": "atmega32u4", "usb_product": "SparkFun Fio v3", "variant": "sparkfun_promicro", - "hwid": [ + "hwids": [ ["0x1B4F", "0xF100"], ["0x1B4F", "0xF101"] ] @@ -115,7 +115,7 @@ "mcu": "atmega32u4", "usb_product": "SparkFun MaKey", "variant": "sparkfun_promicro", - "hwid": [ + "hwids": [ ["0x1B4F", "0x2B74"], ["0x1B4F", "0x2B75"] ] diff --git a/platformio/builder/scripts/frameworks/arduino.py b/platformio/builder/scripts/frameworks/arduino.py index d3170687..a81d29b3 100644 --- a/platformio/builder/scripts/frameworks/arduino.py +++ b/platformio/builder/scripts/frameworks/arduino.py @@ -179,8 +179,8 @@ ARDUINO_VERSION = int( ARDUINO_USBDEFINES = [] if "usb_product" in BOARD_BUILDOPTS: ARDUINO_USBDEFINES = [ - "USB_VID=${BOARD_OPTIONS['build']['hwid'][0][0]}", - "USB_PID=${BOARD_OPTIONS['build']['hwid'][0][1]}", + "USB_VID=${BOARD_OPTIONS['build']['hwids'][0][0]}", + "USB_PID=${BOARD_OPTIONS['build']['hwids'][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 12b083a5..cdc3ca49 100644 --- a/platformio/builder/tools/pioupload.py +++ b/platformio/builder/tools/pioupload.py @@ -79,40 +79,53 @@ def WaitForNewSerialPort(env, before): return new_port -def AutodetectUploadPort(env): - if "UPLOAD_PORT" in env: - return +def AutodetectUploadPort(*args, **kwargs): # pylint: disable=unused-argument + env = args[0] + print("Looking for upload port/disk...") - if env.subst("$FRAMEWORK") == "mbed": + def _look_for_mbed_disk(): msdlabels = ("mbed", "nucleo", "frdm") for item in util.get_logicaldisks(): if (not item['name'] or not any([l in item['name'].lower() for l in msdlabels])): continue - env.Replace(UPLOAD_PORT=item['disk']) - break + return item['disk'] + return None + + def _look_for_serial_port(): + port = None + board_hwids = env.get("BOARD_OPTIONS", {}).get( + "build", {}).get("hwids", []) + for item in util.get_serialports(): + if "VID:PID" not in item['hwid']: + continue + port = item['port'] + for hwid in board_hwids: + hwid_str = ("%s:%s" % (hwid[0], hwid[1])).replace("0x", "") + if hwid_str in item['hwid']: + return port + return port + + if "UPLOAD_PORT" in env: + print(env.subst("Manually specified: $UPLOAD_PORT")) + return + + if env.subst("$FRAMEWORK") == "mbed": + env.Replace(UPLOAD_PORT=_look_for_mbed_disk()) else: if (system() == "Linux" and not isfile("/etc/udev/99-platformio-udev.rules")): - print ( + print( "\nWarning! Please install `99-platformio-udev.rules` and " "check that your board's PID and VID are listed in the rules." "\n https://raw.githubusercontent.com/platformio/platformio" "/develop/scripts/99-platformio-udev.rules\n" ) + env.Replace(UPLOAD_PORT=_look_for_serial_port()) - board_build_opts = env.get("BOARD_OPTIONS", {}).get("build", {}) - for item in util.get_serialports(): - if "VID:PID" not in item['hwid']: - continue - env.Replace(UPLOAD_PORT=item['port']) - 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'] + if env.subst("$UPLOAD_PORT"): + print(env.subst("Auto-detected: $UPLOAD_PORT")) + print("") else: env.Exit("Error: Please specify `upload_port` for environment or use " "global `--upload-port` option.\n"