forked from platformio/platformio-core
Merge branch 'release/v2.11.1'
This commit is contained in:
21
CONTRIBUTING.md
Normal file
21
CONTRIBUTING.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
Contributing
|
||||||
|
------------
|
||||||
|
|
||||||
|
To get started, <a href="https://www.clahub.com/agreements/platformio/platformio">sign the Contributor License Agreement</a>.
|
||||||
|
|
||||||
|
1. Fork the repository on GitHub.
|
||||||
|
2. Make a branch off of ``develop``
|
||||||
|
3. Run ``pip install tox``
|
||||||
|
4. Go to the root of project where is located ``tox.ini`` and run ``tox -e develop``
|
||||||
|
5. Activate current development environment:
|
||||||
|
|
||||||
|
* Windows: ``.tox\develop\Scripts\activate``
|
||||||
|
* Bash/ZSH: ``source .tox/develop/bin/activate``
|
||||||
|
* Fish: ``source .tox/bin/activate.fish``
|
||||||
|
|
||||||
|
6. Make changes to code, documentation, etc.
|
||||||
|
7. Lint source code ``tox -e lint``
|
||||||
|
8. Run the tests ``tox -e py27``
|
||||||
|
9. Build documentation ``tox -e docs`` (creates a directory _build under docs where you can find the html)
|
||||||
|
10. Commit changes to your forked repository
|
||||||
|
11. Submit a Pull Request on GitHub.
|
28
HISTORY.rst
28
HISTORY.rst
@@ -4,6 +4,34 @@ Release Notes
|
|||||||
PlatformIO 2.0
|
PlatformIO 2.0
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
2.11.1 (2016-07-12)
|
||||||
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
* Added support for Arduino M0, M0 Pro and Tian boards
|
||||||
|
(`issue #472 <https://github.com/platformio/platformio/issues/472>`_)
|
||||||
|
* Added support for Microchip chipKIT Lenny board
|
||||||
|
* Updated Microchip PIC32 Arduino framework to v1.2.1
|
||||||
|
* Documented `uploading of EEPROM data <http://docs.platformio.org/en/latest/platforms/atmelavr.html#upload-eeprom-data>`__
|
||||||
|
(from EEMEM directive)
|
||||||
|
* Added ``Rebuild C/C++ Project Index`` target to CLion and Eclipse IDEs
|
||||||
|
* Improved project generator for `CLion IDE <http://docs.platformio.org/en/latest/ide/clion.html>`__
|
||||||
|
* Added ``udev`` rules for OpenOCD CMSIS-DAP adapters
|
||||||
|
(`issue #718 <https://github.com/platformio/platformio/issues/718>`_)
|
||||||
|
* Auto-remove project cache when PlatformIO is upgraded
|
||||||
|
* Keep user changes for ``.gitignore`` file when re-generate/update project data
|
||||||
|
* Ignore ``[platformio]`` section from custom project configuration file when
|
||||||
|
`platformio ci --project-conf <http://docs.platformio.org/en/latest/userguide/cmd_ci.html>`__
|
||||||
|
command is used
|
||||||
|
* Fixed missed ``--boot`` flag for the firmware uploader for ATSAM3X8E
|
||||||
|
Cortex-M3 MCU based boards (Arduino Due, etc)
|
||||||
|
(`issue #710 <https://github.com/platformio/platformio/issues/710>`_)
|
||||||
|
* Fixed missing trailing ``\`` for the source files list when generate project
|
||||||
|
for `Qt Creator IDE <http://docs.platformio.org/en/latest/ide/qtcreator.html>`__
|
||||||
|
(`issue #711 <https://github.com/platformio/platformio/issues/711>`_)
|
||||||
|
* Split source files to ``HEADERS`` and ``SOURCES`` when generate project
|
||||||
|
for `Qt Creator IDE <http://docs.platformio.org/en/latest/ide/qtcreator.html>`__
|
||||||
|
(`issue #713 <https://github.com/platformio/platformio/issues/713>`_)
|
||||||
|
|
||||||
2.11.0 (2016-06-28)
|
2.11.0 (2016-06-28)
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
21
README.rst
21
README.rst
@@ -185,27 +185,12 @@ For further details, please refer to `What is PlatformIO? <http://docs.platformi
|
|||||||
Contributing
|
Contributing
|
||||||
------------
|
------------
|
||||||
|
|
||||||
1. Fork the repository on GitHub.
|
See `contributing guidelines <https://github.com/platformio/platformio/blob/develop/CONTRIBUTING.md>`_.
|
||||||
2. Make a branch off of ``develop``
|
|
||||||
3. Run ``pip install tox``
|
|
||||||
4. Go to the root of project where is located ``tox.ini`` and run ``tox -e develop``
|
|
||||||
5. Activate current development environment:
|
|
||||||
|
|
||||||
* Windows: ``.tox\develop\Scripts\activate``
|
License
|
||||||
* Bash/ZSH: ``source .tox/develop/bin/activate``
|
|
||||||
* Fish: ``source .tox/bin/activate.fish``
|
|
||||||
|
|
||||||
6. Make changes to code, documentation, etc.
|
|
||||||
7. Lint source code ``tox -e lint``
|
|
||||||
8. Run the tests ``tox -e py27``
|
|
||||||
9. Build documentation ``tox -e docs`` (creates a directory _build under docs where you can find the html)
|
|
||||||
10. Commit changes to your forked repository
|
|
||||||
11. Submit a Pull Request on GitHub.
|
|
||||||
|
|
||||||
Licence
|
|
||||||
-------
|
-------
|
||||||
|
|
||||||
Copyright 2014-2016 Ivan Kravets <me@ikravets.com>
|
Copyright 2014-2016 Ivan Kravets <me@ikravets.com>
|
||||||
|
|
||||||
The PlatformIO is licensed under the permissive Apache 2.0 licence,
|
The PlatformIO is licensed under the permissive Apache 2.0 license,
|
||||||
so you can use it in both commercial and personal projects with confidence.
|
so you can use it in both commercial and personal projects with confidence.
|
||||||
|
@@ -23,6 +23,9 @@ Here are recent articles about PlatformIO:
|
|||||||
2016
|
2016
|
||||||
^^^^
|
^^^^
|
||||||
|
|
||||||
|
* Jul 5, 2016 - **Ivan Kravets, Ph.D.** - `Explore the new development instruments for Arduino with PlatformIO ecosystem <http://www.slideshare.net/ivankravets/explore-the-new-development-instruments-for-arduino-with-platformio-ecosystem>`_
|
||||||
|
* Jul 5, 2016 - **Belinda** - `Monte Bianco Arduino Developer Summit <http://www.arduino.org/blog/arduino-developer-summit>`_
|
||||||
|
* Jul 1, 2016 - **Tam Hanna** - `Mikrocontroller-Gipfel in den Alpen: Arduino Developer Summit, Tag eins (Microcontroller peaks in the Alps: Arduino Developer Summit, Day One, German) <http://www.heise.de/make/meldung/Mikrocontroller-Gipfel-in-den-Alpen-Arduino-Developer-Summit-Tag-eins-3252421.html>`_
|
||||||
* Jun 14, 2016 - **Glyn Hudson** - `OpenEnergyMonitor Part 2/3: Firmware Continuous Test & Build <https://blog.openenergymonitor.org/2016/06/auto-build-continuous-test-firmware/>`_
|
* Jun 14, 2016 - **Glyn Hudson** - `OpenEnergyMonitor Part 2/3: Firmware Continuous Test & Build <https://blog.openenergymonitor.org/2016/06/auto-build-continuous-test-firmware/>`_
|
||||||
* Jun 13, 2016 - **Daniel Eichhorn** - `New Weather Station Demo on Github <http://blog.squix.org/2016/06/new-weather-station-demo-on-github.html>`_
|
* Jun 13, 2016 - **Daniel Eichhorn** - `New Weather Station Demo on Github <http://blog.squix.org/2016/06/new-weather-station-demo-on-github.html>`_
|
||||||
* Jun 12, 2016 - **Glyn Hudson** - `OpenEnergyMonitor Part 1/3: PlatformIO open-source embedded development ecosystem <https://blog.openenergymonitor.org/2016/06/platformio/>`_
|
* Jun 12, 2016 - **Glyn Hudson** - `OpenEnergyMonitor Part 1/3: PlatformIO open-source embedded development ecosystem <https://blog.openenergymonitor.org/2016/06/platformio/>`_
|
||||||
|
@@ -92,6 +92,13 @@ Adafruit
|
|||||||
- Flash
|
- Flash
|
||||||
- RAM
|
- RAM
|
||||||
|
|
||||||
|
* - ``adafruit_feather_m0_usb``
|
||||||
|
- `Adafruit Feather M0 <https://www.adafruit.com/product/2772>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
* - ``bluefruitmicro``
|
* - ``bluefruitmicro``
|
||||||
- `Adafruit Bluefruit Micro <https://www.adafruit.com/products/2661>`_
|
- `Adafruit Bluefruit Micro <https://www.adafruit.com/products/2661>`_
|
||||||
- ATMEGA32U4
|
- ATMEGA32U4
|
||||||
@@ -377,6 +384,34 @@ Arduino
|
|||||||
- 32 Kb
|
- 32 Kb
|
||||||
- 2 Kb
|
- 2 Kb
|
||||||
|
|
||||||
|
* - ``mkr1000USB``
|
||||||
|
- `Arduino MKR1000 <https://www.arduino.cc/en/Main/ArduinoMKR1000>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``mzeroUSB``
|
||||||
|
- `Arduino M0 <http://www.arduino.org/products/boards/arduino-m0>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``mzeropro``
|
||||||
|
- `Arduino M0 Pro (Programming Port) <http://www.arduino.org/products/boards/arduino-m0-pro>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``mzeroproUSB``
|
||||||
|
- `Arduino M0 Pro (Native USB Port) <http://www.arduino.org/products/boards/arduino-m0-pro>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
* - ``nanoatmega168``
|
* - ``nanoatmega168``
|
||||||
- `Arduino Nano ATmega168 <http://www.arduino.org/products/boards/4-arduino-boards/arduino-nano>`_
|
- `Arduino Nano ATmega168 <http://www.arduino.org/products/boards/4-arduino-boards/arduino-nano>`_
|
||||||
- ATMEGA168
|
- ATMEGA168
|
||||||
@@ -433,6 +468,13 @@ Arduino
|
|||||||
- 32 Kb
|
- 32 Kb
|
||||||
- 2.5 Kb
|
- 2.5 Kb
|
||||||
|
|
||||||
|
* - ``tian``
|
||||||
|
- `Arduino Tian <http://www.arduino.org/products/boards/arduino-tian>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
* - ``uno``
|
* - ``uno``
|
||||||
- `Arduino Uno <http://www.arduino.org/products/boards/4-arduino-boards/arduino-uno>`_
|
- `Arduino Uno <http://www.arduino.org/products/boards/4-arduino-boards/arduino-uno>`_
|
||||||
- ATMEGA328P
|
- ATMEGA328P
|
||||||
@@ -802,6 +844,13 @@ Espressif
|
|||||||
- 4096 Kb
|
- 4096 Kb
|
||||||
- 80 Kb
|
- 80 Kb
|
||||||
|
|
||||||
|
* - ``esp8285``
|
||||||
|
- `Generic ESP8285 Module <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
|
- ESP8266
|
||||||
|
- 80 MHz
|
||||||
|
- 448 Kb
|
||||||
|
- 80 Kb
|
||||||
|
|
||||||
* - ``esp_wroom_02``
|
* - ``esp_wroom_02``
|
||||||
- `ESP-WROOM-02 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
- `ESP-WROOM-02 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
- ESP8266
|
- ESP8266
|
||||||
@@ -809,6 +858,27 @@ Espressif
|
|||||||
- 4096 Kb
|
- 4096 Kb
|
||||||
- 50 Kb
|
- 50 Kb
|
||||||
|
|
||||||
|
* - ``phoenix_v1``
|
||||||
|
- `Phoenix 1.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
|
- ESP8266
|
||||||
|
- 80 MHz
|
||||||
|
- 1024 Kb
|
||||||
|
- 80 Kb
|
||||||
|
|
||||||
|
* - ``phoenix_v2``
|
||||||
|
- `Phoenix 2.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
|
- ESP8266
|
||||||
|
- 80 MHz
|
||||||
|
- 1024 Kb
|
||||||
|
- 80 Kb
|
||||||
|
|
||||||
|
* - ``wifinfo``
|
||||||
|
- `WifInfo <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
|
- ESP8266
|
||||||
|
- 80 MHz
|
||||||
|
- 448 Kb
|
||||||
|
- 80 Kb
|
||||||
|
|
||||||
Fubarino
|
Fubarino
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
@@ -1563,6 +1633,20 @@ SparkFun
|
|||||||
- 32 Kb
|
- 32 Kb
|
||||||
- 2 Kb
|
- 2 Kb
|
||||||
|
|
||||||
|
* - ``sparkfun_samd21_dev_usb``
|
||||||
|
- `SparkFun SAMD21 Dev Breakout <https://www.sparkfun.com/products/13672>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``sparkfun_samd21_mini_usb``
|
||||||
|
- `SparkFun SAMD21 Mini Breakout <https://www.sparkfun.com/products/13664>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
* - ``thing``
|
* - ``thing``
|
||||||
- `SparkFun ESP8266 Thing <https://www.sparkfun.com/products/13231>`_
|
- `SparkFun ESP8266 Thing <https://www.sparkfun.com/products/13231>`_
|
||||||
- ESP8266
|
- ESP8266
|
||||||
@@ -1780,6 +1864,26 @@ Wicked Device
|
|||||||
- 128 Kb
|
- 128 Kb
|
||||||
- 16 Kb
|
- 16 Kb
|
||||||
|
|
||||||
|
chipKIT
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Type ``board``
|
||||||
|
- Name
|
||||||
|
- Microcontroller
|
||||||
|
- Frequency
|
||||||
|
- Flash
|
||||||
|
- RAM
|
||||||
|
|
||||||
|
* - ``lenny``
|
||||||
|
- `chipKIT Lenny <http://chipkit.net/tag/lenny/>`_
|
||||||
|
- 32MX270F256D
|
||||||
|
- 40 MHz
|
||||||
|
- 128 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
element14
|
element14
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
|
@@ -43,41 +43,30 @@ command and generate project via :option:`platformio init --ide` command:
|
|||||||
|
|
||||||
Then:
|
Then:
|
||||||
|
|
||||||
1. Import this project via ``Menu: File > Import Project``
|
1. Place source files (``*.c, *.cpp, *.h, *.ino, etc.``) to ``src`` directory
|
||||||
|
2. Import this project via ``Menu: File > Import Project``
|
||||||
and specify root directory where is located :ref:`projectconf`
|
and specify root directory where is located :ref:`projectconf`
|
||||||
2. Open source file from ``src`` directory (``*.c, *.cpp, *.ino, etc.``)
|
3. Open source file from ``src`` directory
|
||||||
3. Build project (*DO NOT RUN*): ``Menu: Run > Build``.
|
4. Build project (*DO NOT RUN*): ``Menu: Run > Build``.
|
||||||
|
|
||||||
There are 6 predefined targets for building (*NOT FOR RUNNING*, see marks on
|
There are 6 predefined targets for building (*NOT FOR RUNNING*, see marks on
|
||||||
the screenshot below):
|
the screenshot below):
|
||||||
|
|
||||||
* ``PLATFORMIO_BUILD`` - Build project without auto-uploading
|
* ``PLATFORMIO_BUILD`` - Build project without auto-uploading
|
||||||
* ``PLATFORMIO_UPLOAD`` - Build and upload (if no errors).
|
* ``PLATFORMIO_UPLOAD`` - Build and upload (if no errors)
|
||||||
* ``PLATFORMIO_CLEAN`` - Clean compiled objects.
|
* ``PLATFORMIO_CLEAN`` - Clean compiled objects
|
||||||
* ``PLATFORMIO_PROGRAM`` - Build and upload using external programmer (if no errors), see :ref:`atmelavr_upload_via_programmer`.
|
* ``PLATFORMIO_PROGRAM`` - Build and upload using external programmer
|
||||||
* ``PLATFORMIO_UPLOADFS`` - Upload files to file system SPIFFS, see :ref:`platform_espressif_uploadfs`.
|
(if no errors), see :ref:`atmelavr_upload_via_programmer`
|
||||||
* ``PLATFORMIO_UPDATE`` - Update installed platforms and libraries via :ref:`cmd_update`.
|
* ``PLATFORMIO_UPLOADFS`` - Upload files to file system SPIFFS,
|
||||||
|
see :ref:`platform_espressif_uploadfs`
|
||||||
|
* ``PLATFORMIO_UPDATE`` - Update installed platforms and libraries via :ref:`cmd_update`
|
||||||
|
* ``PLATFORMIO_REBUILD_PROJECT_INDEX`` - Rebuild C/C++ Index for the Project.
|
||||||
|
Allows to fix code completion and code linting issues.
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
The libraries which are added, installed or used in the project
|
The libraries which are added, installed or used in the project
|
||||||
after generating process wont be reflected in IDE. To fix it you
|
after generating process wont be reflected in IDE. To fix it please run
|
||||||
need to reinitialize project using :ref:`cmd_init` (repeat it).
|
``PLATFORMIO_REBUILD_PROJECT_INDEX`` target.
|
||||||
|
|
||||||
.. warning::
|
|
||||||
PlatformIO generates empty project by default and **code auto-completion
|
|
||||||
will not work!** To enable auto-completion please choose one of:
|
|
||||||
|
|
||||||
* Add source files ``*.c, *.cpp, etc`` to ``src`` directory and re-initialize
|
|
||||||
project with command above
|
|
||||||
* Manually correct ``add_executable`` command in ``CMakeLists.txt`` file
|
|
||||||
(will be created in project directory after initialization).
|
|
||||||
|
|
||||||
``*.ino`` file isn't acceptable for ``add_executable`` command. You should
|
|
||||||
convert it manually to ``*.cpp``. See `project example <https://github.com/platformio/platformio-examples/tree/develop/ide/clion>`_.
|
|
||||||
|
|
||||||
More info `CLion issue #CPP-3977 <https://youtrack.jetbrains.com/issue/CPP-3977>`_.
|
|
||||||
Active discussion is located in
|
|
||||||
`PlatformIO issue #132 <https://github.com/platformio/platformio/issues/132>`_.
|
|
||||||
|
|
||||||
Articles / Manuals
|
Articles / Manuals
|
||||||
------------------
|
------------------
|
||||||
|
@@ -51,7 +51,7 @@ Then:
|
|||||||
``Menu: File > Import... > General > Existing Projects into Workspace > Next``
|
``Menu: File > Import... > General > Existing Projects into Workspace > Next``
|
||||||
and specify root directory where is located :ref:`projectconf`
|
and specify root directory where is located :ref:`projectconf`
|
||||||
2. Open source file from ``src`` directory (``*.c, *.cpp, *.ino, etc.``)
|
2. Open source file from ``src`` directory (``*.c, *.cpp, *.ino, etc.``)
|
||||||
3. Build project using ``Menu: Project > Build Project`` or preconfigured
|
3. Build project using ``Menu: Project > Build Project`` or pre-configured
|
||||||
Make Targets (see screenshot below):
|
Make Targets (see screenshot below):
|
||||||
|
|
||||||
+ ``PlatformIO: Build`` - Build project without auto-uploading
|
+ ``PlatformIO: Build`` - Build project without auto-uploading
|
||||||
@@ -59,17 +59,24 @@ Then:
|
|||||||
+ ``PlatformIO: Upload`` - Build and upload (if no errors)
|
+ ``PlatformIO: Upload`` - Build and upload (if no errors)
|
||||||
+ ``PlatformIO: Upload using Programmer`` see :ref:`atmelavr_upload_via_programmer`
|
+ ``PlatformIO: Upload using Programmer`` see :ref:`atmelavr_upload_via_programmer`
|
||||||
+ ``PlatformIO: Upload SPIFFS image`` see :ref:`platform_espressif_uploadfs`
|
+ ``PlatformIO: Upload SPIFFS image`` see :ref:`platform_espressif_uploadfs`
|
||||||
+ ``PlatformIO: Update platforms and libraries`` - Update installed platforms and libraries via :ref:`cmd_update`.
|
+ ``PlatformIO: Update platforms and libraries`` - Update installed
|
||||||
|
platforms and libraries via :ref:`cmd_update`
|
||||||
|
+ ``PlatformIO: Rebuild C/C++ Project Index`` - Rebuild C/C++ Index for the Project.
|
||||||
|
Allows to fix code completion and code linting issues.
|
||||||
|
|
||||||
If you have some problems with unresolved includes, defines, etc., then
|
If you have some problems with unresolved includes, defines, etc., then
|
||||||
|
|
||||||
* Restart Eclipse IDE
|
1. Rebuild PlatformIO Project Index:
|
||||||
* Rebuild index using ``Menu: Project > C/C++ Index > Rebuild``.
|
``PlatformIO: Rebuild C/C++ Project Index`` target
|
||||||
|
2. Rebuild Eclipse Project Index: ``Menu: Project > C/C++ Index > Rebuild``
|
||||||
|
3. Refresh Project, right click on the project ``Project > Refresh`` (F5) or
|
||||||
|
restart Eclipse IDE.
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
The libraries which are added, installed or used in the project
|
The libraries which are added, installed or used in the project
|
||||||
after generating process wont be reflected in IDE. To fix it you
|
after generating process wont be reflected in IDE. To fix it please run
|
||||||
need to reinitialize project using :ref:`cmd_init` (repeat it).
|
``PlatformIO: Rebuild C/C++ Project Index`` target and right click on the
|
||||||
|
project and ``Project > Refresh`` (F5).
|
||||||
|
|
||||||
Live Integration
|
Live Integration
|
||||||
----------------
|
----------------
|
||||||
|
@@ -43,16 +43,6 @@ Packages
|
|||||||
* - ``tool-micronucleus``
|
* - ``tool-micronucleus``
|
||||||
- `Micronucleus <https://github.com/micronucleus/micronucleus>`_
|
- `Micronucleus <https://github.com/micronucleus/micronucleus>`_
|
||||||
|
|
||||||
.. warning::
|
|
||||||
**Linux Users:** Don't forget to install "udev" rules file
|
|
||||||
`99-platformio-udev.rules <https://github.com/platformio/platformio/blob/develop/scripts/99-platformio-udev.rules>`_ (an instruction is located in the file).
|
|
||||||
|
|
||||||
|
|
||||||
**Windows Users:** Please check that you have correctly installed USB
|
|
||||||
driver from board manufacturer
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Frameworks
|
Frameworks
|
||||||
----------
|
----------
|
||||||
.. list-table::
|
.. list-table::
|
||||||
|
@@ -95,6 +95,13 @@ Configuration for the programmers:
|
|||||||
upload_port = SERIAL_PORT_HERE
|
upload_port = SERIAL_PORT_HERE
|
||||||
upload_speed = 19200
|
upload_speed = 19200
|
||||||
|
|
||||||
|
Upload EEPROM data
|
||||||
|
------------------
|
||||||
|
|
||||||
|
To upload EEPROM data (from EEMEM directive) you need to use ``uploadeep``
|
||||||
|
target instead ``upload`` for :option:`platformio run --target` command.
|
||||||
|
For example, ``platformio run -t uploadeep``.
|
||||||
|
|
||||||
Articles
|
Articles
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
@@ -28,23 +28,26 @@ Packages
|
|||||||
* - Name
|
* - Name
|
||||||
- Contents
|
- Contents
|
||||||
|
|
||||||
|
* - ``framework-mbed``
|
||||||
|
- `mbed Framework <http://mbed.org>`_
|
||||||
|
|
||||||
* - ``toolchain-gccarmnoneeabi``
|
* - ``toolchain-gccarmnoneeabi``
|
||||||
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_
|
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_
|
||||||
|
|
||||||
* - ``framework-arduinosam``
|
* - ``framework-arduinosam``
|
||||||
- `Arduino Wiring-based Framework (SAM Core, 1.6) <http://arduino.cc/en/Reference/HomePage>`_
|
- `Arduino Wiring-based Framework (SAM Core, 1.6) <http://arduino.cc/en/Reference/HomePage>`_
|
||||||
|
|
||||||
|
* - ``ldscripts``
|
||||||
|
- `Linker Scripts <https://sourceware.org/binutils/docs/ld/Scripts.html>`_
|
||||||
|
|
||||||
* - ``framework-simba``
|
* - ``framework-simba``
|
||||||
- `Simba Framework <https://github.com/eerimoq/simba>`_
|
- `Simba Framework <https://github.com/eerimoq/simba>`_
|
||||||
|
|
||||||
* - ``tool-openocd``
|
* - ``tool-openocd``
|
||||||
- `OpenOCD <http://openocd.org>`_
|
- `OpenOCD <http://openocd.org>`_
|
||||||
|
|
||||||
* - ``framework-mbed``
|
* - ``tool-avrdude``
|
||||||
- `mbed Framework <http://mbed.org>`_
|
- `AVRDUDE <http://www.nongnu.org/avrdude/>`_
|
||||||
|
|
||||||
* - ``ldscripts``
|
|
||||||
- `Linker Scripts <https://sourceware.org/binutils/docs/ld/Scripts.html>`_
|
|
||||||
|
|
||||||
* - ``tool-bossac``
|
* - ``tool-bossac``
|
||||||
- `BOSSA CLI <https://sourceforge.net/projects/b-o-s-s-a/>`_
|
- `BOSSA CLI <https://sourceforge.net/projects/b-o-s-s-a/>`_
|
||||||
@@ -85,6 +88,26 @@ Boards
|
|||||||
* For more detailed ``board`` information please scroll tables below by
|
* For more detailed ``board`` information please scroll tables below by
|
||||||
horizontal.
|
horizontal.
|
||||||
|
|
||||||
|
Adafruit
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Type ``board``
|
||||||
|
- Name
|
||||||
|
- Microcontroller
|
||||||
|
- Frequency
|
||||||
|
- Flash
|
||||||
|
- RAM
|
||||||
|
|
||||||
|
* - ``adafruit_feather_m0_usb``
|
||||||
|
- `Adafruit Feather M0 <https://www.adafruit.com/product/2772>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
Arduino
|
Arduino
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
@@ -112,6 +135,41 @@ Arduino
|
|||||||
- 512 Kb
|
- 512 Kb
|
||||||
- 32 Kb
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``mkr1000USB``
|
||||||
|
- `Arduino MKR1000 <https://www.arduino.cc/en/Main/ArduinoMKR1000>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``mzeroUSB``
|
||||||
|
- `Arduino M0 <http://www.arduino.org/products/boards/arduino-m0>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``mzeropro``
|
||||||
|
- `Arduino M0 Pro (Programming Port) <http://www.arduino.org/products/boards/arduino-m0-pro>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``mzeroproUSB``
|
||||||
|
- `Arduino M0 Pro (Native USB Port) <http://www.arduino.org/products/boards/arduino-m0-pro>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``tian``
|
||||||
|
- `Arduino Tian <http://www.arduino.org/products/boards/arduino-tian>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
* - ``zero``
|
* - ``zero``
|
||||||
- `Arduino Zero (Programming Port) <https://www.arduino.cc/en/Main/ArduinoBoardZero>`_
|
- `Arduino Zero (Programming Port) <https://www.arduino.cc/en/Main/ArduinoBoardZero>`_
|
||||||
- SAMD21G18A
|
- SAMD21G18A
|
||||||
@@ -206,3 +264,30 @@ SainSmart
|
|||||||
- 84 MHz
|
- 84 MHz
|
||||||
- 512 Kb
|
- 512 Kb
|
||||||
- 32 Kb
|
- 32 Kb
|
||||||
|
|
||||||
|
SparkFun
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Type ``board``
|
||||||
|
- Name
|
||||||
|
- Microcontroller
|
||||||
|
- Frequency
|
||||||
|
- Flash
|
||||||
|
- RAM
|
||||||
|
|
||||||
|
* - ``sparkfun_samd21_dev_usb``
|
||||||
|
- `SparkFun SAMD21 Dev Breakout <https://www.sparkfun.com/products/13672>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``sparkfun_samd21_mini_usb``
|
||||||
|
- `SparkFun SAMD21 Mini Breakout <https://www.sparkfun.com/products/13664>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
@@ -78,6 +78,13 @@ Adafruit
|
|||||||
- Flash
|
- Flash
|
||||||
- RAM
|
- RAM
|
||||||
|
|
||||||
|
* - ``adafruit_feather_m0_usb``
|
||||||
|
- `Adafruit Feather M0 <https://www.adafruit.com/product/2772>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
* - ``bluefruitmicro``
|
* - ``bluefruitmicro``
|
||||||
- `Adafruit Bluefruit Micro <https://www.adafruit.com/products/2661>`_
|
- `Adafruit Bluefruit Micro <https://www.adafruit.com/products/2661>`_
|
||||||
- ATMEGA32U4
|
- ATMEGA32U4
|
||||||
@@ -363,6 +370,34 @@ Arduino
|
|||||||
- 32 Kb
|
- 32 Kb
|
||||||
- 2 Kb
|
- 2 Kb
|
||||||
|
|
||||||
|
* - ``mkr1000USB``
|
||||||
|
- `Arduino MKR1000 <https://www.arduino.cc/en/Main/ArduinoMKR1000>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``mzeroUSB``
|
||||||
|
- `Arduino M0 <http://www.arduino.org/products/boards/arduino-m0>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``mzeropro``
|
||||||
|
- `Arduino M0 Pro (Programming Port) <http://www.arduino.org/products/boards/arduino-m0-pro>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``mzeroproUSB``
|
||||||
|
- `Arduino M0 Pro (Native USB Port) <http://www.arduino.org/products/boards/arduino-m0-pro>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
* - ``nanoatmega168``
|
* - ``nanoatmega168``
|
||||||
- `Arduino Nano ATmega168 <http://www.arduino.org/products/boards/4-arduino-boards/arduino-nano>`_
|
- `Arduino Nano ATmega168 <http://www.arduino.org/products/boards/4-arduino-boards/arduino-nano>`_
|
||||||
- ATMEGA168
|
- ATMEGA168
|
||||||
@@ -419,6 +454,13 @@ Arduino
|
|||||||
- 32 Kb
|
- 32 Kb
|
||||||
- 2.5 Kb
|
- 2.5 Kb
|
||||||
|
|
||||||
|
* - ``tian``
|
||||||
|
- `Arduino Tian <http://www.arduino.org/products/boards/arduino-tian>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
* - ``uno``
|
* - ``uno``
|
||||||
- `Arduino Uno <http://www.arduino.org/products/boards/4-arduino-boards/arduino-uno>`_
|
- `Arduino Uno <http://www.arduino.org/products/boards/4-arduino-boards/arduino-uno>`_
|
||||||
- ATMEGA328P
|
- ATMEGA328P
|
||||||
@@ -957,6 +999,13 @@ Espressif
|
|||||||
- 4096 Kb
|
- 4096 Kb
|
||||||
- 80 Kb
|
- 80 Kb
|
||||||
|
|
||||||
|
* - ``esp8285``
|
||||||
|
- `Generic ESP8285 Module <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
|
- ESP8266
|
||||||
|
- 80 MHz
|
||||||
|
- 448 Kb
|
||||||
|
- 80 Kb
|
||||||
|
|
||||||
* - ``esp_wroom_02``
|
* - ``esp_wroom_02``
|
||||||
- `ESP-WROOM-02 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
- `ESP-WROOM-02 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
- ESP8266
|
- ESP8266
|
||||||
@@ -964,6 +1013,27 @@ Espressif
|
|||||||
- 4096 Kb
|
- 4096 Kb
|
||||||
- 50 Kb
|
- 50 Kb
|
||||||
|
|
||||||
|
* - ``phoenix_v1``
|
||||||
|
- `Phoenix 1.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
|
- ESP8266
|
||||||
|
- 80 MHz
|
||||||
|
- 1024 Kb
|
||||||
|
- 80 Kb
|
||||||
|
|
||||||
|
* - ``phoenix_v2``
|
||||||
|
- `Phoenix 2.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
|
- ESP8266
|
||||||
|
- 80 MHz
|
||||||
|
- 1024 Kb
|
||||||
|
- 80 Kb
|
||||||
|
|
||||||
|
* - ``wifinfo``
|
||||||
|
- `WifInfo <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
|
- ESP8266
|
||||||
|
- 80 MHz
|
||||||
|
- 448 Kb
|
||||||
|
- 80 Kb
|
||||||
|
|
||||||
Freescale
|
Freescale
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
@@ -2322,6 +2392,20 @@ SparkFun
|
|||||||
- 32 Kb
|
- 32 Kb
|
||||||
- 2 Kb
|
- 2 Kb
|
||||||
|
|
||||||
|
* - ``sparkfun_samd21_dev_usb``
|
||||||
|
- `SparkFun SAMD21 Dev Breakout <https://www.sparkfun.com/products/13672>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
|
* - ``sparkfun_samd21_mini_usb``
|
||||||
|
- `SparkFun SAMD21 Mini Breakout <https://www.sparkfun.com/products/13664>`_
|
||||||
|
- SAMD21G18A
|
||||||
|
- 48 MHz
|
||||||
|
- 256 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
* - ``thing``
|
* - ``thing``
|
||||||
- `SparkFun ESP8266 Thing <https://www.sparkfun.com/products/13231>`_
|
- `SparkFun ESP8266 Thing <https://www.sparkfun.com/products/13231>`_
|
||||||
- ESP8266
|
- ESP8266
|
||||||
@@ -2663,6 +2747,26 @@ Wicked Device
|
|||||||
- 128 Kb
|
- 128 Kb
|
||||||
- 16 Kb
|
- 16 Kb
|
||||||
|
|
||||||
|
chipKIT
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Type ``board``
|
||||||
|
- Name
|
||||||
|
- Microcontroller
|
||||||
|
- Frequency
|
||||||
|
- Flash
|
||||||
|
- RAM
|
||||||
|
|
||||||
|
* - ``lenny``
|
||||||
|
- `chipKIT Lenny <http://chipkit.net/tag/lenny/>`_
|
||||||
|
- 32MX270F256D
|
||||||
|
- 40 MHz
|
||||||
|
- 128 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
element14
|
element14
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
|
@@ -210,6 +210,13 @@ Espressif
|
|||||||
- 4096 Kb
|
- 4096 Kb
|
||||||
- 80 Kb
|
- 80 Kb
|
||||||
|
|
||||||
|
* - ``esp8285``
|
||||||
|
- `Generic ESP8285 Module <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
|
- ESP8266
|
||||||
|
- 80 MHz
|
||||||
|
- 448 Kb
|
||||||
|
- 80 Kb
|
||||||
|
|
||||||
* - ``esp_wroom_02``
|
* - ``esp_wroom_02``
|
||||||
- `ESP-WROOM-02 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
- `ESP-WROOM-02 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
- ESP8266
|
- ESP8266
|
||||||
@@ -217,6 +224,27 @@ Espressif
|
|||||||
- 4096 Kb
|
- 4096 Kb
|
||||||
- 50 Kb
|
- 50 Kb
|
||||||
|
|
||||||
|
* - ``phoenix_v1``
|
||||||
|
- `Phoenix 1.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
|
- ESP8266
|
||||||
|
- 80 MHz
|
||||||
|
- 1024 Kb
|
||||||
|
- 80 Kb
|
||||||
|
|
||||||
|
* - ``phoenix_v2``
|
||||||
|
- `Phoenix 2.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
|
- ESP8266
|
||||||
|
- 80 MHz
|
||||||
|
- 1024 Kb
|
||||||
|
- 80 Kb
|
||||||
|
|
||||||
|
* - ``wifinfo``
|
||||||
|
- `WifInfo <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
|
||||||
|
- ESP8266
|
||||||
|
- 80 MHz
|
||||||
|
- 448 Kb
|
||||||
|
- 80 Kb
|
||||||
|
|
||||||
NodeMCU
|
NodeMCU
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
|
@@ -332,6 +332,26 @@ UBW32
|
|||||||
- 512 Kb
|
- 512 Kb
|
||||||
- 128 Kb
|
- 128 Kb
|
||||||
|
|
||||||
|
chipKIT
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - Type ``board``
|
||||||
|
- Name
|
||||||
|
- Microcontroller
|
||||||
|
- Frequency
|
||||||
|
- Flash
|
||||||
|
- RAM
|
||||||
|
|
||||||
|
* - ``lenny``
|
||||||
|
- `chipKIT Lenny <http://chipkit.net/tag/lenny/>`_
|
||||||
|
- 32MX270F256D
|
||||||
|
- 40 MHz
|
||||||
|
- 128 Kb
|
||||||
|
- 32 Kb
|
||||||
|
|
||||||
element14
|
element14
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
|
@@ -97,7 +97,11 @@ This option can be overridden by global environment variable
|
|||||||
``envs_dir``
|
``envs_dir``
|
||||||
^^^^^^^^^^^^
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
This is a cache directory. *PlatformIO Build System* uses this folder for project
|
.. warning::
|
||||||
|
**PLEASE DO NOT EDIT FILES IN THIS FOLDER**. PlatformIO will overwrite
|
||||||
|
your changes on the next build. **THIS IS A CACHE DIRECTORY**.
|
||||||
|
|
||||||
|
*PlatformIO Build System* uses this folder for project
|
||||||
environments to store compiled object files, static libraries, firmwares and
|
environments to store compiled object files, static libraries, firmwares and
|
||||||
other cached information. It allows PlatformIO to build source code extremely
|
other cached information. It allows PlatformIO to build source code extremely
|
||||||
fast!
|
fast!
|
||||||
@@ -351,6 +355,10 @@ Example:
|
|||||||
[env:specific_ld_script]
|
[env:specific_ld_script]
|
||||||
build_flags = -Wl,-T/path/to/ld_script.ld
|
build_flags = -Wl,-T/path/to/ld_script.ld
|
||||||
|
|
||||||
|
[env:exec_command]
|
||||||
|
# get VCS revision "on-the-fly"
|
||||||
|
build_flags = !echo "-DPIO_SRC_REV="$(git rev-parse HEAD)
|
||||||
|
|
||||||
|
|
||||||
For more detailed information about available flags/options go to:
|
For more detailed information about available flags/options go to:
|
||||||
|
|
||||||
|
2
examples
2
examples
Submodule examples updated: ed668f6e31...a657ca4225
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
VERSION = (2, 11, 0)
|
VERSION = (2, 11, 1)
|
||||||
__version__ = ".".join([str(s) for s in VERSION])
|
__version__ = ".".join([str(s) for s in VERSION])
|
||||||
|
|
||||||
__title__ = "platformio"
|
__title__ = "platformio"
|
||||||
|
@@ -958,17 +958,17 @@
|
|||||||
},
|
},
|
||||||
"mzeropro": {
|
"mzeropro": {
|
||||||
"build": {
|
"build": {
|
||||||
"core": "arduino_zero",
|
"core": "arduino_zero_org",
|
||||||
"extra_flags": "-DARDUINO_SAMD_ZERO -DARDUINO_ARCH_SAMD -D__SAMD21G18A__",
|
"extra_flags": "-DARDUINO_SAMD_ZERO -DARDUINO_ARCH_SAMD -D__SAMD21G18A__",
|
||||||
"f_cpu": "48000000L",
|
"f_cpu": "48000000L",
|
||||||
"mcu": "samd21g18a",
|
"mcu": "samd21g18a",
|
||||||
"cpu": "cortex-m0plus",
|
"cpu": "cortex-m0plus",
|
||||||
"usb_product": "Arduino M0 Pro",
|
"usb_product": "Arduino M0 Pro",
|
||||||
"variant": "arduino_zero",
|
"variant": "arduino_zero_org",
|
||||||
"ldscript": "samd21g18a_bootloader_org.ld",
|
"ldscript": "samd21g18a_bootloader_org.ld",
|
||||||
"hwids": [
|
"hwids": [
|
||||||
["0x03EB", "0x2111"],
|
["0x2A03", "0x804F"],
|
||||||
["0x2A03", "0x804F"]
|
["0x03EB", "0x2111"]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"frameworks": ["arduino"],
|
"frameworks": ["arduino"],
|
||||||
@@ -986,5 +986,101 @@
|
|||||||
},
|
},
|
||||||
"url": "http://www.arduino.org/products/boards/arduino-m0-pro",
|
"url": "http://www.arduino.org/products/boards/arduino-m0-pro",
|
||||||
"vendor": "Arduino"
|
"vendor": "Arduino"
|
||||||
|
},
|
||||||
|
"mzeroproUSB": {
|
||||||
|
"build": {
|
||||||
|
"core": "arduino_zero_org",
|
||||||
|
"extra_flags": "-DARDUINO_SAMD_ZERO -DARDUINO_ARCH_SAMD -D__SAMD21G18A__",
|
||||||
|
"f_cpu": "48000000L",
|
||||||
|
"mcu": "samd21g18a",
|
||||||
|
"cpu": "cortex-m0plus",
|
||||||
|
"usb_product": "Arduino M0 Pro",
|
||||||
|
"variant": "arduino_zero_org",
|
||||||
|
"ldscript": "samd21g18a_bootloader_org.ld",
|
||||||
|
"hwids": [
|
||||||
|
["0x2A03", "0x804F"],
|
||||||
|
["0x2A03", "0x004F"]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
"name": "Arduino M0 Pro (Native USB Port)",
|
||||||
|
"platform": "atmelsam",
|
||||||
|
"upload": {
|
||||||
|
"disable_flushing": true,
|
||||||
|
"maximum_ram_size": 32768,
|
||||||
|
"maximum_size": 262144,
|
||||||
|
"protocol": "stk500v2",
|
||||||
|
"require_upload_port" : true,
|
||||||
|
"speed": 57600,
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"wait_for_upload_port": true,
|
||||||
|
"section_start": "0x4000"
|
||||||
|
},
|
||||||
|
"url": "http://www.arduino.org/products/boards/arduino-m0-pro",
|
||||||
|
"vendor": "Arduino"
|
||||||
|
},
|
||||||
|
"mzeroUSB": {
|
||||||
|
"build": {
|
||||||
|
"core": "arduino_zero_org",
|
||||||
|
"extra_flags": "-DARDUINO_SAMD_ZERO -DARDUINO_ARCH_SAMD -D__SAMD21G18A__",
|
||||||
|
"f_cpu": "48000000L",
|
||||||
|
"mcu": "samd21g18a",
|
||||||
|
"cpu": "cortex-m0plus",
|
||||||
|
"usb_product": "Arduino M0",
|
||||||
|
"variant": "arduino_zero_org",
|
||||||
|
"ldscript": "samd21g18a_bootloader_org.ld",
|
||||||
|
"hwids": [
|
||||||
|
["0x2A03", "0x804E"],
|
||||||
|
["0x2A03", "0x004E"]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
"name": "Arduino M0",
|
||||||
|
"platform": "atmelsam",
|
||||||
|
"upload": {
|
||||||
|
"disable_flushing": true,
|
||||||
|
"maximum_ram_size": 32768,
|
||||||
|
"maximum_size": 262144,
|
||||||
|
"protocol": "stk500v2",
|
||||||
|
"require_upload_port" : true,
|
||||||
|
"speed": 57600,
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"wait_for_upload_port": true,
|
||||||
|
"section_start": "0x4000"
|
||||||
|
},
|
||||||
|
"url": "http://www.arduino.org/products/boards/arduino-m0",
|
||||||
|
"vendor": "Arduino"
|
||||||
|
},
|
||||||
|
"tian": {
|
||||||
|
"build": {
|
||||||
|
"core": "arduino_zero_org",
|
||||||
|
"extra_flags": "-DARDUINO_SAMD_ZERO -DARDUINO_ARCH_SAMD -D__SAMD21G18A__",
|
||||||
|
"f_cpu": "48000000L",
|
||||||
|
"mcu": "samd21g18a",
|
||||||
|
"cpu": "cortex-m0plus",
|
||||||
|
"usb_product": "Arduino Tian",
|
||||||
|
"variant": "arduino_zero_org",
|
||||||
|
"ldscript": "samd21g18a_bootloader_org.ld",
|
||||||
|
"hwids": [
|
||||||
|
["0x2A03", "0x8052"],
|
||||||
|
["0x10C4", "0xEA70"]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
"name": "Arduino Tian",
|
||||||
|
"platform": "atmelsam",
|
||||||
|
"upload": {
|
||||||
|
"disable_flushing": true,
|
||||||
|
"maximum_ram_size": 32768,
|
||||||
|
"maximum_size": 262144,
|
||||||
|
"protocol": "stk500v2",
|
||||||
|
"require_upload_port" : true,
|
||||||
|
"speed": 57600,
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"wait_for_upload_port": true,
|
||||||
|
"section_start": "0x4000"
|
||||||
|
},
|
||||||
|
"url": "http://www.arduino.org/products/boards/arduino-tian",
|
||||||
|
"vendor": "Arduino"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -236,7 +236,7 @@
|
|||||||
"f_cpu": "80000000L",
|
"f_cpu": "80000000L",
|
||||||
"ldscript": "chipKIT-application-32MX440F512.ld",
|
"ldscript": "chipKIT-application-32MX440F512.ld",
|
||||||
"mcu": "32MX440F512H",
|
"mcu": "32MX440F512H",
|
||||||
"variant": "Default_64"
|
"variant": "PONTECH_UAV100"
|
||||||
},
|
},
|
||||||
"frameworks": ["arduino"],
|
"frameworks": ["arduino"],
|
||||||
"name": "PONTECH UAV100",
|
"name": "PONTECH UAV100",
|
||||||
@@ -510,7 +510,7 @@
|
|||||||
"core": "pic32",
|
"core": "pic32",
|
||||||
"extra_flags": "-D_BOARD_OPENSCOPE_",
|
"extra_flags": "-D_BOARD_OPENSCOPE_",
|
||||||
"f_cpu": "200000000L",
|
"f_cpu": "200000000L",
|
||||||
"ldscript": "MZ-application-32MZ2048ECX.ld",
|
"ldscript": "OpenScope.ld",
|
||||||
"mcu": "32MZ2048EFG124",
|
"mcu": "32MZ2048EFG124",
|
||||||
"variant": "OpenScope"
|
"variant": "OpenScope"
|
||||||
},
|
},
|
||||||
@@ -549,5 +549,28 @@
|
|||||||
},
|
},
|
||||||
"url": "http://shop.openbci.com/",
|
"url": "http://shop.openbci.com/",
|
||||||
"vendor": "OpenBCI"
|
"vendor": "OpenBCI"
|
||||||
|
},
|
||||||
|
|
||||||
|
"lenny": {
|
||||||
|
"build": {
|
||||||
|
"core": "pic32",
|
||||||
|
"extra_flags": "-D_BOARD_LENNY_ -D_USE_USB_FOR_SERIAL_",
|
||||||
|
"f_cpu": "40000000L",
|
||||||
|
"ldscript": "chipKIT-application-32MX270F256.ld",
|
||||||
|
"mcu": "32MX270F256D",
|
||||||
|
"variant": "Lenny"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino"],
|
||||||
|
"name": "chipKIT Lenny",
|
||||||
|
"platform": "microchippic32",
|
||||||
|
"upload": {
|
||||||
|
"maximum_ram_size": 32768,
|
||||||
|
"maximum_size": 122880,
|
||||||
|
"protocol": "stk500v2",
|
||||||
|
"require_upload_port" : true,
|
||||||
|
"speed": 115200
|
||||||
|
},
|
||||||
|
"url": "http://chipkit.net/tag/lenny/",
|
||||||
|
"vendor": "chipKIT"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
from os.path import basename, join
|
from os.path import basename, join
|
||||||
|
|
||||||
from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild, Default,
|
from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild, Builder, Default,
|
||||||
DefaultEnvironment, SConscript)
|
DefaultEnvironment, SConscript)
|
||||||
|
|
||||||
from platformio.util import get_serialports
|
from platformio.util import get_serialports
|
||||||
@@ -103,10 +103,6 @@ if "sam3x8e" in BOARD_OPTIONS.get("build", {}).get("mcu", ""):
|
|||||||
LINKFLAGS=[
|
LINKFLAGS=[
|
||||||
"-Wl,--entry=Reset_Handler",
|
"-Wl,--entry=Reset_Handler",
|
||||||
"-Wl,--start-group"
|
"-Wl,--start-group"
|
||||||
],
|
|
||||||
|
|
||||||
UPLOADERFLAGS=[
|
|
||||||
"--boot",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
)
|
)
|
||||||
@@ -174,6 +170,41 @@ elif upload_protocol == "sam-ba":
|
|||||||
UPLOADCMD='"$UPLOADER" $UPLOADERFLAGS $SOURCES'
|
UPLOADCMD='"$UPLOADER" $UPLOADERFLAGS $SOURCES'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if "sam3x8e" in BOARD_OPTIONS.get("build", {}).get("mcu", ""):
|
||||||
|
env.Append(UPLOADERFLAGS=["--boot"])
|
||||||
|
|
||||||
|
elif upload_protocol == "stk500v2":
|
||||||
|
env.Append(
|
||||||
|
BUILDERS=dict(
|
||||||
|
ElfToHex=Builder(
|
||||||
|
action=" ".join([
|
||||||
|
"$OBJCOPY",
|
||||||
|
"-O",
|
||||||
|
"ihex",
|
||||||
|
"-R",
|
||||||
|
".eeprom",
|
||||||
|
"$SOURCES",
|
||||||
|
"$TARGET"]),
|
||||||
|
suffix=".hex"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
env.Replace(
|
||||||
|
UPLOADER=join("$PIOPACKAGES_DIR", "tool-avrdude", "avrdude"),
|
||||||
|
UPLOADERFLAGS=[
|
||||||
|
"-C", '"%s"' % join("$PIOPACKAGES_DIR",
|
||||||
|
"tool-avrdude", "avrdude.conf"),
|
||||||
|
"-v",
|
||||||
|
"-p", "atmega2560", # Arduino M0/Tian upload hook
|
||||||
|
"-c", "$UPLOAD_PROTOCOL",
|
||||||
|
"-P", '"$UPLOAD_PORT"',
|
||||||
|
"-b", "$UPLOAD_SPEED"
|
||||||
|
],
|
||||||
|
|
||||||
|
UPLOADCMD='"$UPLOADER" $UPLOADERFLAGS -U flash:w:$SOURCES:i'
|
||||||
|
)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Target: Build executable and linkable firmware
|
# Target: Build executable and linkable firmware
|
||||||
#
|
#
|
||||||
@@ -186,6 +217,8 @@ target_elf = env.BuildProgram()
|
|||||||
|
|
||||||
if "uploadlazy" in COMMAND_LINE_TARGETS:
|
if "uploadlazy" in COMMAND_LINE_TARGETS:
|
||||||
target_firm = join("$BUILD_DIR", "firmware.bin")
|
target_firm = join("$BUILD_DIR", "firmware.bin")
|
||||||
|
elif upload_protocol == "stk500v2":
|
||||||
|
target_firm = env.ElfToHex(join("$BUILD_DIR", "firmware"), target_elf)
|
||||||
else:
|
else:
|
||||||
target_firm = env.ElfToBin(join("$BUILD_DIR", "firmware"), target_elf)
|
target_firm = env.ElfToBin(join("$BUILD_DIR", "firmware"), target_elf)
|
||||||
|
|
||||||
|
@@ -115,7 +115,10 @@ elif env.get("PLATFORM") == "microchippic32":
|
|||||||
"$PLATFORMFW_DIR", "variants",
|
"$PLATFORMFW_DIR", "variants",
|
||||||
"${BOARD_OPTIONS['build']['variant']}"
|
"${BOARD_OPTIONS['build']['variant']}"
|
||||||
)
|
)
|
||||||
]
|
],
|
||||||
|
|
||||||
|
CPPDEFINES=["ARDUINO_ARCH_PIC32"]
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
elif "intel" in env.get("PLATFORM"):
|
elif "intel" in env.get("PLATFORM"):
|
||||||
@@ -213,11 +216,21 @@ env.Append(
|
|||||||
if env.subst("${PLATFORMFW_DIR}")[-3:] == "sam":
|
if env.subst("${PLATFORMFW_DIR}")[-3:] == "sam":
|
||||||
env.VariantDirWrap(
|
env.VariantDirWrap(
|
||||||
join("$BUILD_DIR", "FrameworkCMSISInc"),
|
join("$BUILD_DIR", "FrameworkCMSISInc"),
|
||||||
join("$PLATFORMFW_DIR", "system", "CMSIS", "CMSIS", "Include")
|
join(
|
||||||
|
"$PLATFORMFW_DIR", "system",
|
||||||
|
"CMSIS%s" % (
|
||||||
|
"_ORG" if BOARD_CORELIBDIRNAME.endswith("_org") else ""),
|
||||||
|
"CMSIS", "Include"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
env.VariantDirWrap(
|
env.VariantDirWrap(
|
||||||
join("$BUILD_DIR", "FrameworkDeviceInc"),
|
join("$BUILD_DIR", "FrameworkDeviceInc"),
|
||||||
join("$PLATFORMFW_DIR", "system", "CMSIS", "Device", "ATMEL")
|
join(
|
||||||
|
"$PLATFORMFW_DIR", "system",
|
||||||
|
"CMSIS%s" % (
|
||||||
|
"_ORG" if BOARD_CORELIBDIRNAME.endswith("_org") else ""),
|
||||||
|
"Device", "ATMEL"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
env.VariantDirWrap(
|
env.VariantDirWrap(
|
||||||
join("$BUILD_DIR", "FrameworkLibSam"),
|
join("$BUILD_DIR", "FrameworkLibSam"),
|
||||||
|
@@ -86,7 +86,7 @@ MBED_LIBS_MAP = {
|
|||||||
|
|
||||||
def get_mbedlib_includes():
|
def get_mbedlib_includes():
|
||||||
result = []
|
result = []
|
||||||
for lib in MBED_LIBS_MAP.keys():
|
for lib in MBED_LIBS_MAP:
|
||||||
includes = []
|
includes = []
|
||||||
lib_dir = join(env.subst("$PLATFORMFW_DIR"), "libs", lib)
|
lib_dir = join(env.subst("$PLATFORMFW_DIR"), "libs", lib)
|
||||||
for _, _, files in walk(lib_dir):
|
for _, _, files in walk(lib_dir):
|
||||||
|
@@ -202,7 +202,9 @@ def DumpIDEData(env):
|
|||||||
def get_defines(env_):
|
def get_defines(env_):
|
||||||
defines = []
|
defines = []
|
||||||
# global symbols
|
# global symbols
|
||||||
for item in env.Flatten(env_.get("CPPDEFINES", [])):
|
for item in env_.get("CPPDEFINES", []):
|
||||||
|
if isinstance(item, list) or isinstance(item, tuple):
|
||||||
|
item = "=".join(item)
|
||||||
defines.append(env_.subst(item).replace('\\"', '"'))
|
defines.append(env_.subst(item).replace('\\"', '"'))
|
||||||
|
|
||||||
# special symbol for Atmel AVR MCU
|
# special symbol for Atmel AVR MCU
|
||||||
@@ -224,13 +226,17 @@ def DumpIDEData(env):
|
|||||||
"includes": get_includes(env_),
|
"includes": get_includes(env_),
|
||||||
"cc_flags": env_.subst(LINTCCOM),
|
"cc_flags": env_.subst(LINTCCOM),
|
||||||
"cxx_flags": env_.subst(LINTCXXCOM),
|
"cxx_flags": env_.subst(LINTCXXCOM),
|
||||||
|
"cc_path": where_is_program(
|
||||||
|
env_.subst("$CC"), env_.subst("${ENV['PATH']}")),
|
||||||
"cxx_path": where_is_program(
|
"cxx_path": where_is_program(
|
||||||
env_.subst("$CXX"), env_.subst("${ENV['PATH']}"))
|
env_.subst("$CXX"), env_.subst("${ENV['PATH']}"))
|
||||||
}
|
}
|
||||||
|
|
||||||
# https://github.com/platformio/platformio-atom-ide/issues/34
|
# https://github.com/platformio/platformio-atom-ide/issues/34
|
||||||
_new_defines = []
|
_new_defines = []
|
||||||
for item in env.Flatten(env_.get("CPPDEFINES", [])):
|
for item in env_.get("CPPDEFINES", []):
|
||||||
|
if isinstance(item, list) or isinstance(item, tuple):
|
||||||
|
item = "=".join(item)
|
||||||
item = item.replace('\\"', '"')
|
item = item.replace('\\"', '"')
|
||||||
if " " in item:
|
if " " in item:
|
||||||
_new_defines.append(item.replace(" ", "\\\\ "))
|
_new_defines.append(item.replace(" ", "\\\\ "))
|
||||||
|
@@ -39,15 +39,12 @@ def FlushSerialBuffer(env, port):
|
|||||||
def TouchSerialPort(env, port, baudrate):
|
def TouchSerialPort(env, port, baudrate):
|
||||||
port = env.subst(port)
|
port = env.subst(port)
|
||||||
print "Forcing reset using %dbps open/close on port %s" % (baudrate, port)
|
print "Forcing reset using %dbps open/close on port %s" % (baudrate, port)
|
||||||
if system() != "Windows":
|
|
||||||
try:
|
try:
|
||||||
s = Serial(port)
|
|
||||||
s.close()
|
|
||||||
except: # pylint: disable=W0702
|
|
||||||
pass
|
|
||||||
s = Serial(port=port, baudrate=baudrate)
|
s = Serial(port=port, baudrate=baudrate)
|
||||||
s.setDTR(False)
|
s.setDTR(False)
|
||||||
s.close()
|
s.close()
|
||||||
|
except: # pylint: disable=W0702
|
||||||
|
pass
|
||||||
sleep(0.4)
|
sleep(0.4)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -154,7 +154,7 @@ def ProcessUnFlags(env, flags):
|
|||||||
all_flags.extend(items)
|
all_flags.extend(items)
|
||||||
all_flags = set(all_flags)
|
all_flags = set(all_flags)
|
||||||
|
|
||||||
for key in parsed_flags.keys():
|
for key in parsed_flags:
|
||||||
cur_flags = set(env.get(key, []))
|
cur_flags = set(env.get(key, []))
|
||||||
for item in cur_flags & all_flags:
|
for item in cur_flags & all_flags:
|
||||||
while item in env[key]:
|
while item in env[key]:
|
||||||
|
@@ -27,6 +27,12 @@ from platformio.commands.run import cli as cmd_run
|
|||||||
from platformio.exception import CIBuildEnvsEmpty
|
from platformio.exception import CIBuildEnvsEmpty
|
||||||
from platformio.util import get_boards
|
from platformio.util import get_boards
|
||||||
|
|
||||||
|
# pylint: disable=wrong-import-order
|
||||||
|
try:
|
||||||
|
from configparser import ConfigParser
|
||||||
|
except ImportError:
|
||||||
|
from ConfigParser import ConfigParser
|
||||||
|
|
||||||
|
|
||||||
def validate_path(ctx, param, value): # pylint: disable=W0613
|
def validate_path(ctx, param, value): # pylint: disable=W0613
|
||||||
invalid_path = None
|
invalid_path = None
|
||||||
@@ -91,7 +97,7 @@ def cli(ctx, src, lib, exclude, board, # pylint: disable=R0913
|
|||||||
_copy_contents(join(build_dir, dir_name), contents)
|
_copy_contents(join(build_dir, dir_name), contents)
|
||||||
|
|
||||||
if project_conf and isfile(project_conf):
|
if project_conf and isfile(project_conf):
|
||||||
copyfile(project_conf, join(build_dir, "platformio.ini"))
|
_copy_project_conf(build_dir, project_conf)
|
||||||
elif not board:
|
elif not board:
|
||||||
raise CIBuildEnvsEmpty()
|
raise CIBuildEnvsEmpty()
|
||||||
|
|
||||||
@@ -157,3 +163,12 @@ def _exclude_contents(dst_dir, patterns):
|
|||||||
rmtree(path)
|
rmtree(path)
|
||||||
elif isfile(path):
|
elif isfile(path):
|
||||||
remove(path)
|
remove(path)
|
||||||
|
|
||||||
|
|
||||||
|
def _copy_project_conf(build_dir, project_conf):
|
||||||
|
cp = ConfigParser()
|
||||||
|
cp.read(project_conf)
|
||||||
|
if cp.has_section("platformio"):
|
||||||
|
cp.remove_section("platformio")
|
||||||
|
with open(join(build_dir, "platformio.ini"), "w") as fp:
|
||||||
|
cp.write(fp)
|
||||||
|
@@ -23,11 +23,10 @@ from platformio.commands.platforms import \
|
|||||||
platforms_install as cli_platforms_install
|
platforms_install as cli_platforms_install
|
||||||
from platformio.ide.projectgenerator import ProjectGenerator
|
from platformio.ide.projectgenerator import ProjectGenerator
|
||||||
from platformio.platforms.base import PlatformFactory
|
from platformio.platforms.base import PlatformFactory
|
||||||
from platformio.util import get_boards, get_source_dir
|
|
||||||
|
|
||||||
|
|
||||||
def validate_boards(ctx, param, value): # pylint: disable=W0613
|
def validate_boards(ctx, param, value): # pylint: disable=W0613
|
||||||
unknown_boards = set(value) - set(get_boards().keys())
|
unknown_boards = set(value) - set(util.get_boards().keys())
|
||||||
try:
|
try:
|
||||||
assert not unknown_boards
|
assert not unknown_boards
|
||||||
return value
|
return value
|
||||||
@@ -84,6 +83,10 @@ def cli(ctx, project_dir, board, ide, # pylint: disable=R0913
|
|||||||
)
|
)
|
||||||
|
|
||||||
if ide:
|
if ide:
|
||||||
|
if not board:
|
||||||
|
board = get_first_board(project_dir)
|
||||||
|
if board:
|
||||||
|
board = [board]
|
||||||
if not board:
|
if not board:
|
||||||
raise exception.BoardNotDefined()
|
raise exception.BoardNotDefined()
|
||||||
if len(board) > 1:
|
if len(board) > 1:
|
||||||
@@ -95,8 +98,7 @@ def cli(ctx, project_dir, board, ide, # pylint: disable=R0913
|
|||||||
" '%s'." % (board[0], ", ".join(board)),
|
" '%s'." % (board[0], ", ".join(board)),
|
||||||
fg="yellow"
|
fg="yellow"
|
||||||
)
|
)
|
||||||
pg = ProjectGenerator(
|
pg = ProjectGenerator(project_dir, ide, board[0])
|
||||||
project_dir, ide, board[0])
|
|
||||||
pg.generate()
|
pg.generate()
|
||||||
|
|
||||||
click.secho(
|
click.secho(
|
||||||
@@ -112,10 +114,21 @@ def cli(ctx, project_dir, board, ide, # pylint: disable=R0913
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_first_board(project_dir):
|
||||||
|
with util.cd(project_dir):
|
||||||
|
config = util.get_project_config()
|
||||||
|
for section in config.sections():
|
||||||
|
if not section.startswith("env:"):
|
||||||
|
continue
|
||||||
|
elif config.has_option(section, "board"):
|
||||||
|
return config.get(section, "board")
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def init_base_project(project_dir):
|
def init_base_project(project_dir):
|
||||||
platformio_ini = join(project_dir, "platformio.ini")
|
platformio_ini = join(project_dir, "platformio.ini")
|
||||||
if not isfile(platformio_ini):
|
if not isfile(platformio_ini):
|
||||||
copyfile(join(get_source_dir(), "projectconftpl.ini"),
|
copyfile(join(util.get_source_dir(), "projectconftpl.ini"),
|
||||||
platformio_ini)
|
platformio_ini)
|
||||||
|
|
||||||
lib_dir = join(project_dir, "lib")
|
lib_dir = join(project_dir, "lib")
|
||||||
@@ -260,7 +273,7 @@ def init_cvs_ignore(project_dir):
|
|||||||
def fill_project_envs( # pylint: disable=too-many-arguments,too-many-locals
|
def fill_project_envs( # pylint: disable=too-many-arguments,too-many-locals
|
||||||
ctx, platformio_ini, board_types, enable_auto_uploading,
|
ctx, platformio_ini, board_types, enable_auto_uploading,
|
||||||
env_prefix, force_download):
|
env_prefix, force_download):
|
||||||
builtin_boards = get_boards()
|
builtin_boards = util.get_boards()
|
||||||
content = []
|
content = []
|
||||||
used_boards = []
|
used_boards = []
|
||||||
used_platforms = []
|
used_platforms = []
|
||||||
|
@@ -153,7 +153,7 @@ def lib_install(ctx, libid, version):
|
|||||||
def lib_install_dependency(ctx, data):
|
def lib_install_dependency(ctx, data):
|
||||||
assert isinstance(data, dict)
|
assert isinstance(data, dict)
|
||||||
query = []
|
query = []
|
||||||
for key in data.keys():
|
for key in data:
|
||||||
if key in ("authors", "frameworks", "platforms", "keywords"):
|
if key in ("authors", "frameworks", "platforms", "keywords"):
|
||||||
values = data[key]
|
values = data[key]
|
||||||
if not isinstance(values, list):
|
if not isinstance(values, list):
|
||||||
|
@@ -21,7 +21,7 @@ from time import time
|
|||||||
|
|
||||||
import click
|
import click
|
||||||
|
|
||||||
from platformio import app, exception, telemetry, util
|
from platformio import __version__, app, exception, telemetry, util
|
||||||
from platformio.commands.lib import lib_install as cmd_lib_install
|
from platformio.commands.lib import lib_install as cmd_lib_install
|
||||||
from platformio.libmanager import LibraryManager
|
from platformio.libmanager import LibraryManager
|
||||||
from platformio.platforms.base import PlatformFactory
|
from platformio.platforms.base import PlatformFactory
|
||||||
@@ -243,7 +243,7 @@ def _clean_pioenvs_dir(pioenvs_dir):
|
|||||||
|
|
||||||
|
|
||||||
def calculate_project_hash():
|
def calculate_project_hash():
|
||||||
structure = []
|
structure = [__version__]
|
||||||
for d in (util.get_projectsrc_dir(), util.get_projectlib_dir()):
|
for d in (util.get_projectsrc_dir(), util.get_projectlib_dir()):
|
||||||
if not isdir(d):
|
if not isdir(d):
|
||||||
continue
|
continue
|
||||||
|
@@ -16,11 +16,10 @@ import json
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
from os.path import (abspath, basename, expanduser, isdir, join, normpath,
|
from os.path import (abspath, basename, expanduser, isdir, isfile, join,
|
||||||
relpath)
|
normpath, relpath)
|
||||||
|
|
||||||
import bottle
|
import bottle
|
||||||
import click # pylint: disable=wrong-import-order
|
|
||||||
|
|
||||||
from platformio import app, exception, util
|
from platformio import app, exception, util
|
||||||
|
|
||||||
@@ -33,6 +32,9 @@ class ProjectGenerator(object):
|
|||||||
self.board = board
|
self.board = board
|
||||||
self._tplvars = {}
|
self._tplvars = {}
|
||||||
|
|
||||||
|
with util.cd(self.project_dir):
|
||||||
|
self.project_src_dir = util.get_projectsrc_dir()
|
||||||
|
|
||||||
self._gather_tplvars()
|
self._gather_tplvars()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -95,7 +97,7 @@ class ProjectGenerator(object):
|
|||||||
def get_src_files(self):
|
def get_src_files(self):
|
||||||
result = []
|
result = []
|
||||||
with util.cd(self.project_dir):
|
with util.cd(self.project_dir):
|
||||||
for root, _, files in os.walk(util.get_projectsrc_dir()):
|
for root, _, files in os.walk(self.project_src_dir):
|
||||||
for f in files:
|
for f in files:
|
||||||
result.append(relpath(join(root, f)))
|
result.append(relpath(join(root, f)))
|
||||||
return result
|
return result
|
||||||
@@ -114,16 +116,18 @@ class ProjectGenerator(object):
|
|||||||
return tpls
|
return tpls
|
||||||
|
|
||||||
def generate(self):
|
def generate(self):
|
||||||
for _relpath, _path in self.get_tpls():
|
for tpl_relpath, tpl_path in self.get_tpls():
|
||||||
tpl_dir = self.project_dir
|
dst_dir = self.project_dir
|
||||||
if _relpath:
|
if tpl_relpath:
|
||||||
tpl_dir = join(self.project_dir, _relpath)
|
dst_dir = join(self.project_dir, tpl_relpath)
|
||||||
if not isdir(tpl_dir):
|
if not isdir(dst_dir):
|
||||||
os.makedirs(tpl_dir)
|
os.makedirs(dst_dir)
|
||||||
|
|
||||||
file_name = basename(_path)[:-4]
|
file_name = basename(tpl_path)[:-4]
|
||||||
with open(join(tpl_dir, file_name), "w") as f:
|
self._merge_contents(
|
||||||
f.write(self._render_tpl(_path).encode("utf8"))
|
join(dst_dir, file_name),
|
||||||
|
self._render_tpl(tpl_path).encode("utf8")
|
||||||
|
)
|
||||||
|
|
||||||
def _render_tpl(self, tpl_path):
|
def _render_tpl(self, tpl_path):
|
||||||
content = ""
|
content = ""
|
||||||
@@ -131,25 +135,32 @@ class ProjectGenerator(object):
|
|||||||
content = f.read()
|
content = f.read()
|
||||||
return bottle.template(content, **self._tplvars)
|
return bottle.template(content, **self._tplvars)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _merge_contents(dst_path, contents):
|
||||||
|
file_name = basename(dst_path)
|
||||||
|
|
||||||
|
# merge .gitignore
|
||||||
|
if file_name == ".gitignore" and isfile(dst_path):
|
||||||
|
contents = [l.strip() for l in contents.split("\n") if l.strip()]
|
||||||
|
with open(dst_path) as f:
|
||||||
|
for line in f.readlines():
|
||||||
|
line = line.strip()
|
||||||
|
if line and line not in contents:
|
||||||
|
contents.append(line)
|
||||||
|
contents = "\n".join(contents)
|
||||||
|
|
||||||
|
with open(dst_path, "w") as f:
|
||||||
|
f.write(contents)
|
||||||
|
|
||||||
def _gather_tplvars(self):
|
def _gather_tplvars(self):
|
||||||
src_files = self.get_src_files()
|
|
||||||
|
|
||||||
if (not any([f.endswith((".c", ".cpp")) for f in src_files]) and
|
|
||||||
self.ide == "clion"):
|
|
||||||
click.secho(
|
|
||||||
"Warning! Can not find main source file (*.c, *.cpp). So, "
|
|
||||||
"code auto-completion is disabled. Please add source files "
|
|
||||||
"to `src` directory and re-initialize project or edit "
|
|
||||||
"`CMakeLists.txt` file manually (`add_executable` command).",
|
|
||||||
fg="yellow")
|
|
||||||
|
|
||||||
self._tplvars.update(self.get_project_env())
|
self._tplvars.update(self.get_project_env())
|
||||||
self._tplvars.update(self.get_project_build_data())
|
self._tplvars.update(self.get_project_build_data())
|
||||||
self._tplvars.update({
|
self._tplvars.update({
|
||||||
"project_name": self.get_project_name(),
|
"project_name": self.get_project_name(),
|
||||||
"src_files": src_files,
|
"src_files": self.get_src_files(),
|
||||||
"user_home_dir": abspath(expanduser("~")),
|
"user_home_dir": abspath(expanduser("~")),
|
||||||
"project_dir": self.project_dir,
|
"project_dir": self.project_dir,
|
||||||
|
"project_src_dir": self.project_src_dir,
|
||||||
"systype": util.get_systype(),
|
"systype": util.get_systype(),
|
||||||
"platformio_path": self._fix_os_path(
|
"platformio_path": self._fix_os_path(
|
||||||
util.where_is_program("platformio")),
|
util.where_is_program("platformio")),
|
||||||
|
61
platformio/ide/tpls/clion/.idea/workspace.xml.tpl
generated
61
platformio/ide/tpls/clion/.idea/workspace.xml.tpl
generated
@@ -10,6 +10,7 @@
|
|||||||
<config projectName="{{project_name}}" targetName="PLATFORMIO_PROGRAM" />
|
<config projectName="{{project_name}}" targetName="PLATFORMIO_PROGRAM" />
|
||||||
<config projectName="{{project_name}}" targetName="PLATFORMIO_UPLOADFS" />
|
<config projectName="{{project_name}}" targetName="PLATFORMIO_UPLOADFS" />
|
||||||
<config projectName="{{project_name}}" targetName="PLATFORMIO_UPDATE_ALL" />
|
<config projectName="{{project_name}}" targetName="PLATFORMIO_UPDATE_ALL" />
|
||||||
|
<config projectName="{{project_name}}" targetName="PLATFORMIO_REBUILD_PROJECT_INDEX" />
|
||||||
<config projectName="{{project_name}}" targetName="DEBUG" />
|
<config projectName="{{project_name}}" targetName="DEBUG" />
|
||||||
</generated>
|
</generated>
|
||||||
</component>
|
</component>
|
||||||
@@ -39,26 +40,12 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="FileEditorManager">
|
<component name="FileEditorManager">
|
||||||
<leaf>
|
<leaf>
|
||||||
<file leaf-file-name="CMakeLists.txt" pinned="false" current-in-tab="true">
|
<file leaf-file-name="platformio.ini" pinned="false" current-in-tab="true">
|
||||||
<entry file="file://$PROJECT_DIR$/CMakeLists.txt">
|
<entry file="file://$PROJECT_DIR$/platformio.ini"></entry>
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state vertical-scroll-proportion="0.15758981">
|
|
||||||
<caret line="8" column="49" selection-start-line="8" selection-start-column="49" selection-end-line="8" selection-end-column="49" />
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
</file>
|
||||||
% for file in src_files:
|
% for file in src_files:
|
||||||
<file leaf-file-name="{{file}}" pinned="false" current-in-tab="false">
|
<file leaf-file-name="file://$PROJECT_DIR$/{{file}}" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR/${{file}}">
|
<entry file="file://$PROJECT_DIR/${{file}}"></entry>
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state vertical-scroll-proportion="0.0">
|
|
||||||
<caret line="24" column="4" selection-start-line="24" selection-start-column="4" selection-end-line="24" selection-end-column="4" />
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
</file>
|
||||||
% end
|
% end
|
||||||
</leaf>
|
</leaf>
|
||||||
@@ -113,6 +100,8 @@
|
|||||||
<autoscrollToSource />
|
<autoscrollToSource />
|
||||||
<autoscrollFromSource />
|
<autoscrollFromSource />
|
||||||
<sortByType />
|
<sortByType />
|
||||||
|
<manualOrder />
|
||||||
|
<foldersAlwaysOnTop value="true" />
|
||||||
</navigator>
|
</navigator>
|
||||||
<panes>
|
<panes>
|
||||||
<pane id="ProjectPane">
|
<pane id="ProjectPane">
|
||||||
@@ -120,13 +109,13 @@
|
|||||||
<PATH>
|
<PATH>
|
||||||
<PATH_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="{{project_name}}" />
|
<option name="myItemId" value="{{project_name}}" />
|
||||||
<option name="myItemType" value="com.jetbrains.cidr.projectView.CidrFilesViewHelper$1$1" />
|
<option name="myItemType" value="com.jetbrains.cidr.projectView.CidrFilesViewHelper$MyProjectTreeStructure$1" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
</PATH>
|
</PATH>
|
||||||
<PATH>
|
<PATH>
|
||||||
<PATH_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="{{project_name}}" />
|
<option name="myItemId" value="{{project_name}}" />
|
||||||
<option name="myItemType" value="com.jetbrains.cidr.projectView.CidrFilesViewHelper$1$1" />
|
<option name="myItemType" value="com.jetbrains.cidr.projectView.CidrFilesViewHelper$MyProjectTreeStructure$1" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
<PATH_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="{{project_name}}" />
|
<option name="myItemId" value="{{project_name}}" />
|
||||||
@@ -136,7 +125,7 @@
|
|||||||
<PATH>
|
<PATH>
|
||||||
<PATH_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="{{project_name}}" />
|
<option name="myItemId" value="{{project_name}}" />
|
||||||
<option name="myItemType" value="com.jetbrains.cidr.projectView.CidrFilesViewHelper$1$1" />
|
<option name="myItemType" value="com.jetbrains.cidr.projectView.CidrFilesViewHelper$MyProjectTreeStructure$1" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
<PATH_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="{{project_name}}" />
|
<option name="myItemId" value="{{project_name}}" />
|
||||||
@@ -155,7 +144,7 @@
|
|||||||
<property name="recentsLimit" value="5" />
|
<property name="recentsLimit" value="5" />
|
||||||
<property name="settings.editor.selected.configurable" value="CPPToolchains" />
|
<property name="settings.editor.selected.configurable" value="CPPToolchains" />
|
||||||
<property name="settings.editor.splitter.proportion" value="0.2" />
|
<property name="settings.editor.splitter.proportion" value="0.2" />
|
||||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/CMakeLists.txt" />
|
<property name="last_opened_file_path" value="$PROJECT_DIR$/platformio.ini" />
|
||||||
<property name="restartRequiresConfirmation" value="true" />
|
<property name="restartRequiresConfirmation" value="true" />
|
||||||
<property name="FullScreen" value="false" />
|
<property name="FullScreen" value="false" />
|
||||||
</component>
|
</component>
|
||||||
@@ -201,7 +190,11 @@
|
|||||||
<envs />
|
<envs />
|
||||||
<method />
|
<method />
|
||||||
</configuration>
|
</configuration>
|
||||||
<list size="7">
|
<configuration default="false" name="PLATFORMIO_REBUILD_PROJECT_INDEX" type="CMakeRunConfiguration" factoryName="Application" WORKING_DIR="" PASS_PARENT_ENVS="FALSE" PROJECT_NAME="{{project_name}}" TARGET_NAME="PLATFORMIO_REBUILD_PROJECT_INDEX" CONFIG_NAME="Debug">
|
||||||
|
<envs />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
<list size="8">
|
||||||
<item index="0" class="java.lang.String" itemvalue="Application.Build All" />
|
<item index="0" class="java.lang.String" itemvalue="Application.Build All" />
|
||||||
<item index="1" class="java.lang.String" itemvalue="Application.PLATFORMIO_BUILD" />
|
<item index="1" class="java.lang.String" itemvalue="Application.PLATFORMIO_BUILD" />
|
||||||
<item index="3" class="java.lang.String" itemvalue="Application.PLATFORMIO_UPLOAD" />
|
<item index="3" class="java.lang.String" itemvalue="Application.PLATFORMIO_UPLOAD" />
|
||||||
@@ -209,6 +202,7 @@
|
|||||||
<item index="5" class="java.lang.String" itemvalue="Application.PLATFORMIO_PROGRAM" />
|
<item index="5" class="java.lang.String" itemvalue="Application.PLATFORMIO_PROGRAM" />
|
||||||
<item index="4" class="java.lang.String" itemvalue="Application.PLATFORMIO_UPLOADFS" />
|
<item index="4" class="java.lang.String" itemvalue="Application.PLATFORMIO_UPLOADFS" />
|
||||||
<item index="6" class="java.lang.String" itemvalue="Application.PLATFORMIO_UPDATE" />
|
<item index="6" class="java.lang.String" itemvalue="Application.PLATFORMIO_UPDATE" />
|
||||||
|
<item index="7" class="java.lang.String" itemvalue="Application.PLATFORMIO_REBUILD_PROJECT_INDEX" />
|
||||||
</list>
|
</list>
|
||||||
</component>
|
</component>
|
||||||
<component name="ShelveChangesManager" show_recycled="false" />
|
<component name="ShelveChangesManager" show_recycled="false" />
|
||||||
@@ -225,27 +219,10 @@
|
|||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="ToolWindowManager">
|
<component name="ToolWindowManager">
|
||||||
<frame x="252" y="21" width="1400" height="1000" extended-state="0" />
|
<frame x="181" y="23" width="1400" height="1000" extended-state="0" />
|
||||||
<editor active="true" />
|
<editor active="true" />
|
||||||
<layout>
|
<layout>
|
||||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.25" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
|
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.24945612" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||||
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="CMake" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32996634" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32996634" sideWeight="0.4631503" order="7" side_tool="true" content_ui="tabs" />
|
|
||||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32996634" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32996634" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
|
|
||||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32996634" sideWeight="0.53684974" order="7" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
|
||||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
|
||||||
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
|
||||||
</layout>
|
</layout>
|
||||||
</component>
|
</component>
|
||||||
<component name="Vcs.Log.UiProperties">
|
<component name="Vcs.Log.UiProperties">
|
||||||
|
@@ -3,10 +3,6 @@ project({{project_name}})
|
|||||||
|
|
||||||
include(CMakeListsPrivate.txt)
|
include(CMakeListsPrivate.txt)
|
||||||
|
|
||||||
% for define in defines:
|
|
||||||
add_definitions(-D{{!define}})
|
|
||||||
% end
|
|
||||||
|
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
PLATFORMIO_BUILD ALL
|
PLATFORMIO_BUILD ALL
|
||||||
COMMAND ${PLATFORMIO_CMD} -f -c clion run
|
COMMAND ${PLATFORMIO_CMD} -f -c clion run
|
||||||
@@ -43,18 +39,10 @@ add_custom_target(
|
|||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
% if src_files and any([f.endswith((".c", ".cpp")) for f in src_files]):
|
add_custom_target(
|
||||||
add_executable({{project_name}}
|
PLATFORMIO_REBUILD_PROJECT_INDEX ALL
|
||||||
% for f in src_files:
|
COMMAND ${PLATFORMIO_CMD} -f -c clion init --ide clion
|
||||||
% if f.endswith((".c", ".cpp")):
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
{{f.replace("\\", "/")}}
|
|
||||||
% end
|
|
||||||
% end
|
|
||||||
)
|
)
|
||||||
% else:
|
|
||||||
#
|
add_executable(${PROJECT_NAME} ${SRC_LIST})
|
||||||
# To enable code auto-completion, please specify path
|
|
||||||
# to main source file (*.c, *.cpp) and uncomment line below
|
|
||||||
#
|
|
||||||
# add_executable({{project_name}} src/main_change_me.cpp)
|
|
||||||
% end
|
|
||||||
|
@@ -1,6 +1,15 @@
|
|||||||
set(ENV{PATH} "{{env_path}}")
|
set(ENV{PATH} "{{env_path}}")
|
||||||
set(PLATFORMIO_CMD "{{platformio_path}}")
|
set(PLATFORMIO_CMD "{{platformio_path}}")
|
||||||
|
|
||||||
|
SET(CMAKE_C_COMPILER "{{cc_path}}")
|
||||||
|
SET(CMAKE_CXX_COMPILER "{{cxx_path}}")
|
||||||
|
SET(CMAKE_CXX_FLAGS_DISTRIBUTION "{{cxx_flags}}")
|
||||||
|
SET(CMAKE_C_FLAGS_DISTRIBUTION "{{cc_flags}}")
|
||||||
|
|
||||||
|
% for define in defines:
|
||||||
|
add_definitions(-D{{!define}})
|
||||||
|
% end
|
||||||
|
|
||||||
% for include in includes:
|
% for include in includes:
|
||||||
% if include.startswith(user_home_dir):
|
% if include.startswith(user_home_dir):
|
||||||
% if "windows" in systype:
|
% if "windows" in systype:
|
||||||
@@ -12,3 +21,5 @@ include_directories("$ENV{HOME}{{include.replace(user_home_dir, '').replace("\\"
|
|||||||
include_directories("{{include.replace("\\", "/")}}")
|
include_directories("{{include.replace("\\", "/")}}")
|
||||||
% end
|
% end
|
||||||
% end
|
% end
|
||||||
|
|
||||||
|
aux_source_directory({{project_src_dir}} SRC_LIST)
|
||||||
|
@@ -166,6 +166,14 @@
|
|||||||
<useDefaultCommand>true</useDefaultCommand>
|
<useDefaultCommand>true</useDefaultCommand>
|
||||||
<runAllBuilders>false</runAllBuilders>
|
<runAllBuilders>false</runAllBuilders>
|
||||||
</target>
|
</target>
|
||||||
|
<target name="PlatformIO: Rebuild C/C++ Project Index" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||||
|
<buildCommand>platformio</buildCommand>
|
||||||
|
<buildArguments>-f -c eclipse</buildArguments>
|
||||||
|
<buildTarget>init --ide eclipse</buildTarget>
|
||||||
|
<stopOnError>true</stopOnError>
|
||||||
|
<useDefaultCommand>true</useDefaultCommand>
|
||||||
|
<runAllBuilders>false</runAllBuilders>
|
||||||
|
</target>
|
||||||
</buildTargets>
|
</buildTargets>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
</cproject>
|
</cproject>
|
||||||
|
@@ -17,10 +17,12 @@ INCLUDEPATH += "{{include}}"
|
|||||||
DEFINES += "{{define}}"
|
DEFINES += "{{define}}"
|
||||||
% end
|
% end
|
||||||
|
|
||||||
OTHER_FILES += \
|
OTHER_FILES += platformio.ini
|
||||||
platformio.ini
|
|
||||||
|
|
||||||
SOURCES += \
|
% for file in src_files:
|
||||||
% for file in src_files:
|
% if file.endswith((".h", ".hpp")):
|
||||||
{{file}}
|
HEADERS += {{file}}
|
||||||
% end
|
% else:
|
||||||
|
SOURCES += {{file}}
|
||||||
|
% end
|
||||||
|
% end
|
||||||
|
@@ -101,7 +101,7 @@ class Upgrader(object):
|
|||||||
prev_platforms = []
|
prev_platforms = []
|
||||||
|
|
||||||
# remove platform's folder (obsolete package structure)
|
# remove platform's folder (obsolete package structure)
|
||||||
for name in PlatformFactory.get_platforms().keys():
|
for name in PlatformFactory.get_platforms():
|
||||||
pdir = join(get_home_dir(), name)
|
pdir = join(get_home_dir(), name)
|
||||||
if not isdir(pdir):
|
if not isdir(pdir):
|
||||||
continue
|
continue
|
||||||
@@ -234,7 +234,7 @@ def check_internal_updates(ctx, what):
|
|||||||
|
|
||||||
outdated_items = []
|
outdated_items = []
|
||||||
if what == "platforms":
|
if what == "platforms":
|
||||||
for platform in PlatformFactory.get_platforms(installed=True).keys():
|
for platform in PlatformFactory.get_platforms(installed=True):
|
||||||
p = PlatformFactory.newPlatform(platform)
|
p = PlatformFactory.newPlatform(platform)
|
||||||
if p.is_outdated():
|
if p.is_outdated():
|
||||||
outdated_items.append(platform)
|
outdated_items.append(platform)
|
||||||
|
@@ -36,11 +36,9 @@ class AtmelavrPlatform(BasePlatform):
|
|||||||
},
|
},
|
||||||
|
|
||||||
"tool-avrdude": {
|
"tool-avrdude": {
|
||||||
"alias": "uploader"
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"tool-micronucleus": {
|
"tool-micronucleus": {
|
||||||
"alias": "uploader"
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"framework-arduinoavr": {
|
"framework-arduinoavr": {
|
||||||
@@ -58,10 +56,10 @@ class AtmelavrPlatform(BasePlatform):
|
|||||||
def configure_default_packages(self, envoptions, targets):
|
def configure_default_packages(self, envoptions, targets):
|
||||||
if envoptions.get("board"):
|
if envoptions.get("board"):
|
||||||
board = get_boards(envoptions.get("board"))
|
board = get_boards(envoptions.get("board"))
|
||||||
disable_tool = "tool-micronucleus"
|
|
||||||
if "digispark" in board['build']['core']:
|
if "digispark" in board['build']['core']:
|
||||||
disable_tool = "tool-avrdude"
|
self.PACKAGES['tool-micronucleus']['alias'] = "uploader"
|
||||||
del self.PACKAGES[disable_tool]['alias']
|
else:
|
||||||
|
self.PACKAGES['tool-avrdude']['alias'] = "uploader"
|
||||||
|
|
||||||
return BasePlatform.configure_default_packages(
|
return BasePlatform.configure_default_packages(
|
||||||
self, envoptions, targets)
|
self, envoptions, targets)
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from platformio.platforms.base import BasePlatform
|
from platformio.platforms.base import BasePlatform
|
||||||
|
from platformio.util import get_boards
|
||||||
|
|
||||||
|
|
||||||
class AtmelsamPlatform(BasePlatform):
|
class AtmelsamPlatform(BasePlatform):
|
||||||
@@ -49,13 +50,32 @@ class AtmelsamPlatform(BasePlatform):
|
|||||||
},
|
},
|
||||||
|
|
||||||
"tool-bossac": {
|
"tool-bossac": {
|
||||||
"alias": "uploader"
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"tool-openocd": {
|
"tool-openocd": {
|
||||||
"alias": "uploader"
|
},
|
||||||
|
|
||||||
|
"tool-avrdude": {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_name(self):
|
def get_name(self):
|
||||||
return "Atmel SAM"
|
return "Atmel SAM"
|
||||||
|
|
||||||
|
def configure_default_packages(self, envoptions, targets):
|
||||||
|
if envoptions.get("board"):
|
||||||
|
board = get_boards(envoptions.get("board"))
|
||||||
|
upload_protocol = board.get("upload", {}).get("protocol", None)
|
||||||
|
upload_tool = None
|
||||||
|
if upload_protocol == "openocd":
|
||||||
|
upload_tool = "tool-openocd"
|
||||||
|
elif upload_protocol == "sam-ba":
|
||||||
|
upload_tool = "tool-bossac"
|
||||||
|
elif upload_protocol == "stk500v2":
|
||||||
|
upload_tool = "tool-avrdude"
|
||||||
|
|
||||||
|
if upload_tool:
|
||||||
|
self.PACKAGES[upload_tool]['alias'] = "uploader"
|
||||||
|
|
||||||
|
return BasePlatform.configure_default_packages(
|
||||||
|
self, envoptions, targets)
|
||||||
|
@@ -330,7 +330,7 @@ class BasePlatform(object):
|
|||||||
|
|
||||||
def get_installed_packages(self):
|
def get_installed_packages(self):
|
||||||
pm = PackageManager()
|
pm = PackageManager()
|
||||||
return [n for n in self.get_packages().keys() if pm.is_installed(n)]
|
return [n for n in self.get_packages() if pm.is_installed(n)]
|
||||||
|
|
||||||
def install(self, with_packages=None, without_packages=None,
|
def install(self, with_packages=None, without_packages=None,
|
||||||
skip_default_packages=False):
|
skip_default_packages=False):
|
||||||
@@ -380,7 +380,7 @@ class BasePlatform(object):
|
|||||||
deppkgs = deppkgs.union(set(p.get_packages().keys()))
|
deppkgs = deppkgs.union(set(p.get_packages().keys()))
|
||||||
|
|
||||||
pm = PackageManager()
|
pm = PackageManager()
|
||||||
for name in self.get_packages().keys():
|
for name in self.get_packages():
|
||||||
if not pm.is_installed(name) or name in deppkgs:
|
if not pm.is_installed(name) or name in deppkgs:
|
||||||
continue
|
continue
|
||||||
pm.uninstall(name)
|
pm.uninstall(name)
|
||||||
|
@@ -81,6 +81,7 @@ class cd(object):
|
|||||||
|
|
||||||
|
|
||||||
class memoized(object):
|
class memoized(object):
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Decorator. Caches a function's return value each time it is called.
|
Decorator. Caches a function's return value each time it is called.
|
||||||
If called later with the same arguments, the cached value is returned
|
If called later with the same arguments, the cached value is returned
|
||||||
@@ -212,10 +213,20 @@ def get_projectlib_dir():
|
|||||||
|
|
||||||
|
|
||||||
def get_pioenvs_dir():
|
def get_pioenvs_dir():
|
||||||
return _get_projconf_option_dir(
|
path = _get_projconf_option_dir(
|
||||||
"envs_dir",
|
"envs_dir",
|
||||||
join(get_project_dir(), ".pioenvs")
|
join(get_project_dir(), ".pioenvs")
|
||||||
)
|
)
|
||||||
|
if not isdir(path):
|
||||||
|
os.makedirs(path)
|
||||||
|
dontmod_path = join(path, "do-not-modify-files-here.url")
|
||||||
|
if not isfile(dontmod_path):
|
||||||
|
with open(dontmod_path, "w") as fp:
|
||||||
|
fp.write("""
|
||||||
|
[InternetShortcut]
|
||||||
|
URL=http://docs.platformio.org/en/latest/projectconf.html#envs-dir
|
||||||
|
""")
|
||||||
|
return path
|
||||||
|
|
||||||
|
|
||||||
def get_projectdata_dir():
|
def get_projectdata_dir():
|
||||||
|
@@ -76,3 +76,6 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00fd", MODE="0666
|
|||||||
|
|
||||||
#TI MSP430 Launchpad
|
#TI MSP430 Launchpad
|
||||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="f432", MODE="0666"
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="f432", MODE="0666"
|
||||||
|
|
||||||
|
# CMSIS-DAP compatible adapters
|
||||||
|
ATTRS{product}=="*CMSIS-DAP*", MODE="664", GROUP="plugdev"
|
||||||
|
Reference in New Issue
Block a user