Merge branch 'release/v2.8.0'

This commit is contained in:
Ivan Kravets
2016-01-29 14:43:35 +02:00
93 changed files with 776 additions and 343 deletions

1
.gitignore vendored
View File

@ -4,3 +4,4 @@
.tox
docs/_build
dist
build

View File

@ -1,14 +1,39 @@
Release History
===============
Release Notes
=============
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)
~~~~~~~~~~~~~~~~~~
* Initial support for Arduino Zero board
(`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>`__
(CLion, Eclipse IDE, Emacs, Sublime Text, VIM): Build,
Clean, Upload, Upload SPIFFS image, Upload using Programmer, Update installed

View File

@ -28,6 +28,10 @@ PlatformIO
.. image:: https://badges.gitter.im/Join%20Chat.svg
:alt: Join the chat at 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>`_ |
`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>`_
* `Articles about us <http://docs.platformio.org/en/latest/articles.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.*
-------------------------------
@ -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>`_
* `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>`_
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
@ -171,6 +175,7 @@ Frameworks:
* `Energia <http://platformio.org/#!/frameworks/energia>`_
* `SPL <http://platformio.org/#!/frameworks/spl>`_
* `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>`_

View File

@ -35,10 +35,10 @@ nav {
display: block !important;
}
body {
padding-top: 50px;
padding-top: 100px;
}
.wy-nav-side {
top: 50px;
top: 100px;
}
.container {
@ -253,3 +253,26 @@ nav {
.navbar-header .navbar-brand {
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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

BIN
docs/_static/ide-atom-platformio.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 KiB

View File

@ -23,6 +23,9 @@ Here are recent articles about PlatformIO:
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>`_
2015

View File

@ -34,10 +34,20 @@ operations/commands.
PlatformIO handles ``CI`` variable which is setup by
`Continuous Integration <http://en.wikipedia.org/wiki/Continuous_integration>`_
(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_SETTING_ENABLE_PROMPTS=false <PLATFORMIO_SETTING_ENABLE_PROMPTS>`.
.. envvar:: PLATFORMIO_FORCE_COLOR
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

View File

@ -79,6 +79,7 @@ Bash completion for `platformio` subcommands you need to put into your `.bashrc`
.. code-block:: bash
eval "$(_PLATFORMIO_COMPLETE=source platformio)"
eval "$(_PLATFORMIO_COMPLETE=source pio)"
ZSH completion
''''''''''''''
@ -89,6 +90,7 @@ To enable ``zsh`` completion please run these commands:
autoload bashcompinit && bashcompinit
eval "$(_PLATFORMIO_COMPLETE=source platformio)"
eval "$(_PLATFORMIO_COMPLETE=source pio)"
.. note::

View File

@ -214,14 +214,14 @@ Arduino
* - ``due``
- `Arduino Due (Programming Port) <http://arduino.cc/en/Main/arduinoBoardDue>`_
- AT91SAM3X8E
- SAM3X8E
- 84 MHz
- 512 Kb
- 32 Kb
* - ``dueUSB``
- `Arduino Due (USB Native Port) <http://arduino.cc/en/Main/arduinoBoardDue>`_
- AT91SAM3X8E
- SAM3X8E
- 84 MHz
- 512 Kb
- 32 Kb
@ -380,6 +380,20 @@ Arduino
- 32 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
~~
@ -693,7 +707,7 @@ NodeMCU
- RAM
* - ``nodemcu``
- `NodeMCU 0.9 & 1.0 <http://www.nodemcu.com/>`_
- `NodeMCU 0.9 / 1.0 <http://www.nodemcu.com/>`_
- ESP8266
- 80 MHz
- 4096 Kb
@ -1073,7 +1087,7 @@ Teensy
- 16 Kb
* - ``teensy31``
- `Teensy 3.1 <https://www.pjrc.com/store/teensy31.html>`_
- `Teensy 3.1 / 3.2 <https://www.pjrc.com/store/teensy31.html>`_
- MK20DX256
- 72 MHz
- 256 Kb

View File

@ -9,6 +9,13 @@
See the License for the specific language governing permissions and
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
--------

View File

@ -716,7 +716,7 @@ Teensy
- RAM
* - ``teensy31``
- `Teensy 3.1 <https://www.pjrc.com/store/teensy31.html>`_
- `Teensy 3.1 / 3.2 <https://www.pjrc.com/store/teensy31.html>`_
- MK20DX256
- 72 MHz
- 256 Kb

View File

@ -106,4 +106,11 @@ ST
- 128 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

View File

@ -17,8 +17,8 @@ IDE Integration
.. toctree::
:maxdepth: 2
ide/arduino
ide/atom
ide/arduino
ide/clion
ide/eclipse
ide/emacs

View File

@ -11,47 +11,143 @@
.. _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
productively without ever touching a config file.
This software can be used with:
.. warning::
* all available :ref:`platforms`
* all available :ref:`frameworks`
Refer to the `Atom Documentation <https://atom.io/docs>`_
page for more detailed information.
PlatformIO IDE is **in beta testing**. Please report all issues to
`PlatformIO IDE issues tracker <https://github.com/platformio/platformio-atom-ide/issues>`_.
.. contents::
Integration
-----------
Requirements
------------
Using `Atom Packages <https://atom.io/docs/v1.0.2/using-atom-atom-packages>`_
please install `platomformio <https://atom.io/packages/platomformio>`_ package.
The only one requirement is `Python Interpreter <https://www.python.org>`_.
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
:target: https://atom.io/packages/platomformio
Menu item ``PlatformIO``
~~~~~~~~~~~~~~~~~~~~~~~~
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
:target: https://atom.io/packages/platomformio
.. image:: ../_static/ide-atom-platformio-menu-item.png
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

View File

@ -20,6 +20,13 @@ computers (`Raspberry Pi <http://www.raspberrypi.org>`_,
`BeagleBone <http://beagleboard.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::
System requirements

View File

@ -138,7 +138,13 @@ Examples:
*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:
@ -158,22 +164,46 @@ Example:
*Required* if :ref:`libjson_repository` field is not defined | Type: ``String``
| 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.
* `Semantic Versioning <http://semver.org>`_ IS RECOMMENDED.
:Case 1:
If :ref:`libjson_version` field is not defined and :ref:`libjson_repository`
field is defined, then |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*).
:ref:`libjson_version` and :ref:`libjson_repository` fields are defined.
The :ref:`libjson_repository` is hosted on GitHub or Bitbucket.
If :ref:`libjson_version` and :ref:`libjson_repository` fields are defined,
then :ref:`libjson_version` has HIGHER PRIORITY. We recommend to use
:ref:`libjson_version` field and specify the real release version. In other
case, users will receive updates for library with each new commit to
:ref:`libjson_repository`.
|PIOAPICR| will lookup for release tag named as value of :ref:`libjson_version`
or with ``v`` prefix (you do not need to pass this ``v`` prefix to the
:ref:`libjson_version` field).
: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::
|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
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:
.. code-block:: javascript
@ -372,6 +407,9 @@ A list of example patterns. This field is predefined with default value:
.. code-block:: javascript
"examples": [
"[Ee]xamples/*/*.c",
"[Ee]xamples/*/*.cpp",
"[Ee]xamples/*/*.h",
"[Ee]xamples/*/*.ino",
"[Ee]xamples/*/*.pde"
]

View File

@ -34,6 +34,9 @@ Packages
* - ``ldscripts``
- `Linker Scripts <https://sourceware.org/binutils/docs/ld/Scripts.html>`_
* - ``tool-openocd``
- `OpenOCD <http://openocd.org>`_
* - ``toolchain-gccarmnoneeabi``
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_
@ -84,18 +87,32 @@ Arduino
* - ``due``
- `Arduino Due (Programming Port) <http://arduino.cc/en/Main/arduinoBoardDue>`_
- AT91SAM3X8E
- SAM3X8E
- 84 MHz
- 512 Kb
- 32 Kb
* - ``dueUSB``
- `Arduino Due (USB Native Port) <http://arduino.cc/en/Main/arduinoBoardDue>`_
- AT91SAM3X8E
- SAM3X8E
- 84 MHz
- 512 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
~~~~~

View File

@ -119,6 +119,9 @@ Packages
* - ``tool-mspdebug``
- `MSPDebug <http://mspdebug.sourceforge.net/>`_
* - ``tool-openocd``
- `OpenOCD <http://openocd.org>`_
* - ``tool-rfdloader``
- `rfdloader <https://github.com/RFduino/RFduino>`_

View File

@ -163,7 +163,7 @@ NodeMCU
- RAM
* - ``nodemcu``
- `NodeMCU 0.9 & 1.0 <http://www.nodemcu.com/>`_
- `NodeMCU 0.9 / 1.0 <http://www.nodemcu.com/>`_
- ESP8266
- 80 MHz
- 4096 Kb

View File

@ -23,6 +23,19 @@ from :ref:`projectconf`
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:
Custom Flash Size
@ -96,7 +109,6 @@ There are 2 options:
.. code-block:: ini
[env:myenv]
...
upload_port = IP_ADDRESS_HERE or mDNS_NAME.local
For example,
@ -164,6 +176,7 @@ Demo
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 01, 2015 - **Tateno Yuichi** - `ESP8266 を CUI で開発する (Develop a ESP8266 in CUI, Japanese) <http://jaywiggins.com/platformio/arduino/avr/es8266/2015/09/30/platformio-investigation/>`_

View File

@ -113,7 +113,7 @@ Teensy
- 16 Kb
* - ``teensy31``
- `Teensy 3.1 <https://www.pjrc.com/store/teensy31.html>`_
- `Teensy 3.1 / 3.2 <https://www.pjrc.com/store/teensy31.html>`_
- MK20DX256
- 72 MHz
- 256 Kb

View File

@ -25,8 +25,8 @@ The sections and their allowable values are described below.
.. contents::
[platformio]
------------
Section ``[platformio]``
------------------------
A ``platformio`` section is used for overriding default configuration options
@ -130,9 +130,11 @@ project.
This option can be overridden by global environment variable
:envvar:`PLATFORMIO_DATA_DIR`.
[env:NAME]
----------
Section ``[env:NAME]``
----------------------
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
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]``.
Options
~~~~~~~
General options
~~~~~~~~~~~~~~~
.. _projectconf_env_platform:
@ -165,7 +167,6 @@ Options
The multiple frameworks are allowed, split them with comma ``,`` separator.
.. _projectconf_env_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>`_.
Board options
~~~~~~~~~~~~~
``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``.
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``
^^^^^^^^^^^^^^^
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`.
Building options
~~~~~~~~~~~~~~~~
.. _projectconf_build_flags:
@ -362,12 +335,129 @@ be applied in theirs order.
`GLOB Patterns <http://en.wikipedia.org/wiki/Glob_(programming)>`_ are allowed.
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.
This option can be set by global environment variable
: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``
^^^^^^^^^^^^^^^
@ -428,72 +518,7 @@ Example:
[env:libs_with_enabled_ldf_cyclic]
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:
@ -551,8 +576,8 @@ Examples
upload_protocol = usbasp
upload_flags = -Pusb -B5
Then upload firmware using :option:`platformio run --target program`. To use
other programmers see :ref:`atmelavr_upload_via_programmer`.
Then upload firmware using target ``program`` for :option:`platformio run --target`.
command. To use other programmers see :ref:`atmelavr_upload_via_programmer`.
4. :ref:`platform_ststm32`: Upload firmware using GDB script ``upload.gdb``,

View File

@ -148,7 +148,7 @@ Examples
check_libraries_interval 7 Check for the library updates interval (days)
check_platformio_interval 3 Check for the new PlatformIO 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)

View File

@ -36,7 +36,7 @@ Examples
.. code-block:: bash
$ platformio upgrade
You're up-to-date!
You are up-to-date!
PlatformIO x.x.x is currently the newest version available.
# If you have problem with permissions try:

View File

@ -22,6 +22,9 @@ Usage
.. code-block:: bash
platformio [OPTIONS] COMMAND
pio [OPTIONS] COMMAND
# "pio" is the alias of "platformio" command
Options
-------

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -21,3 +21,4 @@
platform = atmelavr
framework = arduino
board = engduinov3
lib_install = 574

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -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
"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
| |--Bar

View File

@ -1 +1,3 @@
.pioenvs
.pioenvs
.clang_complete
.gcc-flags.json

View File

@ -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
"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
| |--Bar

View File

@ -14,7 +14,7 @@
import sys
VERSION = (2, 7, 1)
VERSION = (2, 8, 0)
__version__ = ".".join([str(s) for s in VERSION])
__title__ = "platformio"

View File

@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from os import listdir
from os import getenv, listdir
from os.path import join
from platform import system
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.pass_context
def cli(ctx, force, caller):
if not caller and getenv("PLATFORMIO_CALLER"):
caller = getenv("PLATFORMIO_CALLER")
maintenance.on_platformio_start(ctx, force, caller)
@ -94,6 +96,14 @@ def main():
"Invalid installation of Python `requests` package`. See "
"< 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)
except Exception as e: # pylint: disable=W0703
if not isinstance(e, exception.ReturnErrorCode):

View File

@ -183,3 +183,7 @@ def get_session_var(name, default=None):
def set_session_var(name, value):
assert name in SESSION_VARS
SESSION_VARS[name] = value
def is_disabled_progressbar():
return is_ci() or getenv("PLATFORMIO_DISABLE_PROGRESSBAR") == "true"

View File

@ -50,7 +50,7 @@
"core": "esp8266",
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
"f_cpu": "80000000L",
"ldscript": "esp8266.flash.4m.ld",
"ldscript": "esp8266.flash.4m1m.ld",
"mcu": "esp8266",
"variant": "nodemcu"
},
@ -73,7 +73,7 @@
"core": "esp8266",
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
"f_cpu": "80000000L",
"ldscript": "esp8266.flash.4m.ld",
"ldscript": "esp8266.flash.4m1m.ld",
"mcu": "esp8266",
"variant": "nodemcu"
},
@ -96,7 +96,7 @@
"core": "esp8266",
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
"f_cpu": "80000000L",
"ldscript": "esp8266.flash.4m.ld",
"ldscript": "esp8266.flash.4m1m.ld",
"mcu": "esp8266",
"variant": "adafruit"
},
@ -165,7 +165,7 @@
"core": "esp8266",
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP210",
"f_cpu": "80000000L",
"ldscript": "esp8266.flash.4m.ld",
"ldscript": "esp8266.flash.4m1m.ld",
"mcu": "esp8266",
"variant": "generic"
},
@ -188,7 +188,7 @@
"core": "esp8266",
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
"f_cpu": "80000000L",
"ldscript": "esp8266.flash.4m.ld",
"ldscript": "esp8266.flash.4m1m.ld",
"mcu": "esp8266",
"variant": "d1"
},
@ -211,7 +211,7 @@
"core": "esp8266",
"extra_flags": "-DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP12",
"f_cpu": "80000000L",
"ldscript": "esp8266.flash.4m.ld",
"ldscript": "esp8266.flash.4m1m.ld",
"mcu": "esp8266",
"variant": "d1_mini"
},

