forked from platformio/platformio-core
Split PlatformIO build tool to "core" and "upload"
This commit is contained in:
@ -50,7 +50,10 @@ commonvars.AddVariables(
|
||||
)
|
||||
|
||||
DefaultEnvironment(
|
||||
tools=["gcc", "g++", "as", "ar", "gnulink", "platformio"],
|
||||
tools=[
|
||||
"gcc", "g++", "as", "ar", "gnulink",
|
||||
"platformio", "upload"
|
||||
],
|
||||
toolpath=[join("$PIOBUILDER_DIR", "tools")],
|
||||
variables=commonvars,
|
||||
|
||||
|
@ -2,17 +2,12 @@
|
||||
# See LICENSE for details.
|
||||
|
||||
import atexit
|
||||
import platform
|
||||
import re
|
||||
from os import getenv, listdir, remove, sep, walk
|
||||
from os.path import basename, dirname, isdir, isfile, join, normpath
|
||||
from time import sleep
|
||||
|
||||
from SCons.Script import Exit, SConscript, SConscriptChdir
|
||||
from SCons.Script import SConscript, SConscriptChdir
|
||||
from SCons.Util import case_sensitive_suffixes
|
||||
from serial import Serial
|
||||
|
||||
from platformio.util import get_serialports
|
||||
|
||||
|
||||
def ProcessGeneral(env):
|
||||
@ -303,60 +298,6 @@ def ConvertInoToCpp(env):
|
||||
atexit.register(delete_tmpcpp, tmpcpp)
|
||||
|
||||
|
||||
def FlushSerialBuffer(env, port):
|
||||
s = Serial(env.subst(port))
|
||||
s.flushInput()
|
||||
s.setDTR(False)
|
||||
s.setRTS(False)
|
||||
sleep(0.1)
|
||||
s.setDTR(True)
|
||||
s.setRTS(True)
|
||||
s.close()
|
||||
|
||||
|
||||
def TouchSerialPort(env, port, baudrate):
|
||||
s = Serial(port=env.subst(port), baudrate=baudrate)
|
||||
s.close()
|
||||
if platform.system() != "Darwin":
|
||||
sleep(0.3)
|
||||
|
||||
|
||||
def WaitForNewSerialPort(_, before):
|
||||
new_port = None
|
||||
elapsed = 0
|
||||
while elapsed < 10:
|
||||
now = [i['port'] for i in get_serialports()]
|
||||
diff = list(set(now) - set(before))
|
||||
if diff:
|
||||
new_port = diff[0]
|
||||
break
|
||||
|
||||
before = now
|
||||
sleep(0.25)
|
||||
elapsed += 0.25
|
||||
|
||||
if not new_port:
|
||||
Exit("Error: Couldn't find a board on the selected port. "
|
||||
"Check that you have the correct port selected. "
|
||||
"If it is correct, try pressing the board's reset "
|
||||
"button after initiating the upload.")
|
||||
|
||||
return new_port
|
||||
|
||||
|
||||
def AutodetectUploadPort(env):
|
||||
if "UPLOAD_PORT" not in env:
|
||||
for item in get_serialports():
|
||||
if "VID:PID" in item['hwid']:
|
||||
print "Auto-detected UPLOAD_PORT: %s" % item['port']
|
||||
env.Replace(UPLOAD_PORT=item['port'])
|
||||
break
|
||||
|
||||
if "UPLOAD_PORT" not in env:
|
||||
Exit("Error: Please specify `upload_port` for environment or use "
|
||||
"global `--upload-port` option.\n")
|
||||
|
||||
|
||||
def exists(_):
|
||||
return True
|
||||
|
||||
@ -369,8 +310,4 @@ def generate(env):
|
||||
env.AddMethod(BuildLibrary)
|
||||
env.AddMethod(BuildDependentLibraries)
|
||||
env.AddMethod(ConvertInoToCpp)
|
||||
env.AddMethod(FlushSerialBuffer)
|
||||
env.AddMethod(TouchSerialPort)
|
||||
env.AddMethod(WaitForNewSerialPort)
|
||||
env.AddMethod(AutodetectUploadPort)
|
||||
return env
|
||||
|
76
platformio/builder/tools/upload.py
Normal file
76
platformio/builder/tools/upload.py
Normal file
@ -0,0 +1,76 @@
|
||||
# Copyright (C) Ivan Kravets <me@ikravets.com>
|
||||
# See LICENSE for details.
|
||||
|
||||
import platform
|
||||
from time import sleep
|
||||
|
||||
from SCons.Script import Exit
|
||||
from serial import Serial
|
||||
|
||||
from platformio.util import get_serialports
|
||||
|
||||
|
||||
def FlushSerialBuffer(env, port):
|
||||
s = Serial(env.subst(port))
|
||||
s.flushInput()
|
||||
s.setDTR(False)
|
||||
s.setRTS(False)
|
||||
sleep(0.1)
|
||||
s.setDTR(True)
|
||||
s.setRTS(True)
|
||||
s.close()
|
||||
|
||||
|
||||
def TouchSerialPort(env, port, baudrate):
|
||||
s = Serial(port=env.subst(port), baudrate=baudrate)
|
||||
s.close()
|
||||
if platform.system() != "Darwin":
|
||||
sleep(0.3)
|
||||
|
||||
|
||||
def WaitForNewSerialPort(_, before):
|
||||
new_port = None
|
||||
elapsed = 0
|
||||
while elapsed < 10:
|
||||
now = [i['port'] for i in get_serialports()]
|
||||
diff = list(set(now) - set(before))
|
||||
if diff:
|
||||
new_port = diff[0]
|
||||
break
|
||||
|
||||
before = now
|
||||
sleep(0.25)
|
||||
elapsed += 0.25
|
||||
|
||||
if not new_port:
|
||||
Exit("Error: Couldn't find a board on the selected port. "
|
||||
"Check that you have the correct port selected. "
|
||||
"If it is correct, try pressing the board's reset "
|
||||
"button after initiating the upload.")
|
||||
|
||||
return new_port
|
||||
|
||||
|
||||
def AutodetectUploadPort(env):
|
||||
if "UPLOAD_PORT" not in env:
|
||||
for item in get_serialports():
|
||||
if "VID:PID" in item['hwid']:
|
||||
print "Auto-detected UPLOAD_PORT: %s" % item['port']
|
||||
env.Replace(UPLOAD_PORT=item['port'])
|
||||
break
|
||||
|
||||
if "UPLOAD_PORT" not in env:
|
||||
Exit("Error: Please specify `upload_port` for environment or use "
|
||||
"global `--upload-port` option.\n")
|
||||
|
||||
|
||||
def exists(_):
|
||||
return True
|
||||
|
||||
|
||||
def generate(env):
|
||||
env.AddMethod(FlushSerialBuffer)
|
||||
env.AddMethod(TouchSerialPort)
|
||||
env.AddMethod(WaitForNewSerialPort)
|
||||
env.AddMethod(AutodetectUploadPort)
|
||||
return env
|
Reference in New Issue
Block a user