Merge branch 'release/v3.1.0'

This commit is contained in:
Ivan Kravets
2016-09-19 21:12:56 +03:00
77 changed files with 1998 additions and 431 deletions

View File

@ -12,11 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
[run]
omit =
platformio/builder/*
source = platformio
[report]
# Regexes for lines to exclude from consideration
exclude_lines =

View File

@ -4,6 +4,66 @@ Release Notes
PlatformIO 3.0
--------------
3.1.0 (2016-09-19)
~~~~~~~~~~~~~~~~~~
* New! Dynamic variables/templates for `Project Configuration File "platformio.ini" <http://docs.platformio.org/en/stable/projectconf.html>`__
(`issue #705 <https://github.com/platformio/platformio/issues/705>`_)
* Summary about processed environments
(`issue #777 <https://github.com/platformio/platformio/issues/777>`_)
* Implemented LocalCache system for API and improved a work in off-line mode
* Improved Project Generator when custom ``--project-option`` is passed to
`platformio init <http://docs.platformio.org/en/stable/userguide/cmd_init.html>`__
command
* Deprecated ``lib_force`` option, please use `lib_deps <http://docs.platformio.org/en/stable/projectconf.html#lib-deps>`__ instead
* Return valid exit code from ``plaformio test`` command
* Fixed Project Generator for CLion IDE using Windows OS
(`issue #785 <https://github.com/platformio/platformio/issues/785>`_)
* Fixed SSL Server-Name-Indication for Python < 2.7.9
(`issue #774 <https://github.com/platformio/platformio/issues/774>`_)
-------
* Development platform `Espressif 8266 <https://github.com/platformio/platform-espressif8266>`__
+ Add support for `SparkFun Blynk Board <https://www.sparkfun.com/products/13794>`_
+ Created `staging <http://docs.platformio.org/en/stable/platforms/espressif8266.html#using-arduino-framework-with-staging-version>`__
branch to work with development version of Arduino Framework
* Development platform `Freescale Kinetis <https://github.com/platformio/platform-freescalekinetis>`__
+ Added support for new boards: FRDM-KL26Z, FRDM-KL27Z, FRDM-KL43Z, Hexiwear
* Development platform `Nordic nRF51 <https://github.com/platformio/platform-nordicnrf51>`__
+ Added support for new boards: Seeed Arch BLE, Seeed Arch Link, Switch
Science mbed TY51822r3, y5 nRF51822 mbug, JKSoft Wallbot BLE
* Development platform `NXP LPC <https://github.com/platformio/platform-nxplpc>`__
+ Added support for new boards: ARM mbed LPC11U24 (+CAN), Bambino-210E,
CoCo-ri-Co!, DipCortex M3, LPCXpresso11U68, LPCXpresso824-MAX, mBuino,
MicroNFCBoard, NXP LPC11C24, NXP LPC11U34, EA LPC11U35 QuickStart Board,
NXP LPC11U37, NXP LPC2368, NXP LPC2460, NXP LPC800-MAX, Seeed Arch GPRS V2,
Seeed Xadow M0, Smeshlink xbed LPC1768, Switch Science mbed LPC824
* Development platform `ST STM32 <https://github.com/platformio/platform-ststm32>`__
+ New Arduino framework for ST STM32 -
`STM32Duino <https://github.com/rogerclarkmelbourne/Arduino_STM32>`__.
Supported boards: BluePill F103C8, Generic STM32F103C8, Generic STM32F103R8,
Generic STM32F103RB, Generic STM32F103RC, Generic STM32F103RE, Olimexino STM32
+ Added support for new ARM mbed based boards: ST 32F746GDISCOVER,
MultiTech mDot, ST Nucleo F207ZG, ST Nucleo F429ZI, ST Nucleo F446ZE,
ST Nucleo F746ZG, ST Nucleo F767ZI, ST Nucleo L011K4, ST Nucleo L432KC,
Seeed Arch Max
* Development platform `Teensy <https://github.com/platformio/platform-teensy>`__
+ Added support for Teensy 3.5 and 3.6 boards
+ Updated Arduino Framework for Teensy to v130
3.0.1 (2016-09-08)
~~~~~~~~~~~~~~~~~~

View File

@ -18,7 +18,7 @@ PlatformIO
.. image:: https://img.shields.io/pypi/l/platformio.svg
:target: https://pypi.python.org/pypi/platformio/
:alt: License
.. image:: https://img.shields.io/community/PlatformIO.png
.. image:: https://img.shields.io/PlatformIO/Community.png
:alt: Community Forums
:target: https://community.platformio.org
.. image:: https://img.shields.io/PlatformIO/Plus.png?color=orange

View File

@ -23,6 +23,7 @@ Here are recent articles/reviews about PlatformIO:
2016
^^^^
* Sep 12, 2016 - **Pedro Minatel** - `OTA Como programar o ESP8266 pelo WiFi no platformIO (OTA programming for ESP8266 via Wi-Fi using PlatformIO, Portuguese) <http://pedrominatel.com.br/esp8266/ota-como-programar-o-esp8266-pelo-wifi-no-platformio/>`_
* Sep 2, 2016 - **Tinkerman** `ESP8266: Optimizing files for SPIFFS with Gulp <http://tinkerman.cat/optimizing-files-for-spiffs-with-gulp/>`_
* Aug 28, 2016 - **Tom Parker** `Using the BBC micro:bit with PlatformIO <http://www.lshift.net/blog/2016/08/28/using-the-bbc-microbit-with-platformio/>`_
* Aug 24, 2016 - **Primal Cortex** `Cloud based continuous integration and delivery for IOT using PlatformIO <https://primalcortex.wordpress.com/2016/08/24/cloud-based-continuous-integration-and-delivery-for-iot-using-platformio/>`_

View File

@ -55,7 +55,7 @@ Library Manager
Used in demo
~~~~~~~~~~~~
1. :ref:`userguide_lib`
1. :ref:`cmd_lib`
2. :ref:`platformio lib search 1-wire <cmd_lib_search>` command
3. :ref:`platformio lib install 54 <cmd_lib_install>` command
4. :ref:`platformio lib search -f mbed <cmd_lib_search>` command

View File

@ -163,6 +163,6 @@ Allows to override setting :ref:`setting_enable_telemetry`.
Allows to override setting :ref:`setting_force_verbose`.
.. envvar:: PLATFORMIO_SETTING_DISABLE_SSL
.. envvar:: PLATFORMIO_SETTING_ENABLE_SSL
Allows to override setting :ref:`setting_disable_ssl`.
Allows to override setting :ref:`setting_enable_ssl`.

View File

@ -45,6 +45,9 @@ Platforms
* - :ref:`platform_nordicnrf51`
- The Nordic nRF51 Series is a family of highly flexible, multi-protocol, system-on-chip (SoC) devices for ultra-low power wireless applications. nRF51 Series devices support a range of protocol stacks including Bluetooth Smart (previously called Bluetooth low energy), ANT and proprietary 2.4GHz protocols such as Gazell.
* - :ref:`platform_ststm32`
- The STM32 family of 32-bit Flash MCUs based on the ARM Cortex-M processor is designed to offer new degrees of freedom to MCU users. It offers a 32-bit product range that combines very high performance, real-time capabilities, digital signal processing, and low-power, low-voltage operation, while maintaining full integration and ease of development.
* - :ref:`platform_teensy`
- Teensy is a complete USB-based microcontroller development system, in a very small footprint, capable of implementing many types of projects. All programming is done via the USB port. No special programmer is needed, only a standard USB cable and a PC or Macintosh with a USB port.
@ -856,7 +859,7 @@ Espressif
- ESP8266
- 80 MHz
- 4096 Kb
- 50 Kb
- 80 Kb
* - ``phoenix_v1``
- `Phoenix 1.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
@ -906,6 +909,68 @@ Fubarino
- 512 Kb
- 128 Kb
Generic
~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``bluepill_f103c8``
- `BluePill F103C8 <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103c8.html>`_
- STM32F103C8T6
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103C8``
- `STM32F103C8 (20k RAM. 64k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103c8.html>`_
- STM32F103C8
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103CB``
- `STM32F103CB (20k RAM. 128k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103cb.html>`_
- STM32F103CB
- 72 MHz
- 128 Kb
- 20 Kb
* - ``genericSTM32F103R8``
- `STM32F103R8 (20k RAM. 64 Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103r8.html>`_
- STM32F103R8
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103RB``
- `STM32F103RB (20k RAM. 128k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103rb.html>`_
- STM32F103RB
- 72 MHz
- 128 Kb
- 20 Kb
* - ``genericSTM32F103RC``
- `STM32F103RC (48k RAM. 256k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103rc.html>`_
- STM32F103RC
- 72 MHz
- 256 Kb
- 48 Kb
* - ``genericSTM32F103RE``
- `STM32F103RE (64k RAM. 512k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103re.html>`_
- STM32F103RE
- 72 MHz
- 512 Kb
- 64 Kb
Generic ATTiny
~~~~~~~~~~~~~~
@ -1233,6 +1298,13 @@ Olimex
- Flash
- RAM
* - ``maple``
- `Olimexino STM32 <https://www.olimex.com/Products/Duino/STM32/OLIMEXINO-STM32/>`_
- STM32F103RB_MAPLE
- 72 MHz
- 128 Kb
- 16.6015625 Kb
* - ``modwifi``
- `Olimex MOD-WIFI-ESP8266(-DEV) <https://www.olimex.com/Products/IoT/MOD-WIFI-ESP8266-DEV/open-source-hardware>`_
- ESP8266
@ -1590,6 +1662,13 @@ SparkFun
- Flash
- RAM
* - ``sparkfunBlynk``
- `SparkFun Blynk Board <https://www.sparkfun.com/products/13794>`_
- ESP8266
- 80 MHz
- 4096 Kb
- 80 Kb
* - ``sparkfun_digitalsandbox``
- `SparkFun Digital Sandbox <https://www.sparkfun.com/products/12651>`_
- ATMEGA328P
@ -1749,6 +1828,20 @@ Teensy
- 256 Kb
- 64 Kb
* - ``teensy35``
- `Teensy 3.5 <https://www.pjrc.com>`_
- MK64FX512
- 120 MHz
- 512 Kb
- 192 Kb
* - ``teensy36``
- `Teensy 3.6 <https://www.pjrc.com>`_
- MK66FX1M0
- 180 MHz
- 1024 Kb
- 256 Kb
* - ``teensylc``
- `Teensy LC <http://www.pjrc.com/teensy/teensyLC.html>`_
- MKL26Z64

View File

@ -170,6 +170,26 @@ Delta
- 256 Kb
- 32 Kb
Elektor Labs
~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``elektor_cocorico``
- `CoCo-ri-Co! <https://developer.mbed.org/platforms/CoCo-ri-Co/>`_
- LPC812
- 30 MHz
- 16 Kb
- 4 Kb
Embedded Artists
~~~~~~~~~~~~~~~~
@ -184,7 +204,7 @@ Embedded Artists
- RAM
* - ``lpc11u35``
- `Embedded Artists LPC11U35 QuickStart Board <https://developer.mbed.org/platforms/EA-LPC11U35/>`_
- `EA LPC11U35 QuickStart Board <https://developer.mbed.org/platforms/EA-LPC11U35/>`_
- LPC11U35
- 48 MHz
- 64 Kb
@ -259,6 +279,27 @@ Freescale
- 128 Kb
- 16 Kb
* - ``frdm_kl26z``
- `Freescale Kinetis FRDM-KL26Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl16-and-kl26-mcus-up-to-128-kb-flash:FRDM-KL26Z>`_
- MKL26Z128VLH4
- 48 MHz
- 128 Kb
- 16 Kb
* - ``frdm_kl27z``
- `Freescale Kinetis FRDM-KL27Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl17-and-kl27-mcus:FRDM-KL27Z>`_
- MKL27Z64VLH4
- 48 MHz
- 64 Kb
- 16 Kb
* - ``frdm_kl43z``
- `Freescale Kinetis FRDM-KL43Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl43-kl33-kl27-kl17-and-kl13-mcus:FRDM-KL43Z>`_
- MKL43Z256VLH4
- 48 MHz
- 256 Kb
- 32 Kb
* - ``frdm_kl46z``
- `Freescale Kinetis FRDM-KL46Z <https://developer.mbed.org/platforms/FRDM-KL46Z/>`_
- MKL46Z256VLL4
@ -266,6 +307,26 @@ Freescale
- 256 Kb
- 32 Kb
GHI Electronics
~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``oc_mbuino``
- `mBuino <https://developer.mbed.org/platforms/mBuino/>`_
- LPC11U24
- 50 MHz
- 32 Kb
- 10 Kb
Generic
~~~~~~~
@ -299,13 +360,53 @@ JKSoft
- Flash
- RAM
* - ``wallBotBLE``
* - ``wallbot_ble``
- `JKSoft Wallbot BLE <https://developer.mbed.org/platforms/JKSoft-Wallbot-BLE/>`_
- NRF51822
- 16 MHz
- 128 Kb
- 16 Kb
Micromint
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``lpc4330_m4``
- `Bambino-210E <https://developer.mbed.org/platforms/Micromint-Bambino-210E/>`_
- LPC4330
- 204 MHz
- 8192 Kb
- 264 Kb
MikroElektronika
~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``hexiwear``
- `Hexiwear <https://developer.mbed.org/platforms/Hexiwear/>`_
- MK64FN1M0VDC12
- 120 MHz
- 1024 Kb
- 256 Kb
MultiTech
~~~~~~~~~
@ -319,6 +420,13 @@ MultiTech
- Flash
- RAM
* - ``mts_mdot_f405rg``
- `MultiTech mDot <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_
- STM32F411RET6
- 100 MHz
- 512 Kb
- 128 Kb
* - ``mts_mdot_f411re``
- `MultiTech mDot F411 <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_
- STM32F411RET6
@ -359,6 +467,13 @@ NXP
- Flash
- RAM
* - ``lpc11c24``
- `NXP LPC11C24 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/scalable-entry-level-32-bit-microcontroller-mcu-based-on-arm-cortex-m0-plus-m0-cores:LPC11C24FBD48>`_
- LPC11C24
- 48 MHz
- 32 Kb
- 8 Kb
* - ``lpc11u24``
- `NXP mbed LPC11U24 <https://developer.mbed.org/platforms/mbed-LPC11U24/>`_
- LPC11U24
@ -366,6 +481,34 @@ NXP
- 32 Kb
- 8 Kb
* - ``lpc11u24_301``
- `ARM mbed LPC11U24 (+CAN) <https://developer.mbed.org/handbook/mbed-NXP-LPC11U24>`_
- LPC11U24
- 48 MHz
- 32 Kb
- 8 Kb
* - ``lpc11u34_421``
- `NXP LPC11U34 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/40kb-flash-8kb-sram-lqfp48-package:LPC11U34FBD48?lang_cd=en>`_
- LPC11U34
- 48 MHz
- 64 Kb
- 8 Kb
* - ``lpc11u37_501``
- `NXP LPC11U37 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/128kb-flash-10kb-sram-lqfp48-package:LPC11U37FBD48?lang_cd=en>`_
- LPC11U37
- 48 MHz
- 128 Kb
- 10 Kb
* - ``lpc11u68``
- `LPCXpresso11U68 <https://developer.mbed.org/platforms/LPCXpresso11U68/>`_
- LPC11U68
- 50 MHz
- 256 Kb
- 36 Kb
* - ``lpc1549``
- `NXP LPCXpresso1549 <https://developer.mbed.org/platforms/LPCXpresso1549/>`_
- LPC1549
@ -380,6 +523,41 @@ NXP
- 512 Kb
- 64 Kb
* - ``lpc2368``
- `NXP LPC2368 <https://developer.mbed.org/platforms/mbed-LPC2368/>`_
- LPC2368
- 72 MHz
- 512 Kb
- 58 Kb
* - ``lpc2460``
- `NXP LPC2460 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-arm7-arm9-mcus/lpc-arm7-mcus/lpc2100-200-300-400/flashless-16-bit-32-bit-microcontroller-ethernet-can-isp-iap-usb-2.0-device-host-otg-external-memory-interface:LPC2460FBD208>`_
- LPC2460
- 72 MHz
- 64 Kb
- 16 Kb
* - ``lpc812``
- `NXP LPC800-MAX <https://developer.mbed.org/platforms/NXP-LPC800-MAX/>`_
- LPC812
- 30 MHz
- 16 Kb
- 4 Kb
* - ``lpc824``
- `LPCXpresso824-MAX <https://developer.mbed.org/platforms/LPCXpresso824-MAX/>`_
- LPC824
- 30 MHz
- 32 Kb
- 8 Kb
* - ``micronfcboard``
- `MicroNFCBoard <https://developer.mbed.org/platforms/MicroNFCBoard/>`_
- LPC11U34
- 48 MHz
- 64 Kb
- 10 Kb
Nordic
~~~~~~
@ -530,6 +708,13 @@ ST
- 1024 Kb
- 384 Kb
* - ``disco_f746ng``
- `ST 32F746GDISCOVERY <http://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-discovery-kits/32f746gdiscovery.html>`_
- STM32F746NGH6
- 216 MHz
- 1024 Kb
- 320 Kb
* - ``disco_l053c8``
- `ST 32L0538DISCOVERY <http://www.st.com/web/en/catalog/tools/PF260319>`_
- STM32L053C8T6
@ -593,6 +778,13 @@ ST
- 128 Kb
- 20 Kb
* - ``nucleo_f207zg``
- `ST Nucleo F207ZG <https://developer.mbed.org/platforms/ST-Nucleo-F207ZG/>`_
- STM32F207ZGT6
- 120 MHz
- 1024 Kb
- 128 Kb
* - ``nucleo_f302r8``
- `ST Nucleo F302R8 <https://developer.mbed.org/platforms/ST-Nucleo-F302R8/>`_
- STM32F302R8T6
@ -642,6 +834,13 @@ ST
- 512 Kb
- 128 Kb
* - ``nucleo_f429zi``
- `ST Nucleo F429ZI <https://developer.mbed.org/platforms/ST-Nucleo-F429ZI/>`_
- STM32F429ZIT6
- 180 MHz
- 2048 Kb
- 256 Kb
* - ``nucleo_f446re``
- `ST Nucleo F446RE <https://developer.mbed.org/platforms/ST-Nucleo-F446RE/>`_
- STM32F446RET6
@ -649,6 +848,34 @@ ST
- 512 Kb
- 128 Kb
* - ``nucleo_f446ze``
- `ST Nucleo F446ZE <https://developer.mbed.org/platforms/ST-Nucleo-F446ZE/>`_
- STM32F446ZET6
- 180 MHz
- 512 Kb
- 128 Kb
* - ``nucleo_f746zg``
- `ST Nucleo F746ZG <https://developer.mbed.org/platforms/ST-Nucleo-F446ZE/>`_
- STM32F746ZGT6
- 216 MHz
- 1024 Kb
- 320 Kb
* - ``nucleo_f767zi``
- `ST Nucleo F767ZI <https://developer.mbed.org/platforms/ST-Nucleo-F767ZI/>`_
- STM32F746ZGT6
- 216 MHz
- 2048 Kb
- 512 Kb
* - ``nucleo_l011k4``
- `ST Nucleo L011K4 <https://developer.mbed.org/platforms/ST-Nucleo-L011K4/>`_
- STM32L011K4T6
- 32 MHz
- 16 Kb
- 2 Kb
* - ``nucleo_l031k6``
- `ST Nucleo L031K6 <https://developer.mbed.org/platforms/ST-Nucleo-L031K6/>`_
- STM32L031K6T6
@ -677,6 +904,13 @@ ST
- 512 Kb
- 80 Kb
* - ``nucleo_l432kc``
- `ST Nucleo L432KC <https://developer.mbed.org/platforms/ST-Nucleo-L432KC/>`_
- STM32L432KCU6
- 80 MHz
- 256 Kb
- 64 Kb
* - ``nucleo_l476rg``
- `ST Nucleo L476RG <https://developer.mbed.org/platforms/ST-Nucleo-L476RG/>`_
- STM32L476RGT6
@ -697,27 +931,55 @@ SeeedStudio
- Flash
- RAM
* - ``seeedArchMax``
- `SeeedStudio Arch Max <https://developer.mbed.org/platforms/Seeed-Arch-Max/>`_
- STM32F407VET6
- 168 MHz
- 512 Kb
- 192 Kb
* - ``seeedArchBLE``
- `Seeed Arch BLE <https://developer.mbed.org/platforms/Seeed-Arch-BLE/>`_
- NRF51822
- 16 MHz
- 128 Kb
- 16 Kb
* - ``seeedTinyBLE``
- `SeeedStudio Seeed Tiny BLE <http://developer.mbed.org/platforms/Seeed-Tiny-BLE/>`_
* - ``seeedArchGPRS``
- `Seeed Arch GPRS V2 <https://www.seeedstudio.com/Arch-GPRS-V2-p-2026.html>`_
- LPC11U37
- 48 MHz
- 128 Kb
- 10 Kb
* - ``seeedArchLink``
- `Seeed Arch Link <https://developer.mbed.org/platforms/Seeed-Arch-Link/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb
* - ``seeeduinoArchPro``
- `SeeedStudio Seeeduino-Arch-Pro <https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/>`_
* - ``seeedArchMax``
- `Seeed Arch Max <https://developer.mbed.org/platforms/Seeed-Arch-Max/>`_
- STM32F407VET6
- 168 MHz
- 512 Kb
- 192 Kb
* - ``seeedArchPro``
- `Seeed Arch Pro <https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/>`_
- LPC1768
- 96 MHz
- 512 Kb
- 64 Kb
* - ``seeedTinyBLE``
- `Seeed Tiny BLE <http://developer.mbed.org/platforms/Seeed-Tiny-BLE/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb
* - ``xadow_m0``
- `Seeed Xadow M0 <https://developer.mbed.org/platforms/Seeed-Xadow-M0/>`_
- LPC11U35
- 48 MHz
- 64 Kb
- 10 Kb
Silicon Labs
~~~~~~~~~~~~
@ -773,6 +1035,26 @@ Silicon Labs
- 32 Kb
- 4 Kb
Smeshlink
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``xbed_lpc1768``
- `Smeshlink xbed LPC1768 <https://developer.mbed.org/platforms/xbed-LPC1768/>`_
- LPC1768
- 96 MHz
- 512 Kb
- 32 Kb
Solder Splash Labs
~~~~~~~~~~~~~~~~~~
@ -793,6 +1075,26 @@ Solder Splash Labs
- 32 Kb
- 8 Kb
SolderSplash Labs
~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``lpc1347``
- `DipCortex M3 <https://developer.mbed.org/platforms/DipCortex-M3/>`_
- LPC1347
- 72 MHz
- 64 Kb
- 12 Kb
Switch Science
~~~~~~~~~~~~~~
@ -820,6 +1122,20 @@ Switch Science
- 32 Kb
- 4 Kb
* - ``ssci824``
- `Switch Science mbed LPC824 <https://developer.mbed.org/platforms/Switch-Science-mbed-LPC824/>`_
- LPC824
- 30 MHz
- 32 Kb
- 8 Kb
* - ``ty51822r3``
- `Switch Science mbed TY51822r3 <https://developer.mbed.org/platforms/Switch-Science-mbed-TY51822r3/>`_
- NRF51822
- 32 MHz
- 256 Kb
- 32 Kb
Teensy
~~~~~~
@ -860,4 +1176,24 @@ u-blox
- 512 Kb
- 64 Kb
y5 design
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``nrf51822_y5_mbug``
- `y5 nRF51822 mbug <https://developer.mbed.org/platforms/Y5-NRF51822-MBUG/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb
.. include:: mbed_extra.rst

View File

@ -15,8 +15,8 @@
* Cross-platform build system without external dependencies to the OS software:
- 250+ embedded boards
- 20+ development platforms
- 300+ embedded boards
- 15+ development platforms
- 10+ frameworks
* C/C++ Intelligent code completion

View File

@ -18,8 +18,8 @@ PlatformIO IDE is the next-generation integrated development environment for IoT
* Cross-platform build system without external dependencies to the OS software:
- 250+ embedded boards
- 20+ development platforms
- 300+ embedded boards
- 15+ development platforms
- 10+ frameworks
* C/C++ Intelligent Code Completion

View File

@ -167,6 +167,8 @@ For upgrading ``platformio`` to the latest version:
pip install -U platformio
.. _installation_develop:
Development Version
~~~~~~~~~~~~~~~~~~~

View File

@ -196,7 +196,7 @@ dash. `Semantic Versioning <http://semver.org>`_ IS RECOMMENDED.
field is defined.
|PIOAPICR| will use the
`CVS <http://en.wikipedia.org/wiki/Concurrent_Versions_System>`_ revision from
`VCS <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.

View File

@ -44,34 +44,63 @@ If a library source code is located at `GitHub <https://github.com>`_, then
you **need to specify** only these fields in the :ref:`library_config`:
* :ref:`libjson_name`
* :ref:`libjson_version` (is not required, but highly recommended for new :ref:`librarymanager`)
* :ref:`libjson_keywords`
* :ref:`libjson_description`
* :ref:`libjson_repository`
|PIOAPICR| will populate the rest fields, like :ref:`libjson_version` or
:ref:`libjson_authors` with an actual information from *GitHub*.
|PIOAPICR| will populate the rest fields, like :ref:`libjson_authors` with an
actual information from *GitHub*.
Example:
Example, `DallasTemperature <http://platformio.org/lib/show/54/DallasTemperature/manifest>`_:
.. code-block:: javascript
{
"name": "IRremote",
"keywords": "infrared, ir, remote",
"description": "Send and receive infrared signals with multiple protocols",
"repository":
"name": "DallasTemperature",
"keywords": "onewire, 1-wire, bus, sensor, temperature",
"description": "Arduino Library for Dallas Temperature ICs (DS18B20, DS18S20, DS1822, DS1820)",
"repository":
{
"type": "git",
"url": "https://github.com/milesburton/Arduino-Temperature-Control-Library.git"
},
"authors":
[
{
"type": "git",
"url": "https://github.com/shirriff/Arduino-IRremote.git"
"name": "Miles Burton",
"email": "miles@mnetcs.com",
"url": "http://www.milesburton.com",
"maintainer": true
},
"frameworks": "arduino",
"platforms": "atmelavr"
{
"name": "Tim Newsome",
"email": "nuisance@casualhacker.net"
},
{
"name": "Guil Barros",
"email": "gfbarros@bappos.com"
},
{
"name": "Rob Tillaart",
"email": "rob.tillaart@gmail.com"
}
],
"dependencies":
{
"name": "OneWire",
"authors": "Paul Stoffregen",
"frameworks": "arduino"
},
"version": "3.7.7",
"frameworks": "arduino",
"platforms": "*"
}
Under CVS (SVN/GIT)
Under VCS (SVN/GIT)
^^^^^^^^^^^^^^^^^^^
|PIOAPICR| can operate with a library source code that is under *CVS* control.
|PIOAPICR| can operate with a library source code that is under *VCS* control.
The list of **required** fields in the :ref:`library_config` will look like:
* :ref:`libjson_name`

View File

@ -20,14 +20,16 @@ Hg, SVN). It makes it exceedingly simple to find, install and keep libraries
up-to-date. PlatformIO Library Manager supports
`Semantic Versioning <http://semver.org>`_ and its rules.
There 2 options how to find library:
There are 2 options how to find library:
* `Web Library Search <http://platformio.org/lib>`__
* :ref:`Command Line Interface <cmd_lib_search>`
* `Web-based Library Search <http://platformio.org/lib>`__
*PlatformIO Library Manager* allows to manage different library storages using
You can manage different library storages using
:option:`platformio lib --global` or :option:`platformio lib --storage-dir`
options.
options. If you change current working directory in terminal to project folder,
then :ref:`platformio lib <cmd_lib>` command will manage automatically dependency
storage in :ref:`projectconf_pio_libdeps_dir`.
Project dependencies
--------------------

View File

@ -32,7 +32,6 @@ Library Dependency Finder has controls that can be set up in :ref:`projectconf`:
* :ref:`projectconf_lib_deps`
* :ref:`projectconf_lib_extra_dirs`
* :ref:`projectconf_lib_force`
* :ref:`projectconf_lib_ignore`
* :ref:`projectconf_lib_compat_mode`
* :ref:`projectconf_lib_ldf_mode`

View File

@ -40,9 +40,6 @@ Packages
* - ``tool-micronucleus``
- `Micronucleus <https://github.com/micronucleus/micronucleus>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-atmelavr``
- `avr-gcc <https://gcc.gnu.org/wiki/avr-gcc>`_, `GDB <http://www.gnu.org/software/gdb/>`_, `AVaRICE <http://avarice.sourceforge.net/>`_, `SimulAVR <http://www.nongnu.org/simulavr/>`_

View File

@ -46,9 +46,6 @@ Packages
* - ``tool-openocd``
- `OpenOCD <http://openocd.org>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccarmnoneeabi``
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_

View File

@ -74,6 +74,9 @@ Packages
* - ``framework-arduinosam``
- `Arduino Wiring-based Framework (SAM Core, 1.6) <http://arduino.cc/en/Reference/HomePage>`_
* - ``framework-arduinoststm32``
- `Arduino Wiring-based Framework (STM32 Core) <https://github.com/rogerclarkmelbourne/Arduino_STM32>`_
* - ``framework-arduinoteensy``
- `Arduino Wiring-based Framework <http://arduino.cc/en/Reference/HomePage>`_

View File

@ -890,6 +890,26 @@ ESPino
- 4096 Kb
- 80 Kb
Elektor Labs
~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``elektor_cocorico``
- `CoCo-ri-Co! <https://developer.mbed.org/platforms/CoCo-ri-Co/>`_
- LPC812
- 30 MHz
- 16 Kb
- 4 Kb
Embedded Artists
~~~~~~~~~~~~~~~~
@ -904,7 +924,7 @@ Embedded Artists
- RAM
* - ``lpc11u35``
- `Embedded Artists LPC11U35 QuickStart Board <https://developer.mbed.org/platforms/EA-LPC11U35/>`_
- `EA LPC11U35 QuickStart Board <https://developer.mbed.org/platforms/EA-LPC11U35/>`_
- LPC11U35
- 48 MHz
- 64 Kb
@ -1011,7 +1031,7 @@ Espressif
- ESP8266
- 80 MHz
- 4096 Kb
- 50 Kb
- 80 Kb
* - ``phoenix_v1``
- `Phoenix 1.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
@ -1089,6 +1109,27 @@ Freescale
- 128 Kb
- 16 Kb
* - ``frdm_kl26z``
- `Freescale Kinetis FRDM-KL26Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl16-and-kl26-mcus-up-to-128-kb-flash:FRDM-KL26Z>`_
- MKL26Z128VLH4
- 48 MHz
- 128 Kb
- 16 Kb
* - ``frdm_kl27z``
- `Freescale Kinetis FRDM-KL27Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl17-and-kl27-mcus:FRDM-KL27Z>`_
- MKL27Z64VLH4
- 48 MHz
- 64 Kb
- 16 Kb
* - ``frdm_kl43z``
- `Freescale Kinetis FRDM-KL43Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl43-kl33-kl27-kl17-and-kl13-mcus:FRDM-KL43Z>`_
- MKL43Z256VLH4
- 48 MHz
- 256 Kb
- 32 Kb
* - ``frdm_kl46z``
- `Freescale Kinetis FRDM-KL46Z <https://developer.mbed.org/platforms/FRDM-KL46Z/>`_
- MKL46Z256VLL4
@ -1123,6 +1164,26 @@ Fubarino
- 512 Kb
- 128 Kb
GHI Electronics
~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``oc_mbuino``
- `mBuino <https://developer.mbed.org/platforms/mBuino/>`_
- LPC11U24
- 50 MHz
- 32 Kb
- 10 Kb
Generic
~~~~~~~
@ -1143,6 +1204,48 @@ Generic
- 64 Kb
- 20 Kb
* - ``genericSTM32F103C8``
- `STM32F103C8 (20k RAM. 64k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103c8.html>`_
- STM32F103C8
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103CB``
- `STM32F103CB (20k RAM. 128k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103cb.html>`_
- STM32F103CB
- 72 MHz
- 128 Kb
- 20 Kb
* - ``genericSTM32F103R8``
- `STM32F103R8 (20k RAM. 64 Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103r8.html>`_
- STM32F103R8
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103RB``
- `STM32F103RB (20k RAM. 128k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103rb.html>`_
- STM32F103RB
- 72 MHz
- 128 Kb
- 20 Kb
* - ``genericSTM32F103RC``
- `STM32F103RC (48k RAM. 256k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103rc.html>`_
- STM32F103RC
- 72 MHz
- 256 Kb
- 48 Kb
* - ``genericSTM32F103RE``
- `STM32F103RE (64k RAM. 512k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103re.html>`_
- STM32F103RE
- 72 MHz
- 512 Kb
- 64 Kb
Generic ATTiny
~~~~~~~~~~~~~~
@ -1238,7 +1341,7 @@ JKSoft
- Flash
- RAM
* - ``wallBotBLE``
* - ``wallbot_ble``
- `JKSoft Wallbot BLE <https://developer.mbed.org/platforms/JKSoft-Wallbot-BLE/>`_
- NRF51822
- 16 MHz
@ -1470,6 +1573,46 @@ Microduino
- 64 Kb
- 4 Kb
Micromint
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``lpc4330_m4``
- `Bambino-210E <https://developer.mbed.org/platforms/Micromint-Bambino-210E/>`_
- LPC4330
- 204 MHz
- 8192 Kb
- 264 Kb
MikroElektronika
~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``hexiwear``
- `Hexiwear <https://developer.mbed.org/platforms/Hexiwear/>`_
- MK64FN1M0VDC12
- 120 MHz
- 1024 Kb
- 256 Kb
MultiTech
~~~~~~~~~
@ -1483,6 +1626,13 @@ MultiTech
- Flash
- RAM
* - ``mts_mdot_f405rg``
- `MultiTech mDot <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_
- STM32F411RET6
- 100 MHz
- 512 Kb
- 128 Kb
* - ``mts_mdot_f411re``
- `MultiTech mDot F411 <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_
- STM32F411RET6
@ -1523,6 +1673,13 @@ NXP
- Flash
- RAM
* - ``lpc11c24``
- `NXP LPC11C24 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/scalable-entry-level-32-bit-microcontroller-mcu-based-on-arm-cortex-m0-plus-m0-cores:LPC11C24FBD48>`_
- LPC11C24
- 48 MHz
- 32 Kb
- 8 Kb
* - ``lpc11u24``
- `NXP mbed LPC11U24 <https://developer.mbed.org/platforms/mbed-LPC11U24/>`_
- LPC11U24
@ -1530,6 +1687,34 @@ NXP
- 32 Kb
- 8 Kb
* - ``lpc11u24_301``
- `ARM mbed LPC11U24 (+CAN) <https://developer.mbed.org/handbook/mbed-NXP-LPC11U24>`_
- LPC11U24
- 48 MHz
- 32 Kb
- 8 Kb
* - ``lpc11u34_421``
- `NXP LPC11U34 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/40kb-flash-8kb-sram-lqfp48-package:LPC11U34FBD48?lang_cd=en>`_
- LPC11U34
- 48 MHz
- 64 Kb
- 8 Kb
* - ``lpc11u37_501``
- `NXP LPC11U37 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/128kb-flash-10kb-sram-lqfp48-package:LPC11U37FBD48?lang_cd=en>`_
- LPC11U37
- 48 MHz
- 128 Kb
- 10 Kb
* - ``lpc11u68``
- `LPCXpresso11U68 <https://developer.mbed.org/platforms/LPCXpresso11U68/>`_
- LPC11U68
- 50 MHz
- 256 Kb
- 36 Kb
* - ``lpc1549``
- `NXP LPCXpresso1549 <https://developer.mbed.org/platforms/LPCXpresso1549/>`_
- LPC1549
@ -1544,6 +1729,41 @@ NXP
- 512 Kb
- 64 Kb
* - ``lpc2368``
- `NXP LPC2368 <https://developer.mbed.org/platforms/mbed-LPC2368/>`_
- LPC2368
- 72 MHz
- 512 Kb
- 58 Kb
* - ``lpc2460``
- `NXP LPC2460 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-arm7-arm9-mcus/lpc-arm7-mcus/lpc2100-200-300-400/flashless-16-bit-32-bit-microcontroller-ethernet-can-isp-iap-usb-2.0-device-host-otg-external-memory-interface:LPC2460FBD208>`_
- LPC2460
- 72 MHz
- 64 Kb
- 16 Kb
* - ``lpc812``
- `NXP LPC800-MAX <https://developer.mbed.org/platforms/NXP-LPC800-MAX/>`_
- LPC812
- 30 MHz
- 16 Kb
- 4 Kb
* - ``lpc824``
- `LPCXpresso824-MAX <https://developer.mbed.org/platforms/LPCXpresso824-MAX/>`_
- LPC824
- 30 MHz
- 32 Kb
- 8 Kb
* - ``micronfcboard``
- `MicroNFCBoard <https://developer.mbed.org/platforms/MicroNFCBoard/>`_
- LPC11U34
- 48 MHz
- 64 Kb
- 10 Kb
NodeMCU
~~~~~~~
@ -1618,6 +1838,13 @@ Olimex
- Flash
- RAM
* - ``maple``
- `Olimexino STM32 <https://www.olimex.com/Products/Duino/STM32/OLIMEXINO-STM32/>`_
- STM32F103RB_MAPLE
- 72 MHz
- 128 Kb
- 16.6015625 Kb
* - ``modwifi``
- `Olimex MOD-WIFI-ESP8266(-DEV) <https://www.olimex.com/Products/IoT/MOD-WIFI-ESP8266-DEV/open-source-hardware>`_
- ESP8266
@ -1997,6 +2224,13 @@ ST
- 1024 Kb
- 384 Kb
* - ``disco_f746ng``
- `ST 32F746GDISCOVERY <http://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-discovery-kits/32f746gdiscovery.html>`_
- STM32F746NGH6
- 216 MHz
- 1024 Kb
- 320 Kb
* - ``disco_l053c8``
- `ST 32L0538DISCOVERY <http://www.st.com/web/en/catalog/tools/PF260319>`_
- STM32L053C8T6
@ -2067,6 +2301,13 @@ ST
- 128 Kb
- 20 Kb
* - ``nucleo_f207zg``
- `ST Nucleo F207ZG <https://developer.mbed.org/platforms/ST-Nucleo-F207ZG/>`_
- STM32F207ZGT6
- 120 MHz
- 1024 Kb
- 128 Kb
* - ``nucleo_f302r8``
- `ST Nucleo F302R8 <https://developer.mbed.org/platforms/ST-Nucleo-F302R8/>`_
- STM32F302R8T6
@ -2116,6 +2357,13 @@ ST
- 512 Kb
- 128 Kb
* - ``nucleo_f429zi``
- `ST Nucleo F429ZI <https://developer.mbed.org/platforms/ST-Nucleo-F429ZI/>`_
- STM32F429ZIT6
- 180 MHz
- 2048 Kb
- 256 Kb
* - ``nucleo_f446re``
- `ST Nucleo F446RE <https://developer.mbed.org/platforms/ST-Nucleo-F446RE/>`_
- STM32F446RET6
@ -2123,6 +2371,34 @@ ST
- 512 Kb
- 128 Kb
* - ``nucleo_f446ze``
- `ST Nucleo F446ZE <https://developer.mbed.org/platforms/ST-Nucleo-F446ZE/>`_
- STM32F446ZET6
- 180 MHz
- 512 Kb
- 128 Kb
* - ``nucleo_f746zg``
- `ST Nucleo F746ZG <https://developer.mbed.org/platforms/ST-Nucleo-F446ZE/>`_
- STM32F746ZGT6
- 216 MHz
- 1024 Kb
- 320 Kb
* - ``nucleo_f767zi``
- `ST Nucleo F767ZI <https://developer.mbed.org/platforms/ST-Nucleo-F767ZI/>`_
- STM32F746ZGT6
- 216 MHz
- 2048 Kb
- 512 Kb
* - ``nucleo_l011k4``
- `ST Nucleo L011K4 <https://developer.mbed.org/platforms/ST-Nucleo-L011K4/>`_
- STM32L011K4T6
- 32 MHz
- 16 Kb
- 2 Kb
* - ``nucleo_l031k6``
- `ST Nucleo L031K6 <https://developer.mbed.org/platforms/ST-Nucleo-L031K6/>`_
- STM32L031K6T6
@ -2151,6 +2427,13 @@ ST
- 512 Kb
- 80 Kb
* - ``nucleo_l432kc``
- `ST Nucleo L432KC <https://developer.mbed.org/platforms/ST-Nucleo-L432KC/>`_
- STM32L432KCU6
- 80 MHz
- 256 Kb
- 64 Kb
* - ``nucleo_l476rg``
- `ST Nucleo L476RG <https://developer.mbed.org/platforms/ST-Nucleo-L476RG/>`_
- STM32L476RGT6
@ -2260,27 +2543,55 @@ SeeedStudio
- 512 Kb
- 128 Kb
* - ``seeedArchMax``
- `SeeedStudio Arch Max <https://developer.mbed.org/platforms/Seeed-Arch-Max/>`_
- STM32F407VET6
- 168 MHz
- 512 Kb
- 192 Kb
* - ``seeedArchBLE``
- `Seeed Arch BLE <https://developer.mbed.org/platforms/Seeed-Arch-BLE/>`_
- NRF51822
- 16 MHz
- 128 Kb
- 16 Kb
* - ``seeedTinyBLE``
- `SeeedStudio Seeed Tiny BLE <http://developer.mbed.org/platforms/Seeed-Tiny-BLE/>`_
* - ``seeedArchGPRS``
- `Seeed Arch GPRS V2 <https://www.seeedstudio.com/Arch-GPRS-V2-p-2026.html>`_
- LPC11U37
- 48 MHz
- 128 Kb
- 10 Kb
* - ``seeedArchLink``
- `Seeed Arch Link <https://developer.mbed.org/platforms/Seeed-Arch-Link/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb
* - ``seeeduinoArchPro``
- `SeeedStudio Seeeduino-Arch-Pro <https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/>`_
* - ``seeedArchMax``
- `Seeed Arch Max <https://developer.mbed.org/platforms/Seeed-Arch-Max/>`_
- STM32F407VET6
- 168 MHz
- 512 Kb
- 192 Kb
* - ``seeedArchPro``
- `Seeed Arch Pro <https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/>`_
- LPC1768
- 96 MHz
- 512 Kb
- 64 Kb
* - ``seeedTinyBLE``
- `Seeed Tiny BLE <http://developer.mbed.org/platforms/Seeed-Tiny-BLE/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb
* - ``xadow_m0``
- `Seeed Xadow M0 <https://developer.mbed.org/platforms/Seeed-Xadow-M0/>`_
- LPC11U35
- 48 MHz
- 64 Kb
- 10 Kb
Silicon Labs
~~~~~~~~~~~~
@ -2336,6 +2647,26 @@ Silicon Labs
- 32 Kb
- 4 Kb
Smeshlink
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``xbed_lpc1768``
- `Smeshlink xbed LPC1768 <https://developer.mbed.org/platforms/xbed-LPC1768/>`_
- LPC1768
- 96 MHz
- 512 Kb
- 32 Kb
Solder Splash Labs
~~~~~~~~~~~~~~~~~~
@ -2356,6 +2687,26 @@ Solder Splash Labs
- 32 Kb
- 8 Kb
SolderSplash Labs
~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``lpc1347``
- `DipCortex M3 <https://developer.mbed.org/platforms/DipCortex-M3/>`_
- LPC1347
- 72 MHz
- 64 Kb
- 12 Kb
SparkFun
~~~~~~~~
@ -2369,6 +2720,13 @@ SparkFun
- Flash
- RAM
* - ``sparkfunBlynk``
- `SparkFun Blynk Board <https://www.sparkfun.com/products/13794>`_
- ESP8266
- 80 MHz
- 4096 Kb
- 80 Kb
* - ``sparkfun_digitalsandbox``
- `SparkFun Digital Sandbox <https://www.sparkfun.com/products/12651>`_
- ATMEGA328P
@ -2514,6 +2872,20 @@ Switch Science
- 32 Kb
- 4 Kb
* - ``ssci824``
- `Switch Science mbed LPC824 <https://developer.mbed.org/platforms/Switch-Science-mbed-LPC824/>`_
- LPC824
- 30 MHz
- 32 Kb
- 8 Kb
* - ``ty51822r3``
- `Switch Science mbed TY51822r3 <https://developer.mbed.org/platforms/Switch-Science-mbed-TY51822r3/>`_
- NRF51822
- 32 MHz
- 256 Kb
- 32 Kb
TI
~~
@ -2652,6 +3024,20 @@ Teensy
- 256 Kb
- 64 Kb
* - ``teensy35``
- `Teensy 3.5 <https://www.pjrc.com>`_
- MK64FX512
- 120 MHz
- 512 Kb
- 192 Kb
* - ``teensy36``
- `Teensy 3.6 <https://www.pjrc.com>`_
- MK66FX1M0
- 180 MHz
- 1024 Kb
- 256 Kb
* - ``teensylc``
- `Teensy LC <http://www.pjrc.com/teensy/teensyLC.html>`_
- MKL26Z64
@ -2866,3 +3252,23 @@ ubIQio
- 16 MHz
- 32 Kb
- 2 Kb
y5 design
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``nrf51822_y5_mbug``
- `y5 nRF51822 mbug <https://developer.mbed.org/platforms/Y5-NRF51822-MBUG/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb

View File

@ -43,9 +43,6 @@ Packages
* - ``tool-mkspiffs``
- `Tool to build and unpack SPIFFS images <https://github.com/igrr/mkspiffs>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-xtensa``
- `xtensa-gcc <https://github.com/jcmvbkbc/gcc-xtensa>`_, `GDB <http://www.gnu.org/software/gdb/>`_
@ -222,7 +219,7 @@ Espressif
- ESP8266
- 80 MHz
- 4096 Kb
- 50 Kb
- 80 Kb
* - ``phoenix_v1``
- `Phoenix 1.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
@ -305,6 +302,13 @@ SparkFun
- Flash
- RAM
* - ``sparkfunBlynk``
- `SparkFun Blynk Board <https://www.sparkfun.com/products/13794>`_
- ESP8266
- 80 MHz
- 4096 Kb
- 80 Kb
* - ``thing``
- `SparkFun ESP8266 Thing <https://www.sparkfun.com/products/13231>`_
- ESP8266

View File

@ -220,25 +220,27 @@ Demo
Using Arduino Framework with Staging version
--------------------------------------------
1. Clone/Copy `main repository <https://github.com/esp8266/Arduino>`_ to
:ref:`projectconf_pio_home_dir` + ``packages/framework-arduinoespressif8266``
and create new file ``packages/framework-arduinoespressif8266/package.json``
with the next contents (you can specify own version if you want)
1. Install :ref:`installation_develop` of PlatformIO
2. Install Espressif 8266 (Stage) development platform
.. code-block:: json
.. code::
{
"description":"Arduino Wiring-based Framework (ESP8266 Core)",
"name":"framework-arduinoespressif8266",
"system":"all",
"url":"https://github.com/esp8266/Arduino",
"version":"1.20300.0"
}
platformio platform install https://github.com/platformio/platform-espressif8266.git#feature/stage
2. Try to build project
3. If you see build errors, then try to build this project using the same
3. Set :ref:`projectconf_env_platform` to ``espressif8266_stage`` in
:ref:`projectconf`. For example,
.. code-block:: ini
[env:nodemcuv2]
platform = espressif8266_stage
board = nodemcuv2
framework = arduino
4. Try to build project
5. If you see build errors, then try to build this project using the same
``stage`` on Arduino IDE
4. If it works with Arduino IDE but doesn't work with PlatformIO, then please
6. If it works with Arduino IDE but doesn't work with PlatformIO, then please
`open new issue <https://github.com/platformio/platformio/issues>`_ with
attached information:
@ -251,6 +253,7 @@ Using Arduino Framework with Staging version
Articles
--------
* Sep 12, 2016 - **Pedro Minatel** - `OTA Como programar o ESP8266 pelo WiFi no platformIO (OTA programming for ESP8266 via Wi-Fi using PlatformIO, Portuguese) <http://pedrominatel.com.br/esp8266/ota-como-programar-o-esp8266-pelo-wifi-no-platformio/>`_
* Sep 2, 2016 - **Tinkerman** `Optimizing files for SPIFFS with Gulp <http://tinkerman.cat/optimizing-files-for-spiffs-with-gulp/>`_
* Jul 15, 2016 - **Jaime** - `ESP8266 Mobile Rick Roll Captive Portal <https://hackaday.io/project/12709-esp8266-mobile-rick-roll-captive-portal>`_
* Jun 13, 2016 - **Daniel Eichhorn** - `New Weather Station Demo on Github <http://blog.squix.org/2016/06/new-weather-station-demo-on-github.html>`_

View File

@ -31,9 +31,6 @@ Packages
* - ``framework-mbed``
- `mbed Framework <http://mbed.org>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccarmnoneeabi``
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_
@ -122,9 +119,50 @@ Freescale
- 128 Kb
- 16 Kb
* - ``frdm_kl26z``
- `Freescale Kinetis FRDM-KL26Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl16-and-kl26-mcus-up-to-128-kb-flash:FRDM-KL26Z>`_
- MKL26Z128VLH4
- 48 MHz
- 128 Kb
- 16 Kb
* - ``frdm_kl27z``
- `Freescale Kinetis FRDM-KL27Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl17-and-kl27-mcus:FRDM-KL27Z>`_
- MKL27Z64VLH4
- 48 MHz
- 64 Kb
- 16 Kb
* - ``frdm_kl43z``
- `Freescale Kinetis FRDM-KL43Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl43-kl33-kl27-kl17-and-kl13-mcus:FRDM-KL43Z>`_
- MKL43Z256VLH4
- 48 MHz
- 256 Kb
- 32 Kb
* - ``frdm_kl46z``
- `Freescale Kinetis FRDM-KL46Z <https://developer.mbed.org/platforms/FRDM-KL46Z/>`_
- MKL46Z256VLL4
- 48 MHz
- 256 Kb
- 32 Kb
MikroElektronika
~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``hexiwear``
- `Hexiwear <https://developer.mbed.org/platforms/Hexiwear/>`_
- MK64FN1M0VDC12
- 120 MHz
- 1024 Kb
- 256 Kb

View File

@ -34,9 +34,6 @@ Packages
* - ``tool-arduino101load``
- `Genuino101 uploader <https://github.com/01org/intel-arduino-tools>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-intelarc32``
- `GCC for Intel ARC <https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain>`_

View File

@ -28,9 +28,6 @@ Packages
* - Name
- Contents
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-icestorm``
- `GCC for FPGA IceStorm <http://www.clifford.at/icestorm/>`_

View File

@ -31,9 +31,6 @@ Packages
* - ``framework-wiringpi``
- `GPIO Interface library for the Raspberry Pi <http://wiringpi.com>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccarmlinuxgnueabi``
- `GCC for Linux ARM GNU EABI <https://gcc.gnu.org>`_, `GDB <http://www.gnu.org/software/gdb/>`_

View File

@ -28,8 +28,5 @@ Packages
* - Name
- Contents
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gcclinux32``
- `GCC for Linux i686 <https://gcc.gnu.org>`_

View File

@ -28,8 +28,5 @@ Packages
* - Name
- Contents
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gcclinux64``
- `GCC for Linux x86_64 <https://gcc.gnu.org>`_

View File

@ -34,9 +34,6 @@ Packages
* - ``tool-pic32prog``
- `pic32prog <https://github.com/sergev/pic32prog>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-microchippic32``
- `GCC for Microchip PIC32 <https://github.com/chipKIT32/chipKIT-cxx>`_

View File

@ -17,16 +17,4 @@ Native development platform is intended to be used for desktop OS. This platform
For more detailed information please visit `vendor site <http://platformio.org/platforms/native>`_.
.. contents::
Packages
--------
.. list-table::
:header-rows: 1
* - Name
- Contents
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
.. contents::

View File

@ -37,9 +37,6 @@ Packages
* - ``tool-rfdloader``
- `rfdloader <https://github.com/RFduino/RFduino>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``tool-sreccat``
- `Merging tool <https://github.com/marcows/SRecord>`_
@ -132,7 +129,7 @@ JKSoft
- Flash
- RAM
* - ``wallBotBLE``
* - ``wallbot_ble``
- `JKSoft Wallbot BLE <https://developer.mbed.org/platforms/JKSoft-Wallbot-BLE/>`_
- NRF51822
- 16 MHz
@ -233,8 +230,22 @@ SeeedStudio
- Flash
- RAM
* - ``seeedArchBLE``
- `Seeed Arch BLE <https://developer.mbed.org/platforms/Seeed-Arch-BLE/>`_
- NRF51822
- 16 MHz
- 128 Kb
- 16 Kb
* - ``seeedArchLink``
- `Seeed Arch Link <https://developer.mbed.org/platforms/Seeed-Arch-Link/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb
* - ``seeedTinyBLE``
- `SeeedStudio Seeed Tiny BLE <http://developer.mbed.org/platforms/Seeed-Tiny-BLE/>`_
- `Seeed Tiny BLE <http://developer.mbed.org/platforms/Seeed-Tiny-BLE/>`_
- NRF51822
- 16 MHz
- 256 Kb
@ -260,4 +271,31 @@ Switch Science
- 256 Kb
- 16 Kb
* - ``ty51822r3``
- `Switch Science mbed TY51822r3 <https://developer.mbed.org/platforms/Switch-Science-mbed-TY51822r3/>`_
- NRF51822
- 32 MHz
- 256 Kb
- 32 Kb
y5 design
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``nrf51822_y5_mbug``
- `y5 nRF51822 mbug <https://developer.mbed.org/platforms/Y5-NRF51822-MBUG/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb
.. include:: nordicnrf51_extra.rst

View File

@ -31,9 +31,6 @@ Packages
* - ``framework-mbed``
- `mbed Framework <http://mbed.org>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccarmnoneeabi``
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_
@ -87,6 +84,26 @@ CQ Publishing
- 64 Kb
- 10 Kb
Elektor Labs
~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``elektor_cocorico``
- `CoCo-ri-Co! <https://developer.mbed.org/platforms/CoCo-ri-Co/>`_
- LPC812
- 30 MHz
- 16 Kb
- 4 Kb
Embedded Artists
~~~~~~~~~~~~~~~~
@ -101,7 +118,7 @@ Embedded Artists
- RAM
* - ``lpc11u35``
- `Embedded Artists LPC11U35 QuickStart Board <https://developer.mbed.org/platforms/EA-LPC11U35/>`_
- `EA LPC11U35 QuickStart Board <https://developer.mbed.org/platforms/EA-LPC11U35/>`_
- LPC11U35
- 48 MHz
- 64 Kb
@ -121,6 +138,46 @@ Embedded Artists
- 512 Kb
- 96 Kb
GHI Electronics
~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``oc_mbuino``
- `mBuino <https://developer.mbed.org/platforms/mBuino/>`_
- LPC11U24
- 50 MHz
- 32 Kb
- 10 Kb
Micromint
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``lpc4330_m4``
- `Bambino-210E <https://developer.mbed.org/platforms/Micromint-Bambino-210E/>`_
- LPC4330
- 204 MHz
- 8192 Kb
- 264 Kb
NGX Technologies
~~~~~~~~~~~~~~~~
@ -154,6 +211,13 @@ NXP
- Flash
- RAM
* - ``lpc11c24``
- `NXP LPC11C24 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/scalable-entry-level-32-bit-microcontroller-mcu-based-on-arm-cortex-m0-plus-m0-cores:LPC11C24FBD48>`_
- LPC11C24
- 48 MHz
- 32 Kb
- 8 Kb
* - ``lpc11u24``
- `NXP mbed LPC11U24 <https://developer.mbed.org/platforms/mbed-LPC11U24/>`_
- LPC11U24
@ -161,6 +225,34 @@ NXP
- 32 Kb
- 8 Kb
* - ``lpc11u24_301``
- `ARM mbed LPC11U24 (+CAN) <https://developer.mbed.org/handbook/mbed-NXP-LPC11U24>`_
- LPC11U24
- 48 MHz
- 32 Kb
- 8 Kb
* - ``lpc11u34_421``
- `NXP LPC11U34 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/40kb-flash-8kb-sram-lqfp48-package:LPC11U34FBD48?lang_cd=en>`_
- LPC11U34
- 48 MHz
- 64 Kb
- 8 Kb
* - ``lpc11u37_501``
- `NXP LPC11U37 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/128kb-flash-10kb-sram-lqfp48-package:LPC11U37FBD48?lang_cd=en>`_
- LPC11U37
- 48 MHz
- 128 Kb
- 10 Kb
* - ``lpc11u68``
- `LPCXpresso11U68 <https://developer.mbed.org/platforms/LPCXpresso11U68/>`_
- LPC11U68
- 50 MHz
- 256 Kb
- 36 Kb
* - ``lpc1549``
- `NXP LPCXpresso1549 <https://developer.mbed.org/platforms/LPCXpresso1549/>`_
- LPC1549
@ -175,6 +267,41 @@ NXP
- 512 Kb
- 64 Kb
* - ``lpc2368``
- `NXP LPC2368 <https://developer.mbed.org/platforms/mbed-LPC2368/>`_
- LPC2368
- 72 MHz
- 512 Kb
- 58 Kb
* - ``lpc2460``
- `NXP LPC2460 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-arm7-arm9-mcus/lpc-arm7-mcus/lpc2100-200-300-400/flashless-16-bit-32-bit-microcontroller-ethernet-can-isp-iap-usb-2.0-device-host-otg-external-memory-interface:LPC2460FBD208>`_
- LPC2460
- 72 MHz
- 64 Kb
- 16 Kb
* - ``lpc812``
- `NXP LPC800-MAX <https://developer.mbed.org/platforms/NXP-LPC800-MAX/>`_
- LPC812
- 30 MHz
- 16 Kb
- 4 Kb
* - ``lpc824``
- `LPCXpresso824-MAX <https://developer.mbed.org/platforms/LPCXpresso824-MAX/>`_
- LPC824
- 30 MHz
- 32 Kb
- 8 Kb
* - ``micronfcboard``
- `MicroNFCBoard <https://developer.mbed.org/platforms/MicroNFCBoard/>`_
- LPC11U34
- 48 MHz
- 64 Kb
- 10 Kb
Outrageous Circuits
~~~~~~~~~~~~~~~~~~~
@ -208,13 +335,47 @@ SeeedStudio
- Flash
- RAM
* - ``seeeduinoArchPro``
- `SeeedStudio Seeeduino-Arch-Pro <https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/>`_
* - ``seeedArchGPRS``
- `Seeed Arch GPRS V2 <https://www.seeedstudio.com/Arch-GPRS-V2-p-2026.html>`_
- LPC11U37
- 48 MHz
- 128 Kb
- 10 Kb
* - ``seeedArchPro``
- `Seeed Arch Pro <https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/>`_
- LPC1768
- 96 MHz
- 512 Kb
- 64 Kb
* - ``xadow_m0``
- `Seeed Xadow M0 <https://developer.mbed.org/platforms/Seeed-Xadow-M0/>`_
- LPC11U35
- 48 MHz
- 64 Kb
- 10 Kb
Smeshlink
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``xbed_lpc1768``
- `Smeshlink xbed LPC1768 <https://developer.mbed.org/platforms/xbed-LPC1768/>`_
- LPC1768
- 96 MHz
- 512 Kb
- 32 Kb
Solder Splash Labs
~~~~~~~~~~~~~~~~~~
@ -235,6 +396,26 @@ Solder Splash Labs
- 32 Kb
- 8 Kb
SolderSplash Labs
~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``lpc1347``
- `DipCortex M3 <https://developer.mbed.org/platforms/DipCortex-M3/>`_
- LPC1347
- 72 MHz
- 64 Kb
- 12 Kb
Switch Science
~~~~~~~~~~~~~~
@ -255,6 +436,13 @@ Switch Science
- 32 Kb
- 4 Kb
* - ``ssci824``
- `Switch Science mbed LPC824 <https://developer.mbed.org/platforms/Switch-Science-mbed-LPC824/>`_
- LPC824
- 30 MHz
- 32 Kb
- 8 Kb
u-blox
~~~~~~

View File

@ -31,9 +31,6 @@ Packages
* - ``framework-mbed``
- `mbed Framework <http://mbed.org>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccarmnoneeabi``
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_

View File

@ -28,6 +28,9 @@ Packages
* - Name
- Contents
* - ``framework-arduinoststm32``
- `Arduino Wiring-based Framework (STM32 Core) <https://github.com/rogerclarkmelbourne/Arduino_STM32>`_
* - ``framework-cmsis``
- `Vendor-independent hardware abstraction layer for the Cortex-M processor series <http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php>`_
@ -40,9 +43,6 @@ Packages
* - ``framework-spl``
- `Standard Peripheral Library for STM32 MCUs <http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257890>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``tool-stlink``
- `ST-Link <https://github.com/texane/stlink>`_
@ -67,6 +67,9 @@ Frameworks
* - Name
- Description
* - :ref:`framework_arduino`
- Arduino Wiring-based Framework allows writing cross-platform software to control devices attached to a wide range of Arduino boards to create all kinds of creative coding, interactive objects, spaces or physical experiences.
* - :ref:`framework_cmsis`
- The ARM Cortex Microcontroller Software Interface Standard (CMSIS) is a vendor-independent hardware abstraction layer for the Cortex-M processor series and specifies debugger interfaces. The CMSIS enables consistent and simple software interfaces to the processor for interface peripherals, real-time operating systems, and middleware. It simplifies software re-use, reducing the learning curve for new microcontroller developers and cutting the time-to-market for devices.
@ -162,6 +165,48 @@ Generic
- 64 Kb
- 20 Kb
* - ``genericSTM32F103C8``
- `STM32F103C8 (20k RAM. 64k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103c8.html>`_
- STM32F103C8
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103CB``
- `STM32F103CB (20k RAM. 128k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103cb.html>`_
- STM32F103CB
- 72 MHz
- 128 Kb
- 20 Kb
* - ``genericSTM32F103R8``
- `STM32F103R8 (20k RAM. 64 Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103r8.html>`_
- STM32F103R8
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103RB``
- `STM32F103RB (20k RAM. 128k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103rb.html>`_
- STM32F103RB
- 72 MHz
- 128 Kb
- 20 Kb
* - ``genericSTM32F103RC``
- `STM32F103RC (48k RAM. 256k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103rc.html>`_
- STM32F103RC
- 72 MHz
- 256 Kb
- 48 Kb
* - ``genericSTM32F103RE``
- `STM32F103RE (64k RAM. 512k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103re.html>`_
- STM32F103RE
- 72 MHz
- 512 Kb
- 64 Kb
MultiTech
~~~~~~~~~
@ -175,6 +220,13 @@ MultiTech
- Flash
- RAM
* - ``mts_mdot_f405rg``
- `MultiTech mDot <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_
- STM32F411RET6
- 100 MHz
- 512 Kb
- 128 Kb
* - ``mts_mdot_f411re``
- `MultiTech mDot F411 <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_
- STM32F411RET6
@ -182,6 +234,26 @@ MultiTech
- 512 Kb
- 128 Kb
Olimex
~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``maple``
- `Olimexino STM32 <https://www.olimex.com/Products/Duino/STM32/OLIMEXINO-STM32/>`_
- STM32F103RB_MAPLE
- 72 MHz
- 128 Kb
- 16.6015625 Kb
ST
~~
@ -251,6 +323,13 @@ ST
- 1024 Kb
- 384 Kb
* - ``disco_f746ng``
- `ST 32F746GDISCOVERY <http://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-discovery-kits/32f746gdiscovery.html>`_
- STM32F746NGH6
- 216 MHz
- 1024 Kb
- 320 Kb
* - ``disco_l053c8``
- `ST 32L0538DISCOVERY <http://www.st.com/web/en/catalog/tools/PF260319>`_
- STM32L053C8T6
@ -321,6 +400,13 @@ ST
- 128 Kb
- 20 Kb
* - ``nucleo_f207zg``
- `ST Nucleo F207ZG <https://developer.mbed.org/platforms/ST-Nucleo-F207ZG/>`_
- STM32F207ZGT6
- 120 MHz
- 1024 Kb
- 128 Kb
* - ``nucleo_f302r8``
- `ST Nucleo F302R8 <https://developer.mbed.org/platforms/ST-Nucleo-F302R8/>`_
- STM32F302R8T6
@ -370,6 +456,13 @@ ST
- 512 Kb
- 128 Kb
* - ``nucleo_f429zi``
- `ST Nucleo F429ZI <https://developer.mbed.org/platforms/ST-Nucleo-F429ZI/>`_
- STM32F429ZIT6
- 180 MHz
- 2048 Kb
- 256 Kb
* - ``nucleo_f446re``
- `ST Nucleo F446RE <https://developer.mbed.org/platforms/ST-Nucleo-F446RE/>`_
- STM32F446RET6
@ -377,6 +470,34 @@ ST
- 512 Kb
- 128 Kb
* - ``nucleo_f446ze``
- `ST Nucleo F446ZE <https://developer.mbed.org/platforms/ST-Nucleo-F446ZE/>`_
- STM32F446ZET6
- 180 MHz
- 512 Kb
- 128 Kb
* - ``nucleo_f746zg``
- `ST Nucleo F746ZG <https://developer.mbed.org/platforms/ST-Nucleo-F446ZE/>`_
- STM32F746ZGT6
- 216 MHz
- 1024 Kb
- 320 Kb
* - ``nucleo_f767zi``
- `ST Nucleo F767ZI <https://developer.mbed.org/platforms/ST-Nucleo-F767ZI/>`_
- STM32F746ZGT6
- 216 MHz
- 2048 Kb
- 512 Kb
* - ``nucleo_l011k4``
- `ST Nucleo L011K4 <https://developer.mbed.org/platforms/ST-Nucleo-L011K4/>`_
- STM32L011K4T6
- 32 MHz
- 16 Kb
- 2 Kb
* - ``nucleo_l031k6``
- `ST Nucleo L031K6 <https://developer.mbed.org/platforms/ST-Nucleo-L031K6/>`_
- STM32L031K6T6
@ -405,6 +526,13 @@ ST
- 512 Kb
- 80 Kb
* - ``nucleo_l432kc``
- `ST Nucleo L432KC <https://developer.mbed.org/platforms/ST-Nucleo-L432KC/>`_
- STM32L432KCU6
- 80 MHz
- 256 Kb
- 64 Kb
* - ``nucleo_l476rg``
- `ST Nucleo L476RG <https://developer.mbed.org/platforms/ST-Nucleo-L476RG/>`_
- STM32L476RGT6
@ -426,7 +554,7 @@ SeeedStudio
- RAM
* - ``seeedArchMax``
- `SeeedStudio Arch Max <https://developer.mbed.org/platforms/Seeed-Arch-Max/>`_
- `Seeed Arch Max <https://developer.mbed.org/platforms/Seeed-Arch-Max/>`_
- STM32F407VET6
- 168 MHz
- 512 Kb

View File

@ -34,9 +34,6 @@ Packages
* - ``framework-mbed``
- `mbed Framework <http://mbed.org>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``tool-teensy``
- `Teensy Loader <https://www.pjrc.com/teensy/loader.html>`_
@ -123,6 +120,20 @@ Teensy
- 256 Kb
- 64 Kb
* - ``teensy35``
- `Teensy 3.5 <https://www.pjrc.com>`_
- MK64FX512
- 120 MHz
- 512 Kb
- 192 Kb
* - ``teensy36``
- `Teensy 3.6 <https://www.pjrc.com>`_
- MK66FX1M0
- 180 MHz
- 1024 Kb
- 256 Kb
* - ``teensylc``
- `Teensy LC <http://www.pjrc.com/teensy/teensyLC.html>`_
- MKL26Z64

View File

@ -37,9 +37,6 @@ Packages
* - ``tool-mspdebug``
- `MSPDebug <http://mspdebug.sourceforge.net/>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-timsp430``
- `msp-gcc <http://sourceforge.net/projects/mspgcc/>`_, `GDB <http://www.gnu.org/software/gdb/>`_

View File

@ -37,9 +37,6 @@ Packages
* - ``tool-lm4flash``
- `Flash Programmer <http://www.ti.com/tool/lmflashprogrammer>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccarmnoneeabi``
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_

View File

@ -28,8 +28,5 @@ Packages
* - Name
- Contents
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccmingw32``
- `MinGW <http://www.mingw.org>`_

View File

@ -21,13 +21,73 @@ The Project configuration file is named ``platformio.ini``. This is a
key / value pairs within the sections. Lines beginning with ``;``
are ignored and may be used to provide comments.
The sections and their allowable values are described below.
There are 2 system reserved sections:
* Base PlatformIO settings: :ref:`projectconf_section_platformio`
* Build Environment settings: :ref:`projectconf_section_env`
The other sections can be used by users, for example, for
:ref:`projectconf_dynamic_vars`. The sections and their allowable values are
described below.
.. contents::
:depth: 2
.. _projectconf_dynamic_vars:
Dynamic variables
-----------------
.. versionadded:: 3.1
Dynamic variables/templates are useful when you have common configuration data
between build environments. For examples, common :ref:`projectconf_build_flags`
or project dependencies :ref:`projectconf_lib_deps`.
Each variable should have a next format: ``${<section>.<option>}``, where
``<section>`` is a value from ``[<section>]`` group, and ``<option>`` is a
first item from pair ``<option> = value``.
* Variable can be applied only for the option's value
* Multiple variables are allowed
* The ``platformio`` section is reserved and could not be used as custom
section. Some good section names might be ``common`` or ``global``.
Example:
.. code-block:: ini
[common]
build_flags = -D VERSION=1.2.3 -D DEBUG=1
lib_deps_builtin = SPI, Wire
lib_deps_external = ArduinoJson@>5.6.0
[env:uno]
platform = atmelavr
framework = arduino
board = uno
build_flags = ${common.build_flags}
lib_deps = ${common.lib_deps_builtin}, ${common.lib_deps_external}
[env:nodemcuv2]
platform = espressif8266
framework = arduino
board = nodemcuv2
build_flags = ${common.build_flags} -DSSID_NAME=HELLO -DSSID_PASWORD=WORLD
lib_deps =
${common.lib_deps_builtin}
${common.lib_deps_external}
PubSubClient@2.6
OneWire
.. _projectconf_section_platformio:
Section ``[platformio]``
------------------------
.. contents::
:local:
A ``platformio`` section is used for overriding default configuration options
.. note::
@ -45,7 +105,8 @@ Options
^^^^^^^^^^^^
Is used to store platform toolchains, frameworks, global libraries for
:ref: `ldf`, service data and etc.
:ref: `ldf`, service data and etc. The size of this folder will depend on
number of installed development platforms.
A default value is User's home directory:
@ -55,6 +116,13 @@ A default value is User's home directory:
This option can be overridden by global environment variable
:envvar:`PLATFORMIO_HOME_DIR`.
Example:
.. code-block:: ini
[platformio]
home_dir = /path/to/custom/pio/storage
.. _projectconf_pio_lib_dir:
``lib_dir``
@ -223,11 +291,14 @@ Multiple environments are allowed if they are separated with ", "
board = lpmsp430g2553
build_flags = -D LED_BUILTIN=RED_LED
----------
.. _projectconf_section_env:
Section ``[env:NAME]``
----------------------
.. contents::
:local:
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.
@ -652,6 +723,16 @@ To print all available serial ports use :ref:`cmd_device` command.
This option can be set by global environment variable
:envvar:`PLATFORMIO_UPLOAD_PORT`.
Example:
.. code-block:: ini
[env:uno]
platform = atmelavr
framework = arduino
board = uno
upload_port = /dev/ttyUSB0
``upload_protocol``
^^^^^^^^^^^^^^^^^^^
@ -703,13 +784,18 @@ Specify project dependencies that should be installed automatically to
:ref:`projectconf_pio_libdeps_dir` before environment processing.
Multiple dependencies are allowed (multi-lines or separated with comma+space ", ").
If you have multiple build environments that depend on the same libraries,
you can use :ref:`projectconf_dynamic_vars` to use common configuration.
**Valid forms**
.. code-block:: ini
; one line definition (comma + space)
[env:myenv]
lib_deps = LIBRARY_1, LIBRARY_2, LIBRARY_N
; multi-line definition
[env:myenv2]
lib_deps =
LIBRARY_1
@ -732,30 +818,6 @@ Example:
https://github.com/gioblu/PJON.git@v2.0
https://github.com/me-no-dev/ESPAsyncTCP.git
.. _projectconf_lib_force:
``lib_force``
^^^^^^^^^^^^^
.. seealso::
Please make sure to read :ref:`ldf` guide first.
Force Library Dependency Finder to depend on the specified library if it even
is not included in the project source code. Also, this library will be
processed in the first order.
The correct value for this option is library name (not folder name). In the
most cases, library name is pre-defined in manifest file
(:ref:`library_config`, ``library.properties``, ``module.json``). The multiple
library names are allowed, split them with comma+space ", ".
Example:
.. code-block:: ini
[env:myenv]
lib_force = OneWire, SPI
.. _projectconf_lib_ignore:
``lib_ignore``

View File

@ -133,7 +133,7 @@ next structure:
(``*.h, *.c, *.cpp, *.S, *.ino, etc.``)
* ``lib`` directory can be used for the project specific (private) libraries.
More details are located in ``lib/readme.txt`` file.
* Miscellaneous files for CVS and :ref:`ci` support.
* Miscellaneous files for VCS and :ref:`ci` support.
.. note::

View File

@ -118,9 +118,9 @@ Buid project using pre-configured :ref:`projectconf`.
.. option::
-O, --project-option
Pass additional options from :ref:`projectconf` to
:option:`platformio init --project-option` command. For example,
automatically install dependent libraries
Pass additional options from :ref:`projectconf` to :ref:`cmd_init` command.
Use multiple ``--project-option`` options to pass multiple options to
:ref:`cmd_init` command. For example, automatically install dependent libraries
``platformio ci --project-option="lib_deps=ArduinoJSON"`` or ignore specific
library ``platformio ci --project-option="lib_ignore=SomeLib"``.

View File

@ -37,7 +37,7 @@ This command will create:
(``*.h, *.c, *.cpp, *.S, *.ino, etc.``)
* ``lib`` directory can be used for the project specific (private) libraries.
More details are located in ``lib/readme.txt`` file.
* Miscellaneous files for CVS and :ref:`ci` support.
* Miscellaneous files for VCS and :ref:`ci` support.
Options
-------
@ -89,11 +89,11 @@ be ``[env:teensy_31]``.
Examples
--------
1. Create new project in the current working directory
1. Initialize new project in a current working directory
.. code-block:: bash
.. code::
$ platformio init
> platformio init
The current working directory *** will be used for the new project.
You can specify another project directory via
@ -110,38 +110,35 @@ Examples
`platformio run --target clean` - clean project (remove compiled files)
2. Create new project in the specified directory
2. Initialize new project in a specified directory
.. code-block:: bash
.. code::
$ platformio init -d %PATH_TO_DIR%
> platformio init -d %PATH_TO_DIR%
The next files/directories will be created in ***
platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-|
src - Put your source files here
lib - Put here project specific (private) libraries
Project has been successfully initialized!
Useful commands:
`platformio run` - process/build project from the current directory
`platformio run --target upload` or `platformio run -t upload` - upload firmware to embedded board
`platformio run --target clean` - clean project (remove compiled files)
...
3. Initialize project for Arduino Uno
.. code-block:: bash
.. code::
$ platformio init --board uno
> platformio init --board uno
The current working directory *** will be used for the new project.
You can specify another project directory via
`platformio init -d %PATH_TO_THE_PROJECT_DIR%` command.
...
4. Initialize project for Teensy 3.1 board with custom :ref:`framework_mbed`
.. code::
> platformio init --board teensy31 --project-option "framework=mbed"
The current working directory *** will be used for the new project.
You can specify another project directory via
`platformio init -d %PATH_TO_THE_PROJECT_DIR%` command.
The next files/directories will be created in ***
platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-|
src - Put your source files here
lib - Put here project specific (private) libraries
Project has been successfully initialized!
Useful commands:
`platformio run` - process/build project from the current directory
`platformio run --target upload` or `platformio run -t upload` - upload firmware to embedded board
`platformio run --target clean` - clean project (remove compiled files)
...

View File

@ -87,15 +87,15 @@ Check for the new PlatformIO interval.
Check for the platform updates interval.
.. _setting_disable_ssl:
.. _setting_enable_ssl:
``disable_ssl``
^^^^^^^^^^^^^^^
``enable_ssl``
^^^^^^^^^^^^^^
:Default: No
:Values: Yes/No
Disable SSL for PlatformIO API (NOT RECOMMENDED, INSECURE)
Enable SSL for PlatformIO Services
.. _setting_force_verbose:

View File

@ -87,7 +87,7 @@ archive should contain ``.library.json`` manifest (see :ref:`library_config`).
Storage Options
---------------
See base options for :ref:`userguide_lib`.
See base options for :ref:`cmd_lib`.
Options
-------

View File

@ -43,7 +43,7 @@ List installed libraries
Storage Options
---------------
See base options for :ref:`userguide_lib`.
See base options for :ref:`cmd_lib`.
Options
~~~~~~~

View File

@ -64,7 +64,7 @@ The ``version`` supports `Semantic Versioning <http://semver.org>`_ (
Storage Options
---------------
See base options for :ref:`userguide_lib`.
See base options for :ref:`cmd_lib`.
Examples
--------

View File

@ -63,7 +63,7 @@ The ``version`` supports `Semantic Versioning <http://semver.org>`_ (
Storage Options
---------------
See base options for :ref:`userguide_lib`.
See base options for :ref:`cmd_lib`.
Examples
--------

View File

@ -67,7 +67,7 @@ The ``version`` supports `Semantic Versioning <http://semver.org>`_ (
Storage Options
---------------
See base options for :ref:`userguide_lib`.
See base options for :ref:`cmd_lib`.
Options
-------

View File

@ -9,7 +9,7 @@
See the License for the specific language governing permissions and
limitations under the License.
.. _userguide_lib:
.. _cmd_lib:
Library Manager
===============
@ -46,7 +46,7 @@ dependencies by default.
.. versionadded:: 3.0
Manage custom library storage. It can be used later for the
:ref:`projectconf_extra_script` option from :ref:`projectconf`.
:ref:`projectconf_lib_extra_dirs` option from :ref:`projectconf`.
Demo
----

View File

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

View File

@ -14,10 +14,11 @@
import hashlib
import json
import os
import uuid
from copy import deepcopy
from os import environ, getenv
from os.path import getmtime, isfile, join
from os import environ, getenv, listdir, remove
from os.path import dirname, getmtime, isdir, isfile, join
from time import time
from lockfile import LockFile
@ -50,9 +51,9 @@ DEFAULT_SETTINGS = {
"description": "Force verbose output when processing environments",
"value": False
},
"disable_ssl": {
"description": "Disable SSL for PlatformIO services",
"value": True
"enable_ssl": {
"description": "Enable SSL for PlatformIO Services",
"value": False
},
"enable_telemetry": {
"description":
@ -111,6 +112,85 @@ class State(object):
self._lockfile.release()
class LocalCache(object):
def __init__(self, cache_dir=None):
self.cache_dir = cache_dir or join(util.get_home_dir(), ".cache")
if not self.cache_dir:
os.makedirs(self.cache_dir)
self.db_path = join(self.cache_dir, "db.data")
def __enter__(self):
if not isfile(self.db_path):
return self
newlines = []
found = False
with open(self.db_path) as fp:
for line in fp.readlines():
if "=" not in line:
continue
line = line.strip()
expire, path = line.split("=")
if time() < int(expire):
newlines.append(line)
continue
found = True
if isfile(path):
remove(path)
if not len(listdir(dirname(path))):
util.rmtree_(dirname(path))
if found:
with open(self.db_path, "w") as fp:
fp.write("\n".join(newlines) + "\n")
return self
def __exit__(self, type_, value, traceback):
pass
def get_cache_path(self, key):
assert len(key) > 3
return join(self.cache_dir, key[-2:], key)
@staticmethod
def key_from_args(*args):
h = hashlib.md5()
for data in args:
h.update(str(data))
return h.hexdigest()
def get(self, key):
cache_path = self.get_cache_path(key)
if not isfile(cache_path):
return None
with open(cache_path) as fp:
data = fp.read()
if data[0] in ("{", "["):
return json.loads(data)
return data
def set(self, key, data, valid):
if not data:
return
tdmap = {"s": 1, "m": 60, "h": 3600, "d": 86400}
assert valid.endswith(tuple(tdmap.keys()))
cache_path = self.get_cache_path(key)
if not isdir(dirname(cache_path)):
os.makedirs(dirname(cache_path))
with open(cache_path, "w") as fp:
if isinstance(data, dict) or isinstance(data, list):
json.dump(data, fp)
else:
fp.write(str(data))
expire_time = int(time() + tdmap[valid[-1]] * int(valid[:-1]))
with open(self.db_path, "w+") as fp:
fp.write("%s=%s\n" % (str(expire_time), cache_path))
return True
def clean(self):
if isdir(self.cache_dir):
util.rmtree_(self.cache_dir)
def sanitize_setting(name, value):
if name not in DEFAULT_SETTINGS:
raise InvalidSettingName(name)

View File

@ -46,8 +46,8 @@ commonvars.AddVariables(
# library options
("LIB_LDF_MODE",),
("LIB_COMPAT_MODE",),
("LIB_DEPS",),
("LIB_IGNORE",),
("LIB_FORCE",),
("LIB_EXTRA_DIRS",),
# board options
@ -121,10 +121,10 @@ for var in ("BUILD_FLAGS", "SRC_BUILD_FLAGS", "SRC_FILTER", "EXTRA_SCRIPT",
env[var] = environ.get(k)
# Parse comma separated items
for opt in ("LIB_IGNORE", "LIB_FORCE", "LIB_EXTRA_DIRS"):
for opt in ("LIB_DEPS", "LIB_IGNORE", "LIB_EXTRA_DIRS"):
if opt not in env:
continue
env[opt] = [l.strip() for l in env[opt].split(",") if l.strip()]
env[opt] = [l.strip() for l in env[opt].split(", ") if l.strip()]
env.Prepend(LIBSOURCE_DIRS=env.get("LIB_EXTRA_DIRS", []))
env.LoadPioPlatform(commonvars)

View File

@ -331,9 +331,12 @@ class ProjectAsLibBuilder(LibBuilderBase):
pass
def search_deps_recursive(self, lib_builders, search_paths=None):
for lib_name in self.env.get("LIB_FORCE", []):
for dep in self.env.get("LIB_DEPS", []):
for token in ("@", "="):
if token in dep:
dep, _ = dep.split(token, 1)
for lb in lib_builders:
if lb.name == lib_name:
if lb.name == dep:
if lb not in self.depbuilders:
self.depend_recursive(lb, lib_builders)
break
@ -549,7 +552,7 @@ def GetLibBuilders(env):
if verbose and found_incompat:
sys.stderr.write(
"More details about \"Library Compatibility Mode\": "
"http://docs.platformio.org/en/latest/librarymanager/ldf.html#"
"http://docs.platformio.org/en/stable/librarymanager/ldf.html#"
"ldf-compat-mode\n")
return items

View File

@ -146,6 +146,8 @@ class InoToCPPConverter(object):
def _get_total_lines(self, contents):
total = 0
if contents.endswith("\n"):
contents = contents[:-1]
for line in contents.split("\n")[::-1]:
linenum = self._parse_preproc_line_num(line)
if linenum is not None:
@ -164,7 +166,7 @@ class InoToCPPConverter(object):
("|".join(prototype_names)),
contents[:split_pos], re.M)
if match_ptrs:
split_pos = contents.rfind("\n", 0, match_ptrs.start())
split_pos = contents.rfind("\n", 0, match_ptrs.start()) + 1
result = []
result.append(contents[:split_pos].strip())

View File

@ -115,8 +115,10 @@ def AutodetectUploadPort(*args, **kwargs): # pylint: disable=unused-argument
if env.subst("$PIOFRAMEWORK") == "mbed":
env.Replace(UPLOAD_PORT=_look_for_mbed_disk())
else:
if (system() == "Linux" and
not isfile("/etc/udev/99-platformio-udev.rules")):
if (system() == "Linux" and not any([
isfile("/etc/udev/99-platformio-udev.rules"),
isfile("/etc/rules.d/99-platformio-udev.rules")
])):
sys.stderr.write(
"\nWarning! Please install `99-platformio-udev.rules` and "
"check that your board's PID and VID are listed in the rules."

View File

@ -16,7 +16,7 @@ import json
import click
from platformio.exception import APIRequestError
from platformio.exception import APIRequestError, InternetIsOffline
from platformio.managers.platform import PlatformManager
@ -92,10 +92,13 @@ def _get_boards(installed=False):
boards = PlatformManager().get_installed_boards()
if not installed:
know_boards = ["%s:%s" % (b['platform'], b['id']) for b in boards]
for board in PlatformManager().get_registered_boards():
key = "%s:%s" % (board['platform'], board['id'])
if key not in know_boards:
boards.append(board)
try:
for board in PlatformManager().get_registered_boards():
key = "%s:%s" % (board['platform'], board['id'])
if key not in know_boards:
boards.append(board)
except InternetIsOffline:
pass
return boards

View File

@ -26,12 +26,6 @@ from platformio.commands.init import validate_boards
from platformio.commands.run import cli as cmd_run
from platformio.exception import CIBuildEnvsEmpty
# pylint: disable=wrong-import-order
try:
from configparser import ConfigParser
except ImportError:
from ConfigParser import ConfigParser
def validate_path(ctx, param, value): # pylint: disable=unused-argument
invalid_path = None
@ -175,9 +169,8 @@ def _exclude_contents(dst_dir, patterns):
def _copy_project_conf(build_dir, project_conf):
cp = ConfigParser()
cp.read(project_conf)
if cp.has_section("platformio"):
cp.remove_section("platformio")
config = util.load_project_config(project_conf)
if config.has_section("platformio"):
config.remove_section("platformio")
with open(join(build_dir, "platformio.ini"), "w") as fp:
cp.write(fp)
config.write(fp)

View File

@ -12,6 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# pylint: disable=too-many-arguments,too-many-locals, too-many-branches
from os import getcwd, makedirs
from os.path import isdir, isfile, join
from shutil import copyfile
@ -27,19 +29,14 @@ from platformio.managers.platform import PlatformManager
def validate_boards(ctx, param, value): # pylint: disable=W0613
pm = PlatformManager()
# check installed boards
known_boards = set([b['id'] for b in pm.get_installed_boards()])
# if boards are not listed as installed, check registered boards
if set(value) - known_boards:
known_boards = set([b['id'] for b in pm.get_registered_boards()])
unknown_boards = set(value) - known_boards
try:
assert not unknown_boards
return value
except AssertionError:
raise click.BadParameter("%s. Please search for the board ID using "
"`platformio boards` command" %
", ".join(unknown_boards))
for id_ in value:
try:
pm.board_config(id_)
except exception.UnknownBoard:
raise click.BadParameter(
"`%s`. Please search for board ID using `platformio boards` "
"command" % id_)
return value
@click.command(
@ -287,10 +284,8 @@ def init_cvs_ignore(project_dir):
fp.writelines(current)
def fill_project_envs( # pylint: disable=too-many-arguments,too-many-locals
ctx, project_dir, board_ids, project_option, env_prefix,
force_download):
installed_boards = PlatformManager().get_installed_boards()
def fill_project_envs(ctx, project_dir, board_ids, project_option, env_prefix,
force_download):
content = []
used_boards = []
used_platforms = []
@ -302,33 +297,30 @@ def fill_project_envs( # pylint: disable=too-many-arguments,too-many-locals
continue
used_boards.append(config.get(section, "board"))
pm = PlatformManager()
for id_ in board_ids:
manifest = None
for boards in (installed_boards,
PlatformManager.get_registered_boards()):
for b in boards:
if b['id'] == id_:
manifest = b
break
assert manifest is not None
used_platforms.append(manifest['platform'])
board_config = pm.board_config(id_)
used_platforms.append(board_config['platform'])
if id_ in used_boards:
continue
used_boards.append(id_)
envopts = {"platform": board_config['platform'], "board": id_}
# find default framework for board
frameworks = board_config.get("frameworks")
if frameworks:
envopts['framework'] = frameworks[0]
for item in project_option:
if "=" not in item:
continue
_name, _value = item.split("=", 1)
envopts[_name.strip()] = _value.strip()
content.append("")
content.append("[env:%s%s]" % (env_prefix, id_))
content.append("platform = %s" % manifest['platform'])
# find default framework for board
frameworks = manifest.get("frameworks")
if frameworks:
content.append("framework = %s" % frameworks[0])
content.append("board = %s" % id_)
if project_option:
content.extend(project_option)
for name, value in envopts.items():
content.append("%s = %s" % (name, value))
if force_download and used_platforms:
_install_dependent_platforms(ctx, used_platforms)

View File

@ -180,8 +180,10 @@ def lib_search(query, json_output, page, noninteractive, **filters):
query.append('%s:"%s"' % (key, value))
result = get_api_result(
"/lib/search", dict(
query=" ".join(query), page=page))
"/lib/search",
dict(
query=" ".join(query), page=page),
cache_valid="3d")
if json_output:
click.echo(json.dumps(result))
@ -232,7 +234,8 @@ def lib_search(query, json_output, page, noninteractive, **filters):
result = get_api_result(
"/lib/search",
dict(
query=" ".join(query), page=int(result['page']) + 1))
query=" ".join(query), page=int(result['page']) + 1),
cache_valid="3d")
@cli.command("list", short_help="List installed libraries")

View File

@ -48,7 +48,7 @@ def _print_platforms(platforms):
@click.option("--json-output", is_flag=True)
def platform_search(query, json_output):
platforms = []
for platform in util.get_api_result("/platforms"):
for platform in util.get_api_result("/platforms", cache_valid="365d"):
if query == "all":
query = ""

View File

@ -80,21 +80,18 @@ def cli(ctx, environment, target, upload_port, project_dir, silent, verbose,
for e in config.get("platformio", "env_default").split(",")
]
results = []
results = {}
start_time = time()
for section in config.sections():
# skip main configuration section
if section == "platformio":
continue
if not section.startswith("env:"):
raise exception.InvalidEnvName(section)
continue
envname = section[4:]
skipenv = any([environment and envname not in environment,
not environment and env_default and
envname not in env_default])
if skipenv:
# echo("Skipped %s environment" % style(envname, fg="yellow"))
results[envname] = None
continue
if results:
@ -108,9 +105,34 @@ def cli(ctx, environment, target, upload_port, project_dir, silent, verbose,
ep = EnvironmentProcessor(ctx, envname, options, target,
upload_port, silent, verbose)
results.append(ep.process())
results[envname] = ep.process()
if not all(results):
if len(results) > 1:
click.echo()
print_header("[%s]" % click.style("SUMMARY"))
successed = True
for envname, status in results.items():
status_str = click.style("SUCCESS", fg="green")
if status is False:
successed = False
status_str = click.style("ERROR", fg="red")
elif status is None:
status_str = click.style("SKIP", fg="yellow")
click.echo(
"Environment %s\t[%s]" % (click.style(
envname, fg="cyan"), status_str),
err=status is False)
print_header(
"[%s] Took %.2f seconds" % ((click.style(
"SUCCESS", fg="green",
bold=True) if successed else click.style(
"ERROR", fg="red", bold=True)), time() - start_time),
is_error=not successed)
if any([r is False for r in results.values()]):
raise exception.ReturnErrorCode()
return True
@ -128,7 +150,7 @@ class EnvironmentProcessor(object):
REMAPED_OPTIONS = {"framework": "pioframework", "platform": "pioplatform"}
RENAMED_OPTIONS = {"lib_use": "lib_force"}
RENAMED_OPTIONS = {"lib_use": "lib_deps", "lib_force": "lib_deps"}
RENAMED_PLATFORMS = {"espressif": "espressif8266"}
@ -152,18 +174,15 @@ class EnvironmentProcessor(object):
terminal_width, _ = click.get_terminal_size()
start_time = time()
process_opts = []
# multi-line values to one line
for k, v in self.options.items():
if "\n" in v:
process_opts.append((k, ", ".join(
[s.strip() for s in v.split("\n") if s.strip()])))
else:
process_opts.append((k, v))
self.options[k] = self.options[k].strip().replace("\n", ", ")
click.echo("[%s] Processing %s (%s)" %
(datetime.now().strftime("%c"), click.style(
self.name, fg="cyan", bold=True),
", ".join(["%s: %s" % opts for opts in process_opts])))
click.echo("[%s] Processing %s (%s)" % (
datetime.now().strftime("%c"), click.style(
self.name, fg="cyan", bold=True),
", ".join(["%s: %s" % (k, v) for k, v in self.options.items()])))
click.secho("-" * terminal_width, bold=True)
if self.silent:
click.echo("Please wait...")
@ -248,9 +267,7 @@ class EnvironmentProcessor(object):
], self.verbose)
if "lib_deps" in self.options:
_autoinstall_libdeps(self.cmd_ctx, [
d.strip()
for d in self.options['lib_deps'].split(
"\n" if "\n" in self.options['lib_deps'] else ", ")
d.strip() for d in self.options['lib_deps'].split(", ")
if d.strip()
], self.verbose)
@ -258,7 +275,9 @@ class EnvironmentProcessor(object):
p = PlatformFactory.newPlatform(self.options['platform'])
except exception.UnknownPlatform:
self.cmd_ctx.invoke(
cmd_platform_install, platforms=[self.options['platform']])
cmd_platform_install,
platforms=[self.options['platform']],
skip_default_package=True)
p = PlatformFactory.newPlatform(self.options['platform'])
return p.run(build_vars, build_targets, self.silent, self.verbose)
@ -269,7 +288,11 @@ def _autoinstall_libdeps(ctx, libraries, verbose=False):
ctx.obj = LibraryManager(storage_dir)
if verbose:
click.echo("Library Storage: " + storage_dir)
ctx.invoke(cmd_lib_install, libraries=libraries, silent=not verbose)
for lib in libraries:
try:
ctx.invoke(cmd_lib_install, libraries=[lib], silent=not verbose)
except exception.LibNotFound as e:
click.secho("Warning! %s" % e, fg="yellow")
def _clean_pioenvs_dir(pioenvs_dir):

View File

@ -41,6 +41,7 @@ class FileDownloader(object):
if disposition and "filename=" in disposition:
self._fname = disposition[disposition.index("filename=") +
9:].replace('"', "").replace("'", "")
self._fname = self._fname.encode("utf8")
else:
self._fname = url.split("/")[-1]

View File

@ -50,7 +50,7 @@ class PlatformNotInstalledYet(PlatformioException):
class BoardNotDefined(PlatformioException):
MESSAGE = "You need to specify board type using `-b` or `--board` "\
MESSAGE = "You need to specify board ID using `-b` or `--board` "\
"option. Supported boards list is available via "\
" `platformio boards` command"
@ -131,11 +131,6 @@ class ProjectEnvsNotAvailable(PlatformioException):
MESSAGE = "Please setup environments in `platformio.ini` file"
class InvalidEnvName(PlatformioException):
MESSAGE = "Invalid environment '{0}'. The name must start with 'env:'"
class UnknownEnvNames(PlatformioException):
MESSAGE = "Unknown environment names '{0}'. Valid names are '{1}'"
@ -156,9 +151,16 @@ class APIRequestError(PlatformioException):
MESSAGE = "[API] {0}"
class InternetIsOffline(PlatformioException):
MESSAGE = "You are not connected to the Internet"
class LibNotFound(PlatformioException):
MESSAGE = "Library `{0}` has not been found in the registry"
MESSAGE = "Library `{0}` has not been found in PlatformIO Registry.\n"\
"You can ignore this message, if `{0}` is a built-in library "\
"(included in framework, SDK). E.g., SPI, Wire, etc."
class NotGlobalLibDir(PlatformioException):

View File

@ -1,8 +1,8 @@
set(ENV{PATH} "{{env_path}}")
set(PLATFORMIO_CMD "{{platformio_path}}")
SET(CMAKE_C_COMPILER "{{cc_path}}")
SET(CMAKE_CXX_COMPILER "{{cxx_path}}")
SET(CMAKE_C_COMPILER "{{cc_path.replace("\\", "/")}}")
SET(CMAKE_CXX_COMPILER "{{cxx_path.replace("\\", "/")}}")
SET(CMAKE_CXX_FLAGS_DISTRIBUTION "{{cxx_flags}}")
SET(CMAKE_C_FLAGS_DISTRIBUTION "{{cc_flags}}")
@ -22,4 +22,4 @@ include_directories("{{include.replace("\\", "/")}}")
% end
% end
aux_source_directory({{project_src_dir}} SRC_LIST)
aux_source_directory({{project_src_dir.replace("\\", "/")}} SRC_LIST)

View File

@ -34,12 +34,19 @@ from platformio.managers.platform import PlatformManager
from platformio.pioplus import pioplus_update
def in_silence(ctx):
def in_silence(ctx=None):
ctx = ctx or app.get_session_var("command_ctx")
assert ctx
ctx_args = ctx.args or []
return (ctx_args and
(ctx.args[0] == "upgrade" or "--json-output" in ctx_args))
def clean_cache():
with app.LocalCache() as lc:
lc.clean()
def on_platformio_start(ctx, force, caller):
if not caller:
if getenv("PLATFORMIO_CALLER"):
@ -52,6 +59,8 @@ def on_platformio_start(ctx, force, caller):
app.set_session_var("caller_id", caller)
telemetry.on_command()
if ctx.args and (ctx.args[0] == "upgrade" or "update" in ctx.args):
clean_cache()
if not in_silence(ctx):
after_upgrade(ctx)
@ -145,7 +154,7 @@ def after_upgrade(ctx):
app.set_state_item("last_version", __version__)
else:
click.secho("Please wait while upgrading PlatformIO ...", fg="yellow")
clean_cache()
u = Upgrader(last_version, __version__)
if u.run(ctx):
app.set_state_item("last_version", __version__)
@ -153,7 +162,6 @@ def after_upgrade(ctx):
# update development platforms
pm = PlatformManager()
for manifest in pm.get_installed():
# @TODO Uncomment line below after first PIO3 release
# pm.update(manifest['name'], "^" + manifest['version'])
pm.update(manifest['name'])
@ -191,9 +199,9 @@ def after_upgrade(ctx):
"try", fg="cyan"), click.style(
"http://platformio.org/platformio-ide", fg="cyan")))
if not util.is_ci():
click.echo("- %s to keep PlatformIO alive! > %s" % (click.style(
"donate", fg="cyan"), click.style(
"http://platformio.org/donate", fg="cyan")))
click.echo("- %s us with PlatformIO Plus > %s" % (click.style(
"support", fg="cyan"), click.style(
"https://pioplus.com", fg="cyan")))
click.echo("*" * terminal_width)
click.echo("")

View File

@ -20,7 +20,7 @@ from os.path import dirname, join
import click
import semantic_version
from platformio import commands, exception, util
from platformio import app, commands, exception, util
from platformio.managers.package import BasePkgManager
@ -194,31 +194,39 @@ class LibraryManager(BasePkgManager):
raise exception.UndefinedPackageVersion(requirements or "latest",
util.get_systype())
dl_data = util.get_api_result(
"/lib/download/" + str(name[3:]), dict(version=version))
"/lib/download/" + str(name[3:]),
dict(version=version),
cache_valid="30d")
assert dl_data
pkg_dir = None
try:
pkg_dir = self._install_from_url(
name, dl_data['url'].replace("http://", "https://"),
requirements)
except exception.APIRequestError:
pkg_dir = self._install_from_url(name, dl_data['url'],
requirements)
return pkg_dir
def install(self, # pylint: disable=too-many-arguments
return self._install_from_url(
name, dl_data['url'].replace("http://", "https://")
if app.get_setting("enable_ssl") else dl_data['url'], requirements)
def install(self, # pylint: disable=too-many-arguments, too-many-locals
name,
requirements=None,
silent=False,
trigger_event=True,
interactive=False):
already_installed = False
_name, _requirements, _url = self.parse_pkg_name(name, requirements)
if not _url:
_name = "id=%d" % self._get_pkg_id_by_name(
_name, _requirements, silent=silent, interactive=interactive)
already_installed = self.get_package(_name, _requirements, _url)
pkg_dir = BasePkgManager.install(self, _name if not _url else name,
_requirements, silent, trigger_event)
try:
if not _url:
_name = "id=%d" % self._get_pkg_id_by_name(
_name,
_requirements,
silent=silent,
interactive=interactive)
already_installed = self.get_package(_name, _requirements, _url)
pkg_dir = BasePkgManager.install(
self, _name
if not _url else name, _requirements, silent, trigger_event)
except exception.InternetIsOffline as e:
if not silent:
click.secho(str(e), fg="yellow")
return
if already_installed:
return
@ -235,8 +243,13 @@ class LibraryManager(BasePkgManager):
if any([s in filters.get("version", "") for s in ("\\", "/")]):
self.install("{name}={version}".format(**filters))
else:
lib_info = self.search_for_library(filters, silent,
interactive)
try:
lib_info = self.search_for_library(filters, silent,
interactive)
except exception.LibNotFound as e:
click.secho("Warning! %s" % e, fg="yellow")
continue
if filters.get("version"):
self.install(
lib_info['id'],
@ -273,7 +286,7 @@ class LibraryManager(BasePkgManager):
lib_info = None
result = util.get_api_result(
"/lib/search", dict(query=" ".join(query)))
"/lib/search", dict(query=" ".join(query)), cache_valid="3d")
if result['total'] == 1:
lib_info = result['items'][0]
elif result['total'] > 1:

View File

@ -542,11 +542,23 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
except exception.PlatformioException:
pass
if not latest_version:
click.echo("[%s]" % (click.style("Unknown", fg="yellow")))
click.echo("[%s]" % (click.style(
"Off-line" if not util.internet_on() else "Unknown",
fg="yellow")))
return
if manifest['version'] == latest_version:
up_to_date = False
try:
up_to_date = (
semantic_version.Version.coerce(manifest['version']) >=
semantic_version.Version.coerce(latest_version))
except ValueError:
up_to_date = latest_version == manifest['version']
if up_to_date:
click.echo("[%s]" % (click.style("Up-to-date", fg="green")))
return
click.echo("[%s]" % (click.style("Out-of-date", fg="red")))
if only_check:
return

View File

@ -30,8 +30,9 @@ class PlatformManager(BasePkgManager):
def __init__(self, package_dir=None, repositories=None):
if not repositories:
repositories = [
"https://dl.bintray.com/platformio/dl-platforms/manifest.json",
"{0}://dl.platformio.org/platforms/manifest.json".format(
"http" if app.get_setting("disable_ssl") else "https")
"https" if app.get_setting("enable_ssl") else "http")
]
BasePkgManager.__init__(self, package_dir or
join(util.get_home_dir(), "platforms"),
@ -116,13 +117,23 @@ class PlatformManager(BasePkgManager):
@staticmethod
@util.memoized
def get_registered_boards():
return util.get_api_result("/boards")
return util.get_api_result("/boards", cache_valid="365d")
def board_config(self, id_):
for manifest in self.get_installed_boards():
if manifest['id'] == id_:
return manifest
for manifest in self.get_registered_boards():
if manifest['id'] == id_:
return manifest
raise exception.UnknownBoard(id_)
class PlatformFactory(object):
@staticmethod
def get_clsname(name):
name = re.sub(r"[^\da-z\_]+", "", name, flags=re.I)
return "%s%sPlatform" % (name.upper()[0], name.lower()[1:])
@staticmethod
@ -223,7 +234,7 @@ class PlatformPackagesMixin(object):
class PlatformRunMixin(object):
LINE_ERROR_RE = re.compile(r"(\s+error|error[:\s]+)", re.I)
LINE_ERROR_RE = re.compile(r"(^|\s+)error:?\s+", re.I)
def run(self, variables, targets, silent, verbose):
assert isinstance(variables, dict)
@ -353,12 +364,6 @@ class PlatformBase(PlatformPackagesMixin, PlatformRunMixin):
def packages(self):
if "packages" not in self._manifest:
self._manifest['packages'] = {}
if "tool-scons" not in self._manifest['packages']:
self._manifest['packages']['tool-scons'] = {
"version": self._manifest.get("engines", {}).get(
"scons", ">=2.3.0,<2.6.0"),
"optional": False
}
return self._manifest['packages']
def get_dir(self):
@ -457,6 +462,12 @@ class PlatformBase(PlatformPackagesMixin, PlatformRunMixin):
"version": "~1.20302.1",
"optional": False
}
if "tool-scons" not in self.packages:
self.packages['tool-scons'] = {
"version": self._manifest.get("engines", {}).get(
"scons", ">=2.3.0,<2.6.0"),
"optional": False
}
class PlatformBoardConfig(object):
@ -494,16 +505,20 @@ class PlatformBoardConfig(object):
return False
@property
def id_(self):
def id(self):
return self._id
@property
def id_(self):
return self.id
@property
def manifest(self):
return self._manifest
def get_brief_data(self):
return {
"id": self.id_,
"id": self.id,
"name": self._manifest['name'],
"platform": self._manifest.get("platform"),
"mcu": self._manifest.get("build", {}).get("mcu", "").upper(),

View File

@ -17,7 +17,7 @@ import subprocess
from os.path import dirname, join
from platform import system
from platformio import util
from platformio import exception, util
from platformio.managers.package import PackageManager
PACKAGE_PIOPLUS_NAME = "tool-pioplus"
@ -54,4 +54,5 @@ def pioplus_call(args, **kwargs):
os.environ['LD_LIBRARY_PATH'] = dirname(pioplus_path)
os.environ['PYTHONEXEPATH'] = util.get_pythonexe_path()
util.copy_pythonpath_to_osenv()
subprocess.call([pioplus_path] + args, **kwargs)
if subprocess.call([pioplus_path] + args, **kwargs) != 0:
raise exception.ReturnErrorCode()

View File

@ -258,9 +258,11 @@ def on_event(category, action, label=None, value=None, screen_name=None):
def on_exception(e):
if any([isinstance(e, cls)
for cls in (IOError, exception.AbortedByUser,
exception.NotGlobalLibDir)]):
skip = any(
[isinstance(e, cls)
for cls in (IOError, exception.AbortedByUser,
exception.NotGlobalLibDir, exception.InternetIsOffline)])
if skip:
return
is_crash = any([
not isinstance(e, exception.PlatformioException),

View File

@ -17,6 +17,7 @@ import functools
import json
import os
import re
import socket
import stat
import subprocess
import sys
@ -33,13 +34,34 @@ import requests
from platformio import __apiurl__, __version__, exception
# pylint: disable=wrong-import-order
# pylint: disable=wrong-import-order, too-many-ancestors
try:
from configparser import ConfigParser
except ImportError:
from ConfigParser import ConfigParser
class ProjectConfig(ConfigParser):
VARTPL_RE = re.compile(r"\$\{([^\.\}]+)\.([^\}]+)\}")
def items(self, section, **_):
items = []
for option in ConfigParser.options(self, section):
items.append((option, self.get(section, option)))
return items
def get(self, section, option, **kwargs):
value = ConfigParser.get(self, section, option, **kwargs)
if "${" not in value or "}" not in value:
return value
return self.VARTPL_RE.sub(self._re_sub_handler, value)
def _re_sub_handler(self, match):
return self.get(match.group(1), match.group(2))
class AsyncPipe(Thread):
def __init__(self, outcallback=None):
@ -256,13 +278,15 @@ def get_projectdata_dir():
join(get_project_dir(), "data"))
def load_project_config(project_dir=None):
if not project_dir:
project_dir = get_project_dir()
if not is_platformio_project(project_dir):
raise exception.NotPlatformIOProject(project_dir)
cp = ConfigParser()
cp.read(join(project_dir, "platformio.ini"))
def load_project_config(path=None):
if not path or isdir(path):
project_dir = path or get_project_dir()
if not is_platformio_project(project_dir):
raise exception.NotPlatformIOProject(project_dir)
path = join(project_dir, "platformio.ini")
assert isfile(path)
cp = ProjectConfig()
cp.read(path)
return cp
@ -382,7 +406,7 @@ def _get_api_result(
headers = get_request_defheaders()
url = __apiurl__
if get_setting("disable_ssl"):
if not get_setting("enable_ssl"):
url = url.replace("https://", "http://")
try:
@ -409,19 +433,35 @@ def _get_api_result(
return result
def get_api_result(path, params=None, data=None):
max_retries = 5
def get_api_result(path, params=None, data=None, cache_valid=None):
from platformio.app import LocalCache
total = 0
max_retries = 5
cache_key = (LocalCache.key_from_args(path, params, data)
if cache_valid else None)
while total < max_retries:
try:
return _get_api_result(path, params, data)
with LocalCache() as lc:
if cache_key:
result = lc.get(cache_key)
if result is not None:
return result
result = _get_api_result(path, params, data)
if cache_valid:
with LocalCache() as lc:
lc.set(cache_key, result, cache_valid)
return result
except (requests.exceptions.ConnectionError,
requests.exceptions.Timeout) as e:
if not internet_on():
raise exception.InternetIsOffline()
from platformio.maintenance import in_silence
total += 1
click.secho(
"[API] ConnectionError: {0} (incremented retry: max={1}, "
"total={2})".format(e, max_retries, total),
fg="yellow")
if not in_silence():
click.secho(
"[API] ConnectionError: {0} (incremented retry: max={1}, "
"total={2})".format(e, max_retries, total),
fg="yellow")
sleep(2 * total)
raise exception.APIRequestError(
@ -429,6 +469,17 @@ def get_api_result(path, params=None, data=None):
"Please try later.")
def internet_on(timeout=3):
host = "8.8.8.8"
port = 53
try:
socket.setdefaulttimeout(timeout)
socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port))
return True
except: # pylint: disable=bare-except
return False
def get_pythonexe_path():
return os.environ.get("PYTHONEXEPATH", normpath(sys.executable))

View File

@ -95,7 +95,7 @@ Packages
* - Name
- Contents""")
for name in sorted(packagenames):
assert name in API_PACKAGES
assert name in API_PACKAGES, name
contitems = [
"`{name} <{url}>`_".format(**item) for item in API_PACKAGES[name]
]

View File

@ -132,6 +132,23 @@ def test_init_enable_auto_uploading(clirunner, validate_cliresult):
set(config.items("env:uno")))) == 0
def test_init_custom_framework(clirunner, validate_cliresult):
with clirunner.isolated_filesystem():
result = clirunner.invoke(
cmd_init, ["-b", "teensy31", "--project-option", "framework=mbed"])
validate_cliresult(result)
validate_pioproject(getcwd())
config = util.load_project_config()
expected_result = [
("platform", "teensy"), ("framework", "mbed"),
("board", "teensy31")
]
assert config.has_section("env:teensy31")
assert len(
set(expected_result).symmetric_difference(
set(config.items("env:teensy31")))) == 0
def test_init_incorrect_board(clirunner):
result = clirunner.invoke(cmd_init, ["-b", "missed_board"])
assert result.exit_code == 2

View File

@ -68,59 +68,52 @@ def test_install_uknown_version(clirunner, validate_cliresult):
def test_complex(clirunner, validate_cliresult):
items = [
"teensy",
"https://github.com/platformio/platform-teensy/archive/develop.zip",
"https://github.com/platformio/platform-teensy.git",
"platformio/platform-teensy",
]
for item in items:
with clirunner.isolated_filesystem():
os.environ["PLATFORMIO_HOME_DIR"] = os.getcwd()
try:
result = clirunner.invoke(cli_platform.platform_install,
[item])
validate_cliresult(result)
assert all([
s in result.output
for s in ("teensy", "Downloading", "Unpacking",
"tool-scons")
])
with clirunner.isolated_filesystem():
os.environ["PLATFORMIO_HOME_DIR"] = os.getcwd()
try:
result = clirunner.invoke(
cli_platform.platform_install,
["teensy", "--with-package", "framework-arduinoteensy"])
validate_cliresult(result)
assert all([
s in result.output
for s in ("teensy", "Downloading", "Unpacking")
])
# show platform information
result = clirunner.invoke(cli_platform.platform_show,
["teensy"])
validate_cliresult(result)
assert "teensy" in result.output
# show platform information
result = clirunner.invoke(cli_platform.platform_show, ["teensy"])
validate_cliresult(result)
assert "teensy" in result.output
# list platforms
result = clirunner.invoke(cli_platform.platform_list,
["--json-output"])
validate_cliresult(result)
list_result = json.loads(result.output)
assert isinstance(list_result, list)
assert len(list_result) == 1
assert list_result[0]["name"] == "teensy"
assert list_result[0]["packages"] == ["tool-scons"]
# list platforms
result = clirunner.invoke(cli_platform.platform_list,
["--json-output"])
validate_cliresult(result)
list_result = json.loads(result.output)
assert isinstance(list_result, list)
assert len(list_result) == 1
assert list_result[0]["name"] == "teensy"
assert list_result[0]["packages"] == ["framework-arduinoteensy"]
# try to install again
result = clirunner.invoke(cli_platform.platform_install,
["teensy"])
validate_cliresult(result)
assert "is already installed" in result.output
# try to install again
result = clirunner.invoke(cli_platform.platform_install,
["teensy"])
validate_cliresult(result)
assert "is already installed" in result.output
# try to update
# try to update
for _ in range(2):
result = clirunner.invoke(cli_platform.platform_update)
validate_cliresult(result)
assert "teensy" in result.output
assert "Up-to-date" in result.output
assert "Out-of-date" not in result.output
# try to uninstall
result = clirunner.invoke(cli_platform.platform_uninstall,
["teensy"])
validate_cliresult(result)
for folder in ("platforms", "packages"):
assert len(os.listdir(join(util.get_home_dir(),
folder))) == 0
finally:
del os.environ["PLATFORMIO_HOME_DIR"]
# try to uninstall
result = clirunner.invoke(cli_platform.platform_uninstall,
["teensy"])
validate_cliresult(result)
for folder in ("platforms", "packages"):
assert len(os.listdir(join(util.get_home_dir(), folder))) == 0
finally:
del os.environ["PLATFORMIO_HOME_DIR"]

View File

@ -23,7 +23,7 @@ def test_local_env():
result = util.exec_command(["platformio", "test", "-d",
join("examples", "unit-testing", "calculator"),
"-e", "local"])
if result['returncode'] != 0:
if result['returncode'] != 1:
pytest.fail(result)
assert all(
[s in result['out'] for s in ("[PASSED]", "[IGNORED]", "[FAILED]")])

View File

@ -40,6 +40,8 @@ void myFunction(struct Item *item) {
}
#warning "Line number is 43"
void fooCallback(){
}

View File

@ -42,6 +42,8 @@ def test_warning_line(clirunner, validate_cliresult):
validate_cliresult(result)
assert ('basic.ino:16:14: warning: #warning "Line number is 16"' in
result.output)
assert ('basic.ino:43:2: warning: #warning "Line number is 43"' in
result.output)
result = clirunner.invoke(
cmd_ci, [join(INOTEST_DIR, "strmultilines"), "-b", "uno"])
validate_cliresult(result)