From f2c1e279c96b8cfa79ee015ff0c5b125ef07b9a3 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Sat, 11 Jun 2016 00:55:38 +0300 Subject: [PATCH 1/4] Better checking of program size before uploading // Issue #689 --- platformio/builder/main.py | 3 --- platformio/builder/scripts/atmelavr.py | 5 +++-- platformio/builder/scripts/atmelsam.py | 5 +++-- platformio/builder/tools/pioupload.py | 5 ++--- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/platformio/builder/main.py b/platformio/builder/main.py index d060aab2..8b01c7b2 100644 --- a/platformio/builder/main.py +++ b/platformio/builder/main.py @@ -171,6 +171,3 @@ if "envdump" in COMMAND_LINE_TARGETS: if "idedata" in COMMAND_LINE_TARGETS: print json.dumps(env.DumpIDEData()) env.Exit() - -if set(["upload", "uploadlazy", "program"]) & set(COMMAND_LINE_TARGETS): - env.CheckUploadSize() diff --git a/platformio/builder/scripts/atmelavr.py b/platformio/builder/scripts/atmelavr.py index ae84cf21..97085a03 100644 --- a/platformio/builder/scripts/atmelavr.py +++ b/platformio/builder/scripts/atmelavr.py @@ -142,7 +142,7 @@ AlwaysBuild(target_size) # upload = env.Alias(["upload", "uploadlazy"], target_firm, - [BeforeUpload, "$UPLOADHEXCMD"]) + [env.CheckUploadSize, BeforeUpload, "$UPLOADHEXCMD"]) AlwaysBuild(upload) # @@ -159,7 +159,8 @@ AlwaysBuild(uploadeep) # Target: Upload firmware using external programmer # -program = env.Alias("program", target_firm, [BeforeUpload, "$PROGRAMHEXCMD"]) +program = env.Alias("program", target_firm, + [env.CheckUploadSize, BeforeUpload, "$PROGRAMHEXCMD"]) AlwaysBuild(program) # diff --git a/platformio/builder/scripts/atmelsam.py b/platformio/builder/scripts/atmelsam.py index 79eca59e..f5ad7866 100644 --- a/platformio/builder/scripts/atmelsam.py +++ b/platformio/builder/scripts/atmelsam.py @@ -174,10 +174,11 @@ AlwaysBuild(target_size) # if env.subst("$BOARD") == "zero": - upload = env.Alias(["upload", "uploadlazy"], target_firm, "$UPLOADCMD") + upload = env.Alias(["upload", "uploadlazy"], target_firm, + [env.CheckUploadSize, "$UPLOADCMD"]) else: upload = env.Alias(["upload", "uploadlazy"], target_firm, - [BeforeUpload, "$UPLOADCMD"]) + [env.CheckUploadSize, BeforeUpload, "$UPLOADCMD"]) AlwaysBuild(upload) diff --git a/platformio/builder/tools/pioupload.py b/platformio/builder/tools/pioupload.py index b75501c5..12b083a5 100644 --- a/platformio/builder/tools/pioupload.py +++ b/platformio/builder/tools/pioupload.py @@ -133,7 +133,7 @@ def UploadToDisk(_, target, source, env): # pylint: disable=W0613,W0621 "Please restart your board.") -def CheckUploadSize(env): +def CheckUploadSize(_, target, source, env): # pylint: disable=W0613,W0621 max_size = int(env.get("BOARD_OPTIONS", {}).get("upload", {}).get( "maximum_size", 0)) if max_size == 0 or "SIZETOOL" not in env: @@ -141,8 +141,7 @@ def CheckUploadSize(env): sysenv = environ.copy() sysenv['PATH'] = str(env['ENV']['PATH']) - cmd = [env.subst("$SIZETOOL"), "-B"] - cmd.append(env.subst(join("$BUILD_DIR", "$PROGNAME$PROGSUFFIX"))) + cmd = [env.subst("$SIZETOOL"), "-B", str(source[0])] result = util.exec_command(cmd, env=sysenv) if result['returncode'] != 0: return From ba574667c7d8002b124ee9aad5204dc728421ae6 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Sat, 11 Jun 2016 13:35:02 +0300 Subject: [PATCH 2/4] Add HWID for NodeMCU board --- platformio/boards/espressif.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/platformio/boards/espressif.json b/platformio/boards/espressif.json index 691b4dc6..c8b3a1e8 100644 --- a/platformio/boards/espressif.json +++ b/platformio/boards/espressif.json @@ -133,7 +133,10 @@ "flash_mode": "qio", "ldscript": "esp8266.flash.4m1m.ld", "mcu": "esp8266", - "variant": "nodemcu" + "variant": "nodemcu", + "hwid": [ + ["0x10C4", "0xEA60"] + ] }, "frameworks": ["arduino", "simba"], "name": "NodeMCU 0.9 (ESP-12 Module)", @@ -158,7 +161,10 @@ "flash_mode": "dio", "ldscript": "esp8266.flash.4m1m.ld", "mcu": "esp8266", - "variant": "nodemcu" + "variant": "nodemcu", + "hwid": [ + ["0x10C4", "0xEA60"] + ] }, "frameworks": ["arduino", "simba"], "name": "NodeMCU 1.0 (ESP-12E Module)", From a4345cedc51233249d889ce27b6d7b7a27a85e7e Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Sat, 11 Jun 2016 15:12:27 +0300 Subject: [PATCH 3/4] Refactor board "hwid" option to "hwids" --- platformio/boards/adafruit.json | 6 +- platformio/boards/arduino.json | 32 ++++----- platformio/boards/digistump.json | 2 +- platformio/boards/engduino.json | 6 +- platformio/boards/espressif.json | 4 +- platformio/boards/intel.json | 7 +- platformio/boards/lattice.json | 4 +- platformio/boards/microchippic32.json | 72 +++++++------------ platformio/boards/microduino.json | 2 +- platformio/boards/misc.json | 18 ++--- platformio/boards/sparkfun.json | 8 +-- .../builder/scripts/frameworks/arduino.py | 4 +- platformio/builder/tools/pioupload.py | 51 ++++++++----- 13 files changed, 101 insertions(+), 115 deletions(-) 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" From 5398dbef95f7358dcd93edd4f39ba17a13edbd2e Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Sat, 11 Jun 2016 15:39:06 +0300 Subject: [PATCH 4/4] Improve checking for the program size before uploading // Issue #689 --- HISTORY.rst | 4 ++-- platformio/__init__.py | 2 +- platformio/builder/scripts/atmelavr.py | 12 +++++------ platformio/builder/scripts/atmelsam.py | 7 +++---- platformio/builder/scripts/espressif.py | 2 +- platformio/builder/scripts/intel_arc32.py | 21 +++++--------------- platformio/builder/scripts/microchippic32.py | 13 ++++-------- platformio/builder/scripts/nordicnrf51.py | 5 ++--- platformio/builder/scripts/nxplpc.py | 11 +--------- platformio/builder/scripts/ststm32.py | 3 +-- platformio/builder/tools/pioupload.py | 10 +++++----- platformio/builder/tools/platformio.py | 7 ++++++- 12 files changed, 36 insertions(+), 61 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 7fa2f93c..33903908 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -10,8 +10,8 @@ PlatformIO 2.0 * Added support for `emonPi `__, the OpenEnergyMonitor system (`issue #687 `_) -* Added support for STM32F0 boards for `SPL `__ - framework +* Added support for `SPL `__ + framework for STM32F0 boards (`issue #683 `_) * Added support for `Arduboy DevKit `__, the game system the size of a credit card diff --git a/platformio/__init__.py b/platformio/__init__.py index 17199166..e2520348 100644 --- a/platformio/__init__.py +++ b/platformio/__init__.py @@ -14,7 +14,7 @@ import sys -VERSION = (2, 9, "5.dev2") +VERSION = (2, 9, "5.dev3") __version__ = ".".join([str(s) for s in VERSION]) __title__ = "platformio" diff --git a/platformio/builder/scripts/atmelavr.py b/platformio/builder/scripts/atmelavr.py index 97085a03..2500084e 100644 --- a/platformio/builder/scripts/atmelavr.py +++ b/platformio/builder/scripts/atmelavr.py @@ -142,25 +142,23 @@ AlwaysBuild(target_size) # upload = env.Alias(["upload", "uploadlazy"], target_firm, - [env.CheckUploadSize, BeforeUpload, "$UPLOADHEXCMD"]) + [BeforeUpload, "$UPLOADHEXCMD"]) AlwaysBuild(upload) # # Target: Upload EEPROM data (from EEMEM directive) # -uploadeep = env.Alias( - "uploadeep", - env.ElfToEep(join("$BUILD_DIR", "firmware"), target_elf), - [BeforeUpload, "$UPLOADEEPCMD"]) +uploadeep = env.Alias("uploadeep", + env.ElfToEep(join("$BUILD_DIR", "firmware"), target_elf), + [BeforeUpload, "$UPLOADEEPCMD"]) AlwaysBuild(uploadeep) # # Target: Upload firmware using external programmer # -program = env.Alias("program", target_firm, - [env.CheckUploadSize, BeforeUpload, "$PROGRAMHEXCMD"]) +program = env.Alias("program", target_firm, [BeforeUpload, "$PROGRAMHEXCMD"]) AlwaysBuild(program) # diff --git a/platformio/builder/scripts/atmelsam.py b/platformio/builder/scripts/atmelsam.py index f5ad7866..3ed9f43f 100644 --- a/platformio/builder/scripts/atmelsam.py +++ b/platformio/builder/scripts/atmelsam.py @@ -25,8 +25,6 @@ from platformio.util import get_serialports def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 - env.AutodetectUploadPort() - board_type = env.subst("$BOARD") if "zero" not in board_type: env.Append( @@ -177,8 +175,9 @@ if env.subst("$BOARD") == "zero": upload = env.Alias(["upload", "uploadlazy"], target_firm, [env.CheckUploadSize, "$UPLOADCMD"]) else: - upload = env.Alias(["upload", "uploadlazy"], target_firm, - [env.CheckUploadSize, BeforeUpload, "$UPLOADCMD"]) + upload = env.Alias( + ["upload", "uploadlazy"], target_firm, + [env.AutodetectUploadPort, BeforeUpload, "$UPLOADCMD"]) AlwaysBuild(upload) diff --git a/platformio/builder/scripts/espressif.py b/platformio/builder/scripts/espressif.py index 8f74ca71..7c167489 100644 --- a/platformio/builder/scripts/espressif.py +++ b/platformio/builder/scripts/espressif.py @@ -346,7 +346,7 @@ AlwaysBuild(target_size) target_upload = env.Alias( ["upload", "uploadlazy", "uploadfs"], target_firm, - [lambda target, source, env: env.AutodetectUploadPort(), "$UPLOADCMD"]) + [env.AutodetectUploadPort, "$UPLOADCMD"]) env.AlwaysBuild(target_upload) diff --git a/platformio/builder/scripts/intel_arc32.py b/platformio/builder/scripts/intel_arc32.py index 3852ccfb..fcb97512 100644 --- a/platformio/builder/scripts/intel_arc32.py +++ b/platformio/builder/scripts/intel_arc32.py @@ -21,20 +21,6 @@ from os.path import join from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild, Builder, Default, DefaultEnvironment) - -def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 - - if "program" in COMMAND_LINE_TARGETS: - return - - env.AutodetectUploadPort() - env.Prepend(UPLOADERFLAGS=['"$UPLOAD_PORT"']) - - if env.get("BOARD_OPTIONS", {}).get("upload", {}).get( - "use_1200bps_touch", False): - env.TouchSerialPort("$UPLOAD_PORT", 1200) - - env = DefaultEnvironment() env.Replace( @@ -112,6 +98,9 @@ env.Replace( SIZEPRINTCMD='"$SIZETOOL" -B -d $SOURCES', UPLOADER=join("$PIOPACKAGES_DIR", "tool-arduino101load", "arduino101load"), + UPLOADERFLAGS=[ + '"$UPLOAD_PORT"' + ], DFUUTIL=join("$PIOPACKAGES_DIR", "tool-arduino101load", "dfu-util"), UPLOADCMD='"$UPLOADER" "$DFUUTIL" $SOURCES $UPLOADERFLAGS verbose', @@ -189,8 +178,8 @@ AlwaysBuild(target_size) # Target: Upload firmware # -upload = env.Alias( - ["upload", "uploadlazy"], target_firm, [BeforeUpload, "$UPLOADCMD"]) +upload = env.Alias(["upload", "uploadlazy"], target_firm, + [env.AutodetectUploadPort, "$UPLOADCMD"]) AlwaysBuild(upload) # diff --git a/platformio/builder/scripts/microchippic32.py b/platformio/builder/scripts/microchippic32.py index 01695a96..607baf25 100644 --- a/platformio/builder/scripts/microchippic32.py +++ b/platformio/builder/scripts/microchippic32.py @@ -21,12 +21,6 @@ from os.path import join from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild, Builder, Default, DefaultEnvironment) - -def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 - - env.AutodetectUploadPort() - env.Prepend(UPLOADERFLAGS=["-d", '"$UPLOAD_PORT"']) - env = DefaultEnvironment() env.Replace( @@ -86,7 +80,8 @@ env.Replace( UPLOADER=join("$PIOPACKAGES_DIR", "tool-pic32prog", "pic32prog"), UPLOADERFLAGS=[ - "-b", "$UPLOAD_SPEED" + "-b", "$UPLOAD_SPEED", + "-d", '"$UPLOAD_PORT"' ], UPLOADCMD='"$UPLOADER" $UPLOADERFLAGS $SOURCES', @@ -179,8 +174,8 @@ AlwaysBuild(target_size) # Target: Upload firmware # -upload = env.Alias( - ["upload", "uploadlazy"], target_firm, [BeforeUpload, "$UPLOADCMD"]) +upload = env.Alias(["upload", "uploadlazy"], target_firm, + [env.AutodetectUploadPort, "$UPLOADCMD"]) AlwaysBuild(upload) # diff --git a/platformio/builder/scripts/nordicnrf51.py b/platformio/builder/scripts/nordicnrf51.py index a39e94fa..99f96614 100644 --- a/platformio/builder/scripts/nordicnrf51.py +++ b/platformio/builder/scripts/nordicnrf51.py @@ -63,9 +63,8 @@ AlwaysBuild(target_size) # if env.subst("$BOARD") == "rfduino": - upload = env.Alias( - ["upload", "uploadlazy"], target_firm, - [lambda target, source, env: env.AutodetectUploadPort(), "$UPLOADCMD"]) + upload = env.Alias(["upload", "uploadlazy"], target_firm, + [env.AutodetectUploadPort, "$UPLOADCMD"]) else: upload = env.Alias(["upload", "uploadlazy"], target_firm, env.UploadToDisk) AlwaysBuild(upload) diff --git a/platformio/builder/scripts/nxplpc.py b/platformio/builder/scripts/nxplpc.py index a3f5eed3..727c9c8b 100644 --- a/platformio/builder/scripts/nxplpc.py +++ b/platformio/builder/scripts/nxplpc.py @@ -17,19 +17,10 @@ """ from os.path import join -from shutil import copyfile from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild, Default, DefaultEnvironment, SConscript) - -def UploadToDisk(target, source, env): # pylint: disable=W0613,W0621 - env.AutodetectUploadPort() - copyfile(join(env.subst("$BUILD_DIR"), "firmware.bin"), - join(env.subst("$UPLOAD_PORT"), "firmware.bin")) - print("Firmware has been successfully uploaded.\n" - "Please restart your board.") - env = DefaultEnvironment() SConscript(env.subst(join("$PIOBUILDER_DIR", "scripts", "basearm.py"))) @@ -60,7 +51,7 @@ AlwaysBuild(target_size) # Target: Upload by default .bin file # -upload = env.Alias(["upload", "uploadlazy"], target_firm, UploadToDisk) +upload = env.Alias(["upload", "uploadlazy"], target_firm, env.UploadToDisk) AlwaysBuild(upload) # diff --git a/platformio/builder/scripts/ststm32.py b/platformio/builder/scripts/ststm32.py index 34eee8d8..8dbd70ef 100644 --- a/platformio/builder/scripts/ststm32.py +++ b/platformio/builder/scripts/ststm32.py @@ -100,8 +100,7 @@ AlwaysBuild(target_size) # if "mbed" in env.subst("$FRAMEWORK") and not env.subst("$UPLOAD_PROTOCOL"): - upload = env.Alias(["upload", "uploadlazy"], - target_firm, env.UploadToDisk) + upload = env.Alias(["upload", "uploadlazy"], target_firm, env.UploadToDisk) else: upload = env.Alias(["upload", "uploadlazy"], target_firm, "$UPLOADCMD") AlwaysBuild(upload) diff --git a/platformio/builder/tools/pioupload.py b/platformio/builder/tools/pioupload.py index cdc3ca49..ccc4d625 100644 --- a/platformio/builder/tools/pioupload.py +++ b/platformio/builder/tools/pioupload.py @@ -81,7 +81,7 @@ def WaitForNewSerialPort(env, before): def AutodetectUploadPort(*args, **kwargs): # pylint: disable=unused-argument env = args[0] - print("Looking for upload port/disk...") + print "Looking for upload port/disk..." def _look_for_mbed_disk(): msdlabels = ("mbed", "nucleo", "frdm") @@ -107,7 +107,7 @@ def AutodetectUploadPort(*args, **kwargs): # pylint: disable=unused-argument return port if "UPLOAD_PORT" in env: - print(env.subst("Manually specified: $UPLOAD_PORT")) + print env.subst("Manually specified: $UPLOAD_PORT") return if env.subst("$FRAMEWORK") == "mbed": @@ -124,8 +124,7 @@ def AutodetectUploadPort(*args, **kwargs): # pylint: disable=unused-argument env.Replace(UPLOAD_PORT=_look_for_serial_port()) if env.subst("$UPLOAD_PORT"): - print(env.subst("Auto-detected: $UPLOAD_PORT")) - print("") + print env.subst("Auto-detected: $UPLOAD_PORT") else: env.Exit("Error: Please specify `upload_port` for environment or use " "global `--upload-port` option.\n" @@ -152,19 +151,20 @@ def CheckUploadSize(_, target, source, env): # pylint: disable=W0613,W0621 if max_size == 0 or "SIZETOOL" not in env: return + print "Check program size..." sysenv = environ.copy() sysenv['PATH'] = str(env['ENV']['PATH']) cmd = [env.subst("$SIZETOOL"), "-B", str(source[0])] result = util.exec_command(cmd, env=sysenv) if result['returncode'] != 0: return + print result['out'].strip() line = result['out'].strip().splitlines()[1] values = [v.strip() for v in line.split("\t")] used_size = int(values[0]) + int(values[1]) if used_size > max_size: - print result['out'] env.Exit("Error: The program size (%d bytes) is greater " "than maximum allowed (%s bytes)" % (used_size, max_size)) diff --git a/platformio/builder/tools/platformio.py b/platformio/builder/tools/platformio.py index fb37642d..93d6e885 100644 --- a/platformio/builder/tools/platformio.py +++ b/platformio/builder/tools/platformio.py @@ -94,11 +94,16 @@ def BuildProgram(env): "Error: Nothing to build. Please put your source code files " "to '%s' folder" % env.subst("$PROJECTSRC_DIR")) - return env.Program( + program = env.Program( join("$BUILD_DIR", env.subst("$PROGNAME")), sources ) + if set(["upload", "uploadlazy", "program"]) & set(COMMAND_LINE_TARGETS): + env.AddPostAction(program, env.CheckUploadSize) + + return program + def ProcessFlags(env, flags): for f in flags: