forked from platformio/platformio-core
Merge branch 'release/v2.8.0'
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,3 +4,4 @@
|
|||||||
.tox
|
.tox
|
||||||
docs/_build
|
docs/_build
|
||||||
dist
|
dist
|
||||||
|
build
|
||||||
|
29
HISTORY.rst
29
HISTORY.rst
@ -1,14 +1,39 @@
|
|||||||
Release History
|
Release Notes
|
||||||
===============
|
=============
|
||||||
|
|
||||||
PlatformIO 2.0
|
PlatformIO 2.0
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
2.8.0 (2016-01-29)
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* `PlatformIO IDE <http://docs.platformio.org/en/latest/ide/atom.html>`_ for
|
||||||
|
Atom
|
||||||
|
(`issue #470 <https://github.com/platformio/platformio/issues/470>`_)
|
||||||
|
* Added ``pio`` command line alias for ``platformio`` command
|
||||||
|
(`issue #447 <https://github.com/platformio/platformio/issues/447>`_)
|
||||||
|
* Added SPL-Framework support for Nucleo F401RE board
|
||||||
|
(`issue #453 <https://github.com/platformio/platformio/issues/453>`_)
|
||||||
|
* Added ``upload_resetmethod`` option to `Project Configuration File platformio.ini <http://docs.platformio.org/en/latest/projectconf.html>`__
|
||||||
|
and allowed to `change default upload reset method <http://docs.platformio.org/en/latest/platforms/espressif.html#custom-reset-method>`_
|
||||||
|
for Espressif development platform
|
||||||
|
(`issue #444 <https://github.com/platformio/platformio/issues/444>`_)
|
||||||
|
* Allowed to force output of color ANSI-codes or to disable progress bar even
|
||||||
|
if the output is a ``pipe`` (not a ``tty``) using `Environment variables <http://docs.platformio.org/en/latest/envvars.html>`__
|
||||||
|
(`issue #465 <https://github.com/platformio/platformio/issues/465>`_)
|
||||||
|
* Set 1Mb SPIFFS for Espressif boards by default
|
||||||
|
(`issue #458 <https://github.com/platformio/platformio/issues/458>`_)
|
||||||
|
* Exclude ``test*`` folder by default from build process
|
||||||
|
* Generate project for IDEs with information about installed libraries
|
||||||
|
* Fixed builder for mbed framework and ST STM32 platform
|
||||||
|
|
||||||
|
|
||||||
2.7.1 (2016-01-06)
|
2.7.1 (2016-01-06)
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
* Initial support for Arduino Zero board
|
* Initial support for Arduino Zero board
|
||||||
(`issue #356 <https://github.com/platformio/platformio/issues/356>`_)
|
(`issue #356 <https://github.com/platformio/platformio/issues/356>`_)
|
||||||
|
* Added support for completions to Atom text editor using ``.clang_complete``
|
||||||
* Generate default targets for `supported IDE <http://docs.platformio.org/en/latest/ide.html>`__
|
* Generate default targets for `supported IDE <http://docs.platformio.org/en/latest/ide.html>`__
|
||||||
(CLion, Eclipse IDE, Emacs, Sublime Text, VIM): Build,
|
(CLion, Eclipse IDE, Emacs, Sublime Text, VIM): Build,
|
||||||
Clean, Upload, Upload SPIFFS image, Upload using Programmer, Update installed
|
Clean, Upload, Upload SPIFFS image, Upload using Programmer, Update installed
|
||||||
|
@ -28,6 +28,10 @@ PlatformIO
|
|||||||
.. image:: https://badges.gitter.im/Join%20Chat.svg
|
.. image:: https://badges.gitter.im/Join%20Chat.svg
|
||||||
:alt: Join the chat at https://gitter.im/platformio/platformio
|
:alt: Join the chat at https://gitter.im/platformio/platformio
|
||||||
:target: https://gitter.im/platformio/platformio
|
:target: https://gitter.im/platformio/platformio
|
||||||
|
.. image:: https://img.shields.io/donate/PlatformIO.png?color=yellow
|
||||||
|
:alt: Donate for PlatformIO.Org
|
||||||
|
:target: https://www.liqpay.com/api/3/checkout?data=eyJ2ZXJzaW9uIjozLCJhY3Rpb24iOiJwYXlkb25hdGUiLCJwdWJsaWNfa2V5IjoiaTc0NzkxMDA2NjIxIiwiYW1vdW50IjoiMSIsImN1cnJlbmN5IjoiVVNEIiwiZGVzY3JpcHRpb24iOiJEb25hdGlvbiBmb3IgUGxhdGZvcm1JTy5PcmciLCJ0eXBlIjoiZG9uYXRlIiwibGFuZ3VhZ2UiOiJlbiJ9&signature=XYvETjqlpoFhoFtxUJlF6hQyS7Y%3D
|
||||||
|
|
||||||
|
|
||||||
`Home & Demo <http://platformio.org>`_ |
|
`Home & Demo <http://platformio.org>`_ |
|
||||||
`Project Examples <https://github.com/platformio/platformio/tree/develop/examples>`_ |
|
`Project Examples <https://github.com/platformio/platformio/tree/develop/examples>`_ |
|
||||||
@ -75,7 +79,7 @@ libOpenCM3, etc.*
|
|||||||
* `IDE Integration <http://docs.platformio.org/en/latest/ide.html>`_
|
* `IDE Integration <http://docs.platformio.org/en/latest/ide.html>`_
|
||||||
* `Articles about us <http://docs.platformio.org/en/latest/articles.html>`_
|
* `Articles about us <http://docs.platformio.org/en/latest/articles.html>`_
|
||||||
* `FAQ <http://docs.platformio.org/en/latest/faq.html>`_
|
* `FAQ <http://docs.platformio.org/en/latest/faq.html>`_
|
||||||
* `Release History <http://docs.platformio.org/en/latest/history.html>`_
|
* `Release Notes <http://docs.platformio.org/en/latest/history.html>`_
|
||||||
|
|
||||||
Use whenever. *Run everywhere.*
|
Use whenever. *Run everywhere.*
|
||||||
-------------------------------
|
-------------------------------
|
||||||
@ -93,7 +97,7 @@ settings for most popular `Embedded Boards <http://platformio.org/#!/boards>`_.
|
|||||||
|
|
||||||
* Colourful `command-line output <https://raw.githubusercontent.com/platformio/platformio/develop/examples/platformio-examples.png>`_
|
* Colourful `command-line output <https://raw.githubusercontent.com/platformio/platformio/develop/examples/platformio-examples.png>`_
|
||||||
* `IDE Integration <http://docs.platformio.org/en/latest/ide.html>`_ with
|
* `IDE Integration <http://docs.platformio.org/en/latest/ide.html>`_ with
|
||||||
*Arduino, Eclipse, Emacs, Energia, Qt Creator, Sublime Text, Vim, Visual Studio*
|
*Arduino, Atom, Eclipse, Emacs, Energia, Qt Creator, Sublime Text, Vim, Visual Studio*
|
||||||
* Cloud compiling and `Continuous Integration <http://docs.platformio.org/en/latest/ci/index.html>`_
|
* Cloud compiling and `Continuous Integration <http://docs.platformio.org/en/latest/ci/index.html>`_
|
||||||
with *AppVeyor, Circle CI, Drone, Shippable, Travis CI*
|
with *AppVeyor, Circle CI, Drone, Shippable, Travis CI*
|
||||||
* Built-in `Serial Port Monitor <http://docs.platformio.org/en/latest/userguide/cmd_serialports.html#platformio-serialports-monitor>`_ and configurable
|
* Built-in `Serial Port Monitor <http://docs.platformio.org/en/latest/userguide/cmd_serialports.html#platformio-serialports-monitor>`_ and configurable
|
||||||
@ -171,6 +175,7 @@ Frameworks:
|
|||||||
* `Energia <http://platformio.org/#!/frameworks/energia>`_
|
* `Energia <http://platformio.org/#!/frameworks/energia>`_
|
||||||
* `SPL <http://platformio.org/#!/frameworks/spl>`_
|
* `SPL <http://platformio.org/#!/frameworks/spl>`_
|
||||||
* `mbed <http://platformio.org/#!/frameworks/mbed>`_
|
* `mbed <http://platformio.org/#!/frameworks/mbed>`_
|
||||||
|
* `WiringPi <http://platformio.org/#!/frameworks/wiringpi>`_
|
||||||
|
|
||||||
For further details, please refer to `What is PlatformIO? <http://docs.platformio.org/en/latest/faq.html#what-is-platformio>`_
|
For further details, please refer to `What is PlatformIO? <http://docs.platformio.org/en/latest/faq.html#what-is-platformio>`_
|
||||||
|
|
||||||
|
27
docs/_static/extra.css
vendored
27
docs/_static/extra.css
vendored
@ -35,10 +35,10 @@ nav {
|
|||||||
display: block !important;
|
display: block !important;
|
||||||
}
|
}
|
||||||
body {
|
body {
|
||||||
padding-top: 50px;
|
padding-top: 100px;
|
||||||
}
|
}
|
||||||
.wy-nav-side {
|
.wy-nav-side {
|
||||||
top: 50px;
|
top: 100px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
@ -253,3 +253,26 @@ nav {
|
|||||||
.navbar-header .navbar-brand {
|
.navbar-header .navbar-brand {
|
||||||
color: #e0e0e0;
|
color: #e0e0e0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Misc */
|
||||||
|
|
||||||
|
.top-banner {
|
||||||
|
display: block;
|
||||||
|
padding: 10px 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
background-color: #0275d8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-banner:hover {
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: #025ebb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-banner:visited {
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
BIN
docs/_static/ide-atom-platformio-menu-item.png
vendored
Normal file
BIN
docs/_static/ide-atom-platformio-menu-item.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 152 KiB |
BIN
docs/_static/ide-atom-platformio.png
vendored
Normal file
BIN
docs/_static/ide-atom-platformio.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 619 KiB |
@ -23,6 +23,9 @@ Here are recent articles about PlatformIO:
|
|||||||
2016
|
2016
|
||||||
^^^^
|
^^^^
|
||||||
|
|
||||||
|
* Jan 24, 2016 - **Sergey Prilukin** - `How to use IntelliJ IDEA to develop and upload software for micro controllers like Arduino <http://jandevblog.blogspot.com/2016/01/how-to-use-intellij-idea-to-develop-and.html>`_
|
||||||
|
* Jan 16, 2016 - **Dani Eichhorn** - `ESP8266 Arduino IDE Alternative: PlatformIO <http://blog.squix.ch/2016/01/esp8266-arduino-ide-alternative.html>`_
|
||||||
|
* Jan 11, 2016 - **David Mills, Ph.D.** - `STM NUCLEOF401RE TIMER IO <http://webshed.org/wiki/STM_NUCLEOF401RE_TIMER_IO>`_
|
||||||
* Jan 05, 2016 - **Julien Rodrigues** - `Internet Of Things: The IDE scandal <https://medium.com/@jrodrigues/internet-of-things-the-ide-scandal-5ddb8fc9d918>`_
|
* Jan 05, 2016 - **Julien Rodrigues** - `Internet Of Things: The IDE scandal <https://medium.com/@jrodrigues/internet-of-things-the-ide-scandal-5ddb8fc9d918>`_
|
||||||
|
|
||||||
2015
|
2015
|
||||||
|
@ -34,10 +34,20 @@ operations/commands.
|
|||||||
PlatformIO handles ``CI`` variable which is setup by
|
PlatformIO handles ``CI`` variable which is setup by
|
||||||
`Continuous Integration <http://en.wikipedia.org/wiki/Continuous_integration>`_
|
`Continuous Integration <http://en.wikipedia.org/wiki/Continuous_integration>`_
|
||||||
(Travis, Circle and etc.) systems.
|
(Travis, Circle and etc.) systems.
|
||||||
Currently, PlatformIO uses it to disable prompts.
|
PlatformIO uses it to disable prompts and progress bars. In other words,
|
||||||
|
``CI=true`` automatically setup :envvar:`PLATFORMIO_SETTING_ENABLE_PROMPTS` to
|
||||||
|
``false`` and :envvar:`PLATFORMIO_DISABLE_PROGRESSBAR` to ``true``.
|
||||||
|
|
||||||
In other words, ``CI=true`` automatically setup
|
.. envvar:: PLATFORMIO_FORCE_COLOR
|
||||||
:envvar:`PLATFORMIO_SETTING_ENABLE_PROMPTS=false <PLATFORMIO_SETTING_ENABLE_PROMPTS>`.
|
|
||||||
|
Force to output color ANSI-codes even if the output is a ``pipe`` (not a ``tty``).
|
||||||
|
The possible values are ``true`` and ``false``. Default is ``PLATFORMIO_FORCE_COLOR=false``.
|
||||||
|
|
||||||
|
.. envvar:: PLATFORMIO_DISABLE_PROGRESSBAR
|
||||||
|
|
||||||
|
Disable progress bar for package/library downloader and uploader. This is
|
||||||
|
useful when calling PlatformIO from subprocess and output is a ``pipe`` (not a ``tty``).
|
||||||
|
The possible values are ``true`` and ``false``. Default is ``PLATFORMIO_DISABLE_PROGRESSBAR=false``.
|
||||||
|
|
||||||
.. envvar:: PLATFORMIO_HOME_DIR
|
.. envvar:: PLATFORMIO_HOME_DIR
|
||||||
|
|
||||||
|
@ -79,6 +79,7 @@ Bash completion for `platformio` subcommands you need to put into your `.bashrc`
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
eval "$(_PLATFORMIO_COMPLETE=source platformio)"
|
eval "$(_PLATFORMIO_COMPLETE=source platformio)"
|
||||||
|
eval "$(_PLATFORMIO_COMPLETE=source pio)"
|
||||||
|
|
||||||
ZSH completion
|
ZSH completion
|
||||||
''''''''''''''
|
''''''''''''''
|
||||||
@ -89,6 +90,7 @@ To enable ``zsh`` completion please run these commands:
|
|||||||
|
|
||||||
autoload bashcompinit && bashcompinit
|
autoload bashcompinit && bashcompinit
|
||||||
eval "$(_PLATFORMIO_COMPLETE=source platformio)"
|
eval "$(_PLATFORMIO_COMPLETE=source platformio)"
|
||||||
|
eval "$(_PLATFORMIO_COMPLETE=source pio)"
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
|
@ -214,14 +214,14 @@ Arduino
|
|||||||
|
|
||||||
* - ``due``
|
* - ``due``
|
||||||
- `Arduino Due (Programming Port) <http://arduino.cc/en/Main/arduinoBoardDue>`_
|
- `Arduino Due (Programming Port) <http://arduino.cc/en/Main/arduinoBoardDue>`_
|
||||||
- AT91SAM3X8E
|
- SAM3X8E
|
||||||
- 84 MHz
|
- 84 MHz
|
||||||
- 512 Kb
|
- 512 Kb
|
||||||
- 32 Kb
|
- 32 Kb
|
||||||
|
|
||||||
* - ``dueUSB``
|
* - ``dueUSB``
|
||||||
- `Arduino Due (USB Native Port) <http://arduino.cc/en/Main/arduinoBoardDue>`_
|
- `Arduino Due (USB Native Port) <http://arduino.cc/en/Main/arduinoBoardDue>`_
|
||||||
- AT91SAM3X8E
|
- SAM3X8E
|
||||||
- 84 MHz
|
- 84 MHz
|
||||||
- 512 Kb
|
- 512 Kb
|
||||||
- 32 Kb
|
- 32 Kb
|
||||||
@ -380,6 +380,20 @@ Arduino
|
|||||||
- 32 Kb
|
- 32 Kb
|
||||||
- 2.5 Kb
|
- 2.5 Kb
|
||||||
|
|
||||||
|
* - ``zero``
|
||||||
|
- `Arduino Zero (Programming Port) <https://www.arduino.cc/en/Main/ArduinoBoardZero>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``zeroUSB``
|
||||||
|
- `Arduino Zero (USB Native Port) <https://www.arduino.cc/en/Main/ArduinoBoardZero>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
BQ
|
BQ
|
||||||
~~
|
~~
|
||||||
|
|
||||||
@ -693,7 +707,7 @@ NodeMCU
|
|||||||
- RAM
|
- RAM
|
||||||
|
|
||||||
* - ``nodemcu``
|
* - ``nodemcu``
|
||||||
- `NodeMCU 0.9 & 1.0 <http://www.nodemcu.com/>`_
|
- `NodeMCU 0.9 / 1.0 <http://www.nodemcu.com/>`_
|
||||||
- ESP8266
|
- ESP8266
|
||||||
- 80 MHz
|
- 80 MHz
|
||||||
- 4096 Kb
|
- 4096 Kb
|
||||||
@ -1073,7 +1087,7 @@ Teensy
|
|||||||
- 16 Kb
|
- 16 Kb
|
||||||
|
|
||||||
* - ``teensy31``
|
* - ``teensy31``
|
||||||
- `Teensy 3.1 <https://www.pjrc.com/store/teensy31.html>`_
|
- `Teensy 3.1 / 3.2 <https://www.pjrc.com/store/teensy31.html>`_
|
||||||
- MK20DX256
|
- MK20DX256
|
||||||
- 72 MHz
|
- 72 MHz
|
||||||
- 256 Kb
|
- 256 Kb
|
||||||
|
@ -9,6 +9,13 @@
|
|||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
|
|
||||||
|
Articles
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Jan 11, 2016 - **David Mills, Ph.D.** - `STM NUCLEOF401RE TIMER IO <http://webshed.org/wiki/STM_NUCLEOF401RE_TIMER_IO>`_
|
||||||
|
|
||||||
|
See more :ref:`articles`.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
@ -716,7 +716,7 @@ Teensy
|
|||||||
- RAM
|
- RAM
|
||||||
|
|
||||||
* - ``teensy31``
|
* - ``teensy31``
|
||||||
- `Teensy 3.1 <https://www.pjrc.com/store/teensy31.html>`_
|
- `Teensy 3.1 / 3.2 <https://www.pjrc.com/store/teensy31.html>`_
|
||||||
- MK20DX256
|
- MK20DX256
|
||||||
- 72 MHz
|
- 72 MHz
|
||||||
- 256 Kb
|
- 256 Kb
|
||||||
|
@ -106,4 +106,11 @@ ST
|
|||||||
- 128 Kb
|
- 128 Kb
|
||||||
- 16 Kb
|
- 16 Kb
|
||||||
|
|
||||||
|
* - ``nucleo_f401re``
|
||||||
|
- `ST Nucleo F401RE <https://developer.mbed.org/platforms/ST-Nucleo-F401RE/>`_
|
||||||
|
- STM32F401RET6
|
||||||
|
- 84 MHz
|
||||||
|
- 512 Kb
|
||||||
|
- 96 Kb
|
||||||
|
|
||||||
.. include:: spl_extra.rst
|
.. include:: spl_extra.rst
|
||||||
|
@ -17,8 +17,8 @@ IDE Integration
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
ide/arduino
|
|
||||||
ide/atom
|
ide/atom
|
||||||
|
ide/arduino
|
||||||
ide/clion
|
ide/clion
|
||||||
ide/eclipse
|
ide/eclipse
|
||||||
ide/emacs
|
ide/emacs
|
||||||
|
@ -11,47 +11,143 @@
|
|||||||
|
|
||||||
.. _ide_atom:
|
.. _ide_atom:
|
||||||
|
|
||||||
Atom
|
PlatformIO IDE for Atom
|
||||||
====
|
=======================
|
||||||
|
|
||||||
`Atom <https://atom.io>`_ is a text editor that's modern, approachable,
|
PlatformIO IDE for `Atom <https://atom.io>`_ is the missing integrated
|
||||||
|
development environment which provides comprehensive facilities
|
||||||
|
for IoT development:
|
||||||
|
|
||||||
|
* Cross-platform builder without external dependencies to the system
|
||||||
|
software:
|
||||||
|
|
||||||
|
- 200+ embedded boards
|
||||||
|
- 15+ development platforms
|
||||||
|
- 10+ frameworks
|
||||||
|
|
||||||
|
* C/C++ Intelligent code completion
|
||||||
|
* C/C++ Smart code linter
|
||||||
|
* Library Manager for the hundreds popular libraries
|
||||||
|
* Built-in Terminal with :ref:`PlatformIO CLI <userguide>` (``pio``, ``platformio``)
|
||||||
|
|
||||||
|
Atom is a source code editor that's modern, approachable,
|
||||||
yet hackable to the core—a tool you can customize to do anything but also use
|
yet hackable to the core—a tool you can customize to do anything but also use
|
||||||
productively without ever touching a config file.
|
productively without ever touching a config file.
|
||||||
|
|
||||||
This software can be used with:
|
.. warning::
|
||||||
|
|
||||||
* all available :ref:`platforms`
|
PlatformIO IDE is **in beta testing**. Please report all issues to
|
||||||
* all available :ref:`frameworks`
|
`PlatformIO IDE issues tracker <https://github.com/platformio/platformio-atom-ide/issues>`_.
|
||||||
|
|
||||||
Refer to the `Atom Documentation <https://atom.io/docs>`_
|
|
||||||
page for more detailed information.
|
|
||||||
|
|
||||||
.. contents::
|
.. contents::
|
||||||
|
|
||||||
Integration
|
Requirements
|
||||||
-----------
|
------------
|
||||||
|
|
||||||
Using `Atom Packages <https://atom.io/docs/v1.0.2/using-atom-atom-packages>`_
|
The only one requirement is `Python Interpreter <https://www.python.org>`_.
|
||||||
please install `platomformio <https://atom.io/packages/platomformio>`_ package.
|
PlatformIO is written in Python and works on Mac OS X, Linux, Windows OS and
|
||||||
|
ARM-based credit-card sized computers (Raspberry Pi, BeagleBone, CubieBoard).
|
||||||
|
|
||||||
Articles / Manuals
|
Installation
|
||||||
------------------
|
------------
|
||||||
|
|
||||||
* Jul 20, 2015 - **Eli Fatsi** - `Arduino Development in Atom Editor <http://viget.com/extend/arduino-development-in-atom-editor>`_
|
:Python:
|
||||||
|
|
||||||
See more :ref:`articles`.
|
Python is installed on Mac OS X and Linux OS by default. The only **Windows Users**
|
||||||
|
should install it manually. Please `Download the latest Python 2.7.x <https://www.python.org/downloads/>`_
|
||||||
|
and install it. **DON'T FORGET** to select ``Add python.exe to Path`` feature on the
|
||||||
|
"Customize" stage, otherwise ``python`` command will not be available.
|
||||||
|
|
||||||
Screenshot
|
:Atom: Download and install `Atom <https://atom.io>`_ source code editor
|
||||||
|
|
||||||
|
:PlatformIO IDE:
|
||||||
|
|
||||||
|
Install `platformio-ide <https://atom.io/packages/platformio-ide>`_ package
|
||||||
|
using:
|
||||||
|
|
||||||
|
- **Mac OS X**: ``Menu: Atom > Preferences > Install``
|
||||||
|
- **Windows**: ``Menu: File > Settings > Install``
|
||||||
|
- **Linux**: ``Menu: Edit > Preferences > Install``
|
||||||
|
|
||||||
|
User Guide
|
||||||
----------
|
----------
|
||||||
|
|
||||||
Building
|
.. image:: ../_static/ide-atom-platformio.png
|
||||||
^^^^^^^^
|
:target: http://docs.platformio.org/en/latest/_images/ide-atom-platformio.png
|
||||||
|
|
||||||
.. image:: ../_static/ide-platformio-atom-1.gif
|
Menu item ``PlatformIO``
|
||||||
:target: https://atom.io/packages/platomformio
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Uploading
|
`platformio-ide <https://atom.io/packages/platformio-ide>`_ package adds to Atom
|
||||||
^^^^^^^^^
|
new menu item named ``Menu: PlatformIO`` (after ``Menu: Help`` item).
|
||||||
|
|
||||||
.. image:: ../_static/ide-platformio-atom-2.gif
|
.. image:: ../_static/ide-atom-platformio-menu-item.png
|
||||||
:target: https://atom.io/packages/platomformio
|
|
||||||
|
Building / Uploading / etc.
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* ``cmd-alt-b`` / ``ctrl-alt-b`` / ``f9`` builds project without auto-uploading.
|
||||||
|
* ``cmd-alt-u`` / ``ctrl-alt-u`` builds and uploads (if no errors).
|
||||||
|
* ``cmd-alt-c`` / ``ctrl-alt-c`` cleans compiled objects.
|
||||||
|
* ``cmd-alt-t`` / ``ctrl-alt-t`` / ``f7`` run other targets (Upload using Programmer, Upload SPIFFS image, Update platforms and libraries).
|
||||||
|
* ``cmd-alt-g`` / ``ctrl-alt-g`` / ``f4`` cycles through causes of build error.
|
||||||
|
* ``cmd-alt-h`` / ``ctrl-alt-h`` / ``shift-f4`` goes to the first build error.
|
||||||
|
* ``cmd-alt-v`` / ``ctrl-alt-v`` / ``f8`` toggles the build panel.
|
||||||
|
* ``escape`` terminates build / closes the build window.
|
||||||
|
|
||||||
|
More details `Atom Build package <https://atom.io/packages/build>`_.
|
||||||
|
|
||||||
|
Code completion
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
PlatformIO IDE uses `clang <http://clang.llvm.org>`_ for the code completion.
|
||||||
|
To check that ``clang`` is available in your system, please open
|
||||||
|
Terminal and run ``clang --version``. If ``clang`` is not installed, then install it:
|
||||||
|
|
||||||
|
- **Mac OS X**: Install the latest Xcode along with the latest Command Line Tools
|
||||||
|
(they are installed automatically when you run ``clang`` in Terminal for the
|
||||||
|
first time, or manually by running ``xcode-select --install``
|
||||||
|
- **Windows**: Download the latest `Clang for Windows <http://llvm.org/releases/download.html>`_.
|
||||||
|
Please select "Add LLVM to the system PATH" option on the installation step.
|
||||||
|
- **Linux**: Using package managers: ``apt-get install clang`` or ``yum install clang``.
|
||||||
|
- **Other Systems**: Download the latest `Clang for the other systems <http://llvm.org/releases/download.html>`_.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
The libraries which are added, installed or used in the project
|
||||||
|
after initializing process will not be reflected in code completion. To fix
|
||||||
|
it you need to reinitialize project using ``Menu: PlatformIO > Initialize new Project (or update existing)``.
|
||||||
|
|
||||||
|
Code linter
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
PlatformIO IDE uses PlatformIO's pre-built GCC toolchains for code linting. You
|
||||||
|
can customize it in ``.gcc-flags.json`` which will be generated for the selected
|
||||||
|
board in the project directory using
|
||||||
|
``Menu: PlatformIO > Initialize new Project (or update existing)``.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
The libraries which are added, installed or used in the project
|
||||||
|
after initializing process will not be reflected in code linter. To fix
|
||||||
|
it you need to reinitialize project using ``Menu: PlatformIO > Initialize new Project (or update existing)``.
|
||||||
|
|
||||||
|
Install Shell Commands
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
To install ``platformio`` and ``pio`` shell commands please use ``Menu:
|
||||||
|
PlatformIO > Install Shell Commands``. It will allow you to call PlatformIO from
|
||||||
|
other process, terminals and etc.
|
||||||
|
|
||||||
|
Serial Monitor
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Serial Monitor was temporary disabled in PlatformIO IDE 0.2.1. See
|
||||||
|
`issue #17 <https://github.com/platformio/platformio-atom-ide/issues/17>`_.
|
||||||
|
|
||||||
|
Temporary solution is to ``Menu: PlatformIO > Install Shell Commands`` and use
|
||||||
|
:ref:`cmd_serialports_monitor` from system Terminal application (not built-in in
|
||||||
|
PlatformIO IDE).
|
||||||
|
|
||||||
|
Known issues
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* Built-in Terminal doesn't support ``STDIN`` interaction
|
||||||
|
@ -20,6 +20,13 @@ computers (`Raspberry Pi <http://www.raspberrypi.org>`_,
|
|||||||
`BeagleBone <http://beagleboard.org>`_,
|
`BeagleBone <http://beagleboard.org>`_,
|
||||||
`CubieBoard <http://cubieboard.org>`_).
|
`CubieBoard <http://cubieboard.org>`_).
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
We are glad to announce official :ref:`ide_atom` which provides
|
||||||
|
comprehensive facilities for IoT development: built-in PlatformIO CLI tool,
|
||||||
|
Terminal and other instruments.
|
||||||
|
|
||||||
|
Try :ref:`ide_atom` for free now!
|
||||||
|
|
||||||
.. contents::
|
.. contents::
|
||||||
|
|
||||||
System requirements
|
System requirements
|
||||||
|
@ -138,7 +138,13 @@ Examples:
|
|||||||
|
|
||||||
*Required* if :ref:`libjson_downloadurl` field is not defined | Type: ``Object``
|
*Required* if :ref:`libjson_downloadurl` field is not defined | Type: ``Object``
|
||||||
|
|
||||||
The repository in which the source code can be found.
|
The repository in which the source code can be found. The field consists for the
|
||||||
|
next items:
|
||||||
|
|
||||||
|
* ``type``
|
||||||
|
* ``url``
|
||||||
|
* ``branch`` if is not specified, default branch will be used. This field will
|
||||||
|
be ignored if tag/release exists with the value of :ref:`libjson_version`.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
@ -158,22 +164,46 @@ Example:
|
|||||||
*Required* if :ref:`libjson_repository` field is not defined | Type: ``String``
|
*Required* if :ref:`libjson_repository` field is not defined | Type: ``String``
|
||||||
| Max. Length: 20
|
| Max. Length: 20
|
||||||
|
|
||||||
A version of the current library source code.
|
A version of the current library source code. Can contain a-z, digits, dots or
|
||||||
|
dash. `Semantic Versioning <http://semver.org>`_ IS RECOMMENDED.
|
||||||
|
|
||||||
* Can contain a-z, digits, dots or dash.
|
:Case 1:
|
||||||
* `Semantic Versioning <http://semver.org>`_ IS RECOMMENDED.
|
|
||||||
|
|
||||||
If :ref:`libjson_version` field is not defined and :ref:`libjson_repository`
|
:ref:`libjson_version` and :ref:`libjson_repository` fields are defined.
|
||||||
field is defined, then |PIOAPICR| will use the
|
The :ref:`libjson_repository` is hosted on GitHub or Bitbucket.
|
||||||
`CVS <http://en.wikipedia.org/wiki/Concurrent_Versions_System>` revision from
|
|
||||||
the latest commit as "current version". For example, ``13`` (*SVN*) or first
|
|
||||||
10 chars of *SHA* digest ``e4564b7da4`` (*Git*).
|
|
||||||
|
|
||||||
If :ref:`libjson_version` and :ref:`libjson_repository` fields are defined,
|
|PIOAPICR| will lookup for release tag named as value of :ref:`libjson_version`
|
||||||
then :ref:`libjson_version` has HIGHER PRIORITY. We recommend to use
|
or with ``v`` prefix (you do not need to pass this ``v`` prefix to the
|
||||||
:ref:`libjson_version` field and specify the real release version. In other
|
:ref:`libjson_version` field).
|
||||||
case, users will receive updates for library with each new commit to
|
|
||||||
:ref:`libjson_repository`.
|
:Case 2:
|
||||||
|
|
||||||
|
:ref:`libjson_version` and :ref:`libjson_repository` fields are defined
|
||||||
|
and :ref:`libjson_repository` does not contain tag/release with value of
|
||||||
|
:ref:`libjson_version`.
|
||||||
|
|
||||||
|
|PIOAPICR| will use the latest source code from :ref:`libjson_repository`
|
||||||
|
and link it with specified :ref:`libjson_version`. If :ref:`libjson_repository`
|
||||||
|
``branch`` is not specified, then default branch will be used.
|
||||||
|
Also, if you push new commits to :ref:`libjson_repository`
|
||||||
|
and do not update :ref:`libjson_version` field, the library will not be
|
||||||
|
updated until you change the :ref:`libjson_version`.
|
||||||
|
|
||||||
|
:Case 3:
|
||||||
|
|
||||||
|
:ref:`libjson_version` field is not defined and :ref:`libjson_repository`
|
||||||
|
field is defined.
|
||||||
|
|
||||||
|
|PIOAPICR| will use the
|
||||||
|
`CVS <http://en.wikipedia.org/wiki/Concurrent_Versions_System>`_ revision from
|
||||||
|
the latest commit as "current version". For example, ``13`` (*SVN*) or first
|
||||||
|
10 chars of *SHA* digest ``e4564b7da4`` (*Git*). If :ref:`libjson_repository`
|
||||||
|
``branch`` is not specified, then default branch will be used.
|
||||||
|
|
||||||
|
We recommend to use :ref:`libjson_version` field and specify the real release
|
||||||
|
version and make appropriate target in the :ref:`libjson_repository`. In other
|
||||||
|
case, users will receive updates for library with each new commit to
|
||||||
|
:ref:`libjson_repository`.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|PIOAPICR| updates library only if:
|
|PIOAPICR| updates library only if:
|
||||||
@ -201,6 +231,11 @@ Example:
|
|||||||
It is the *HTTP URL* to the archived source code of library. It should end
|
It is the *HTTP URL* to the archived source code of library. It should end
|
||||||
with the type of archive (``.zip`` or ``.tar.gz``).
|
with the type of archive (``.zip`` or ``.tar.gz``).
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
:ref:`libjson_downloadurl` has higher priority than
|
||||||
|
:ref:`libjson_repository`.
|
||||||
|
|
||||||
Example with fixed release/tag on GitHub:
|
Example with fixed release/tag on GitHub:
|
||||||
|
|
||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
@ -372,6 +407,9 @@ A list of example patterns. This field is predefined with default value:
|
|||||||
.. code-block:: javascript
|
.. code-block:: javascript
|
||||||
|
|
||||||
"examples": [
|
"examples": [
|
||||||
|
"[Ee]xamples/*/*.c",
|
||||||
|
"[Ee]xamples/*/*.cpp",
|
||||||
|
"[Ee]xamples/*/*.h",
|
||||||
"[Ee]xamples/*/*.ino",
|
"[Ee]xamples/*/*.ino",
|
||||||
"[Ee]xamples/*/*.pde"
|
"[Ee]xamples/*/*.pde"
|
||||||
]
|
]
|
||||||
|
@ -34,6 +34,9 @@ Packages
|
|||||||
* - ``ldscripts``
|
* - ``ldscripts``
|
||||||
- `Linker Scripts <https://sourceware.org/binutils/docs/ld/Scripts.html>`_
|
- `Linker Scripts <https://sourceware.org/binutils/docs/ld/Scripts.html>`_
|
||||||
|
|
||||||
|
* - ``tool-openocd``
|
||||||
|
- `OpenOCD <http://openocd.org>`_
|
||||||
|
|
||||||
* - ``toolchain-gccarmnoneeabi``
|
* - ``toolchain-gccarmnoneeabi``
|
||||||
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_
|
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_
|
||||||
|
|
||||||
@ -84,18 +87,32 @@ Arduino
|
|||||||
|
|
||||||
* - ``due``
|
* - ``due``
|
||||||
- `Arduino Due (Programming Port) <http://arduino.cc/en/Main/arduinoBoardDue>`_
|
- `Arduino Due (Programming Port) <http://arduino.cc/en/Main/arduinoBoardDue>`_
|
||||||
- AT91SAM3X8E
|
- SAM3X8E
|
||||||
- 84 MHz
|
- 84 MHz
|
||||||
- 512 Kb
|
- 512 Kb
|
||||||
- 32 Kb
|
- 32 Kb
|
||||||
|
|
||||||
* - ``dueUSB``
|
* - ``dueUSB``
|
||||||
- `Arduino Due (USB Native Port) <http://arduino.cc/en/Main/arduinoBoardDue>`_
|
- `Arduino Due (USB Native Port) <http://arduino.cc/en/Main/arduinoBoardDue>`_
|
||||||
- AT91SAM3X8E
|
- SAM3X8E
|
||||||
- 84 MHz
|
- 84 MHz
|
||||||
- 512 Kb
|
- 512 Kb
|
||||||
- 32 Kb
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``zero``
|
||||||
|
- `Arduino Zero (Programming Port) <https://www.arduino.cc/en/Main/ArduinoBoardZero>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``zeroUSB``
|
||||||
|
- `Arduino Zero (USB Native Port) <https://www.arduino.cc/en/Main/ArduinoBoardZero>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
Atmel
|
Atmel
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
|
@ -119,6 +119,9 @@ Packages
|
|||||||
* - ``tool-mspdebug``
|
* - ``tool-mspdebug``
|
||||||
- `MSPDebug <http://mspdebug.sourceforge.net/>`_
|
- `MSPDebug <http://mspdebug.sourceforge.net/>`_
|
||||||
|
|
||||||
|
* - ``tool-openocd``
|
||||||
|
- `OpenOCD <http://openocd.org>`_
|
||||||
|
|
||||||
* - ``tool-rfdloader``
|
* - ``tool-rfdloader``
|
||||||
- `rfdloader <https://github.com/RFduino/RFduino>`_
|
- `rfdloader <https://github.com/RFduino/RFduino>`_
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ NodeMCU
|
|||||||
- RAM
|
- RAM
|
||||||
|
|
||||||
* - ``nodemcu``
|
* - ``nodemcu``
|
||||||
- `NodeMCU 0.9 & 1.0 <http://www.nodemcu.com/>`_
|
- `NodeMCU 0.9 / 1.0 <http://www.nodemcu.com/>`_
|
||||||
- ESP8266
|
- ESP8266
|
||||||
- 80 MHz
|
- 80 MHz
|
||||||
- 4096 Kb
|
- 4096 Kb
|
||||||
|
@ -23,6 +23,19 @@ from :ref:`projectconf`
|
|||||||
|
|
||||||
upload_speed = 9600
|
upload_speed = 9600
|
||||||
|
|
||||||
|
Custom Reset Method
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
See :ref:`projectconf_upload_resetmethod` option from :ref:`projectconf`
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
[env:esp12e]
|
||||||
|
platform = espressif
|
||||||
|
framework = arduino
|
||||||
|
board = esp12e
|
||||||
|
upload_resetmethod = ck
|
||||||
|
|
||||||
.. _platform_espressif_customflash:
|
.. _platform_espressif_customflash:
|
||||||
|
|
||||||
Custom Flash Size
|
Custom Flash Size
|
||||||
@ -96,7 +109,6 @@ There are 2 options:
|
|||||||
.. code-block:: ini
|
.. code-block:: ini
|
||||||
|
|
||||||
[env:myenv]
|
[env:myenv]
|
||||||
...
|
|
||||||
upload_port = IP_ADDRESS_HERE or mDNS_NAME.local
|
upload_port = IP_ADDRESS_HERE or mDNS_NAME.local
|
||||||
|
|
||||||
For example,
|
For example,
|
||||||
@ -164,6 +176,7 @@ Demo
|
|||||||
Articles
|
Articles
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
* Jan 16, 2016 - **Dani Eichhorn** - `ESP8266 Arduino IDE Alternative: PlatformIO <http://blog.squix.ch/2016/01/esp8266-arduino-ide-alternative.html>`_
|
||||||
* Dec 22, 2015 - **Jan Penninkhof** - `Over-the-Air ESP8266 programming using PlatformIO <http://www.penninkhof.com/2015/12/1610-over-the-air-esp8266-programming-using-platformio/>`_
|
* Dec 22, 2015 - **Jan Penninkhof** - `Over-the-Air ESP8266 programming using PlatformIO <http://www.penninkhof.com/2015/12/1610-over-the-air-esp8266-programming-using-platformio/>`_
|
||||||
* Dec 01, 2015 - **Tateno Yuichi** - `ESP8266 を CUI で開発する (Develop a ESP8266 in CUI, Japanese) <http://jaywiggins.com/platformio/arduino/avr/es8266/2015/09/30/platformio-investigation/>`_
|
* Dec 01, 2015 - **Tateno Yuichi** - `ESP8266 を CUI で開発する (Develop a ESP8266 in CUI, Japanese) <http://jaywiggins.com/platformio/arduino/avr/es8266/2015/09/30/platformio-investigation/>`_
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ Teensy
|
|||||||
- 16 Kb
|
- 16 Kb
|
||||||
|
|
||||||
* - ``teensy31``
|
* - ``teensy31``
|
||||||
- `Teensy 3.1 <https://www.pjrc.com/store/teensy31.html>`_
|
- `Teensy 3.1 / 3.2 <https://www.pjrc.com/store/teensy31.html>`_
|
||||||
- MK20DX256
|
- MK20DX256
|
||||||
- 72 MHz
|
- 72 MHz
|
||||||
- 256 Kb
|
- 256 Kb
|
||||||
|
@ -25,8 +25,8 @@ The sections and their allowable values are described below.
|
|||||||
|
|
||||||
.. contents::
|
.. contents::
|
||||||
|
|
||||||
[platformio]
|
Section ``[platformio]``
|
||||||
------------
|
------------------------
|
||||||
|
|
||||||
A ``platformio`` section is used for overriding default configuration options
|
A ``platformio`` section is used for overriding default configuration options
|
||||||
|
|
||||||
@ -130,9 +130,11 @@ project.
|
|||||||
This option can be overridden by global environment variable
|
This option can be overridden by global environment variable
|
||||||
:envvar:`PLATFORMIO_DATA_DIR`.
|
:envvar:`PLATFORMIO_DATA_DIR`.
|
||||||
|
|
||||||
[env:NAME]
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
Section ``[env:NAME]``
|
||||||
|
----------------------
|
||||||
|
|
||||||
A section with ``env:`` prefix is used to define virtual environment with
|
A section with ``env:`` prefix is used to define virtual environment with
|
||||||
specific options that will be processed with :ref:`cmd_run` command. You can
|
specific options that will be processed with :ref:`cmd_run` command. You can
|
||||||
define unlimited numbers of environments.
|
define unlimited numbers of environments.
|
||||||
@ -145,8 +147,8 @@ Each environment must have unique ``NAME``. The valid chars for ``NAME`` are
|
|||||||
|
|
||||||
For example, ``[env:hello_world]``.
|
For example, ``[env:hello_world]``.
|
||||||
|
|
||||||
Options
|
General options
|
||||||
~~~~~~~
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. _projectconf_env_platform:
|
.. _projectconf_env_platform:
|
||||||
|
|
||||||
@ -165,7 +167,6 @@ Options
|
|||||||
|
|
||||||
The multiple frameworks are allowed, split them with comma ``,`` separator.
|
The multiple frameworks are allowed, split them with comma ``,`` separator.
|
||||||
|
|
||||||
|
|
||||||
.. _projectconf_env_board:
|
.. _projectconf_env_board:
|
||||||
|
|
||||||
``board``
|
``board``
|
||||||
@ -180,6 +181,9 @@ You can find the ``board`` type in *Boards* section of each :ref:`platforms` or
|
|||||||
using `PlatformIO Embedded Boards Explorer <http://platformio.org/#!/boards>`_.
|
using `PlatformIO Embedded Boards Explorer <http://platformio.org/#!/boards>`_.
|
||||||
|
|
||||||
|
|
||||||
|
Board options
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
``board_mcu``
|
``board_mcu``
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
@ -201,43 +205,12 @@ format of this option is ``C-like long integer`` value with ``L`` suffix. The
|
|||||||
1 Hertz is equal to ``1L``, then 16 Mhz (Mega Hertz) is equal to ``16000000L``.
|
1 Hertz is equal to ``1L``, then 16 Mhz (Mega Hertz) is equal to ``16000000L``.
|
||||||
|
|
||||||
The full list of ``board_f_cpu`` for the popular embedded platforms you can
|
The full list of ``board_f_cpu`` for the popular embedded platforms you can
|
||||||
find in *Boards* section of :ref:`platforms`. See "Frequency" column.
|
find in *Boards* section of :ref:`platforms`. See "Frequency" column. You can
|
||||||
|
overclock a board by specifying a ``board_f_cpu`` value other than the default.
|
||||||
|
|
||||||
|
|
||||||
``upload_port``
|
Building options
|
||||||
^^^^^^^^^^^^^^^
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
This option is used by "uploader" tool when sending firmware to board via
|
|
||||||
``upload_port``. For example,
|
|
||||||
|
|
||||||
* ``/dev/ttyUSB0`` - Unix-based OS
|
|
||||||
* ``COM3`` - Windows OS
|
|
||||||
* ``192.168.0.13`` - IP address when using OTA
|
|
||||||
|
|
||||||
If ``upload_port`` isn't specified, then *PlatformIO* will try to detect it
|
|
||||||
automatically.
|
|
||||||
|
|
||||||
To print all available serial ports use :ref:`cmd_serialports` command.
|
|
||||||
|
|
||||||
|
|
||||||
``upload_protocol``
|
|
||||||
^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
A protocol that "uploader" tool uses to talk to the board.
|
|
||||||
|
|
||||||
.. _projectconf_upload_speed:
|
|
||||||
|
|
||||||
``upload_speed``
|
|
||||||
^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
A connection speed (`baud rate <http://en.wikipedia.org/wiki/Baud>`_)
|
|
||||||
which "uploader" tool uses when sending firmware to board.
|
|
||||||
|
|
||||||
``upload_flags``
|
|
||||||
^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Extra flags for uploader. Will be added to the end of uploader command. If you
|
|
||||||
need to override uploader command or base flags please use :ref:`projectconf_extra_script`.
|
|
||||||
|
|
||||||
.. _projectconf_build_flags:
|
.. _projectconf_build_flags:
|
||||||
|
|
||||||
@ -362,12 +335,129 @@ be applied in theirs order.
|
|||||||
`GLOB Patterns <http://en.wikipedia.org/wiki/Glob_(programming)>`_ are allowed.
|
`GLOB Patterns <http://en.wikipedia.org/wiki/Glob_(programming)>`_ are allowed.
|
||||||
|
|
||||||
By default, ``src_filter`` is predefined to
|
By default, ``src_filter`` is predefined to
|
||||||
``+<*> -<.git/> -<svn/> -<examples/>``, which means "includes ALL files, then
|
``+<*> -<.git/> -<svn/> -<example*/>``, which means "includes ALL files, then
|
||||||
exclude ``.git`` and ``svn`` repository folders and exclude ``examples`` folder.
|
exclude ``.git`` and ``svn`` repository folders and exclude ``examples`` folder.
|
||||||
|
|
||||||
This option can be set by global environment variable
|
This option can be set by global environment variable
|
||||||
:envvar:`PLATFORMIO_SRC_FILTER`.
|
:envvar:`PLATFORMIO_SRC_FILTER`.
|
||||||
|
|
||||||
|
.. _projectconf_extra_script:
|
||||||
|
|
||||||
|
``extra_script``
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Allows to launch extra script using `SCons <http://www.scons.org>`_ software
|
||||||
|
construction tool. For more details please follow to "Construction Environments"
|
||||||
|
section of
|
||||||
|
`SCons documentation <http://www.scons.org/doc/production/HTML/scons-user.html#chap-environments>`_.
|
||||||
|
|
||||||
|
This option can be set by global environment variable
|
||||||
|
:envvar:`PLATFORMIO_EXTRA_SCRIPT`.
|
||||||
|
|
||||||
|
Example, specify own upload command for :ref:`platform_atmelavr`:
|
||||||
|
|
||||||
|
``platformio.ini``:
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
[env:env_with_specific_extra_script]
|
||||||
|
platform = atmelavr
|
||||||
|
extra_script = /path/to/extra_script.py
|
||||||
|
custom_option = hello
|
||||||
|
|
||||||
|
``extra_script.py``:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from SCons.Script import DefaultEnvironment
|
||||||
|
|
||||||
|
env = DefaultEnvironment()
|
||||||
|
|
||||||
|
env.Replace(UPLOADHEXCMD='"$UPLOADER" ${ARGUMENTS.get("custom_option")} --uploader --flags')
|
||||||
|
|
||||||
|
# uncomment line below to see environment variables
|
||||||
|
# print env.Dump()
|
||||||
|
# print ARGUMENTS
|
||||||
|
|
||||||
|
|
||||||
|
* see built-in examples of `PlatformIO build scripts <https://github.com/platformio/platformio/tree/develop/platformio/builder/scripts>`_.
|
||||||
|
* take a look at the multiple snippets/answers for the user questions:
|
||||||
|
|
||||||
|
- `#462 Split C/C++ build flags <https://github.com/platformio/platformio/issues/462#issuecomment-172667342>`_
|
||||||
|
- `#365 Extra configuration for ESP8266 uploader <https://github.com/platformio/platformio/issues/365#issuecomment-163695011>`_
|
||||||
|
- `#351 Specific reset method for ESP8266 <https://github.com/platformio/platformio/issues/351#issuecomment-161789165>`_
|
||||||
|
- `#247 Specific options for avrdude <https://github.com/platformio/platformio/issues/247#issuecomment-118169728>`_.
|
||||||
|
|
||||||
|
``targets``
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
A list with targets which will be processed by :ref:`cmd_run` command by
|
||||||
|
default. You can enter more than one target separated with "space".
|
||||||
|
|
||||||
|
The list with available targets is located in :option:`platformio run --target`.
|
||||||
|
|
||||||
|
**Tip!** You can use these targets like an option to
|
||||||
|
:option:`platformio run --target` command. For example:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# clean project
|
||||||
|
platformio run -t clean
|
||||||
|
|
||||||
|
# dump curent build environment
|
||||||
|
platformio run --target envdump
|
||||||
|
|
||||||
|
When no targets are defined, *PlatformIO* will build only sources by default.
|
||||||
|
|
||||||
|
|
||||||
|
Uploading options
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
``upload_port``
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This option is used by "uploader" tool when sending firmware to board via
|
||||||
|
``upload_port``. For example,
|
||||||
|
|
||||||
|
* ``/dev/ttyUSB0`` - Unix-based OS
|
||||||
|
* ``COM3`` - Windows OS
|
||||||
|
* ``192.168.0.13`` - IP address when using OTA
|
||||||
|
|
||||||
|
If ``upload_port`` isn't specified, then *PlatformIO* will try to detect it
|
||||||
|
automatically.
|
||||||
|
|
||||||
|
To print all available serial ports use :ref:`cmd_serialports` command.
|
||||||
|
|
||||||
|
``upload_protocol``
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
A protocol that "uploader" tool uses to talk to the board.
|
||||||
|
|
||||||
|
.. _projectconf_upload_speed:
|
||||||
|
|
||||||
|
``upload_speed``
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
A connection speed (`baud rate <http://en.wikipedia.org/wiki/Baud>`_)
|
||||||
|
which "uploader" tool uses when sending firmware to board.
|
||||||
|
|
||||||
|
``upload_flags``
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Extra flags for uploader. Will be added to the end of uploader command. If you
|
||||||
|
need to override uploader command or base flags please use :ref:`projectconf_extra_script`.
|
||||||
|
|
||||||
|
.. _projectconf_upload_resetmethod:
|
||||||
|
|
||||||
|
``upload_resetmethod``
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Specify reset method for "uploader" tool. This option isn't available for all
|
||||||
|
development platforms. The only :ref:`platform_espressif` supports it.
|
||||||
|
|
||||||
|
Library options
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
``lib_install``
|
``lib_install``
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@ -428,72 +518,7 @@ Example:
|
|||||||
[env:libs_with_enabled_ldf_cyclic]
|
[env:libs_with_enabled_ldf_cyclic]
|
||||||
lib_dfcyclic = True
|
lib_dfcyclic = True
|
||||||
|
|
||||||
.. _projectconf_extra_script:
|
-----------
|
||||||
|
|
||||||
``extra_script``
|
|
||||||
^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Allows to launch extra script using `SCons <http://www.scons.org>`_ software
|
|
||||||
construction tool. For more details please follow to "Construction Environments"
|
|
||||||
section of
|
|
||||||
`SCons documentation <http://www.scons.org/doc/production/HTML/scons-user.html#chap-environments>`_.
|
|
||||||
|
|
||||||
This option can be set by global environment variable
|
|
||||||
:envvar:`PLATFORMIO_EXTRA_SCRIPT`.
|
|
||||||
|
|
||||||
Example, specify own upload command for :ref:`platform_atmelavr`:
|
|
||||||
|
|
||||||
``platformio.ini``:
|
|
||||||
|
|
||||||
.. code-block:: ini
|
|
||||||
|
|
||||||
[env:env_with_specific_extra_script]
|
|
||||||
platform = atmelavr
|
|
||||||
extra_script = /path/to/extra_script.py
|
|
||||||
custom_option = hello
|
|
||||||
|
|
||||||
``extra_script.py``:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
from SCons.Script import DefaultEnvironment
|
|
||||||
|
|
||||||
env = DefaultEnvironment()
|
|
||||||
|
|
||||||
env.Replace(UPLOADHEXCMD='"$UPLOADER" ${ARGUMENTS.get("custom_option")} --uploader --flags')
|
|
||||||
|
|
||||||
# uncomment line below to see environment variables
|
|
||||||
# print env.Dump()
|
|
||||||
# print ARGUMENTS
|
|
||||||
|
|
||||||
|
|
||||||
* see built-in examples of `PlatformIO build scripts <https://github.com/platformio/platformio/tree/develop/platformio/builder/scripts>`_.
|
|
||||||
* take a look at the multiple snippets/answers for the user questions:
|
|
||||||
`#365 <https://github.com/platformio/platformio/issues/365#issuecomment-163695011>`_,
|
|
||||||
`#351 <https://github.com/platformio/platformio/issues/351#issuecomment-161789165>`_,
|
|
||||||
`#236 <https://github.com/platformio/platformio/issues/236#issuecomment-112038284>`_,
|
|
||||||
`#247 <https://github.com/platformio/platformio/issues/247#issuecomment-118169728>`_
|
|
||||||
|
|
||||||
``targets``
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
A list with targets which will be processed by :ref:`cmd_run` command by
|
|
||||||
default. You can enter more than one target separated with "space".
|
|
||||||
|
|
||||||
The list with available targets is located in :option:`platformio run --target`.
|
|
||||||
|
|
||||||
**Tip!** You can use these targets like an option to
|
|
||||||
:option:`platformio run --target` command. For example:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
# clean project
|
|
||||||
platformio run -t clean
|
|
||||||
|
|
||||||
# dump curent build environment
|
|
||||||
platformio run --target envdump
|
|
||||||
|
|
||||||
When no targets are defined, *PlatformIO* will build only sources by default.
|
|
||||||
|
|
||||||
.. _projectconf_examples:
|
.. _projectconf_examples:
|
||||||
|
|
||||||
@ -551,8 +576,8 @@ Examples
|
|||||||
upload_protocol = usbasp
|
upload_protocol = usbasp
|
||||||
upload_flags = -Pusb -B5
|
upload_flags = -Pusb -B5
|
||||||
|
|
||||||
Then upload firmware using :option:`platformio run --target program`. To use
|
Then upload firmware using target ``program`` for :option:`platformio run --target`.
|
||||||
other programmers see :ref:`atmelavr_upload_via_programmer`.
|
command. To use other programmers see :ref:`atmelavr_upload_via_programmer`.
|
||||||
|
|
||||||
|
|
||||||
4. :ref:`platform_ststm32`: Upload firmware using GDB script ``upload.gdb``,
|
4. :ref:`platform_ststm32`: Upload firmware using GDB script ``upload.gdb``,
|
||||||
|
@ -148,7 +148,7 @@ Examples
|
|||||||
check_libraries_interval 7 Check for the library updates interval (days)
|
check_libraries_interval 7 Check for the library updates interval (days)
|
||||||
check_platformio_interval 3 Check for the new PlatformIO interval (days)
|
check_platformio_interval 3 Check for the new PlatformIO interval (days)
|
||||||
check_platforms_interval 7 Check for the platform updates interval (days)
|
check_platforms_interval 7 Check for the platform updates interval (days)
|
||||||
enable_prompts Yes Can PlatformIO communicate with you via prompts: propose to install platforms which aren't installed yet, paginate over library search results and etc.)? ATTENTION!!! If you call PlatformIO like subprocess, please disable prompts to avoid blocking (Yes/No)
|
enable_prompts Yes Can PlatformIO communicate with you via prompts ...
|
||||||
enable_telemetry Yes Telemetry service (Yes/No)
|
enable_telemetry Yes Telemetry service (Yes/No)
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ Examples
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
$ platformio upgrade
|
$ platformio upgrade
|
||||||
You're up-to-date!
|
You are up-to-date!
|
||||||
PlatformIO x.x.x is currently the newest version available.
|
PlatformIO x.x.x is currently the newest version available.
|
||||||
|
|
||||||
# If you have problem with permissions try:
|
# If you have problem with permissions try:
|
||||||
|
@ -22,6 +22,9 @@ Usage
|
|||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
platformio [OPTIONS] COMMAND
|
platformio [OPTIONS] COMMAND
|
||||||
|
pio [OPTIONS] COMMAND
|
||||||
|
|
||||||
|
# "pio" is the alias of "platformio" command
|
||||||
|
|
||||||
Options
|
Options
|
||||||
-------
|
-------
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -21,3 +21,4 @@
|
|||||||
platform = atmelavr
|
platform = atmelavr
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board = engduinov3
|
board = engduinov3
|
||||||
|
lib_install = 574
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
4
examples/wiring-blink/.gitignore
vendored
4
examples/wiring-blink/.gitignore
vendored
@ -1 +1,3 @@
|
|||||||
.pioenvs
|
.pioenvs
|
||||||
|
.clang_complete
|
||||||
|
.gcc-flags.json
|
||||||
|
@ -5,7 +5,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
VERSION = (2, 7, 1)
|
VERSION = (2, 8, 0)
|
||||||
__version__ = ".".join([str(s) for s in VERSION])
|
__version__ = ".".join([str(s) for s in VERSION])
|
||||||
|
|
||||||
__title__ = "platformio"
|
__title__ = "platformio"
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from os import listdir
|
from os import getenv, listdir
|
||||||
from os.path import join
|
from os.path import join
|
||||||
from platform import system
|
from platform import system
|
||||||
from sys import exit as sys_exit
|
from sys import exit as sys_exit
|
||||||
@ -71,6 +71,8 @@ class PlatformioCLI(click.MultiCommand): # pylint: disable=R0904
|
|||||||
@click.option("--caller", "-c", help="Caller ID (service).")
|
@click.option("--caller", "-c", help="Caller ID (service).")
|
||||||
@click.pass_context
|
@click.pass_context
|
||||||
def cli(ctx, force, caller):
|
def cli(ctx, force, caller):
|
||||||
|
if not caller and getenv("PLATFORMIO_CALLER"):
|
||||||
|
caller = getenv("PLATFORMIO_CALLER")
|
||||||
maintenance.on_platformio_start(ctx, force, caller)
|
maintenance.on_platformio_start(ctx, force, caller)
|
||||||
|
|
||||||
|
|
||||||
@ -94,6 +96,14 @@ def main():
|
|||||||
"Invalid installation of Python `requests` package`. See "
|
"Invalid installation of Python `requests` package`. See "
|
||||||
"< https://github.com/platformio/platformio/issues/252 >")
|
"< https://github.com/platformio/platformio/issues/252 >")
|
||||||
|
|
||||||
|
# handle PLATFORMIO_FORCE_COLOR
|
||||||
|
if str(getenv("PLATFORMIO_FORCE_COLOR", "")).lower() == "true":
|
||||||
|
try:
|
||||||
|
# pylint: disable=protected-access
|
||||||
|
click._compat.isatty = lambda stream: True
|
||||||
|
except: # pylint: disable=bare-except
|
||||||
|
pass
|
||||||
|
|
||||||
cli(None, None, None)
|
cli(None, None, None)
|
||||||
except Exception as e: # pylint: disable=W0703
|
except Exception as e: # pylint: disable=W0703
|
||||||
if not isinstance(e, exception.ReturnErrorCode):
|
if not isinstance(e, exception.ReturnErrorCode):
|
||||||
|
@ -183,3 +183,7 @@ def get_session_var(name, default=None):
|
|||||||
def set_session_var(name, value):
|
def set_session_var(name, value):
|
||||||
assert name in SESSION_VARS
|
assert name in SESSION_VARS
|
||||||
SESSION_VARS[name] = value
|
SESSION_VARS[name] = value
|
||||||
|
|
||||||
|
|
||||||
|
def is_disabled_progressbar():
|
||||||
|
return is_ci() or getenv("PLATFORMIO_DISABLE_PROGRESSBAR") == "true"
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
"core": "esp8266",
|
"core": "esp8266",
|
||||||
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
|
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
|
||||||
"f_cpu": "80000000L",
|
"f_cpu": "80000000L",
|
||||||
"ldscript": "esp8266.flash.4m.ld",
|
"ldscript": "esp8266.flash.4m1m.ld",
|
||||||
"mcu": "esp8266",
|
"mcu": "esp8266",
|
||||||
"variant": "nodemcu"
|
"variant": "nodemcu"
|
||||||
},
|
},
|
||||||
@ -73,7 +73,7 @@
|
|||||||
"core": "esp8266",
|
"core": "esp8266",
|
||||||
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
|
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
|
||||||
"f_cpu": "80000000L",
|
"f_cpu": "80000000L",
|
||||||
"ldscript": "esp8266.flash.4m.ld",
|
"ldscript": "esp8266.flash.4m1m.ld",
|
||||||
"mcu": "esp8266",
|
"mcu": "esp8266",
|
||||||
"variant": "nodemcu"
|
"variant": "nodemcu"
|
||||||
},
|
},
|
||||||
@ -96,7 +96,7 @@
|
|||||||
"core": "esp8266",
|
"core": "esp8266",
|
||||||
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
|
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
|
||||||
"f_cpu": "80000000L",
|
"f_cpu": "80000000L",
|
||||||
"ldscript": "esp8266.flash.4m.ld",
|
"ldscript": "esp8266.flash.4m1m.ld",
|
||||||
"mcu": "esp8266",
|
"mcu": "esp8266",
|
||||||
"variant": "adafruit"
|
"variant": "adafruit"
|
||||||
},
|
},
|
||||||
@ -165,7 +165,7 @@
|
|||||||
"core": "esp8266",
|
"core": "esp8266",
|
||||||
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP210",
|
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP210",
|
||||||
"f_cpu": "80000000L",
|
"f_cpu": "80000000L",
|
||||||
"ldscript": "esp8266.flash.4m.ld",
|
"ldscript": "esp8266.flash.4m1m.ld",
|
||||||
"mcu": "esp8266",
|
"mcu": "esp8266",
|
||||||
"variant": "generic"
|
"variant": "generic"
|
||||||
},
|
},
|
||||||
@ -188,7 +188,7 @@
|
|||||||
"core": "esp8266",
|
"core": "esp8266",
|
||||||
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
|
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
|
||||||
"f_cpu": "80000000L",
|
"f_cpu": "80000000L",
|
||||||
"ldscript": "esp8266.flash.4m.ld",
|
"ldscript": "esp8266.flash.4m1m.ld",
|
||||||
"mcu": "esp8266",
|
"mcu": "esp8266",
|
||||||
"variant": "d1"
|
"variant": "d1"
|
||||||
},
|
},
|
||||||
@ -211,7 +211,7 @@
|
|||||||
"core": "esp8266",
|
"core": "esp8266",
|
||||||
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
|
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
|
||||||
"f_cpu": "80000000L",
|
"f_cpu": "80000000L",
|
||||||
"ldscript": "esp8266.flash.4m.ld",
|
"ldscript": "esp8266.flash.4m1m.ld",
|
||||||
"mcu": "esp8266",
|
"mcu": "esp8266",
|
||||||
"variant": "d1_mini"
|
"variant": "d1_mini"
|
||||||
},
|
},
|
||||||
|
@ -89,7 +89,7 @@
|
|||||||
"name": "SeeedStudio Seeeduino-Arch-Pro",
|
"name": "SeeedStudio Seeeduino-Arch-Pro",
|
||||||
"platform": "nxplpc",
|
"platform": "nxplpc",
|
||||||
"upload": {
|
"upload": {
|
||||||
"maximum_ram_size": 32768,
|
"maximum_ram_size": 65536,
|
||||||
"maximum_size": 524288
|
"maximum_size": 524288
|
||||||
},
|
},
|
||||||
"url": "https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/",
|
"url": "https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/",
|
||||||
|
@ -273,14 +273,14 @@
|
|||||||
"nucleo_f401re": {
|
"nucleo_f401re": {
|
||||||
"build": {
|
"build": {
|
||||||
"core": "stm32",
|
"core": "stm32",
|
||||||
"extra_flags": "-DSTM32F4 -DSTM32F401xE",
|
"extra_flags": "-DSTM32F4 -DSTM32F401xE -DSTM32F40_41xxx",
|
||||||
"f_cpu": "84000000L",
|
"f_cpu": "84000000L",
|
||||||
"ldscript": "stm32f401xe.ld",
|
"ldscript": "stm32f401xe.ld",
|
||||||
"cpu": "cortex-m4",
|
"cpu": "cortex-m4",
|
||||||
"mcu": "stm32f401ret6",
|
"mcu": "stm32f401ret6",
|
||||||
"variant": "stm32f401xe"
|
"variant": "stm32f401xe"
|
||||||
},
|
},
|
||||||
"frameworks": ["cmsis", "mbed"],
|
"frameworks": ["mbed", "cmsis", "spl"],
|
||||||
"name": "ST Nucleo F401RE",
|
"name": "ST Nucleo F401RE",
|
||||||
"platform": "ststm32",
|
"platform": "ststm32",
|
||||||
"upload": {
|
"upload": {
|
||||||
|
@ -56,7 +56,8 @@ commonvars.AddVariables(
|
|||||||
("UPLOAD_PORT",),
|
("UPLOAD_PORT",),
|
||||||
("UPLOAD_PROTOCOL",),
|
("UPLOAD_PROTOCOL",),
|
||||||
("UPLOAD_SPEED",),
|
("UPLOAD_SPEED",),
|
||||||
("UPLOAD_FLAGS",)
|
("UPLOAD_FLAGS",),
|
||||||
|
("UPLOAD_RESETMETHOD",)
|
||||||
)
|
)
|
||||||
|
|
||||||
DefaultEnvironment(
|
DefaultEnvironment(
|
||||||
@ -103,16 +104,16 @@ if "BOARD" in env:
|
|||||||
except UnknownBoard as e:
|
except UnknownBoard as e:
|
||||||
env.Exit("Error: %s" % str(e))
|
env.Exit("Error: %s" % str(e))
|
||||||
|
|
||||||
if "BOARD_MCU" not in env:
|
for k in commonvars.keys():
|
||||||
env.Replace(BOARD_MCU="${BOARD_OPTIONS['build']['mcu']}")
|
if (k in env or
|
||||||
if "BOARD_F_CPU" not in env:
|
not any([k.startswith("BOARD_"), k.startswith("UPLOAD_")])):
|
||||||
env.Replace(BOARD_F_CPU="${BOARD_OPTIONS['build']['f_cpu']}")
|
continue
|
||||||
if "UPLOAD_PROTOCOL" not in env:
|
_opt, _val = k.lower().split("_", 1)
|
||||||
env.Replace(
|
if _opt == "board":
|
||||||
UPLOAD_PROTOCOL="${BOARD_OPTIONS['upload'].get('protocol', None)}")
|
_opt = "build"
|
||||||
if "UPLOAD_SPEED" not in env:
|
if _val in env['BOARD_OPTIONS'][_opt]:
|
||||||
env.Replace(
|
env.Replace(**{k: "${BOARD_OPTIONS['%s']['%s']}" % (_opt, _val)})
|
||||||
UPLOAD_SPEED="${BOARD_OPTIONS['upload'].get('speed', None)}")
|
|
||||||
if "ldscript" in env.get("BOARD_OPTIONS", {}).get("build", {}):
|
if "ldscript" in env.get("BOARD_OPTIONS", {}).get("build", {}):
|
||||||
env.Replace(
|
env.Replace(
|
||||||
LDSCRIPT_PATH="${BOARD_OPTIONS['build']['ldscript']}"
|
LDSCRIPT_PATH="${BOARD_OPTIONS['build']['ldscript']}"
|
||||||
|
@ -42,10 +42,17 @@ def _get_flash_size(env):
|
|||||||
else "%dM" % (board_max_size / 1048576))
|
else "%dM" % (board_max_size / 1048576))
|
||||||
|
|
||||||
|
|
||||||
|
def _get_board_f_cpu(env):
|
||||||
|
f_cpu = env.subst("$BOARD_F_CPU")
|
||||||
|
f_cpu = str(f_cpu).replace("L", "")
|
||||||
|
return int(int(f_cpu) / 1000000)
|
||||||
|
|
||||||
|
|
||||||
env = DefaultEnvironment()
|
env = DefaultEnvironment()
|
||||||
|
|
||||||
env.Replace(
|
env.Replace(
|
||||||
__get_flash_size=_get_flash_size,
|
__get_flash_size=_get_flash_size,
|
||||||
|
__get_board_f_cpu=_get_board_f_cpu,
|
||||||
|
|
||||||
AR="xtensa-lx106-elf-ar",
|
AR="xtensa-lx106-elf-ar",
|
||||||
AS="xtensa-lx106-elf-as",
|
AS="xtensa-lx106-elf-as",
|
||||||
@ -108,7 +115,7 @@ env.Replace(
|
|||||||
|
|
||||||
UPLOADERFLAGS=[
|
UPLOADERFLAGS=[
|
||||||
"-vv",
|
"-vv",
|
||||||
"-cd", "${BOARD_OPTIONS['upload']['resetmethod']}",
|
"-cd", "$UPLOAD_RESETMETHOD",
|
||||||
"-cb", "$UPLOAD_SPEED",
|
"-cb", "$UPLOAD_SPEED",
|
||||||
"-cp", "$UPLOAD_PORT"
|
"-cp", "$UPLOAD_PORT"
|
||||||
],
|
],
|
||||||
@ -143,7 +150,7 @@ env.Append(
|
|||||||
"eboot", "eboot.elf"),
|
"eboot", "eboot.elf"),
|
||||||
"-bo", "$TARGET",
|
"-bo", "$TARGET",
|
||||||
"-bm", "dio",
|
"-bm", "dio",
|
||||||
"-bf", "${BOARD_OPTIONS['build']['f_cpu'][:2]}",
|
"-bf", "${__get_board_f_cpu(__env__)}",
|
||||||
"-bz", "${__get_flash_size(__env__)}",
|
"-bz", "${__get_flash_size(__env__)}",
|
||||||
"-bs", ".text",
|
"-bs", ".text",
|
||||||
"-bp", "4096",
|
"-bp", "4096",
|
||||||
|
@ -56,7 +56,6 @@ def find_ldscript(src_dir):
|
|||||||
elif isfile(join(src_dir, BOARD_BUILDOPTS['ldscript'])):
|
elif isfile(join(src_dir, BOARD_BUILDOPTS['ldscript'])):
|
||||||
ldscript = join(src_dir, BOARD_BUILDOPTS['ldscript'])
|
ldscript = join(src_dir, BOARD_BUILDOPTS['ldscript'])
|
||||||
|
|
||||||
assert isfile(ldscript)
|
|
||||||
return ldscript
|
return ldscript
|
||||||
|
|
||||||
|
|
||||||
@ -169,7 +168,8 @@ if BOARD_BUILDOPTS.get("core") == "stm32":
|
|||||||
root_dir = join(root_dir, BOARD_BUILDOPTS.get("variant")[5:7])
|
root_dir = join(root_dir, BOARD_BUILDOPTS.get("variant")[5:7])
|
||||||
|
|
||||||
ldscript_path = find_ldscript(root_dir)
|
ldscript_path = find_ldscript(root_dir)
|
||||||
merge_ld_scripts(ldscript_path)
|
if ldscript_path:
|
||||||
|
merge_ld_scripts(ldscript_path)
|
||||||
generate_nvic_files()
|
generate_nvic_files()
|
||||||
|
|
||||||
# override ldscript by libopencm3
|
# override ldscript by libopencm3
|
||||||
|
@ -195,20 +195,6 @@ def get_build_flags(data):
|
|||||||
return flags
|
return flags
|
||||||
|
|
||||||
|
|
||||||
def _mbed_whole_archive_hook(flags):
|
|
||||||
if (not isinstance(flags, list) or
|
|
||||||
env.get("BOARD_OPTIONS", {}).get("platform") != "ststm32"):
|
|
||||||
return flags
|
|
||||||
|
|
||||||
for pos, flag in enumerate(flags[:]):
|
|
||||||
if isinstance(flag, basestring):
|
|
||||||
continue
|
|
||||||
flags.insert(pos, "-Wl,-whole-archive")
|
|
||||||
flags.insert(pos + 2, "-Wl,-no-whole-archive")
|
|
||||||
|
|
||||||
return flags
|
|
||||||
|
|
||||||
|
|
||||||
board_type = env.subst("$BOARD")
|
board_type = env.subst("$BOARD")
|
||||||
variant = MBED_VARIANTS[
|
variant = MBED_VARIANTS[
|
||||||
board_type] if board_type in MBED_VARIANTS else board_type.upper()
|
board_type] if board_type in MBED_VARIANTS else board_type.upper()
|
||||||
@ -219,8 +205,6 @@ build_flags = get_build_flags(eixdata)
|
|||||||
variant_dir = join("$PLATFORMFW_DIR", "variant", variant)
|
variant_dir = join("$PLATFORMFW_DIR", "variant", variant)
|
||||||
|
|
||||||
env.Replace(
|
env.Replace(
|
||||||
_mbed_whole_archive_hook=_mbed_whole_archive_hook,
|
|
||||||
_LIBFLAGS="${_mbed_whole_archive_hook(%s)}" % env.get("_LIBFLAGS")[2:-1],
|
|
||||||
CPPFLAGS=build_flags.get("CPPFLAGS", []),
|
CPPFLAGS=build_flags.get("CPPFLAGS", []),
|
||||||
CFLAGS=build_flags.get("CFLAGS", []),
|
CFLAGS=build_flags.get("CFLAGS", []),
|
||||||
CXXFLAGS=build_flags.get("CXXFLAGS", []),
|
CXXFLAGS=build_flags.get("CXXFLAGS", []),
|
||||||
@ -267,7 +251,7 @@ libs.append(env.Library(
|
|||||||
for f in eixdata.get("OBJFILES", [])]
|
for f in eixdata.get("OBJFILES", [])]
|
||||||
))
|
))
|
||||||
|
|
||||||
env.Append(LIBS=libs)
|
env.Prepend(LIBS=libs)
|
||||||
|
|
||||||
for _libname, _libdata in get_used_mbedlibs().iteritems():
|
for _libname, _libdata in get_used_mbedlibs().iteritems():
|
||||||
for _libar in _libdata['ar']:
|
for _libar in _libdata['ar']:
|
||||||
|
@ -23,7 +23,7 @@ directly with the registers.
|
|||||||
http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743?sc=stm32embeddedsoftware
|
http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743?sc=stm32embeddedsoftware
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from os.path import join
|
from os.path import isfile, join
|
||||||
|
|
||||||
from SCons.Script import DefaultEnvironment
|
from SCons.Script import DefaultEnvironment
|
||||||
|
|
||||||
@ -70,6 +70,23 @@ envsafe.Append(
|
|||||||
# Target: Build SPL Library
|
# Target: Build SPL Library
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# use mbed ldscript with bootloader section
|
||||||
|
ldscript = env.get("BOARD_OPTIONS", {}).get("build", {}).get("ldscript")
|
||||||
|
if not isfile(join(env.subst("$PIOPACKAGES_DIR"), "ldscripts", ldscript)):
|
||||||
|
if "mbed" in env.get("BOARD_OPTIONS", {}).get("frameworks", {}):
|
||||||
|
env.Append(
|
||||||
|
LINKFLAGS=[
|
||||||
|
'-Wl,-T"%s"' %
|
||||||
|
join(
|
||||||
|
"$PIOPACKAGES_DIR", "framework-mbed", "variant",
|
||||||
|
env.subst("$BOARD").upper(), "mbed",
|
||||||
|
"TARGET_%s" % env.subst(
|
||||||
|
"$BOARD").upper(), "TOOLCHAIN_GCC_ARM",
|
||||||
|
"%s.ld" % ldscript.upper()[:-3]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
extra_flags = env.get("BOARD_OPTIONS", {}).get("build", {}).get("extra_flags")
|
extra_flags = env.get("BOARD_OPTIONS", {}).get("build", {}).get("extra_flags")
|
||||||
src_filter_patterns = ["+<*>"]
|
src_filter_patterns = ["+<*>"]
|
||||||
if "STM32F40_41xxx" in extra_flags:
|
if "STM32F40_41xxx" in extra_flags:
|
||||||
|
@ -17,8 +17,8 @@ from __future__ import absolute_import
|
|||||||
import atexit
|
import atexit
|
||||||
import re
|
import re
|
||||||
from glob import glob
|
from glob import glob
|
||||||
from os import environ, remove
|
from os import environ, listdir, remove
|
||||||
from os.path import basename, isfile, join
|
from os.path import basename, isdir, isfile, join
|
||||||
|
|
||||||
from platformio.util import exec_command, where_is_program
|
from platformio.util import exec_command, where_is_program
|
||||||
|
|
||||||
@ -114,7 +114,10 @@ class InoToCPPConverter(object):
|
|||||||
def ConvertInoToCpp(env):
|
def ConvertInoToCpp(env):
|
||||||
|
|
||||||
def delete_tmpcpp_file(file_):
|
def delete_tmpcpp_file(file_):
|
||||||
remove(file_)
|
try:
|
||||||
|
remove(file_)
|
||||||
|
except WindowsError: # pylint: disable=undefined-variable
|
||||||
|
pass
|
||||||
|
|
||||||
ino_nodes = (env.Glob(join("$PROJECTSRC_DIR", "*.ino")) +
|
ino_nodes = (env.Glob(join("$PROJECTSRC_DIR", "*.ino")) +
|
||||||
env.Glob(join("$PROJECTSRC_DIR", "*.pde")))
|
env.Glob(join("$PROJECTSRC_DIR", "*.pde")))
|
||||||
@ -133,46 +136,88 @@ def ConvertInoToCpp(env):
|
|||||||
|
|
||||||
|
|
||||||
def DumpIDEData(env):
|
def DumpIDEData(env):
|
||||||
data = {
|
|
||||||
"defines": [],
|
BOARD_CORE = env.get("BOARD_OPTIONS", {}).get("build", {}).get("core")
|
||||||
"includes": [],
|
|
||||||
|
def get_includes():
|
||||||
|
includes = []
|
||||||
|
# includes from used framework and libs
|
||||||
|
for item in env.get("VARIANT_DIRS", []):
|
||||||
|
if "$BUILDSRC_DIR" in item[0]:
|
||||||
|
continue
|
||||||
|
includes.append(env.subst(item[1]))
|
||||||
|
|
||||||
|
# custom includes
|
||||||
|
for item in env.get("CPPPATH", []):
|
||||||
|
if item.startswith("$BUILD_DIR"):
|
||||||
|
continue
|
||||||
|
includes.append(env.subst(item))
|
||||||
|
|
||||||
|
# installed libs
|
||||||
|
for d in env.get("LIBSOURCE_DIRS", []):
|
||||||
|
lsd_dir = env.subst(d)
|
||||||
|
_append_lib_includes(lsd_dir, includes)
|
||||||
|
|
||||||
|
# includes from toolchain
|
||||||
|
toolchain_dir = env.subst(
|
||||||
|
join("$PIOPACKAGES_DIR", "$PIOPACKAGE_TOOLCHAIN"))
|
||||||
|
toolchain_incglobs = [
|
||||||
|
join(toolchain_dir, "*", "include*"),
|
||||||
|
join(toolchain_dir, "lib", "gcc", "*", "*", "include*")
|
||||||
|
]
|
||||||
|
for g in toolchain_incglobs:
|
||||||
|
includes.extend(glob(g))
|
||||||
|
|
||||||
|
return includes
|
||||||
|
|
||||||
|
def _append_lib_includes(libs_dir, includes):
|
||||||
|
if not isdir(libs_dir):
|
||||||
|
return
|
||||||
|
for name in env.get("LIB_USE", []) + sorted(listdir(libs_dir)):
|
||||||
|
if not isdir(join(libs_dir, name)):
|
||||||
|
continue
|
||||||
|
# ignore user's specified libs
|
||||||
|
if name in env.get("LIB_IGNORE", []):
|
||||||
|
continue
|
||||||
|
if name == "__cores__":
|
||||||
|
if isdir(join(libs_dir, name, BOARD_CORE)):
|
||||||
|
_append_lib_includes(
|
||||||
|
join(libs_dir, name, BOARD_CORE), includes)
|
||||||
|
return
|
||||||
|
|
||||||
|
include = (
|
||||||
|
join(libs_dir, name, "src")
|
||||||
|
if isdir(join(libs_dir, name, "src"))
|
||||||
|
else join(libs_dir, name)
|
||||||
|
)
|
||||||
|
if include not in includes:
|
||||||
|
includes.append(include)
|
||||||
|
|
||||||
|
def get_defines():
|
||||||
|
defines = []
|
||||||
|
# global symbols
|
||||||
|
for item in env.get("CPPDEFINES", []):
|
||||||
|
if isinstance(item, list):
|
||||||
|
item = "=".join(item)
|
||||||
|
defines.append(env.subst(item).replace('\\"', '"'))
|
||||||
|
|
||||||
|
# special symbol for Atmel AVR MCU
|
||||||
|
board = env.get("BOARD_OPTIONS", {})
|
||||||
|
if board and board['platform'] == "atmelavr":
|
||||||
|
defines.append(
|
||||||
|
"__AVR_%s__" % board['build']['mcu'].upper()
|
||||||
|
.replace("ATMEGA", "ATmega")
|
||||||
|
.replace("ATTINY", "ATtiny")
|
||||||
|
)
|
||||||
|
return defines
|
||||||
|
|
||||||
|
return {
|
||||||
|
"defines": get_defines(),
|
||||||
|
"includes": get_includes(),
|
||||||
"cxx_path": where_is_program(
|
"cxx_path": where_is_program(
|
||||||
env.subst("$CXX"), env.subst("${ENV['PATH']}"))
|
env.subst("$CXX"), env.subst("${ENV['PATH']}"))
|
||||||
}
|
}
|
||||||
|
|
||||||
# includes from framework and libs
|
|
||||||
for item in env.get("VARIANT_DIRS", []):
|
|
||||||
if "$BUILDSRC_DIR" in item[0]:
|
|
||||||
continue
|
|
||||||
data['includes'].append(env.subst(item[1]))
|
|
||||||
|
|
||||||
# includes from toolchain
|
|
||||||
toolchain_dir = env.subst(
|
|
||||||
join("$PIOPACKAGES_DIR", "$PIOPACKAGE_TOOLCHAIN"))
|
|
||||||
toolchain_incglobs = [
|
|
||||||
join(toolchain_dir, "*", "include*"),
|
|
||||||
join(toolchain_dir, "lib", "gcc", "*", "*", "include*")
|
|
||||||
]
|
|
||||||
for g in toolchain_incglobs:
|
|
||||||
data['includes'].extend(glob(g))
|
|
||||||
|
|
||||||
# global symbols
|
|
||||||
for item in env.get("CPPDEFINES", []):
|
|
||||||
if isinstance(item, list):
|
|
||||||
item = "=".join(item)
|
|
||||||
data['defines'].append(env.subst(item).replace('\\"', '"'))
|
|
||||||
|
|
||||||
# special symbol for Atmel AVR MCU
|
|
||||||
board = env.get("BOARD_OPTIONS", {})
|
|
||||||
if board and board['platform'] == "atmelavr":
|
|
||||||
data['defines'].append(
|
|
||||||
"__AVR_%s__" % board['build']['mcu'].upper()
|
|
||||||
.replace("ATMEGA", "ATmega")
|
|
||||||
.replace("ATTINY", "ATtiny")
|
|
||||||
)
|
|
||||||
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
def GetCompilerType(env):
|
def GetCompilerType(env):
|
||||||
try:
|
try:
|
||||||
|
@ -19,14 +19,16 @@ from glob import glob
|
|||||||
from os import getenv, listdir, sep, walk
|
from os import getenv, listdir, sep, walk
|
||||||
from os.path import basename, dirname, isdir, isfile, join, normpath, realpath
|
from os.path import basename, dirname, isdir, isfile, join, normpath, realpath
|
||||||
|
|
||||||
from platformio.util import pioversion_to_intstr
|
|
||||||
from SCons.Script import COMMAND_LINE_TARGETS, DefaultEnvironment, SConscript
|
from SCons.Script import COMMAND_LINE_TARGETS, DefaultEnvironment, SConscript
|
||||||
from SCons.Util import case_sensitive_suffixes
|
from SCons.Util import case_sensitive_suffixes
|
||||||
|
|
||||||
|
from platformio.util import pioversion_to_intstr
|
||||||
|
|
||||||
SRC_BUILD_EXT = ["c", "cpp", "S", "spp", "SPP", "sx", "s", "asm", "ASM"]
|
SRC_BUILD_EXT = ["c", "cpp", "S", "spp", "SPP", "sx", "s", "asm", "ASM"]
|
||||||
SRC_HEADER_EXT = ["h", "hpp"]
|
SRC_HEADER_EXT = ["h", "hpp"]
|
||||||
SRC_DEFAULT_FILTER = " ".join([
|
SRC_DEFAULT_FILTER = " ".join([
|
||||||
"+<*>", "-<.git%s>" % sep, "-<svn%s>" % sep, "-<examples%s>" % sep
|
"+<*>", "-<.git%s>" % sep, "-<svn%s>" % sep, "-<example*%s>" % sep,
|
||||||
|
"-<test*%s>" % sep
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
@ -81,12 +83,18 @@ def BuildProgram(env):
|
|||||||
LIBPATH=["$BUILD_DIR"]
|
LIBPATH=["$BUILD_DIR"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
sources = env.LookupSources(
|
||||||
|
"$BUILDSRC_DIR", "$PROJECTSRC_DIR", duplicate=False,
|
||||||
|
src_filter=getenv("PLATFORMIO_SRC_FILTER", env.get("SRC_FILTER")))
|
||||||
|
|
||||||
|
if not sources:
|
||||||
|
env.Exit(
|
||||||
|
"Error: Nothing to build. Please put your source code files "
|
||||||
|
"to '%s' folder" % env.subst("$PROJECTSRC_DIR"))
|
||||||
|
|
||||||
return env.Program(
|
return env.Program(
|
||||||
join("$BUILD_DIR", env.subst("$PROGNAME")),
|
join("$BUILD_DIR", env.subst("$PROGNAME")),
|
||||||
env.LookupSources(
|
sources
|
||||||
"$BUILDSRC_DIR", "$PROJECTSRC_DIR", duplicate=False,
|
|
||||||
src_filter=getenv("PLATFORMIO_SRC_FILTER",
|
|
||||||
env.get("SRC_FILTER")))
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,16 +61,16 @@ def cli(query, json_output): # pylint: disable=R0912
|
|||||||
flash_size = ""
|
flash_size = ""
|
||||||
if "maximum_size" in data.get("upload", None):
|
if "maximum_size" in data.get("upload", None):
|
||||||
flash_size = int(data['upload']['maximum_size'])
|
flash_size = int(data['upload']['maximum_size'])
|
||||||
flash_size = "%dKb" % (flash_size / 1024)
|
flash_size = "%dkB" % (flash_size / 1024)
|
||||||
|
|
||||||
ram_size = ""
|
ram_size = ""
|
||||||
if "maximum_ram_size" in data.get("upload", None):
|
if "maximum_ram_size" in data.get("upload", None):
|
||||||
ram_size = int(data['upload']['maximum_ram_size'])
|
ram_size = int(data['upload']['maximum_ram_size'])
|
||||||
if ram_size >= 1024:
|
if ram_size >= 1024:
|
||||||
if ram_size % 1024:
|
if ram_size % 1024:
|
||||||
ram_size = "%.1fKb" % (ram_size / 1024.0)
|
ram_size = "%.1fkB" % (ram_size / 1024.0)
|
||||||
else:
|
else:
|
||||||
ram_size = "%dKb" % (ram_size / 1024)
|
ram_size = "%dkB" % (ram_size / 1024)
|
||||||
else:
|
else:
|
||||||
ram_size = "%dB" % ram_size
|
ram_size = "%dB" % ram_size
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ PlatformIO will compile them to static libraries and link to executable file.
|
|||||||
The source code of each library should be placed in separate directory, like
|
The source code of each library should be placed in separate directory, like
|
||||||
"lib/private_lib/[here are source files]".
|
"lib/private_lib/[here are source files]".
|
||||||
|
|
||||||
For example, see how can be organised `Foo` and `Bar` libraries:
|
For example, see how can be organized `Foo` and `Bar` libraries:
|
||||||
|
|
||||||
|--lib
|
|--lib
|
||||||
| |--Bar
|
| |--Bar
|
||||||
|
@ -56,8 +56,13 @@ def cli(ctx, environment, target, upload_port, # pylint: disable=R0913,R0914
|
|||||||
if not disable_auto_clean:
|
if not disable_auto_clean:
|
||||||
try:
|
try:
|
||||||
_clean_pioenvs_dir(util.get_pioenvs_dir())
|
_clean_pioenvs_dir(util.get_pioenvs_dir())
|
||||||
except Exception:
|
except: # pylint: disable=bare-except
|
||||||
raise exception.CleanPioenvsDirError(util.get_pioenvs_dir())
|
click.secho(
|
||||||
|
"Can not remove temporary directory `%s`. Please remove "
|
||||||
|
"`.pioenvs` directory from the project manually to avoid "
|
||||||
|
"build issues" % util.get_pioenvs_dir(),
|
||||||
|
fg="yellow"
|
||||||
|
)
|
||||||
|
|
||||||
results = []
|
results = []
|
||||||
for section in config.sections():
|
for section in config.sections():
|
||||||
|
@ -34,9 +34,17 @@ def cli():
|
|||||||
click.secho("Please wait while upgrading PlatformIO ...",
|
click.secho("Please wait while upgrading PlatformIO ...",
|
||||||
fg="yellow")
|
fg="yellow")
|
||||||
|
|
||||||
|
to_develop = False
|
||||||
|
try:
|
||||||
|
from pkg_resources import parse_version
|
||||||
|
to_develop = parse_version(last) < parse_version(__version__)
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
cmds = (
|
cmds = (
|
||||||
[os.path.normpath(sys.executable),
|
["pip", "install", "--upgrade",
|
||||||
"-m", "pip", "install", "--upgrade", "platformio"],
|
"https://github.com/platformio/platformio/archive/develop.zip"
|
||||||
|
if to_develop else "platformio"],
|
||||||
["platformio", "--version"]
|
["platformio", "--version"]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -44,19 +52,21 @@ def cli():
|
|||||||
r = None
|
r = None
|
||||||
try:
|
try:
|
||||||
for cmd in cmds:
|
for cmd in cmds:
|
||||||
|
cmd = [os.path.normpath(sys.executable), "-m"] + cmd
|
||||||
r = None
|
r = None
|
||||||
r = util.exec_command(cmd)
|
r = util.exec_command(cmd)
|
||||||
|
|
||||||
# try pip with disabled cache
|
# try pip with disabled cache
|
||||||
if r['returncode'] != 0 and cmd[0] != "platformio":
|
if r['returncode'] != 0 and cmd[2] == "pip":
|
||||||
cmd.insert(3, "--no-cache-dir")
|
cmd.insert(3, "--no-cache-dir")
|
||||||
r = util.exec_command(cmd)
|
r = util.exec_command(cmd)
|
||||||
|
|
||||||
assert r['returncode'] == 0
|
assert r['returncode'] == 0
|
||||||
assert last in r['out'].strip()
|
assert "version" in r['out']
|
||||||
|
actual_version = r['out'].strip().split("version", 1)[1].strip()
|
||||||
click.secho(
|
click.secho(
|
||||||
"PlatformIO has been successfully upgraded to %s" % last,
|
"PlatformIO has been successfully upgraded to %s" %
|
||||||
fg="green")
|
actual_version, fg="green")
|
||||||
click.echo("Release notes: ", nl=False)
|
click.echo("Release notes: ", nl=False)
|
||||||
click.secho("http://docs.platformio.org/en/latest/history.html",
|
click.secho("http://docs.platformio.org/en/latest/history.html",
|
||||||
fg="cyan")
|
fg="cyan")
|
||||||
|
@ -20,7 +20,7 @@ from time import mktime
|
|||||||
import click
|
import click
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from platformio import util
|
from platformio import app, util
|
||||||
from platformio.exception import (FDSHASumMismatch, FDSizeMismatch,
|
from platformio.exception import (FDSHASumMismatch, FDSizeMismatch,
|
||||||
FDUnrecognizedStatusCode)
|
FDUnrecognizedStatusCode)
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ class FileDownloader(object):
|
|||||||
f = open(self._destination, "wb")
|
f = open(self._destination, "wb")
|
||||||
chunks = int(ceil(self.get_size() / float(self.CHUNK_SIZE)))
|
chunks = int(ceil(self.get_size() / float(self.CHUNK_SIZE)))
|
||||||
|
|
||||||
if util.is_ci():
|
if app.is_disabled_progressbar():
|
||||||
click.echo("Downloading...")
|
click.echo("Downloading...")
|
||||||
for _ in range(0, chunks):
|
for _ in range(0, chunks):
|
||||||
f.write(next(itercontent))
|
f.write(next(itercontent))
|
||||||
|
@ -129,12 +129,6 @@ class UnknownEnvNames(PlatformioException):
|
|||||||
MESSAGE = "Unknown environment names '{0}'. Valid names are '{1}'"
|
MESSAGE = "Unknown environment names '{0}'. Valid names are '{1}'"
|
||||||
|
|
||||||
|
|
||||||
class CleanPioenvsDirError(PlatformioException):
|
|
||||||
|
|
||||||
MESSAGE = "Can not remove temporary directory `{0}`. "\
|
|
||||||
"Please remove it manually"
|
|
||||||
|
|
||||||
|
|
||||||
class GetSerialPortsError(PlatformioException):
|
class GetSerialPortsError(PlatformioException):
|
||||||
|
|
||||||
MESSAGE = "No implementation for your platform ('{0}') available"
|
MESSAGE = "No implementation for your platform ('{0}') available"
|
||||||
|
@ -15,12 +15,14 @@
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
from os.path import abspath, basename, expanduser, isdir, join, relpath
|
import sys
|
||||||
|
from os.path import (abspath, basename, expanduser, isdir, join, normpath,
|
||||||
|
relpath)
|
||||||
|
|
||||||
import bottle
|
import bottle
|
||||||
import click
|
import click # pylint: disable=wrong-import-order
|
||||||
|
|
||||||
from platformio import exception, util
|
from platformio import app, exception, util
|
||||||
|
|
||||||
|
|
||||||
class ProjectGenerator(object):
|
class ProjectGenerator(object):
|
||||||
@ -64,10 +66,12 @@ class ProjectGenerator(object):
|
|||||||
envdata = self.get_project_env()
|
envdata = self.get_project_env()
|
||||||
if "env_name" not in envdata:
|
if "env_name" not in envdata:
|
||||||
return data
|
return data
|
||||||
result = util.exec_command(
|
cmd = [normpath(sys.executable), "-m", "platformio", "-f"]
|
||||||
["platformio", "-f", "run", "-t", "idedata",
|
if app.get_session_var("caller_id"):
|
||||||
"-e", envdata['env_name'], "-d", self.project_dir]
|
cmd.extend(["-c", app.get_session_var("caller_id")])
|
||||||
)
|
cmd.extend(["run", "-t", "idedata", "-e", envdata['env_name']])
|
||||||
|
cmd.extend(["-d", self.project_dir])
|
||||||
|
result = util.exec_command(cmd)
|
||||||
|
|
||||||
if result['returncode'] != 0 or '"includes":' not in result['out']:
|
if result['returncode'] != 0 or '"includes":' not in result['out']:
|
||||||
raise exception.PlatformioException(
|
raise exception.PlatformioException(
|
||||||
|
8
platformio/ide/tpls/atom/.gcc-flags.json.tpl
Normal file
8
platformio/ide/tpls/atom/.gcc-flags.json.tpl
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"execPath": "{{ cxx_path.replace("\\", "/") }}",
|
||||||
|
"gccDefaultCFlags": "-Wall -Wno-cpp -fsyntax-only -D{{ ' -D'.join(defines) }}",
|
||||||
|
"gccDefaultCppFlags": "-Wall -Wno-cpp -fsyntax-only -D{{ ' -D'.join(defines) }}",
|
||||||
|
"gccErrorLimit": 15,
|
||||||
|
"gccIncludePaths": "{{ ','.join(includes).replace("\\", "/") }}",
|
||||||
|
"gccSuppressWarnings": false
|
||||||
|
}
|
@ -1,2 +1,3 @@
|
|||||||
.pioenvs
|
.pioenvs
|
||||||
.clang_complete
|
.clang_complete
|
||||||
|
.gcc-flags.json
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
import struct
|
import struct
|
||||||
from os import remove
|
from os import getenv, remove
|
||||||
from os.path import isdir, isfile, join
|
from os.path import isdir, isfile, join
|
||||||
from shutil import rmtree
|
from shutil import rmtree
|
||||||
from time import time
|
from time import time
|
||||||
@ -142,10 +142,17 @@ def after_upgrade(ctx):
|
|||||||
(click.style("follow", fg="cyan"),
|
(click.style("follow", fg="cyan"),
|
||||||
click.style("https://twitter.com/PlatformIO_Org", fg="cyan"))
|
click.style("https://twitter.com/PlatformIO_Org", fg="cyan"))
|
||||||
)
|
)
|
||||||
click.echo("- %s it on GitHub! > %s" % (
|
click.echo("- %s it on GitHub > %s" % (
|
||||||
click.style("star", fg="cyan"),
|
click.style("star", fg="cyan"),
|
||||||
click.style("https://github.com/platformio/platformio", fg="cyan")
|
click.style("https://github.com/platformio/platformio", fg="cyan")
|
||||||
))
|
))
|
||||||
|
|
||||||
|
if not getenv("PLATFORMIO_IDE"):
|
||||||
|
click.echo("- %s PlatformIO IDE for IoT development > %s" % (
|
||||||
|
click.style("try", fg="cyan"),
|
||||||
|
click.style("http://platformio.org/", fg="cyan")
|
||||||
|
))
|
||||||
|
|
||||||
click.echo("*" * terminal_width)
|
click.echo("*" * terminal_width)
|
||||||
click.echo("")
|
click.echo("")
|
||||||
|
|
||||||
|
@ -129,6 +129,9 @@ PLATFORM_PACKAGES = {
|
|||||||
"tool-bossac": [
|
"tool-bossac": [
|
||||||
("BOSSA CLI", "https://sourceforge.net/projects/b-o-s-s-a/")
|
("BOSSA CLI", "https://sourceforge.net/projects/b-o-s-s-a/")
|
||||||
],
|
],
|
||||||
|
"tool-openocd": [
|
||||||
|
("OpenOCD", "http://openocd.org")
|
||||||
|
],
|
||||||
"tool-stlink": [
|
"tool-stlink": [
|
||||||
("ST-Link", "https://github.com/texane/stlink")
|
("ST-Link", "https://github.com/texane/stlink")
|
||||||
],
|
],
|
||||||
|
@ -98,6 +98,8 @@ class MeasurementProtocol(TelemetryBase):
|
|||||||
dpdata.append("Click/%s" % click.__version__)
|
dpdata.append("Click/%s" % click.__version__)
|
||||||
if app.get_session_var("caller_id"):
|
if app.get_session_var("caller_id"):
|
||||||
dpdata.append("Caller/%s" % app.get_session_var("caller_id"))
|
dpdata.append("Caller/%s" % app.get_session_var("caller_id"))
|
||||||
|
if getenv("PLATFORMIO_IDE"):
|
||||||
|
dpdata.append("IDE/%s" % getenv("PLATFORMIO_IDE"))
|
||||||
self['an'] = " ".join(dpdata)
|
self['an'] = " ".join(dpdata)
|
||||||
|
|
||||||
def _prefill_custom_data(self):
|
def _prefill_custom_data(self):
|
||||||
@ -302,12 +304,15 @@ def on_exception(e):
|
|||||||
def _finalize():
|
def _finalize():
|
||||||
timeout = 1000 # msec
|
timeout = 1000 # msec
|
||||||
elapsed = 0
|
elapsed = 0
|
||||||
while elapsed < timeout:
|
try:
|
||||||
if not MPDataPusher().in_wait():
|
while elapsed < timeout:
|
||||||
break
|
if not MPDataPusher().in_wait():
|
||||||
sleep(0.2)
|
break
|
||||||
elapsed += 200
|
sleep(0.2)
|
||||||
backup_reports(MPDataPusher().get_items())
|
elapsed += 200
|
||||||
|
backup_reports(MPDataPusher().get_items())
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def backup_reports(items):
|
def backup_reports(items):
|
||||||
|
@ -20,7 +20,7 @@ from zipfile import ZipFile
|
|||||||
|
|
||||||
import click
|
import click
|
||||||
|
|
||||||
from platformio import util
|
from platformio import app, util
|
||||||
from platformio.exception import UnsupportedArchiveType
|
from platformio.exception import UnsupportedArchiveType
|
||||||
|
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ class FileUnpacker(object):
|
|||||||
raise UnsupportedArchiveType(archpath)
|
raise UnsupportedArchiveType(archpath)
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
if util.is_ci():
|
if app.is_disabled_progressbar():
|
||||||
click.echo("Unpacking...")
|
click.echo("Unpacking...")
|
||||||
for item in self._unpacker.get_items():
|
for item in self._unpacker.get_items():
|
||||||
self._unpacker.extract_item(item, self._dest_dir)
|
self._unpacker.extract_item(item, self._dest_dir)
|
||||||
|
@ -18,9 +18,9 @@ import json
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import sys
|
||||||
from glob import glob
|
from glob import glob
|
||||||
from os.path import (abspath, basename, dirname, expanduser, isdir, isfile,
|
from os.path import abspath, basename, dirname, expanduser, isdir, isfile, join
|
||||||
join, realpath)
|
|
||||||
from platform import system, uname
|
from platform import system, uname
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
|
||||||
@ -175,7 +175,13 @@ def get_lib_dir():
|
|||||||
|
|
||||||
|
|
||||||
def get_source_dir():
|
def get_source_dir():
|
||||||
return dirname(realpath(__file__))
|
curpath = abspath(__file__)
|
||||||
|
if not isfile(curpath):
|
||||||
|
for p in sys.path:
|
||||||
|
if isfile(join(p, __file__)):
|
||||||
|
curpath = join(p, __file__)
|
||||||
|
break
|
||||||
|
return dirname(curpath)
|
||||||
|
|
||||||
|
|
||||||
def get_project_dir():
|
def get_project_dir():
|
||||||
@ -266,8 +272,18 @@ def get_serialports():
|
|||||||
from serial.tools.list_ports import comports
|
from serial.tools.list_ports import comports
|
||||||
except ImportError:
|
except ImportError:
|
||||||
raise exception.GetSerialPortsError(os.name)
|
raise exception.GetSerialPortsError(os.name)
|
||||||
result = [{"port": p, "description": d, "hwid": h}
|
|
||||||
for p, d, h in comports() if p]
|
result = []
|
||||||
|
for p, d, h in comports():
|
||||||
|
if not p:
|
||||||
|
continue
|
||||||
|
if "windows" in get_systype():
|
||||||
|
try:
|
||||||
|
d = unicode(d, errors="ignore")
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
result.append({"port": p, "description": d, "hwid": h})
|
||||||
|
|
||||||
# fix for PySerial
|
# fix for PySerial
|
||||||
if not result and system() == "Darwin":
|
if not result and system() == "Darwin":
|
||||||
for p in glob("/dev/tty.*"):
|
for p in glob("/dev/tty.*"):
|
||||||
@ -326,7 +342,8 @@ def get_api_result(path, params=None, data=None):
|
|||||||
raise exception.APIRequestError(e)
|
raise exception.APIRequestError(e)
|
||||||
except requests.exceptions.ConnectionError:
|
except requests.exceptions.ConnectionError:
|
||||||
raise exception.APIRequestError(
|
raise exception.APIRequestError(
|
||||||
"Could not connect to PlatformIO Registry Service")
|
"Could not connect to PlatformIO Registry Service. "
|
||||||
|
"Please try later.")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise exception.APIRequestError(
|
raise exception.APIRequestError(
|
||||||
"Invalid response: %s" % r.text.encode("utf-8"))
|
"Invalid response: %s" % r.text.encode("utf-8"))
|
||||||
|
3
setup.py
3
setup.py
@ -54,6 +54,7 @@ setup(
|
|||||||
},
|
},
|
||||||
entry_points={
|
entry_points={
|
||||||
"console_scripts": [
|
"console_scripts": [
|
||||||
|
"pio = platformio.__main__:main",
|
||||||
"platformio = platformio.__main__:main"
|
"platformio = platformio.__main__:main"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -70,7 +71,7 @@ setup(
|
|||||||
"Topic :: Software Development :: Compilers"
|
"Topic :: Software Development :: Compilers"
|
||||||
],
|
],
|
||||||
keywords=[
|
keywords=[
|
||||||
"iot", "build tool", "compiler", "builder", "library manager",
|
"iot", "ide", "build", "compile", "library manager",
|
||||||
"embedded", "ci", "continuous integration", "arduino", "mbed",
|
"embedded", "ci", "continuous integration", "arduino", "mbed",
|
||||||
"esp8266", "framework", "ide", "ide integration", "library.json",
|
"esp8266", "framework", "ide", "ide integration", "library.json",
|
||||||
"make", "cmake", "makefile", "mk"
|
"make", "cmake", "makefile", "mk"
|
||||||
|
Reference in New Issue
Block a user