View File

@ -89,7 +89,7 @@
"name": "SeeedStudio Seeeduino-Arch-Pro",
"platform": "nxplpc",
"upload": {
"maximum_ram_size": 32768,
"maximum_ram_size": 65536,
"maximum_size": 524288
},
"url": "https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/",

View File

@ -273,14 +273,14 @@
"nucleo_f401re": {
"build": {
"core": "stm32",
"extra_flags": "-DSTM32F4 -DSTM32F401xE",
"extra_flags": "-DSTM32F4 -DSTM32F401xE -DSTM32F40_41xxx",
"f_cpu": "84000000L",
"ldscript": "stm32f401xe.ld",
"cpu": "cortex-m4",
"mcu": "stm32f401ret6",
"variant": "stm32f401xe"
},
"frameworks": ["cmsis", "mbed"],
"frameworks": ["mbed", "cmsis", "spl"],
"name": "ST Nucleo F401RE",
"platform": "ststm32",
"upload": {

View File

@ -56,7 +56,8 @@ commonvars.AddVariables(
("UPLOAD_PORT",),
("UPLOAD_PROTOCOL",),
("UPLOAD_SPEED",),
("UPLOAD_FLAGS",)
("UPLOAD_FLAGS",),
("UPLOAD_RESETMETHOD",)
)
DefaultEnvironment(
@ -103,16 +104,16 @@ if "BOARD" in env:
except UnknownBoard as e:
env.Exit("Error: %s" % str(e))
if "BOARD_MCU" not in env:
env.Replace(BOARD_MCU="${BOARD_OPTIONS['build']['mcu']}")
if "BOARD_F_CPU" not in env:
env.Replace(BOARD_F_CPU="${BOARD_OPTIONS['build']['f_cpu']}")
if "UPLOAD_PROTOCOL" not in env:
env.Replace(
UPLOAD_PROTOCOL="${BOARD_OPTIONS['upload'].get('protocol', None)}")
if "UPLOAD_SPEED" not in env:
env.Replace(
UPLOAD_SPEED="${BOARD_OPTIONS['upload'].get('speed', None)}")
for k in commonvars.keys():
if (k in env or
not any([k.startswith("BOARD_"), k.startswith("UPLOAD_")])):
continue
_opt, _val = k.lower().split("_", 1)
if _opt == "board":
_opt = "build"
if _val in env['BOARD_OPTIONS'][_opt]:
env.Replace(**{k: "${BOARD_OPTIONS['%s']['%s']}" % (_opt, _val)})
if "ldscript" in env.get("BOARD_OPTIONS", {}).get("build", {}):
env.Replace(
LDSCRIPT_PATH="${BOARD_OPTIONS['build']['ldscript']}"

View File

@ -42,10 +42,17 @@ def _get_flash_size(env):
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.Replace(
__get_flash_size=_get_flash_size,
__get_board_f_cpu=_get_board_f_cpu,
AR="xtensa-lx106-elf-ar",
AS="xtensa-lx106-elf-as",
@ -108,7 +115,7 @@ env.Replace(
UPLOADERFLAGS=[
"-vv",
"-cd", "${BOARD_OPTIONS['upload']['resetmethod']}",
"-cd", "$UPLOAD_RESETMETHOD",
"-cb", "$UPLOAD_SPEED",
"-cp", "$UPLOAD_PORT"
],
@ -143,7 +150,7 @@ env.Append(
"eboot", "eboot.elf"),
"-bo", "$TARGET",
"-bm", "dio",
"-bf", "${BOARD_OPTIONS['build']['f_cpu'][:2]}",
"-bf", "${__get_board_f_cpu(__env__)}",
"-bz", "${__get_flash_size(__env__)}",
"-bs", ".text",
"-bp", "4096",

View File

@ -56,7 +56,6 @@ def find_ldscript(src_dir):
elif isfile(join(src_dir, BOARD_BUILDOPTS['ldscript'])):
ldscript = join(src_dir, BOARD_BUILDOPTS['ldscript'])
assert isfile(ldscript)
return ldscript
@ -169,7 +168,8 @@ if BOARD_BUILDOPTS.get("core") == "stm32":
root_dir = join(root_dir, BOARD_BUILDOPTS.get("variant")[5:7])
ldscript_path = find_ldscript(root_dir)
merge_ld_scripts(ldscript_path)
if ldscript_path:
merge_ld_scripts(ldscript_path)
generate_nvic_files()
# override ldscript by libopencm3

View File

@ -195,20 +195,6 @@ def get_build_flags(data):
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")
variant = MBED_VARIANTS[
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)
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", []),
CFLAGS=build_flags.get("CFLAGS", []),
CXXFLAGS=build_flags.get("CXXFLAGS", []),
@ -267,7 +251,7 @@ libs.append(env.Library(
for f in eixdata.get("OBJFILES", [])]
))
env.Append(LIBS=libs)
env.Prepend(LIBS=libs)
for _libname, _libdata in get_used_mbedlibs().iteritems():
for _libar in _libdata['ar']:

View File

@ -23,7 +23,7 @@ directly with the registers.
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
@ -70,6 +70,23 @@ envsafe.Append(
# 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")
src_filter_patterns = ["+<*>"]
if "STM32F40_41xxx" in extra_flags:

View File

@ -17,8 +17,8 @@ from __future__ import absolute_import
import atexit
import re
from glob import glob
from os import environ, remove
from os.path import basename, isfile, join
from os import environ, listdir, remove
from os.path import basename, isdir, isfile, join
from platformio.util import exec_command, where_is_program
@ -114,7 +114,10 @@ class InoToCPPConverter(object):
def ConvertInoToCpp(env):
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")) +
env.Glob(join("$PROJECTSRC_DIR", "*.pde")))
@ -133,46 +136,88 @@ def ConvertInoToCpp(env):
def DumpIDEData(env):
data = {
"defines": [],
"includes": [],
BOARD_CORE = env.get("BOARD_OPTIONS", {}).get("build", {}).get("core")
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(
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):
try:

View File

@ -19,14 +19,16 @@ from glob import glob
from os import getenv, listdir, sep, walk
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.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_HEADER_EXT = ["h", "hpp"]
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"]
)
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(
join("$BUILD_DIR", env.subst("$PROGNAME")),
env.LookupSources(
"$BUILDSRC_DIR", "$PROJECTSRC_DIR", duplicate=False,
src_filter=getenv("PLATFORMIO_SRC_FILTER",
env.get("SRC_FILTER")))
sources
)

View File

@ -61,16 +61,16 @@ def cli(query, json_output): # pylint: disable=R0912
flash_size = ""
if "maximum_size" in data.get("upload", None):
flash_size = int(data['upload']['maximum_size'])
flash_size = "%dKb" % (flash_size / 1024)
flash_size = "%dkB" % (flash_size / 1024)
ram_size = ""
if "maximum_ram_size" in data.get("upload", None):
ram_size = int(data['upload']['maximum_ram_size'])
if ram_size >= 1024:
if ram_size % 1024:
ram_size = "%.1fKb" % (ram_size / 1024.0)
ram_size = "%.1fkB" % (ram_size / 1024.0)
else:
ram_size = "%dKb" % (ram_size / 1024)
ram_size = "%dkB" % (ram_size / 1024)
else:
ram_size = "%dB" % ram_size

View File

@ -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
"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
| |--Bar

View File

@ -56,8 +56,13 @@ def cli(ctx, environment, target, upload_port, # pylint: disable=R0913,R0914
if not disable_auto_clean:
try:
_clean_pioenvs_dir(util.get_pioenvs_dir())
except Exception:
raise exception.CleanPioenvsDirError(util.get_pioenvs_dir())
except: # pylint: disable=bare-except
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 = []
for section in config.sections():

View File

@ -34,9 +34,17 @@ def cli():
click.secho("Please wait while upgrading PlatformIO ...",
fg="yellow")
to_develop = False
try:
from pkg_resources import parse_version
to_develop = parse_version(last) < parse_version(__version__)
except ImportError:
pass
cmds = (
[os.path.normpath(sys.executable),
"-m", "pip", "install", "--upgrade", "platformio"],
["pip", "install", "--upgrade",
"https://github.com/platformio/platformio/archive/develop.zip"
if to_develop else "platformio"],
["platformio", "--version"]
)
@ -44,19 +52,21 @@ def cli():
r = None
try:
for cmd in cmds:
cmd = [os.path.normpath(sys.executable), "-m"] + cmd
r = None
r = util.exec_command(cmd)
# 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")
r = util.exec_command(cmd)
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(
"PlatformIO has been successfully upgraded to %s" % last,
fg="green")
"PlatformIO has been successfully upgraded to %s" %
actual_version, fg="green")
click.echo("Release notes: ", nl=False)
click.secho("http://docs.platformio.org/en/latest/history.html",
fg="cyan")

View File

@ -20,7 +20,7 @@ from time import mktime
import click
import requests
from platformio import util
from platformio import app, util
from platformio.exception import (FDSHASumMismatch, FDSizeMismatch,
FDUnrecognizedStatusCode)
@ -63,7 +63,7 @@ class FileDownloader(object):
f = open(self._destination, "wb")
chunks = int(ceil(self.get_size() / float(self.CHUNK_SIZE)))
if util.is_ci():
if app.is_disabled_progressbar():
click.echo("Downloading...")
for _ in range(0, chunks):
f.write(next(itercontent))

View File

@ -129,12 +129,6 @@ class UnknownEnvNames(PlatformioException):
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):
MESSAGE = "No implementation for your platform ('{0}') available"

View File

@ -15,12 +15,14 @@
import json
import os
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 click
import click # pylint: disable=wrong-import-order
from platformio import exception, util
from platformio import app, exception, util
class ProjectGenerator(object):
@ -64,10 +66,12 @@ class ProjectGenerator(object):
envdata = self.get_project_env()
if "env_name" not in envdata:
return data
result = util.exec_command(
["platformio", "-f", "run", "-t", "idedata",
"-e", envdata['env_name'], "-d", self.project_dir]
)
cmd = [normpath(sys.executable), "-m", "platformio", "-f"]
if app.get_session_var("caller_id"):
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']:
raise exception.PlatformioException(

View 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
}

View File

@ -1,2 +1,3 @@
.pioenvs
.clang_complete
.gcc-flags.json

View File

@ -14,7 +14,7 @@
import re
import struct
from os import remove
from os import getenv, remove
from os.path import isdir, isfile, join
from shutil import rmtree
from time import time
@ -142,10 +142,17 @@ def after_upgrade(ctx):
(click.style("follow", 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("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("")

View File

@ -129,6 +129,9 @@ PLATFORM_PACKAGES = {
"tool-bossac": [
("BOSSA CLI", "https://sourceforge.net/projects/b-o-s-s-a/")
],
"tool-openocd": [
("OpenOCD", "http://openocd.org")
],
"tool-stlink": [
("ST-Link", "https://github.com/texane/stlink")
],

View File

@ -98,6 +98,8 @@ class MeasurementProtocol(TelemetryBase):
dpdata.append("Click/%s" % click.__version__)
if 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)
def _prefill_custom_data(self):
@ -302,12 +304,15 @@ def on_exception(e):
def _finalize():
timeout = 1000 # msec
elapsed = 0
while elapsed < timeout:
if not MPDataPusher().in_wait():
break
sleep(0.2)
elapsed += 200
backup_reports(MPDataPusher().get_items())
try:
while elapsed < timeout:
if not MPDataPusher().in_wait():
break
sleep(0.2)
elapsed += 200
backup_reports(MPDataPusher().get_items())
except KeyboardInterrupt:
pass
def backup_reports(items):

View File

@ -20,7 +20,7 @@ from zipfile import ZipFile
import click
from platformio import util
from platformio import app, util
from platformio.exception import UnsupportedArchiveType
@ -92,7 +92,7 @@ class FileUnpacker(object):
raise UnsupportedArchiveType(archpath)
def start(self):
if util.is_ci():
if app.is_disabled_progressbar():
click.echo("Unpacking...")
for item in self._unpacker.get_items():
self._unpacker.extract_item(item, self._dest_dir)

View File

@ -18,9 +18,9 @@ import json
import os
import re
import subprocess
import sys
from glob import glob
from os.path import (abspath, basename, dirname, expanduser, isdir, isfile,
join, realpath)
from os.path import abspath, basename, dirname, expanduser, isdir, isfile, join
from platform import system, uname
from threading import Thread
@ -175,7 +175,13 @@ def get_lib_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():
@ -266,8 +272,18 @@ def get_serialports():
from serial.tools.list_ports import comports
except ImportError:
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
if not result and system() == "Darwin":
for p in glob("/dev/tty.*"):
@ -326,7 +342,8 @@ def get_api_result(path, params=None, data=None):
raise exception.APIRequestError(e)
except requests.exceptions.ConnectionError:
raise exception.APIRequestError(
"Could not connect to PlatformIO Registry Service")
"Could not connect to PlatformIO Registry Service. "
"Please try later.")
except ValueError:
raise exception.APIRequestError(
"Invalid response: %s" % r.text.encode("utf-8"))

View File

@ -54,6 +54,7 @@ setup(
},
entry_points={
"console_scripts": [
"pio = platformio.__main__:main",
"platformio = platformio.__main__:main"
]
},
@ -70,7 +71,7 @@ setup(
"Topic :: Software Development :: Compilers"
],
keywords=[
"iot", "build tool", "compiler", "builder", "library manager",
"iot", "ide", "build", "compile", "library manager",
"embedded", "ci", "continuous integration", "arduino", "mbed",
"esp8266", "framework", "ide", "ide integration", "library.json",
"make", "cmake", "makefile", "mk"