mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-30 18:17:13 +02:00
Merge branch 'develop' into feature/platformio-30
* develop: Typo fix Version bump to 2.9.4 Show "udev" warning only for the Linux OS while upload firmware Version bump to 2.9.3 Notify Linux user to install PlatformIO udev rules Add new article Add support for Arduboy Remove unused imports Refactor firmware uploading to the embedded boards with SAM-BA bootloader Fix firmware uploading to the embedded boards with SAM-BA bootloader Add explanation about waiting for the new serial port Hook when new serial port is the same in boot mode Revert back some code linked with uploading to Leonardo/Due # Conflicts: # platformio/__init__.py # platformio/boards/misc.json # platformio/builder/scripts/atmelavr.py # platformio/builder/scripts/atmelsam.py # platformio/builder/tools/pioupload.py
This commit is contained in:
13
HISTORY.rst
13
HISTORY.rst
@ -15,6 +15,19 @@ PlatformIO 3.0
|
||||
PlatformIO 2.0
|
||||
--------------
|
||||
|
||||
2.9.4 (2016-06-04)
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Show ``udev`` warning only for the Linux OS while uploading firmware
|
||||
|
||||
2.9.3 (2016-06-03)
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Added support for `Arduboy <https://www.arduboy.com>`__, the game system
|
||||
the size of a credit card
|
||||
* Updated `99-platformio-udev.rules <https://github.com/platformio/platformio/blob/develop/scripts/99-platformio-udev.rules>`__ for Linux OS
|
||||
* Refactored firmware uploading to the embedded boards with SAM-BA bootloader
|
||||
|
||||
2.9.2 (2016-06-02)
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
@ -23,6 +23,7 @@ Here are recent articles about PlatformIO:
|
||||
2016
|
||||
^^^^
|
||||
|
||||
* Jun 3, 2016 - **Daniel Eichhorn** - `ESP8266: Continuous Delivery Pipeline – Push To Production <http://blog.squix.org/2016/06/esp8266-continuous-delivery-pipeline-push-to-production.html>`_
|
||||
* May 30, 2016 - **Ron Moerman** - `IoT Development with PlatformIO <https://electronicsworkbench.io/blog/platformio>`_
|
||||
* May 29, 2016 - **Chris Synan** - `Reverse Engineer RF Remote Controller for IoT! <http://www.instructables.com/id/Reverse-Engineer-RF-Remote-Controller-for-IoT/?ALLSTEPS>`_
|
||||
* May 26, 2016 - **Charlie Key** - `7 Best Developer Tools To Build Your NEXT Internet of Things Application <https://www.losant.com/blog/7-best-developer-tools-to-build-your-next-internet-of-things-application>`_
|
||||
|
@ -176,6 +176,26 @@ Adafruit
|
||||
- 8 Kb
|
||||
- 0.5 Kb
|
||||
|
||||
Arduboy
|
||||
~~~~~~~
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
||||
* - Type ``board``
|
||||
- Name
|
||||
- Microcontroller
|
||||
- Frequency
|
||||
- Flash
|
||||
- RAM
|
||||
|
||||
* - ``arduboy``
|
||||
- `Arduboy <https://www.arduboy.com>`_
|
||||
- ATMEGA32U4
|
||||
- 16 MHz
|
||||
- 32 Kb
|
||||
- 2.5 Kb
|
||||
|
||||
Arduino
|
||||
~~~~~~~
|
||||
|
||||
|
@ -166,6 +166,26 @@ Adafruit
|
||||
- 8 Kb
|
||||
- 0.5 Kb
|
||||
|
||||
Arduboy
|
||||
~~~~~~~
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
||||
* - Type ``board``
|
||||
- Name
|
||||
- Microcontroller
|
||||
- Frequency
|
||||
- Flash
|
||||
- RAM
|
||||
|
||||
* - ``arduboy``
|
||||
- `Arduboy <https://www.arduboy.com>`_
|
||||
- ATMEGA32U4
|
||||
- 16 MHz
|
||||
- 32 Kb
|
||||
- 2.5 Kb
|
||||
|
||||
Arduino
|
||||
~~~~~~~
|
||||
|
||||
|
@ -162,6 +162,26 @@ Adafruit
|
||||
- 8 Kb
|
||||
- 0.5 Kb
|
||||
|
||||
Arduboy
|
||||
~~~~~~~
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
||||
* - Type ``board``
|
||||
- Name
|
||||
- Microcontroller
|
||||
- Frequency
|
||||
- Flash
|
||||
- RAM
|
||||
|
||||
* - ``arduboy``
|
||||
- `Arduboy <https://www.arduboy.com>`_
|
||||
- ATMEGA32U4
|
||||
- 16 MHz
|
||||
- 32 Kb
|
||||
- 2.5 Kb
|
||||
|
||||
Arduino
|
||||
~~~~~~~
|
||||
|
||||
|
@ -240,6 +240,7 @@ Using Arduino Framework with Staging version
|
||||
Articles
|
||||
--------
|
||||
|
||||
* Jun 3, 2016 - **Daniel Eichhorn** - `ESP8266: Continuous Delivery Pipeline – Push To Production <http://blog.squix.org/2016/06/esp8266-continuous-delivery-pipeline-push-to-production.html>`_
|
||||
* May 29, 2016 - **Chris Synan** - `Reverse Engineer RF Remote Controller for IoT! <http://www.instructables.com/id/Reverse-Engineer-RF-Remote-Controller-for-IoT/?ALLSTEPS>`_
|
||||
* May 22, 2016 - **Pedro Minatel** - `Estação meteorológica com ESP8266 (Weather station with ESP8266, Portuguese) <http://pedrominatel.com.br/esp8266/estacao-meteorologica-com-esp8266/>`_
|
||||
* May 16, 2016 - **Pedro Minatel** - `Controle remoto WiFi com ESP8266 (WiFi remote control using ESP8266, Portuguese) <http://pedrominatel.com.br/esp8266/controle-remoto-wifi-com-esp8266/>`_
|
||||
|
@ -15,6 +15,7 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
from os.path import isfile, join
|
||||
from platform import system
|
||||
from shutil import copyfile
|
||||
from time import sleep
|
||||
|
||||
@ -47,22 +48,27 @@ def TouchSerialPort(env, port, baudrate):
|
||||
sleep(0.4)
|
||||
|
||||
|
||||
def WaitForNewSerialPort(env):
|
||||
before = [i['port'] for i in get_serialports(use_grep=True)]
|
||||
sleep(0.5)
|
||||
def WaitForNewSerialPort(env, before):
|
||||
print "Waiting for the new upload port..."
|
||||
prev_port = env.subst("$UPLOAD_PORT")
|
||||
new_port = None
|
||||
elapsed = 0
|
||||
while elapsed < 10:
|
||||
now = [i['port'] for i in get_serialports(use_grep=True)]
|
||||
diff = list(set(now) - set(before))
|
||||
if diff:
|
||||
new_port = diff[0]
|
||||
while elapsed < 5 and new_port is None:
|
||||
now = get_serialports()
|
||||
for p in now:
|
||||
if p not in before:
|
||||
new_port = p['port']
|
||||
break
|
||||
|
||||
before = now
|
||||
sleep(0.25)
|
||||
elapsed += 0.25
|
||||
|
||||
if not new_port:
|
||||
for p in now:
|
||||
if prev_port == p['port']:
|
||||
new_port = p['port']
|
||||
break
|
||||
|
||||
if not new_port:
|
||||
env.Exit("Error: Couldn't find a board on the selected port. "
|
||||
"Check that you have the correct port selected. "
|
||||
@ -85,6 +91,15 @@ def AutodetectUploadPort(env):
|
||||
env.Replace(UPLOAD_PORT=item['disk'])
|
||||
break
|
||||
else:
|
||||
if (system() == "Linux" and
|
||||
not isfile("/etc/udev/99-platformio-udev.rules")):
|
||||
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"
|
||||
)
|
||||
|
||||
board_hwids = []
|
||||
if "BOARD" in env and "build.hwids" in env.BoardConfig():
|
||||
board_hwids = env.BoardConfig().get("build.hwids")
|
||||
|
@ -287,34 +287,7 @@ def exec_command(*args, **kwargs):
|
||||
return result
|
||||
|
||||
|
||||
def get_serialports(use_grep=False):
|
||||
|
||||
def _grep_serial_ports():
|
||||
result = []
|
||||
if system() == "Windows":
|
||||
output = exec_command(["mode"]).get("out", "")
|
||||
for line in output.split("\n"):
|
||||
line = line.strip()
|
||||
if "COM" in line:
|
||||
result.append({"port": line[line.index("COM"):-1],
|
||||
"description": "", "hwid": ""})
|
||||
else:
|
||||
if system() == "Linux":
|
||||
patterns = ["/dev/%s*" % p for p in (
|
||||
"ttyS", "ttyUSB", "ttyACM", "ttyAMA", "rfcomm", "ttyO")]
|
||||
else:
|
||||
patterns = ["/dev/tty.*", "/dev/cu.*"]
|
||||
for pattern in patterns:
|
||||
for port in glob(pattern):
|
||||
result.append(
|
||||
{"port": port, "description": "", "hwid": ""})
|
||||
return result
|
||||
|
||||
if use_grep:
|
||||
result = _grep_serial_ports()
|
||||
if result:
|
||||
return result
|
||||
|
||||
def get_serialports():
|
||||
try:
|
||||
from serial.tools.list_ports import comports
|
||||
except ImportError:
|
||||
@ -332,9 +305,9 @@ def get_serialports(use_grep=False):
|
||||
result.append({"port": p, "description": d, "hwid": h})
|
||||
|
||||
# fix for PySerial
|
||||
if not result and not use_grep:
|
||||
result = _grep_serial_ports()
|
||||
|
||||
if not result and system() == "Darwin":
|
||||
for p in glob("/dev/tty.*"):
|
||||
result.append({"port": p, "description": "n/a", "hwid": "n/a"})
|
||||
return result
|
||||
|
||||
|
||||
|
@ -45,8 +45,15 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="066
|
||||
# QinHeng Electronics HL-340 USB-Serial adapter
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0666"
|
||||
|
||||
# ARDUINO UNO
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0043", MODE:="0666"
|
||||
# Arduino boards
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="[08][02]*", MODE:="0666"
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="[08][02]*", MODE:="0666"
|
||||
|
||||
# Arduino SAM-BA
|
||||
ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||
ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", ENV{MTP_NO_PROBE}="1"
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", MODE:="0666"
|
||||
KERNEL=="ttyACM*", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", MODE:="0666"
|
||||
|
||||
# Digistump boards
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666"
|
||||
|
Reference in New Issue
Block a user