| @@ -0,0 +1,12 @@ | |||
| { | |||
| "type": "platform", | |||
| "name": "teensy-gcc", | |||
| "version": "0.1.0", | |||
| "spec": { | |||
| "owner": "skepto", | |||
| "id": 8021, | |||
| "name": "teensy-gcc", | |||
| "requirements": null, | |||
| "url": null | |||
| } | |||
| } | |||
| @@ -0,0 +1,174 @@ | |||
| Apache License | |||
| Version 2.0, January 2004 | |||
| http://www.apache.org/licenses/ | |||
| TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | |||
| 1. Definitions. | |||
| "License" shall mean the terms and conditions for use, reproduction, | |||
| and distribution as defined by Sections 1 through 9 of this document. | |||
| "Licensor" shall mean the copyright owner or entity authorized by | |||
| the copyright owner that is granting the License. | |||
| "Legal Entity" shall mean the union of the acting entity and all | |||
| other entities that control, are controlled by, or are under common | |||
| control with that entity. For the purposes of this definition, | |||
| "control" means (i) the power, direct or indirect, to cause the | |||
| direction or management of such entity, whether by contract or | |||
| otherwise, or (ii) ownership of fifty percent (50%) or more of the | |||
| outstanding shares, or (iii) beneficial ownership of such entity. | |||
| "You" (or "Your") shall mean an individual or Legal Entity | |||
| exercising permissions granted by this License. | |||
| "Source" form shall mean the preferred form for making modifications, | |||
| including but not limited to software source code, documentation | |||
| source, and configuration files. | |||
| "Object" form shall mean any form resulting from mechanical | |||
| transformation or translation of a Source form, including but | |||
| not limited to compiled object code, generated documentation, | |||
| and conversions to other media types. | |||
| "Work" shall mean the work of authorship, whether in Source or | |||
| Object form, made available under the License, as indicated by a | |||
| copyright notice that is included in or attached to the work | |||
| (an example is provided in the Appendix below). | |||
| "Derivative Works" shall mean any work, whether in Source or Object | |||
| form, that is based on (or derived from) the Work and for which the | |||
| editorial revisions, annotations, elaborations, or other modifications | |||
| represent, as a whole, an original work of authorship. For the purposes | |||
| of this License, Derivative Works shall not include works that remain | |||
| separable from, or merely link (or bind by name) to the interfaces of, | |||
| the Work and Derivative Works thereof. | |||
| "Contribution" shall mean any work of authorship, including | |||
| the original version of the Work and any modifications or additions | |||
| to that Work or Derivative Works thereof, that is intentionally | |||
| submitted to Licensor for inclusion in the Work by the copyright owner | |||
| or by an individual or Legal Entity authorized to submit on behalf of | |||
| the copyright owner. For the purposes of this definition, "submitted" | |||
| means any form of electronic, verbal, or written communication sent | |||
| to the Licensor or its representatives, including but not limited to | |||
| communication on electronic mailing lists, source code control systems, | |||
| and issue tracking systems that are managed by, or on behalf of, the | |||
| Licensor for the purpose of discussing and improving the Work, but | |||
| excluding communication that is conspicuously marked or otherwise | |||
| designated in writing by the copyright owner as "Not a Contribution." | |||
| "Contributor" shall mean Licensor and any individual or Legal Entity | |||
| on behalf of whom a Contribution has been received by Licensor and | |||
| subsequently incorporated within the Work. | |||
| 2. Grant of Copyright License. Subject to the terms and conditions of | |||
| this License, each Contributor hereby grants to You a perpetual, | |||
| worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |||
| copyright license to reproduce, prepare Derivative Works of, | |||
| publicly display, publicly perform, sublicense, and distribute the | |||
| Work and such Derivative Works in Source or Object form. | |||
| 3. Grant of Patent License. Subject to the terms and conditions of | |||
| this License, each Contributor hereby grants to You a perpetual, | |||
| worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |||
| (except as stated in this section) patent license to make, have made, | |||
| use, offer to sell, sell, import, and otherwise transfer the Work, | |||
| where such license applies only to those patent claims licensable | |||
| by such Contributor that are necessarily infringed by their | |||
| Contribution(s) alone or by combination of their Contribution(s) | |||
| with the Work to which such Contribution(s) was submitted. If You | |||
| institute patent litigation against any entity (including a | |||
| cross-claim or counterclaim in a lawsuit) alleging that the Work | |||
| or a Contribution incorporated within the Work constitutes direct | |||
| or contributory patent infringement, then any patent licenses | |||
| granted to You under this License for that Work shall terminate | |||
| as of the date such litigation is filed. | |||
| 4. Redistribution. You may reproduce and distribute copies of the | |||
| Work or Derivative Works thereof in any medium, with or without | |||
| modifications, and in Source or Object form, provided that You | |||
| meet the following conditions: | |||
| (a) You must give any other recipients of the Work or | |||
| Derivative Works a copy of this License; and | |||
| (b) You must cause any modified files to carry prominent notices | |||
| stating that You changed the files; and | |||
| (c) You must retain, in the Source form of any Derivative Works | |||
| that You distribute, all copyright, patent, trademark, and | |||
| attribution notices from the Source form of the Work, | |||
| excluding those notices that do not pertain to any part of | |||
| the Derivative Works; and | |||
| (d) If the Work includes a "NOTICE" text file as part of its | |||
| distribution, then any Derivative Works that You distribute must | |||
| include a readable copy of the attribution notices contained | |||
| within such NOTICE file, excluding those notices that do not | |||
| pertain to any part of the Derivative Works, in at least one | |||
| of the following places: within a NOTICE text file distributed | |||
| as part of the Derivative Works; within the Source form or | |||
| documentation, if provided along with the Derivative Works; or, | |||
| within a display generated by the Derivative Works, if and | |||
| wherever such third-party notices normally appear. The contents | |||
| of the NOTICE file are for informational purposes only and | |||
| do not modify the License. You may add Your own attribution | |||
| notices within Derivative Works that You distribute, alongside | |||
| or as an addendum to the NOTICE text from the Work, provided | |||
| that such additional attribution notices cannot be construed | |||
| as modifying the License. | |||
| You may add Your own copyright statement to Your modifications and | |||
| may provide additional or different license terms and conditions | |||
| for use, reproduction, or distribution of Your modifications, or | |||
| for any such Derivative Works as a whole, provided Your use, | |||
| reproduction, and distribution of the Work otherwise complies with | |||
| the conditions stated in this License. | |||
| 5. Submission of Contributions. Unless You explicitly state otherwise, | |||
| any Contribution intentionally submitted for inclusion in the Work | |||
| by You to the Licensor shall be under the terms and conditions of | |||
| this License, without any additional terms or conditions. | |||
| Notwithstanding the above, nothing herein shall supersede or modify | |||
| the terms of any separate license agreement you may have executed | |||
| with Licensor regarding such Contributions. | |||
| 6. Trademarks. This License does not grant permission to use the trade | |||
| names, trademarks, service marks, or product names of the Licensor, | |||
| except as required for reasonable and customary use in describing the | |||
| origin of the Work and reproducing the content of the NOTICE file. | |||
| 7. Disclaimer of Warranty. Unless required by applicable law or | |||
| agreed to in writing, Licensor provides the Work (and each | |||
| Contributor provides its Contributions) on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | |||
| implied, including, without limitation, any warranties or conditions | |||
| of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | |||
| PARTICULAR PURPOSE. You are solely responsible for determining the | |||
| appropriateness of using or redistributing the Work and assume any | |||
| risks associated with Your exercise of permissions under this License. | |||
| 8. Limitation of Liability. In no event and under no legal theory, | |||
| whether in tort (including negligence), contract, or otherwise, | |||
| unless required by applicable law (such as deliberate and grossly | |||
| negligent acts) or agreed to in writing, shall any Contributor be | |||
| liable to You for damages, including any direct, indirect, special, | |||
| incidental, or consequential damages of any character arising as a | |||
| result of this License or out of the use or inability to use the | |||
| Work (including but not limited to damages for loss of goodwill, | |||
| work stoppage, computer failure or malfunction, or any and all | |||
| other commercial damages or losses), even if such Contributor | |||
| has been advised of the possibility of such damages. | |||
| 9. Accepting Warranty or Additional Liability. While redistributing | |||
| the Work or Derivative Works thereof, You may choose to offer, | |||
| and charge a fee for, acceptance of support, warranty, indemnity, | |||
| or other liability obligations and/or rights consistent with this | |||
| License. However, in accepting such obligations, You may act only | |||
| on Your own behalf and on Your sole responsibility, not on behalf | |||
| of any other Contributor, and only if You agree to indemnify, | |||
| defend, and hold each Contributor harmless for any liability | |||
| incurred by, or claims asserted against, such Contributor by reason | |||
| of your accepting any such warranty or additional liability. | |||
| @@ -0,0 +1,35 @@ | |||
| # Teensy: development platform for [PlatformIO](http://platformio.org) | |||
| [](https://github.com/platformio/platform-teensy/actions) | |||
| 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. | |||
| * [Home](http://platformio.org/platforms/teensy) (home page in PlatformIO Platform Registry) | |||
| * [Documentation](http://docs.platformio.org/page/platforms/teensy.html) (advanced usage, packages, boards, frameworks, etc.) | |||
| # Usage | |||
| 1. [Install PlatformIO](http://platformio.org) | |||
| 2. Create PlatformIO project and configure a platform option in [platformio.ini](http://docs.platformio.org/page/projectconf.html) file: | |||
| ## Stable version | |||
| ```ini | |||
| [env:stable] | |||
| platform = teensy | |||
| board = ... | |||
| ... | |||
| ``` | |||
| ## Development version | |||
| ```ini | |||
| [env:development] | |||
| platform = https://github.com/platformio/platform-teensy.git | |||
| board = ... | |||
| ... | |||
| ``` | |||
| # Configuration | |||
| Please navigate to [documentation](http://docs.platformio.org/page/platforms/teensy.html). | |||
| @@ -0,0 +1,23 @@ | |||
| { | |||
| "build": { | |||
| "core": "teensy", | |||
| "extra_flags": "-DARDUINO_ARCH_AVR -DARDUINO_TEENSY2", | |||
| "f_cpu": "16000000L", | |||
| "mcu": "atmega32u4" | |||
| }, | |||
| "frameworks": [ | |||
| "arduino" | |||
| ], | |||
| "name": "Teensy 2.0", | |||
| "upload": { | |||
| "maximum_ram_size": 2560, | |||
| "maximum_size": 32256, | |||
| "protocol": "teensy-gui", | |||
| "protocols": [ | |||
| "teensy-cli", | |||
| "teensy-gui" | |||
| ] | |||
| }, | |||
| "url": "https://www.pjrc.com/store/teensy.html", | |||
| "vendor": "Teensy" | |||
| } | |||
| @@ -0,0 +1,23 @@ | |||
| { | |||
| "build": { | |||
| "core": "teensy", | |||
| "extra_flags": "-DARDUINO_TEENSY2PP", | |||
| "f_cpu": "16000000L", | |||
| "mcu": "at90usb1286" | |||
| }, | |||
| "frameworks": [ | |||
| "arduino" | |||
| ], | |||
| "name": "Teensy++ 2.0", | |||
| "upload": { | |||
| "maximum_ram_size": 8192, | |||
| "maximum_size": 130048, | |||
| "protocol": "teensy-gui", | |||
| "protocols": [ | |||
| "teensy-cli", | |||
| "teensy-gui" | |||
| ] | |||
| }, | |||
| "url": "https://www.pjrc.com/store/teensypp.html", | |||
| "vendor": "Teensy" | |||
| } | |||
| @@ -0,0 +1,27 @@ | |||
| { | |||
| "build": { | |||
| "arduino": { | |||
| "ldscript": "mk20dx128.ld" | |||
| }, | |||
| "core": "teensy3", | |||
| "cpu": "cortex-m4", | |||
| "extra_flags": "-D__MK20DX128__ -DARDUINO_TEENSY30", | |||
| "f_cpu": "48000000L", | |||
| "mcu": "mk20dx128" | |||
| }, | |||
| "frameworks": [ | |||
| "arduino" | |||
| ], | |||
| "name": "Teensy 3.0", | |||
| "upload": { | |||
| "maximum_ram_size": 16384, | |||
| "maximum_size": 131072, | |||
| "protocol": "teensy-gui", | |||
| "protocols": [ | |||
| "teensy-cli", | |||
| "teensy-gui" | |||
| ] | |||
| }, | |||
| "url": "https://www.pjrc.com/store/teensy3.html", | |||
| "vendor": "Teensy" | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| { | |||
| "build": { | |||
| "arduino": { | |||
| "ldscript": "mk20dx256.ld" | |||
| }, | |||
| "core": "teensy3", | |||
| "cpu": "cortex-m4", | |||
| "extra_flags": "-D__MK20DX256__ -DARDUINO_TEENSY31", | |||
| "f_cpu": "72000000L", | |||
| "mcu": "mk20dx256" | |||
| }, | |||
| "debug": { | |||
| "jlink_device": "MK20DX256xxx10", | |||
| "svd_path": "MK20D5.svd" | |||
| }, | |||
| "frameworks": [ | |||
| "arduino", | |||
| "mbed" | |||
| ], | |||
| "name": "Teensy 3.1 / 3.2", | |||
| "upload": { | |||
| "maximum_ram_size": 65536, | |||
| "maximum_size": 262144, | |||
| "protocol": "teensy-gui", | |||
| "protocols": [ | |||
| "teensy-cli", | |||
| "teensy-gui", | |||
| "jlink" | |||
| ] | |||
| }, | |||
| "url": "https://www.pjrc.com/store/teensy31.html", | |||
| "vendor": "Teensy" | |||
| } | |||
| @@ -0,0 +1,35 @@ | |||
| { | |||
| "build": { | |||
| "arduino": { | |||
| "ldscript": "mk64fx512.ld" | |||
| }, | |||
| "core": "teensy3", | |||
| "cpu": "cortex-m4", | |||
| "extra_flags": "-D__MK64FX512__ -DARDUINO_TEENSY35", | |||
| "f_cpu": "120000000L", | |||
| "mcu": "mk64fx512" | |||
| }, | |||
| "connectivity": [ | |||
| "can" | |||
| ], | |||
| "debug": { | |||
| "jlink_device": "MK64FX512xxx12", | |||
| "svd_path": "MK64F12.svd" | |||
| }, | |||
| "frameworks": [ | |||
| "arduino" | |||
| ], | |||
| "name": "Teensy 3.5", | |||
| "upload": { | |||
| "maximum_ram_size": 262136, | |||
| "maximum_size": 524288, | |||
| "protocol": "teensy-gui", | |||
| "protocols": [ | |||
| "teensy-cli", | |||
| "teensy-gui", | |||
| "jlink" | |||
| ] | |||
| }, | |||
| "url": "https://www.pjrc.com/store/teensy35.html", | |||
| "vendor": "Teensy" | |||
| } | |||
| @@ -0,0 +1,35 @@ | |||
| { | |||
| "build": { | |||
| "arduino": { | |||
| "ldscript": "mk66fx1m0.ld" | |||
| }, | |||
| "core": "teensy3", | |||
| "cpu": "cortex-m4", | |||
| "extra_flags": "-D__MK66FX1M0__ -DARDUINO_TEENSY36", | |||
| "f_cpu": "180000000L", | |||
| "mcu": "mk66fx1m0" | |||
| }, | |||
| "connectivity": [ | |||
| "can" | |||
| ], | |||
| "debug": { | |||
| "jlink_device": "MK66FX1M0xxx18", | |||
| "svd_path": "MK66F18.svd" | |||
| }, | |||
| "frameworks": [ | |||
| "arduino" | |||
| ], | |||
| "name": "Teensy 3.6", | |||
| "upload": { | |||
| "maximum_ram_size": 262144, | |||
| "maximum_size": 1048576, | |||
| "protocol": "teensy-gui", | |||
| "protocols": [ | |||
| "teensy-cli", | |||
| "teensy-gui", | |||
| "jlink" | |||
| ] | |||
| }, | |||
| "url": "https://www.pjrc.com/store/teensy36.html", | |||
| "vendor": "Teensy" | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| { | |||
| "build": { | |||
| "arduino": { | |||
| "ldscript": "imxrt1062.ld" | |||
| }, | |||
| "core": "teensy4", | |||
| "cpu": "cortex-m7", | |||
| "extra_flags": "-D__IMXRT1062__ -DARDUINO_TEENSY40", | |||
| "f_cpu": "600000000", | |||
| "mcu": "imxrt1062" | |||
| }, | |||
| "connectivity": [ | |||
| "can" | |||
| ], | |||
| "debug": { | |||
| "jlink_device": "MIMXRT1062xxxxA" | |||
| }, | |||
| "frameworks": [ | |||
| "arduino" | |||
| ], | |||
| "name": "Teensy 4.0", | |||
| "upload": { | |||
| "maximum_ram_size": 524288, | |||
| "maximum_size": 2031616, | |||
| "protocol": "teensy-gui", | |||
| "protocols": [ | |||
| "teensy-gui", | |||
| "jlink" | |||
| ] | |||
| }, | |||
| "url": "https://www.pjrc.com/store/teensy40.html", | |||
| "vendor": "Teensy" | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| { | |||
| "build": { | |||
| "arduino": { | |||
| "ldscript": "imxrt1062_t41.ld" | |||
| }, | |||
| "core": "teensy4", | |||
| "cpu": "cortex-m7", | |||
| "extra_flags": "-D__IMXRT1062__ -DARDUINO_TEENSY41", | |||
| "f_cpu": "600000000", | |||
| "mcu": "imxrt1062" | |||
| }, | |||
| "connectivity": [ | |||
| "can" | |||
| ], | |||
| "debug": { | |||
| "jlink_device": "MIMXRT1062xxxxA" | |||
| }, | |||
| "frameworks": [ | |||
| "arduino" | |||
| ], | |||
| "name": "Teensy 4.1", | |||
| "upload": { | |||
| "maximum_ram_size": 524288, | |||
| "maximum_size": 8126464, | |||
| "protocol": "teensy-gui", | |||
| "protocols": [ | |||
| "teensy-gui", | |||
| "jlink" | |||
| ] | |||
| }, | |||
| "url": "https://www.pjrc.com/store/teensy41.html", | |||
| "vendor": "Teensy" | |||
| } | |||
| @@ -0,0 +1,32 @@ | |||
| { | |||
| "build": { | |||
| "arduino": { | |||
| "ldscript": "mkl26z64.ld" | |||
| }, | |||
| "core": "teensy3", | |||
| "cpu": "cortex-m0plus", | |||
| "extra_flags": "-D__MKL26Z64__ -DARDUINO_TEENSYLC", | |||
| "f_cpu": "48000000L", | |||
| "mcu": "mkl26z64" | |||
| }, | |||
| "debug": { | |||
| "jlink_device": "MKL26Z64xxx4", | |||
| "svd_path": "MKL26Z4.svd" | |||
| }, | |||
| "frameworks": [ | |||
| "arduino" | |||
| ], | |||
| "name": "Teensy LC", | |||
| "upload": { | |||
| "maximum_ram_size": 8192, | |||
| "maximum_size": 63488, | |||
| "protocol": "teensy-gui", | |||
| "protocols": [ | |||
| "teensy-cli", | |||
| "teensy-gui", | |||
| "jlink" | |||
| ] | |||
| }, | |||
| "url": "http://www.pjrc.com/teensy/teensyLC.html", | |||
| "vendor": "Teensy" | |||
| } | |||
| @@ -0,0 +1,85 @@ | |||
| # Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| # | |||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||
| # you may not use this file except in compliance with the License. | |||
| # You may obtain a copy of the License at | |||
| # | |||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||
| # | |||
| # Unless required by applicable law or agreed to in writing, software | |||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| # See the License for the specific language governing permissions and | |||
| # limitations under the License. | |||
| # | |||
| # Default flags for bare-metal programming (without any framework layers) | |||
| # | |||
| from SCons.Script import DefaultEnvironment | |||
| env = DefaultEnvironment() | |||
| env.Append( | |||
| ASFLAGS=["-x", "assembler-with-cpp"], | |||
| CCFLAGS=[ | |||
| "-Os", # optimize for size | |||
| "-Wall", # show warnings | |||
| "-ffunction-sections", # place each function in its own section | |||
| "-fdata-sections", | |||
| "-mthumb", | |||
| "-nostdlib", | |||
| "-fsingle-precision-constant" | |||
| ], | |||
| CXXFLAGS=[ | |||
| "-fno-exceptions", | |||
| "-felide-constructors", | |||
| "-fno-rtti", | |||
| "-std=gnu++14" | |||
| ], | |||
| CPPDEFINES=[ | |||
| ("F_CPU", "$BOARD_F_CPU"), | |||
| "LAYOUT_US_ENGLISH" | |||
| ], | |||
| RANLIBFLAGS=["-s"], | |||
| LINKFLAGS=[ | |||
| "-Os", | |||
| "-Wl,--gc-sections,--relax", | |||
| "-mthumb", | |||
| "-Wl,--defsym=__rtc_localtime=$UNIX_TIME", | |||
| "-fsingle-precision-constant" | |||
| ], | |||
| LIBS=["m", "stdc++"] | |||
| ) | |||
| if env.BoardConfig().id_ in ("teensy35", "teensy36"): | |||
| env.Append( | |||
| CCFLAGS=[ | |||
| "-mfloat-abi=hard", | |||
| "-mfpu=fpv4-sp-d16" | |||
| ], | |||
| LINKFLAGS=[ | |||
| "-mfloat-abi=hard", | |||
| "-mfpu=fpv4-sp-d16" | |||
| ] | |||
| ) | |||
| if "BOARD" in env: | |||
| env.Append( | |||
| CCFLAGS=[ | |||
| "-mcpu=%s" % env.BoardConfig().get("build.cpu") | |||
| ], | |||
| LINKFLAGS=[ | |||
| "-mcpu=%s" % env.BoardConfig().get("build.cpu") | |||
| ] | |||
| ) | |||
| # copy CCFLAGS to ASFLAGS (-x assembler-with-cpp mode) | |||
| env.Append(ASFLAGS=env.get("CCFLAGS", [])[:]) | |||
| @@ -0,0 +1,55 @@ | |||
| # Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| # | |||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||
| # you may not use this file except in compliance with the License. | |||
| # You may obtain a copy of the License at | |||
| # | |||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||
| # | |||
| # Unless required by applicable law or agreed to in writing, software | |||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| # See the License for the specific language governing permissions and | |||
| # limitations under the License. | |||
| # | |||
| # Default flags for bare-metal programming (without any framework layers) | |||
| # | |||
| from SCons.Script import DefaultEnvironment | |||
| env = DefaultEnvironment() | |||
| env.Append( | |||
| ASFLAGS=["-x", "assembler-with-cpp"], | |||
| CCFLAGS=[ | |||
| "-Os", # optimize for size | |||
| "-Wall", # show warnings | |||
| "-ffunction-sections", # place each function in its own section | |||
| "-fdata-sections", | |||
| "-mmcu=$BOARD_MCU" | |||
| ], | |||
| CXXFLAGS=[ | |||
| "-fno-exceptions", | |||
| "-felide-constructors", | |||
| "-std=gnu++11" | |||
| ], | |||
| CPPDEFINES=[ | |||
| ("F_CPU", "$BOARD_F_CPU"), | |||
| "LAYOUT_US_ENGLISH" | |||
| ], | |||
| LINKFLAGS=[ | |||
| "-Os", | |||
| "-Wl,--gc-sections,--relax", | |||
| "-mmcu=$BOARD_MCU" | |||
| ], | |||
| LIBS=["m"] | |||
| ) | |||
| # copy CCFLAGS to ASFLAGS (-x assembler-with-cpp mode) | |||
| env.Append(ASFLAGS=env.get("CCFLAGS", [])[:]) | |||
| @@ -0,0 +1,329 @@ | |||
| # Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| # | |||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||
| # you may not use this file except in compliance with the License. | |||
| # You may obtain a copy of the License at | |||
| # | |||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||
| # | |||
| # Unless required by applicable law or agreed to in writing, software | |||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| # See the License for the specific language governing permissions and | |||
| # limitations under the License. | |||
| """ | |||
| 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. | |||
| http://arduino.cc/en/Reference/HomePage | |||
| """ | |||
| from io import open | |||
| from os import listdir | |||
| from os.path import isdir, isfile, join | |||
| from SCons.Script import DefaultEnvironment | |||
| env = DefaultEnvironment() | |||
| platform = env.PioPlatform() | |||
| FRAMEWORK_DIR = platform.get_package_dir("framework-arduinoteensy-cxx17") | |||
| FRAMEWORK_VERSION = platform.get_package_version("framework-arduinoteensy-cxx17") | |||
| BUILD_CORE = env.BoardConfig().get("build.core") | |||
| assert isdir(FRAMEWORK_DIR) | |||
| BUILTIN_USB_FLAGS = ( | |||
| "USB_SERIAL", | |||
| "USB_DUAL_SERIAL", | |||
| "USB_TRIPLE_SERIAL", | |||
| "USB_KEYBOARDONLY", | |||
| "USB_TOUCHSCREEN", | |||
| "USB_HID_TOUCHSCREEN", | |||
| "USB_HID", | |||
| "USB_SERIAL_HID", | |||
| "USB_MIDI", | |||
| "USB_MIDI4", | |||
| "USB_MIDI16", | |||
| "USB_MIDI_SERIAL", | |||
| "USB_MIDI4_SERIAL", | |||
| "USB_MIDI16_SERIAL", | |||
| "USB_AUDIO", | |||
| "USB_MIDI_AUDIO_SERIAL", | |||
| "USB_MIDI16_AUDIO_SERIAL", | |||
| "USB_MTPDISK", | |||
| "USB_RAWHID", | |||
| "USB_FLIGHTSIM", | |||
| "USB_FLIGHTSIM_JOYSTICK", | |||
| "USB_EVERYTHING", | |||
| "USB_DISABLED", | |||
| ) | |||
| if not set(env.get("CPPDEFINES", [])) & set(BUILTIN_USB_FLAGS): | |||
| env.Append(CPPDEFINES=["USB_SERIAL"]) | |||
| env.Replace( | |||
| SIZEPROGREGEXP=r"^(?:\.text|\.text\.progmem|\.text\.itcm|\.data)\s+([0-9]+).*", | |||
| SIZEDATAREGEXP=r"^(?:\.usbdescriptortable|\.dmabuffers|\.usbbuffers|\.data|\.bss|\.noinit|\.text\.itcm|\.text\.itcm\.padding)\s+([0-9]+).*" | |||
| ) | |||
| env.Append( | |||
| CPPDEFINES=[ | |||
| ("ARDUINO", 10805), | |||
| ("TEENSYDUINO", 149), | |||
| "CORE_TEENSY" | |||
| ], | |||
| CPPPATH=[ | |||
| join(FRAMEWORK_DIR, "cores", BUILD_CORE) | |||
| ], | |||
| LIBSOURCE_DIRS=[ | |||
| join(FRAMEWORK_DIR, "libraries") | |||
| ] | |||
| ) | |||
| if "BOARD" in env and BUILD_CORE == "teensy": | |||
| env.Append( | |||
| ASFLAGS=["-x", "assembler-with-cpp"], | |||
| CCFLAGS=[ | |||
| "-Os", # optimize for size | |||
| "-Wall", # show warnings | |||
| "-ffunction-sections", # place each function in its own section | |||
| "-fdata-sections", | |||
| "-mmcu=$BOARD_MCU" | |||
| ], | |||
| CXXFLAGS=[ | |||
| "-fno-exceptions", | |||
| "-felide-constructors", | |||
| "-std=gnu++11", | |||
| "-fpermissive" | |||
| ], | |||
| CPPDEFINES=[ | |||
| ("F_CPU", "$BOARD_F_CPU"), | |||
| "LAYOUT_US_ENGLISH" | |||
| ], | |||
| LINKFLAGS=[ | |||
| "-Os", | |||
| "-Wl,--gc-sections,--relax", | |||
| "-mmcu=$BOARD_MCU" | |||
| ], | |||
| LIBS=["m"] | |||
| ) | |||
| elif "BOARD" in env and BUILD_CORE in ("teensy3", "teensy4", "teensy41"): | |||
| env.Replace( | |||
| AR="arm-none-eabi-gcc-ar", | |||
| RANLIB="$AR" | |||
| ) | |||
| env.Append( | |||
| ASFLAGS=["-x", "assembler-with-cpp"], | |||
| CCFLAGS=[ | |||
| "-Wall", # show warnings | |||
| "-ffunction-sections", # place each function in its own section | |||
| "-fdata-sections", | |||
| "-mthumb", | |||
| "-mcpu=%s" % env.BoardConfig().get("build.cpu"), | |||
| "-fsingle-precision-constant" | |||
| ], | |||
| CXXFLAGS=[ | |||
| "-fno-exceptions", | |||
| "-felide-constructors", | |||
| "-fno-rtti", | |||
| "-std=gnu++17", | |||
| "-Wno-error=narrowing", | |||
| "-fpermissive" | |||
| ], | |||
| CPPDEFINES=[ | |||
| ("F_CPU", "$BOARD_F_CPU"), | |||
| "LAYOUT_US_ENGLISH" | |||
| ], | |||
| RANLIBFLAGS=["-s"], | |||
| LINKFLAGS=[ | |||
| "-Wl,--gc-sections,--relax", | |||
| "-mthumb", | |||
| "-mcpu=%s" % env.BoardConfig().get("build.cpu"), | |||
| "-Wl,--defsym=__rtc_localtime=$UNIX_TIME", | |||
| "-fsingle-precision-constant" | |||
| ], | |||
| LIBS=["m", "stdc++"] | |||
| ) | |||
| if not env.BoardConfig().get("build.ldscript", ""): | |||
| env.Replace(LDSCRIPT_PATH=env.BoardConfig().get("build.arduino.ldscript", "")) | |||
| if env.BoardConfig().id_ in ("teensy35", "teensy36", "teensy40", "teensy41"): | |||
| fpv_version = "4-sp" | |||
| if env.BoardConfig().id_.startswith("teensy4"): | |||
| fpv_version = "5" | |||
| env.Append( | |||
| CCFLAGS=[ | |||
| "-mfloat-abi=hard", | |||
| "-mfpu=fpv%s-d16" % fpv_version | |||
| ], | |||
| LINKFLAGS=[ | |||
| "-mfloat-abi=hard", | |||
| "-mfpu=fpv%s-d16" % fpv_version | |||
| ] | |||
| ) | |||
| # Optimization | |||
| if "TEENSY_OPT_FASTER_LTO" in env['CPPDEFINES']: | |||
| env.Append( | |||
| CCFLAGS=["-O2", "-flto", "-fno-fat-lto-objects"], | |||
| LINKFLAGS=["-O2", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"] | |||
| ) | |||
| elif "TEENSY_OPT_FAST" in env['CPPDEFINES']: | |||
| env.Append( | |||
| CCFLAGS=["-O1"], | |||
| LINKFLAGS=["-O1"] | |||
| ) | |||
| elif "TEENSY_OPT_FAST_LTO" in env['CPPDEFINES']: | |||
| env.Append( | |||
| CCFLAGS=["-O1", "-flto", "-fno-fat-lto-objects"], | |||
| LINKFLAGS=["-O1", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"] | |||
| ) | |||
| elif "TEENSY_OPT_FASTEST" in env['CPPDEFINES']: | |||
| env.Append( | |||
| CCFLAGS=["-O3"], | |||
| LINKFLAGS=["-O3"] | |||
| ) | |||
| elif "TEENSY_OPT_FASTEST_LTO" in env['CPPDEFINES']: | |||
| env.Append( | |||
| CCFLAGS=["-O3", "-flto", "-fno-fat-lto-objects"], | |||
| LINKFLAGS=["-O3", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"] | |||
| ) | |||
| elif "TEENSY_OPT_FASTEST_PURE_CODE" in env['CPPDEFINES']: | |||
| env.Append( | |||
| CCFLAGS=["-O3", "-mpure-code"], | |||
| CPPDEFINES=["__PURE_CODE__"], | |||
| LINKFLAGS=["-O3", "-mpure-code"] | |||
| ) | |||
| elif "TEENSY_OPT_FASTEST_PURE_CODE_LTO" in env['CPPDEFINES']: | |||
| env.Append( | |||
| CCFLAGS=["-O3", "-mpure-code", "-flto", "-fno-fat-lto-objects"], | |||
| CPPDEFINES=["__PURE_CODE__"], | |||
| LINKFLAGS=["-O3", "-mpure-code", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"] | |||
| ) | |||
| elif "TEENSY_OPT_DEBUG" in env['CPPDEFINES']: | |||
| env.Append( | |||
| CCFLAGS=["-g", "-Og"], | |||
| LINKFLAGS=["-g", "-Og"] | |||
| ) | |||
| elif "TEENSY_OPT_DEBUG_LTO" in env['CPPDEFINES']: | |||
| env.Append( | |||
| CCFLAGS=["-g", "-Og", "-flto", "-fno-fat-lto-objects"], | |||
| LINKFLAGS=["-g", "-Og", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"] | |||
| ) | |||
| elif "TEENSY_OPT_SMALLEST_CODE_LTO" in env['CPPDEFINES']: | |||
| env.Append( | |||
| CCFLAGS=["-Os", "--specs=nano.specs", "-flto", "-fno-fat-lto-objects"], | |||
| LINKFLAGS=["-Os", "--specs=nano.specs", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"] | |||
| ) | |||
| elif "TEENSY_OPT_FASTER" in env['CPPDEFINES']: | |||
| env.Append( | |||
| CCFLAGS=["-O2"], | |||
| LINKFLAGS=["-O2"] | |||
| ) | |||
| elif "TEENSY_OPT_SMALLEST_CODE" in env['CPPDEFINES']: | |||
| env.Append( | |||
| CCFLAGS=["-Os", "--specs=nano.specs"], | |||
| LINKFLAGS=["-Os", "--specs=nano.specs"] | |||
| ) | |||
| # default profiles | |||
| else: | |||
| # for Teensy LC => TEENSY_OPT_SMALLEST_CODE | |||
| if env.BoardConfig().id_ == "teensylc": | |||
| env.Append( | |||
| CCFLAGS=["-Os", "--specs=nano.specs"], | |||
| LINKFLAGS=["-Os", "--specs=nano.specs"] | |||
| ) | |||
| # for others => TEENSY_OPT_FASTER | |||
| else: | |||
| env.Append( | |||
| CCFLAGS=["-O2"], | |||
| LINKFLAGS=["-O2"] | |||
| ) | |||
| env.Append( | |||
| ASFLAGS=env.get("CCFLAGS", [])[:] | |||
| ) | |||
| if "cortex-m" in env.BoardConfig().get("build.cpu", ""): | |||
| board = env.subst("$BOARD") | |||
| math_lib = "arm_cortex%s_math" | |||
| if board in ("teensy35", "teensy36"): | |||
| math_lib = math_lib % "M4lf" | |||
| elif board in ("teensy30", "teensy31"): | |||
| math_lib = math_lib % "M4l" | |||
| elif board.startswith("teensy4"): | |||
| math_lib = math_lib % "M7lfsp" | |||
| else: | |||
| math_lib = math_lib % "M0l" | |||
| env.Prepend(LIBS=[math_lib]) | |||
| # Teensy 2.x Core | |||
| if BUILD_CORE == "teensy": | |||
| env.Append(CPPPATH=[join(FRAMEWORK_DIR, "cores")]) | |||
| # search relative includes in teensy directories | |||
| core_dir = join(FRAMEWORK_DIR, "cores", "teensy") | |||
| for item in sorted(listdir(core_dir)): | |||
| file_path = join(core_dir, item) | |||
| if not isfile(file_path): | |||
| continue | |||
| content = None | |||
| content_changed = False | |||
| with open(file_path, encoding="latin-1") as fp: | |||
| content = fp.read() | |||
| if '#include "../' in content: | |||
| content_changed = True | |||
| content = content.replace('#include "../', '#include "') | |||
| if not content_changed: | |||
| continue | |||
| with open(file_path, "w", encoding="latin-1") as fp: | |||
| fp.write(content) | |||
| else: | |||
| env.Prepend(LIBPATH=[join(FRAMEWORK_DIR, "cores", BUILD_CORE)]) | |||
| # | |||
| # Target: Build Core Library | |||
| # | |||
| libs = [] | |||
| if "build.variant" in env.BoardConfig(): | |||
| env.Append( | |||
| CPPPATH=[ | |||
| join(FRAMEWORK_DIR, "variants", | |||
| env.BoardConfig().get("build.variant")) | |||
| ] | |||
| ) | |||
| libs.append(env.BuildLibrary( | |||
| join("$BUILD_DIR", "FrameworkArduinoVariant"), | |||
| join(FRAMEWORK_DIR, "variants", env.BoardConfig().get("build.variant")) | |||
| )) | |||
| libs.append(env.BuildLibrary( | |||
| join("$BUILD_DIR", "FrameworkArduino"), | |||
| join(FRAMEWORK_DIR, "cores", BUILD_CORE) | |||
| )) | |||
| env.Prepend(LIBS=libs) | |||
| @@ -0,0 +1,37 @@ | |||
| # Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| # | |||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||
| # you may not use this file except in compliance with the License. | |||
| # You may obtain a copy of the License at | |||
| # | |||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||
| # | |||
| # Unless required by applicable law or agreed to in writing, software | |||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| # See the License for the specific language governing permissions and | |||
| # limitations under the License. | |||
| """ | |||
| mbed | |||
| The mbed framework The mbed SDK has been designed to provide enough | |||
| hardware abstraction to be intuitive and concise, yet powerful enough to | |||
| build complex projects. It is built on the low-level ARM CMSIS APIs, | |||
| allowing you to code down to the metal if needed. In addition to RTOS, | |||
| USB and Networking libraries, a cookbook of hundreds of reusable | |||
| peripheral and module libraries have been built on top of the SDK by | |||
| the mbed Developer Community. | |||
| http://mbed.org/ | |||
| """ | |||
| from os.path import join | |||
| from SCons.Script import Import, SConscript | |||
| Import("env") | |||
| # https://github.com/platformio/builder-framework-mbed.git | |||
| SConscript( | |||
| join(env.PioPlatform().get_package_dir("framework-mbed"), "platformio", | |||
| "platformio-build.py")) | |||
| @@ -0,0 +1,243 @@ | |||
| # Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| # | |||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||
| # you may not use this file except in compliance with the License. | |||
| # You may obtain a copy of the License at | |||
| # | |||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||
| # | |||
| # Unless required by applicable law or agreed to in writing, software | |||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| # See the License for the specific language governing permissions and | |||
| # limitations under the License. | |||
| import sys | |||
| from platform import system | |||
| from os import makedirs | |||
| from os.path import isdir, isfile, join | |||
| from SCons.Script import (COMMAND_LINE_TARGETS, AlwaysBuild, Builder, Default, | |||
| DefaultEnvironment) | |||
| env = DefaultEnvironment() | |||
| platform = env.PioPlatform() | |||
| board_config = env.BoardConfig() | |||
| env.Replace( | |||
| ARFLAGS=["rc"], | |||
| SIZEPROGREGEXP=r"^(?:\.text|\.data|\.rodata|\.text.align|\.ARM.exidx)\s+(\d+).*", | |||
| SIZEDATAREGEXP=r"^(?:\.data|\.bss|\.noinit)\s+(\d+).*", | |||
| SIZECHECKCMD="$SIZETOOL -A -d $SOURCES", | |||
| PROGSUFFIX=".elf" | |||
| ) | |||
| # Allow user to override via pre:script | |||
| if env.get("PROGNAME", "program") == "program": | |||
| env.Replace(PROGNAME="firmware") | |||
| if "BOARD" in env and board_config.get("build.core") == "teensy": | |||
| env.Replace( | |||
| AR="avr-ar", | |||
| AS="avr-as", | |||
| CC="avr-gcc", | |||
| CXX="avr-g++", | |||
| GDB="avr-gdb", | |||
| OBJCOPY="avr-objcopy", | |||
| RANLIB="avr-ranlib", | |||
| SIZETOOL="avr-size", | |||
| SIZEPRINTCMD='$SIZETOOL --mcu=$BOARD_MCU -C -d $SOURCES' | |||
| ) | |||
| env.Append( | |||
| BUILDERS=dict( | |||
| ElfToEep=Builder( | |||
| action=env.VerboseAction(" ".join([ | |||
| "$OBJCOPY", | |||
| "-O", | |||
| "ihex", | |||
| "-j", | |||
| ".eeprom", | |||
| '--set-section-flags=.eeprom="alloc,load"', | |||
| "--no-change-warnings", | |||
| "--change-section-lma", | |||
| ".eeprom=0", | |||
| "$SOURCES", | |||
| "$TARGET" | |||
| ]), "Building $TARGET"), | |||
| suffix=".eep" | |||
| ), | |||
| ElfToHex=Builder( | |||
| action=env.VerboseAction(" ".join([ | |||
| "$OBJCOPY", | |||
| "-O", | |||
| "ihex", | |||
| "-R", | |||
| ".eeprom", | |||
| "$SOURCES", | |||
| "$TARGET" | |||
| ]), "Building $TARGET"), | |||
| suffix=".hex" | |||
| ) | |||
| ) | |||
| ) | |||
| if not env.get("PIOFRAMEWORK"): | |||
| env.SConscript("frameworks/_bare_avr.py") | |||
| elif "BOARD" in env and board_config.get("build.core") in ("teensy3", "teensy4", "teensy41"): | |||
| env.Replace( | |||
| AR="arm-none-eabi-ar", | |||
| AS="arm-none-eabi-as", | |||
| CC="arm-none-eabi-gcc", | |||
| CXX="arm-none-eabi-g++", | |||
| GDB="arm-none-eabi-gdb", | |||
| OBJCOPY="arm-none-eabi-objcopy", | |||
| RANLIB="arm-none-eabi-gcc-ranlib", | |||
| SIZETOOL="arm-none-eabi-size", | |||
| SIZEPRINTCMD='$SIZETOOL -B -d $SOURCES' | |||
| ) | |||
| env.Append( | |||
| BUILDERS=dict( | |||
| ElfToBin=Builder( | |||
| action=env.VerboseAction(" ".join([ | |||
| "$OBJCOPY", | |||
| "-O", | |||
| "binary", | |||
| "$SOURCES", | |||
| "$TARGET" | |||
| ]), "Building $TARGET"), | |||
| suffix=".bin" | |||
| ), | |||
| ElfToHex=Builder( | |||
| action=env.VerboseAction(" ".join([ | |||
| "$OBJCOPY", | |||
| "-O", | |||
| "ihex", | |||
| "-R", | |||
| ".eeprom", | |||
| "$SOURCES", | |||
| "$TARGET" | |||
| ]), "Building $TARGET"), | |||
| suffix=".hex" | |||
| ) | |||
| ) | |||
| ) | |||
| if not env.get("PIOFRAMEWORK"): | |||
| env.SConscript("frameworks/_bare_arm.py") | |||
| # | |||
| # Target: Build executable and linkable firmware | |||
| # | |||
| target_elf = None | |||
| if "nobuild" in COMMAND_LINE_TARGETS: | |||
| target_elf = join("$BUILD_DIR", "${PROGNAME}.elf") | |||
| target_firm = join("$BUILD_DIR", "${PROGNAME}.hex") | |||
| else: | |||
| target_elf = env.BuildProgram() | |||
| target_firm = env.ElfToHex(join("$BUILD_DIR", "${PROGNAME}"), target_elf) | |||
| AlwaysBuild(env.Alias("nobuild", target_firm)) | |||
| target_buildprog = env.Alias("buildprog", target_firm, target_firm) | |||
| # | |||
| # Target: Print binary size | |||
| # | |||
| target_size = env.Alias( | |||
| "size", target_elf, | |||
| env.VerboseAction("$SIZEPRINTCMD", "Calculating size $SOURCE")) | |||
| AlwaysBuild(target_size) | |||
| # | |||
| # Target: Upload by default firmware file | |||
| # | |||
| # Force Teensy CLI when Teensy App is not available (Linux ARM) | |||
| if env.subst("$UPLOAD_PROTOCOL") == "teensy-gui" and not isfile( | |||
| join( | |||
| platform.get_package_dir("tool-teensy") or "", | |||
| "teensy_post_compile.exe" | |||
| if system() == "Windows" else "teensy_post_compile")): | |||
| env.Replace(UPLOAD_PROTOCOL="teensy-cli") | |||
| upload_protocol = env.subst("$UPLOAD_PROTOCOL") | |||
| upload_actions = [] | |||
| if upload_protocol.startswith("jlink"): | |||
| def _jlink_cmd_script(env, source): | |||
| build_dir = env.subst("$BUILD_DIR") | |||
| if not isdir(build_dir): | |||
| makedirs(build_dir) | |||
| script_path = join(build_dir, "upload.jlink") | |||
| commands = ["h", "loadfile %s" % source, "r", "q"] | |||
| with open(script_path, "w") as fp: | |||
| fp.write("\n".join(commands)) | |||
| return script_path | |||
| env.Replace( | |||
| __jlink_cmd_script=_jlink_cmd_script, | |||
| UPLOADER="JLink.exe" if system() == "Windows" else "JLinkExe", | |||
| UPLOADERFLAGS=[ | |||
| "-device", board_config.get("debug", {}).get("jlink_device"), | |||
| "-speed", "4000", | |||
| "-if", ("jtag" if upload_protocol == "jlink-jtag" else "swd"), | |||
| "-autoconnect", "1", | |||
| "-NoGui", "1" | |||
| ], | |||
| UPLOADCMD='$UPLOADER $UPLOADERFLAGS -CommanderScript "${__jlink_cmd_script(__env__, SOURCE)}"' | |||
| ) | |||
| upload_actions = [env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE")] | |||
| elif upload_protocol == "teensy-cli": | |||
| env.Replace( | |||
| REBOOTER="teensy_reboot", | |||
| UPLOADER="teensy_loader_cli", | |||
| UPLOADERFLAGS=[ | |||
| "-mmcu=$BOARD_MCU", | |||
| "-w", # wait for device to appear | |||
| "-s", # soft reboot if device not online | |||
| "-v" # verbose output | |||
| ], | |||
| UPLOADCMD="$UPLOADER $UPLOADERFLAGS $SOURCES" | |||
| ) | |||
| upload_actions = [ | |||
| env.VerboseAction("$REBOOTER -s", "Rebooting..."), | |||
| env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE") | |||
| ] | |||
| elif upload_protocol == "teensy-gui": | |||
| env.Replace( | |||
| UPLOADER="teensy_post_compile", | |||
| UPLOADERFLAGS=[ | |||
| "-file=${PROGNAME}", '-path="$BUILD_DIR"', | |||
| "-tools=%s" % (platform.get_package_dir("tool-teensy") or ""), | |||
| "-board=%s" % board_config.id.upper(), | |||
| "-reboot" | |||
| ], | |||
| UPLOADCMD="$UPLOADER $UPLOADERFLAGS" | |||
| ) | |||
| upload_actions = [env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE")] | |||
| # custom upload tool | |||
| elif upload_protocol == "custom": | |||
| upload_actions = [env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE")] | |||
| else: | |||
| sys.stderr.write("Warning! Unknown upload protocol %s\n" % upload_protocol) | |||
| AlwaysBuild(env.Alias("upload", target_firm, upload_actions)) | |||
| # | |||
| # Default targets | |||
| # | |||
| Default([target_buildprog, target_size]) | |||
| @@ -0,0 +1,2 @@ | |||
| .pioenvs | |||
| .piolibdeps | |||
| @@ -0,0 +1,67 @@ | |||
| # Continuous Integration (CI) is the practice, in software | |||
| # engineering, of merging all developer working copies with a shared mainline | |||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||
| # | |||
| # Documentation: | |||
| # | |||
| # * Travis CI Embedded Builds with PlatformIO | |||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||
| # | |||
| # * PlatformIO integration with Travis CI | |||
| # < https://docs.platformio.org/page/ci/travis.html > | |||
| # | |||
| # * User Guide for `platformio ci` command | |||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||
| # | |||
| # | |||
| # Please choose one of the following templates (proposed below) and uncomment | |||
| # it (remove "# " before each line) or use own configuration according to the | |||
| # Travis CI documentation (see above). | |||
| # | |||
| # | |||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio run | |||
| # | |||
| # Template #2: The project is intended to be used as a library with examples. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # env: | |||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N | |||
| @@ -0,0 +1,38 @@ | |||
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| How to build PlatformIO based project | |||
| ===================================== | |||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||
| 3. Extract ZIP archive | |||
| 4. Run these commands: | |||
| .. code-block:: bash | |||
| # Change directory to example | |||
| > cd platform-teensy/examples/arduino-blink | |||
| # Build project | |||
| > platformio run | |||
| # Upload firmware | |||
| > platformio run --target upload | |||
| # Build specific environment | |||
| > platformio run -e teensy31 | |||
| # Upload firmware for the specific environment | |||
| > platformio run -e teensy31 --target upload | |||
| # Clean build files | |||
| > platformio run --target clean | |||
| @@ -0,0 +1,39 @@ | |||
| This directory is intended for project header files. | |||
| A header file is a file containing C declarations and macro definitions | |||
| to be shared between several project source files. You request the use of a | |||
| header file in your project source file (C, C++, etc) located in `src` folder | |||
| by including it, with the C preprocessing directive `#include'. | |||
| ```src/main.c | |||
| #include "header.h" | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| Including a header file produces the same results as copying the header file | |||
| into each source file that needs it. Such copying would be time-consuming | |||
| and error-prone. With a header file, the related declarations appear | |||
| in only one place. If they need to be changed, they can be changed in one | |||
| place, and programs that include the header file will automatically use the | |||
| new version when next recompiled. The header file eliminates the labor of | |||
| finding and changing all the copies as well as the risk that a failure to | |||
| find one copy will result in inconsistencies within a program. | |||
| In C, the usual convention is to give header files names that end with `.h'. | |||
| It is most portable to use only letters, digits, dashes, and underscores in | |||
| header file names, and at most one dot. | |||
| Read more about using header files in official GCC documentation: | |||
| * Include Syntax | |||
| * Include Operation | |||
| * Once-Only Headers | |||
| * Computed Includes | |||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html | |||
| @@ -0,0 +1,46 @@ | |||
| This directory is intended for project specific (private) libraries. | |||
| PlatformIO will compile them to static libraries and link into executable file. | |||
| The source code of each library should be placed in a an own separate directory | |||
| ("lib/your_library_name/[here are source files]"). | |||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||
| |--lib | |||
| | | | |||
| | |--Bar | |||
| | | |--docs | |||
| | | |--examples | |||
| | | |--src | |||
| | | |- Bar.c | |||
| | | |- Bar.h | |||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||
| | | | |||
| | |--Foo | |||
| | | |- Foo.c | |||
| | | |- Foo.h | |||
| | | | |||
| | |- README --> THIS FILE | |||
| | | |||
| |- platformio.ini | |||
| |--src | |||
| |- main.c | |||
| and a contents of `src/main.c`: | |||
| ``` | |||
| #include <Foo.h> | |||
| #include <Bar.h> | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| PlatformIO Library Dependency Finder will find automatically dependent | |||
| libraries scanning project source files. | |||
| More information about PlatformIO Library Dependency Finder | |||
| - https://docs.platformio.org/page/librarymanager/ldf.html | |||
| @@ -0,0 +1,53 @@ | |||
| ; PlatformIO Project Configuration File | |||
| ; | |||
| ; Build options: build flags, source filter, extra scripting | |||
| ; Upload options: custom port, speed and extra flags | |||
| ; Library options: dependencies, extra library storages | |||
| ; | |||
| ; Please visit documentation for the other options and examples | |||
| ; http://docs.platformio.org/page/projectconf.html | |||
| [env:teensy2] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy2 | |||
| [env:teensy 2pp] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy2pp | |||
| [env:teensy30] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy30 | |||
| [env:teensy31] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy31 | |||
| [env:teensylc] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensylc | |||
| [env:teensy35] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy35 | |||
| [env:teensy36] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy36 | |||
| [env:teensy40] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy40 | |||
| [env:teensy41] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy41 | |||
| @@ -0,0 +1,25 @@ | |||
| /* | |||
| * Blink | |||
| * Turns on an LED on for one second, | |||
| * then off for one second, repeatedly. | |||
| */ | |||
| #include <Arduino.h> | |||
| void setup() | |||
| { | |||
| // initialize LED digital pin as an output. | |||
| pinMode(LED_BUILTIN, OUTPUT); | |||
| } | |||
| void loop() | |||
| { | |||
| // turn the LED on (HIGH is the voltage level) | |||
| digitalWrite(LED_BUILTIN, HIGH); | |||
| // wait for a second | |||
| delay(1000); | |||
| // turn the LED off by making the voltage LOW | |||
| digitalWrite(LED_BUILTIN, LOW); | |||
| // wait for a second | |||
| delay(1000); | |||
| } | |||
| @@ -0,0 +1,11 @@ | |||
| This directory is intended for PIO Unit Testing and project tests. | |||
| Unit Testing is a software testing method by which individual units of | |||
| source code, sets of one or more MCU program modules together with associated | |||
| control data, usage procedures, and operating procedures, are tested to | |||
| determine whether they are fit for use. Unit testing finds problems early | |||
| in the development cycle. | |||
| More information about PIO Unit Testing: | |||
| - https://docs.platformio.org/page/plus/unit-testing.html | |||
| @@ -0,0 +1,2 @@ | |||
| .pioenvs | |||
| .piolibdeps | |||
| @@ -0,0 +1,67 @@ | |||
| # Continuous Integration (CI) is the practice, in software | |||
| # engineering, of merging all developer working copies with a shared mainline | |||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||
| # | |||
| # Documentation: | |||
| # | |||
| # * Travis CI Embedded Builds with PlatformIO | |||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||
| # | |||
| # * PlatformIO integration with Travis CI | |||
| # < https://docs.platformio.org/page/ci/travis.html > | |||
| # | |||
| # * User Guide for `platformio ci` command | |||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||
| # | |||
| # | |||
| # Please choose one of the following templates (proposed below) and uncomment | |||
| # it (remove "# " before each line) or use own configuration according to the | |||
| # Travis CI documentation (see above). | |||
| # | |||
| # | |||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio run | |||
| # | |||
| # Template #2: The project is intended to be used as a library with examples. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # env: | |||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N | |||
| @@ -0,0 +1,32 @@ | |||
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| How to build PlatformIO based project | |||
| ===================================== | |||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||
| 3. Extract ZIP archive | |||
| 4. Run these commands: | |||
| .. code-block:: bash | |||
| # Change directory to example | |||
| > cd platform-teensy/examples/arduino-hid-usb-mouse | |||
| # Build project | |||
| > platformio run | |||
| # Upload firmware | |||
| > platformio run --target upload | |||
| # Clean build files | |||
| > platformio run --target clean | |||
| @@ -0,0 +1,39 @@ | |||
| This directory is intended for project header files. | |||
| A header file is a file containing C declarations and macro definitions | |||
| to be shared between several project source files. You request the use of a | |||
| header file in your project source file (C, C++, etc) located in `src` folder | |||
| by including it, with the C preprocessing directive `#include'. | |||
| ```src/main.c | |||
| #include "header.h" | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| Including a header file produces the same results as copying the header file | |||
| into each source file that needs it. Such copying would be time-consuming | |||
| and error-prone. With a header file, the related declarations appear | |||
| in only one place. If they need to be changed, they can be changed in one | |||
| place, and programs that include the header file will automatically use the | |||
| new version when next recompiled. The header file eliminates the labor of | |||
| finding and changing all the copies as well as the risk that a failure to | |||
| find one copy will result in inconsistencies within a program. | |||
| In C, the usual convention is to give header files names that end with `.h'. | |||
| It is most portable to use only letters, digits, dashes, and underscores in | |||
| header file names, and at most one dot. | |||
| Read more about using header files in official GCC documentation: | |||
| * Include Syntax | |||
| * Include Operation | |||
| * Once-Only Headers | |||
| * Computed Includes | |||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html | |||
| @@ -0,0 +1,46 @@ | |||
| This directory is intended for project specific (private) libraries. | |||
| PlatformIO will compile them to static libraries and link into executable file. | |||
| The source code of each library should be placed in a an own separate directory | |||
| ("lib/your_library_name/[here are source files]"). | |||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||
| |--lib | |||
| | | | |||
| | |--Bar | |||
| | | |--docs | |||
| | | |--examples | |||
| | | |--src | |||
| | | |- Bar.c | |||
| | | |- Bar.h | |||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||
| | | | |||
| | |--Foo | |||
| | | |- Foo.c | |||
| | | |- Foo.h | |||
| | | | |||
| | |- README --> THIS FILE | |||
| | | |||
| |- platformio.ini | |||
| |--src | |||
| |- main.c | |||
| and a contents of `src/main.c`: | |||
| ``` | |||
| #include <Foo.h> | |||
| #include <Bar.h> | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| PlatformIO Library Dependency Finder will find automatically dependent | |||
| libraries scanning project source files. | |||
| More information about PlatformIO Library Dependency Finder | |||
| - https://docs.platformio.org/page/librarymanager/ldf.html | |||
| @@ -0,0 +1,50 @@ | |||
| ; PlatformIO Project Configuration File | |||
| ; | |||
| ; Build options: build flags, source filter, extra scripting | |||
| ; Upload options: custom port, speed and extra flags | |||
| ; Library options: dependencies, extra library storages | |||
| ; | |||
| ; Please visit documentation for the other options and examples | |||
| ; http://docs.platformio.org/page/projectconf.html | |||
| [env:teensy2] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy2 | |||
| build_flags = -DUSB_SERIAL_HID | |||
| [env:teensy2pp] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy2pp | |||
| build_flags = -DUSB_SERIAL_HID | |||
| [env:teensy30] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy30 | |||
| build_flags = -DUSB_SERIAL_HID | |||
| [env:teensy31] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy31 | |||
| build_flags = -DUSB_SERIAL_HID | |||
| [env:teensylc] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensylc | |||
| build_flags = -DUSB_SERIAL_HID | |||
| [env:teensy35] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy35 | |||
| build_flags = -DUSB_SERIAL_HID | |||
| [env:teensy36] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy36 | |||
| build_flags = -DUSB_SERIAL_HID | |||
| @@ -0,0 +1,26 @@ | |||
| /* Simple USB Mouse Example | |||
| Teensy becomes a USB mouse and moves the cursor in a triangle | |||
| You must select Mouse from the "Tools > USB Type" menu | |||
| This example code is in the public domain. | |||
| */ | |||
| #include <Arduino.h> | |||
| void setup() { } // no setup needed | |||
| void loop() { | |||
| int i; | |||
| for (i=0; i<40; i++) { | |||
| Mouse.move(2, -1); | |||
| delay(25); | |||
| } | |||
| for (i=0; i<40; i++) { | |||
| Mouse.move(2, 2); | |||
| delay(25); | |||
| } | |||
| for (i=0; i<40; i++) { | |||
| Mouse.move(-4, -1); | |||
| delay(25); | |||
| } | |||
| } | |||
| @@ -0,0 +1,11 @@ | |||
| This directory is intended for PIO Unit Testing and project tests. | |||
| Unit Testing is a software testing method by which individual units of | |||
| source code, sets of one or more MCU program modules together with associated | |||
| control data, usage procedures, and operating procedures, are tested to | |||
| determine whether they are fit for use. Unit testing finds problems early | |||
| in the development cycle. | |||
| More information about PIO Unit Testing: | |||
| - https://docs.platformio.org/page/plus/unit-testing.html | |||
| @@ -0,0 +1,2 @@ | |||
| .pioenvs | |||
| .piolibdeps | |||
| @@ -0,0 +1,67 @@ | |||
| # Continuous Integration (CI) is the practice, in software | |||
| # engineering, of merging all developer working copies with a shared mainline | |||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||
| # | |||
| # Documentation: | |||
| # | |||
| # * Travis CI Embedded Builds with PlatformIO | |||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||
| # | |||
| # * PlatformIO integration with Travis CI | |||
| # < https://docs.platformio.org/page/ci/travis.html > | |||
| # | |||
| # * User Guide for `platformio ci` command | |||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||
| # | |||
| # | |||
| # Please choose one of the following templates (proposed below) and uncomment | |||
| # it (remove "# " before each line) or use own configuration according to the | |||
| # Travis CI documentation (see above). | |||
| # | |||
| # | |||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio run | |||
| # | |||
| # Template #2: The project is intended to be used as a library with examples. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # env: | |||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N | |||
| @@ -0,0 +1,38 @@ | |||
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| How to build PlatformIO based project | |||
| ===================================== | |||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||
| 3. Extract ZIP archive | |||
| 4. Run these commands: | |||
| .. code-block:: bash | |||
| # Change directory to example | |||
| > cd platform-teensy/examples/arduino-internal-libs | |||
| # Build project | |||
| > platformio run | |||
| # Upload firmware | |||
| > platformio run --target upload | |||
| # Build specific environment | |||
| > platformio run -e teensy31 | |||
| # Upload firmware for the specific environment | |||
| > platformio run -e teensy31 --target upload | |||
| # Clean build files | |||
| > platformio run --target clean | |||
| @@ -0,0 +1,39 @@ | |||
| This directory is intended for project header files. | |||
| A header file is a file containing C declarations and macro definitions | |||
| to be shared between several project source files. You request the use of a | |||
| header file in your project source file (C, C++, etc) located in `src` folder | |||
| by including it, with the C preprocessing directive `#include'. | |||
| ```src/main.c | |||
| #include "header.h" | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| Including a header file produces the same results as copying the header file | |||
| into each source file that needs it. Such copying would be time-consuming | |||
| and error-prone. With a header file, the related declarations appear | |||
| in only one place. If they need to be changed, they can be changed in one | |||
| place, and programs that include the header file will automatically use the | |||
| new version when next recompiled. The header file eliminates the labor of | |||
| finding and changing all the copies as well as the risk that a failure to | |||
| find one copy will result in inconsistencies within a program. | |||
| In C, the usual convention is to give header files names that end with `.h'. | |||
| It is most portable to use only letters, digits, dashes, and underscores in | |||
| header file names, and at most one dot. | |||
| Read more about using header files in official GCC documentation: | |||
| * Include Syntax | |||
| * Include Operation | |||
| * Once-Only Headers | |||
| * Computed Includes | |||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html | |||
| @@ -0,0 +1,46 @@ | |||
| This directory is intended for project specific (private) libraries. | |||
| PlatformIO will compile them to static libraries and link into executable file. | |||
| The source code of each library should be placed in a an own separate directory | |||
| ("lib/your_library_name/[here are source files]"). | |||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||
| |--lib | |||
| | | | |||
| | |--Bar | |||
| | | |--docs | |||
| | | |--examples | |||
| | | |--src | |||
| | | |- Bar.c | |||
| | | |- Bar.h | |||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||
| | | | |||
| | |--Foo | |||
| | | |- Foo.c | |||
| | | |- Foo.h | |||
| | | | |||
| | |- README --> THIS FILE | |||
| | | |||
| |- platformio.ini | |||
| |--src | |||
| |- main.c | |||
| and a contents of `src/main.c`: | |||
| ``` | |||
| #include <Foo.h> | |||
| #include <Bar.h> | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| PlatformIO Library Dependency Finder will find automatically dependent | |||
| libraries scanning project source files. | |||
| More information about PlatformIO Library Dependency Finder | |||
| - https://docs.platformio.org/page/librarymanager/ldf.html | |||
| @@ -0,0 +1,53 @@ | |||
| ; PlatformIO Project Configuration File | |||
| ; | |||
| ; Build options: build flags, source filter, extra scripting | |||
| ; Upload options: custom port, speed and extra flags | |||
| ; Library options: dependencies, extra library storages | |||
| ; | |||
| ; Please visit documentation for the other options and examples | |||
| ; http://docs.platformio.org/page/projectconf.html | |||
| [env:teensy2] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy2 | |||
| [env:teensy2pp] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy2pp | |||
| [env:teensy30] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy30 | |||
| [env:teensy31] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy31 | |||
| [env:teensylc] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensylc | |||
| [env:teensy35] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy35 | |||
| [env:teensy36] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy36 | |||
| [env:teensy40] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy40 | |||
| [env:teensy41] | |||
| platform = teensy | |||
| framework = arduino | |||
| board = teensy41 | |||
| @@ -0,0 +1,80 @@ | |||
| /* | |||
| Chat Server | |||
| A simple server that distributes any incoming messages to all | |||
| connected clients. To use telnet to your device's IP address and type. | |||
| You can see the client's input in the serial monitor as well. | |||
| Using an Arduino Wiznet Ethernet shield. | |||
| Circuit: | |||
| * Ethernet shield attached to pins 10, 11, 12, 13 | |||
| * Analog inputs attached to pins A0 through A5 (optional) | |||
| created 18 Dec 2009 | |||
| by David A. Mellis | |||
| modified 9 Apr 2012 | |||
| by Tom Igoe | |||
| */ | |||
| #include <Arduino.h> | |||
| #include <SPI.h> | |||
| #include <Ethernet.h> | |||
| // Enter a MAC address and IP address for your controller below. | |||
| // The IP address will be dependent on your local network. | |||
| // gateway and subnet are optional: | |||
| byte mac[] = { | |||
| 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; | |||
| IPAddress ip(192,168,1, 177); | |||
| IPAddress gateway(192,168,1, 1); | |||
| IPAddress subnet(255, 255, 0, 0); | |||
| // telnet defaults to port 23 | |||
| EthernetServer server(23); | |||
| boolean alreadyConnected = false; // whether or not the client was connected previously | |||
| void setup() { | |||
| // initialize the ethernet device | |||
| Ethernet.begin(mac, ip, gateway, subnet); | |||
| // start listening for clients | |||
| server.begin(); | |||
| // Open serial communications and wait for port to open: | |||
| Serial.begin(9600); | |||
| while (!Serial) { | |||
| ; // wait for serial port to connect. Needed for Leonardo only | |||
| } | |||
| Serial.print("Chat server address:"); | |||
| Serial.println(Ethernet.localIP()); | |||
| } | |||
| void loop() { | |||
| // wait for a new client: | |||
| EthernetClient client = server.available(); | |||
| // when the client sends the first byte, say hello: | |||
| if (client) { | |||
| if (!alreadyConnected) { | |||
| // clead out the input buffer: | |||
| client.flush(); | |||
| Serial.println("We have a new client"); | |||
| client.println("Hello, client!"); | |||
| alreadyConnected = true; | |||
| } | |||
| if (client.available() > 0) { | |||
| // read the bytes incoming from the client: | |||
| char thisChar = client.read(); | |||
| // echo the bytes back to the client: | |||
| server.write(thisChar); | |||
| // echo the bytes to the server as well: | |||
| Serial.write(thisChar); | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,11 @@ | |||
| This directory is intended for PIO Unit Testing and project tests. | |||
| Unit Testing is a software testing method by which individual units of | |||
| source code, sets of one or more MCU program modules together with associated | |||
| control data, usage procedures, and operating procedures, are tested to | |||
| determine whether they are fit for use. Unit testing finds problems early | |||
| in the development cycle. | |||
| More information about PIO Unit Testing: | |||
| - https://docs.platformio.org/page/plus/unit-testing.html | |||
| @@ -0,0 +1,2 @@ | |||
| .pioenvs | |||
| .piolibdeps | |||
| @@ -0,0 +1,67 @@ | |||
| # Continuous Integration (CI) is the practice, in software | |||
| # engineering, of merging all developer working copies with a shared mainline | |||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||
| # | |||
| # Documentation: | |||
| # | |||
| # * Travis CI Embedded Builds with PlatformIO | |||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||
| # | |||
| # * PlatformIO integration with Travis CI | |||
| # < https://docs.platformio.org/page/ci/travis.html > | |||
| # | |||
| # * User Guide for `platformio ci` command | |||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||
| # | |||
| # | |||
| # Please choose one of the following templates (proposed below) and uncomment | |||
| # it (remove "# " before each line) or use own configuration according to the | |||
| # Travis CI documentation (see above). | |||
| # | |||
| # | |||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio run | |||
| # | |||
| # Template #2: The project is intended to be used as a library with examples. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # env: | |||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N | |||
| @@ -0,0 +1,32 @@ | |||
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| How to build PlatformIO based project | |||
| ===================================== | |||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||
| 3. Extract ZIP archive | |||
| 4. Run these commands: | |||
| .. code-block:: bash | |||
| # Change directory to example | |||
| > cd platform-teensy/examples/mbed-blink | |||
| # Build project | |||
| > platformio run | |||
| # Upload firmware | |||
| > platformio run --target upload | |||
| # Clean build files | |||
| > platformio run --target clean | |||
| @@ -0,0 +1,39 @@ | |||
| This directory is intended for project header files. | |||
| A header file is a file containing C declarations and macro definitions | |||
| to be shared between several project source files. You request the use of a | |||
| header file in your project source file (C, C++, etc) located in `src` folder | |||
| by including it, with the C preprocessing directive `#include'. | |||
| ```src/main.c | |||
| #include "header.h" | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| Including a header file produces the same results as copying the header file | |||
| into each source file that needs it. Such copying would be time-consuming | |||
| and error-prone. With a header file, the related declarations appear | |||
| in only one place. If they need to be changed, they can be changed in one | |||
| place, and programs that include the header file will automatically use the | |||
| new version when next recompiled. The header file eliminates the labor of | |||
| finding and changing all the copies as well as the risk that a failure to | |||
| find one copy will result in inconsistencies within a program. | |||
| In C, the usual convention is to give header files names that end with `.h'. | |||
| It is most portable to use only letters, digits, dashes, and underscores in | |||
| header file names, and at most one dot. | |||
| Read more about using header files in official GCC documentation: | |||
| * Include Syntax | |||
| * Include Operation | |||
| * Once-Only Headers | |||
| * Computed Includes | |||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html | |||
| @@ -0,0 +1,46 @@ | |||
| This directory is intended for project specific (private) libraries. | |||
| PlatformIO will compile them to static libraries and link into executable file. | |||
| The source code of each library should be placed in a an own separate directory | |||
| ("lib/your_library_name/[here are source files]"). | |||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||
| |--lib | |||
| | | | |||
| | |--Bar | |||
| | | |--docs | |||
| | | |--examples | |||
| | | |--src | |||
| | | |- Bar.c | |||
| | | |- Bar.h | |||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||
| | | | |||
| | |--Foo | |||
| | | |- Foo.c | |||
| | | |- Foo.h | |||
| | | | |||
| | |- README --> THIS FILE | |||
| | | |||
| |- platformio.ini | |||
| |--src | |||
| |- main.c | |||
| and a contents of `src/main.c`: | |||
| ``` | |||
| #include <Foo.h> | |||
| #include <Bar.h> | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| PlatformIO Library Dependency Finder will find automatically dependent | |||
| libraries scanning project source files. | |||
| More information about PlatformIO Library Dependency Finder | |||
| - https://docs.platformio.org/page/librarymanager/ldf.html | |||
| @@ -0,0 +1,13 @@ | |||
| ; PlatformIO Project Configuration File | |||
| ; | |||
| ; Build options: build flags, source filter, extra scripting | |||
| ; Upload options: custom port, speed and extra flags | |||
| ; Library options: dependencies, extra library storages | |||
| ; | |||
| ; Please visit documentation for the other options and examples | |||
| ; http://docs.platformio.org/page/projectconf.html | |||
| [env:teensy31] | |||
| platform = teensy | |||
| framework = mbed | |||
| board = teensy31 | |||
| @@ -0,0 +1,12 @@ | |||
| #include "mbed.h" | |||
| DigitalOut myled(LED1); | |||
| int main() { | |||
| while(1) { | |||
| myled = 1; | |||
| wait(1); | |||
| myled = 0; | |||
| wait(1); | |||
| } | |||
| } | |||
| @@ -0,0 +1,11 @@ | |||
| This directory is intended for PIO Unit Testing and project tests. | |||
| Unit Testing is a software testing method by which individual units of | |||
| source code, sets of one or more MCU program modules together with associated | |||
| control data, usage procedures, and operating procedures, are tested to | |||
| determine whether they are fit for use. Unit testing finds problems early | |||
| in the development cycle. | |||
| More information about PIO Unit Testing: | |||
| - https://docs.platformio.org/page/plus/unit-testing.html | |||
| @@ -0,0 +1,2 @@ | |||
| .pioenvs | |||
| .piolibdeps | |||
| @@ -0,0 +1,67 @@ | |||
| # Continuous Integration (CI) is the practice, in software | |||
| # engineering, of merging all developer working copies with a shared mainline | |||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||
| # | |||
| # Documentation: | |||
| # | |||
| # * Travis CI Embedded Builds with PlatformIO | |||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||
| # | |||
| # * PlatformIO integration with Travis CI | |||
| # < https://docs.platformio.org/page/ci/travis.html > | |||
| # | |||
| # * User Guide for `platformio ci` command | |||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||
| # | |||
| # | |||
| # Please choose one of the following templates (proposed below) and uncomment | |||
| # it (remove "# " before each line) or use own configuration according to the | |||
| # Travis CI documentation (see above). | |||
| # | |||
| # | |||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio run | |||
| # | |||
| # Template #2: The project is intended to be used as a library with examples. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # env: | |||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N | |||
| @@ -0,0 +1,32 @@ | |||
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| How to build PlatformIO based project | |||
| ===================================== | |||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||
| 3. Extract ZIP archive | |||
| 4. Run these commands: | |||
| .. code-block:: bash | |||
| # Change directory to example | |||
| > cd platform-teensy/examples/mbed-dsp | |||
| # Build project | |||
| > platformio run | |||
| # Upload firmware | |||
| > platformio run --target upload | |||
| # Clean build files | |||
| > platformio run --target clean | |||
| @@ -0,0 +1,39 @@ | |||
| This directory is intended for project header files. | |||
| A header file is a file containing C declarations and macro definitions | |||
| to be shared between several project source files. You request the use of a | |||
| header file in your project source file (C, C++, etc) located in `src` folder | |||
| by including it, with the C preprocessing directive `#include'. | |||
| ```src/main.c | |||
| #include "header.h" | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| Including a header file produces the same results as copying the header file | |||
| into each source file that needs it. Such copying would be time-consuming | |||
| and error-prone. With a header file, the related declarations appear | |||
| in only one place. If they need to be changed, they can be changed in one | |||
| place, and programs that include the header file will automatically use the | |||
| new version when next recompiled. The header file eliminates the labor of | |||
| finding and changing all the copies as well as the risk that a failure to | |||
| find one copy will result in inconsistencies within a program. | |||
| In C, the usual convention is to give header files names that end with `.h'. | |||
| It is most portable to use only letters, digits, dashes, and underscores in | |||
| header file names, and at most one dot. | |||
| Read more about using header files in official GCC documentation: | |||
| * Include Syntax | |||
| * Include Operation | |||
| * Once-Only Headers | |||
| * Computed Includes | |||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html | |||
| @@ -0,0 +1,46 @@ | |||
| This directory is intended for project specific (private) libraries. | |||
| PlatformIO will compile them to static libraries and link into executable file. | |||
| The source code of each library should be placed in a an own separate directory | |||
| ("lib/your_library_name/[here are source files]"). | |||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||
| |--lib | |||
| | | | |||
| | |--Bar | |||
| | | |--docs | |||
| | | |--examples | |||
| | | |--src | |||
| | | |- Bar.c | |||
| | | |- Bar.h | |||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||
| | | | |||
| | |--Foo | |||
| | | |- Foo.c | |||
| | | |- Foo.h | |||
| | | | |||
| | |- README --> THIS FILE | |||
| | | |||
| |- platformio.ini | |||
| |--src | |||
| |- main.c | |||
| and a contents of `src/main.c`: | |||
| ``` | |||
| #include <Foo.h> | |||
| #include <Bar.h> | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| PlatformIO Library Dependency Finder will find automatically dependent | |||
| libraries scanning project source files. | |||
| More information about PlatformIO Library Dependency Finder | |||
| - https://docs.platformio.org/page/librarymanager/ldf.html | |||
| @@ -0,0 +1,13 @@ | |||
| ; PlatformIO Project Configuration File | |||
| ; | |||
| ; Build options: build flags, source filter, extra scripting | |||
| ; Upload options: custom port, speed and extra flags | |||
| ; Library options: dependencies, extra library storages | |||
| ; | |||
| ; Please visit documentation for the other options and examples | |||
| ; http://docs.platformio.org/page/projectconf.html | |||
| [env:teensy31] | |||
| platform = teensy | |||
| framework = mbed | |||
| board = teensy31 | |||
| @@ -0,0 +1,94 @@ | |||
| #include "arm_math.h" | |||
| /* ---------------------------------------------------------------------- | |||
| ** Test input signal contains 1000Hz + 15000 Hz | |||
| ** ------------------------------------------------------------------- */ | |||
| float32_t testInput_f32_1kHz_15kHz[320] = | |||
| { | |||
| +0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||
| -0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||
| -0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, | |||
| -0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, | |||
| +0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||
| +0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||
| -0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, | |||
| -0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, | |||
| +0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||
| +0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||
| -0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, | |||
| -0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, | |||
| -0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||
| -0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||
| -0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, | |||
| -0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, | |||
| +0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||
| +0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||
| -0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, | |||
| -0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, | |||
| -0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||
| +0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||
| -0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, | |||
| -0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, | |||
| -0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, | |||
| +0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, | |||
| +0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, | |||
| +0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, | |||
| }; | |||
| float32_t refOutput[320] = | |||
| { | |||
| +0.0000000000f, -0.0010797829f, -0.0007681386f, -0.0001982932f, +0.0000644313f, +0.0020854271f, +0.0036891871f, +0.0015855941f, | |||
| -0.0026280805f, -0.0075907658f, -0.0119390538f, -0.0086665968f, +0.0088981202f, +0.0430539279f, +0.0974468742f, +0.1740405600f, | |||
| +0.2681416601f, +0.3747720089f, +0.4893362230f, +0.6024154672f, +0.7058740791f, +0.7968348987f, +0.8715901940f, +0.9277881093f, | |||
| +0.9682182661f, +0.9934674267f, +1.0012052245f, +0.9925859371f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, | |||
| +0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, -0.0000000000f, -0.1309866321f, | |||
| -0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, | |||
| -0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, | |||
| -0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, | |||
| +0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, | |||
| +0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, | |||
| +0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, -0.0000000000f, -0.1309866321f, | |||
| -0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, | |||
| -0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, | |||
| -0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, | |||
| +0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, | |||
| +0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, | |||
| +0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, -0.0000000000f, -0.1309866321f, | |||
| -0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, | |||
| -0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, | |||
| -0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, | |||
| +0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, | |||
| +0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, | |||
| +0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, +0.0000000000f, -0.1309866321f, | |||
| -0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, | |||
| -0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, | |||
| -0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, | |||
| +0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, | |||
| +0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, | |||
| +0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, +0.0000000000f, -0.1309866321f, | |||
| -0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, | |||
| -0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, | |||
| -0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, -0.0000000000f, +0.1309866321f, | |||
| +0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, | |||
| +0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, | |||
| +0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, +0.0000000000f, -0.1309866321f, | |||
| -0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, | |||
| -0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, | |||
| -0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, | |||
| +0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, | |||
| +0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f | |||
| }; | |||
| @@ -0,0 +1,65 @@ | |||
| #include "arm_math.h" | |||
| #include "math_helper.h" | |||
| #include <stdio.h> | |||
| #define BLOCK_SIZE 32 | |||
| #define NUM_BLOCKS 10 | |||
| #define TEST_LENGTH_SAMPLES (BLOCK_SIZE * NUM_BLOCKS) | |||
| #define SNR_THRESHOLD_F32 140.0f | |||
| #define NUM_TAPS 29 | |||
| /* ------------------------------------------------------------------- | |||
| * The input signal and reference output (computed with MATLAB) | |||
| * are defined externally in arm_fir_lpf_data.c. | |||
| * ------------------------------------------------------------------- */ | |||
| extern float32_t testInput_f32_1kHz_15kHz[TEST_LENGTH_SAMPLES]; | |||
| extern float32_t refOutput[TEST_LENGTH_SAMPLES]; | |||
| /* ------------------------------------------------------------------- | |||
| * Declare State buffer of size (numTaps + blockSize - 1) | |||
| * ------------------------------------------------------------------- */ | |||
| static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1]; | |||
| /* ---------------------------------------------------------------------- | |||
| * FIR Coefficients buffer generated using fir1() MATLAB function. | |||
| * fir1(28, 6/24) | |||
| * ------------------------------------------------------------------- */ | |||
| const float32_t firCoeffs32[NUM_TAPS] = { | |||
| -0.0018225230f, -0.0015879294f, +0.0000000000f, +0.0036977508f, +0.0080754303f, | |||
| +0.0085302217f, -0.0000000000f, -0.0173976984f, -0.0341458607f, -0.0333591565f, | |||
| +0.0000000000f, +0.0676308395f, +0.1522061835f, +0.2229246956f, +0.2504960933f, | |||
| +0.2229246956f, +0.1522061835f, +0.0676308395f, +0.0000000000f, -0.0333591565f, | |||
| -0.0341458607f, -0.0173976984f, -0.0000000000f, +0.0085302217f, +0.0080754303f, | |||
| +0.0036977508f, +0.0000000000f, -0.0015879294f, -0.0018225230f | |||
| }; | |||
| /* ---------------------------------------------------------------------- | |||
| * FIR LPF Example | |||
| * ------------------------------------------------------------------- */ | |||
| int main(void) { | |||
| /* Call FIR init function to initialize the instance structure. */ | |||
| arm_fir_instance_f32 S; | |||
| arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32[0], &firStateF32[0], BLOCK_SIZE); | |||
| /* ---------------------------------------------------------------------- | |||
| * Call the FIR process function for every blockSize samples | |||
| * ------------------------------------------------------------------- */ | |||
| for (uint32_t i=0; i < NUM_BLOCKS; i++) { | |||
| float32_t* signal = testInput_f32_1kHz_15kHz + (i * BLOCK_SIZE); | |||
| arm_fir_f32(&S, signal, signal, BLOCK_SIZE); | |||
| } | |||
| /* ---------------------------------------------------------------------- | |||
| * Compare the generated output against the reference output computed | |||
| * in MATLAB. | |||
| * ------------------------------------------------------------------- */ | |||
| float32_t snr = arm_snr_f32(refOutput, testInput_f32_1kHz_15kHz, TEST_LENGTH_SAMPLES); | |||
| printf("snr: %f\n\r", snr); | |||
| if (snr < SNR_THRESHOLD_F32) { | |||
| printf("Failed\n\r"); | |||
| } else { | |||
| printf("Success\n\r"); | |||
| } | |||
| } | |||
| @@ -0,0 +1,11 @@ | |||
| This directory is intended for PIO Unit Testing and project tests. | |||
| Unit Testing is a software testing method by which individual units of | |||
| source code, sets of one or more MCU program modules together with associated | |||
| control data, usage procedures, and operating procedures, are tested to | |||
| determine whether they are fit for use. Unit testing finds problems early | |||
| in the development cycle. | |||
| More information about PIO Unit Testing: | |||
| - https://docs.platformio.org/page/plus/unit-testing.html | |||
| @@ -0,0 +1,2 @@ | |||
| .pioenvs | |||
| .piolibdeps | |||
| @@ -0,0 +1,67 @@ | |||
| # Continuous Integration (CI) is the practice, in software | |||
| # engineering, of merging all developer working copies with a shared mainline | |||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||
| # | |||
| # Documentation: | |||
| # | |||
| # * Travis CI Embedded Builds with PlatformIO | |||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||
| # | |||
| # * PlatformIO integration with Travis CI | |||
| # < https://docs.platformio.org/page/ci/travis.html > | |||
| # | |||
| # * User Guide for `platformio ci` command | |||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||
| # | |||
| # | |||
| # Please choose one of the following templates (proposed below) and uncomment | |||
| # it (remove "# " before each line) or use own configuration according to the | |||
| # Travis CI documentation (see above). | |||
| # | |||
| # | |||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio run | |||
| # | |||
| # Template #2: The project is intended to be used as a library with examples. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # env: | |||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N | |||
| @@ -0,0 +1,32 @@ | |||
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| How to build PlatformIO based project | |||
| ===================================== | |||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||
| 3. Extract ZIP archive | |||
| 4. Run these commands: | |||
| .. code-block:: bash | |||
| # Change directory to example | |||
| > cd platform-teensy/examples/mbed-events | |||
| # Build project | |||
| > platformio run | |||
| # Upload firmware | |||
| > platformio run --target upload | |||
| # Clean build files | |||
| > platformio run --target clean | |||
| @@ -0,0 +1,39 @@ | |||
| This directory is intended for project header files. | |||
| A header file is a file containing C declarations and macro definitions | |||
| to be shared between several project source files. You request the use of a | |||
| header file in your project source file (C, C++, etc) located in `src` folder | |||
| by including it, with the C preprocessing directive `#include'. | |||
| ```src/main.c | |||
| #include "header.h" | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| Including a header file produces the same results as copying the header file | |||
| into each source file that needs it. Such copying would be time-consuming | |||
| and error-prone. With a header file, the related declarations appear | |||
| in only one place. If they need to be changed, they can be changed in one | |||
| place, and programs that include the header file will automatically use the | |||
| new version when next recompiled. The header file eliminates the labor of | |||
| finding and changing all the copies as well as the risk that a failure to | |||
| find one copy will result in inconsistencies within a program. | |||
| In C, the usual convention is to give header files names that end with `.h'. | |||
| It is most portable to use only letters, digits, dashes, and underscores in | |||
| header file names, and at most one dot. | |||
| Read more about using header files in official GCC documentation: | |||
| * Include Syntax | |||
| * Include Operation | |||
| * Once-Only Headers | |||
| * Computed Includes | |||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html | |||
| @@ -0,0 +1,46 @@ | |||
| This directory is intended for project specific (private) libraries. | |||
| PlatformIO will compile them to static libraries and link into executable file. | |||
| The source code of each library should be placed in a an own separate directory | |||
| ("lib/your_library_name/[here are source files]"). | |||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||
| |--lib | |||
| | | | |||
| | |--Bar | |||
| | | |--docs | |||
| | | |--examples | |||
| | | |--src | |||
| | | |- Bar.c | |||
| | | |- Bar.h | |||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||
| | | | |||
| | |--Foo | |||
| | | |- Foo.c | |||
| | | |- Foo.h | |||
| | | | |||
| | |- README --> THIS FILE | |||
| | | |||
| |- platformio.ini | |||
| |--src | |||
| |- main.c | |||
| and a contents of `src/main.c`: | |||
| ``` | |||
| #include <Foo.h> | |||
| #include <Bar.h> | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| PlatformIO Library Dependency Finder will find automatically dependent | |||
| libraries scanning project source files. | |||
| More information about PlatformIO Library Dependency Finder | |||
| - https://docs.platformio.org/page/librarymanager/ldf.html | |||
| @@ -0,0 +1,13 @@ | |||
| ; PlatformIO Project Configuration File | |||
| ; | |||
| ; Build options: build flags, source filter, extra scripting | |||
| ; Upload options: custom port, speed and extra flags | |||
| ; Library options: dependencies, extra library storages | |||
| ; | |||
| ; Please visit documentation for the other options and examples | |||
| ; http://docs.platformio.org/page/projectconf.html | |||
| [env:teensy31 events] | |||
| platform = teensy | |||
| framework = mbed | |||
| board = teensy31 | |||
| @@ -0,0 +1,15 @@ | |||
| #include "mbed_events.h" | |||
| #include <stdio.h> | |||
| int main() { | |||
| // creates a queue with the default size | |||
| EventQueue queue; | |||
| // events are simple callbacks | |||
| queue.call(printf, "called immediately\n"); | |||
| queue.call_in(2000, printf, "called in 2 seconds\n"); | |||
| queue.call_every(1000, printf, "called every 1 seconds\n"); | |||
| // events are executed by the dispatch method | |||
| queue.dispatch(); | |||
| } | |||
| @@ -0,0 +1,11 @@ | |||
| This directory is intended for PIO Unit Testing and project tests. | |||
| Unit Testing is a software testing method by which individual units of | |||
| source code, sets of one or more MCU program modules together with associated | |||
| control data, usage procedures, and operating procedures, are tested to | |||
| determine whether they are fit for use. Unit testing finds problems early | |||
| in the development cycle. | |||
| More information about PIO Unit Testing: | |||
| - https://docs.platformio.org/page/plus/unit-testing.html | |||
| @@ -0,0 +1,2 @@ | |||
| .pioenvs | |||
| .piolibdeps | |||
| @@ -0,0 +1,67 @@ | |||
| # Continuous Integration (CI) is the practice, in software | |||
| # engineering, of merging all developer working copies with a shared mainline | |||
| # several times a day < https://docs.platformio.org/page/ci/index.html > | |||
| # | |||
| # Documentation: | |||
| # | |||
| # * Travis CI Embedded Builds with PlatformIO | |||
| # < https://docs.travis-ci.com/user/integration/platformio/ > | |||
| # | |||
| # * PlatformIO integration with Travis CI | |||
| # < https://docs.platformio.org/page/ci/travis.html > | |||
| # | |||
| # * User Guide for `platformio ci` command | |||
| # < https://docs.platformio.org/page/userguide/cmd_ci.html > | |||
| # | |||
| # | |||
| # Please choose one of the following templates (proposed below) and uncomment | |||
| # it (remove "# " before each line) or use own configuration according to the | |||
| # Travis CI documentation (see above). | |||
| # | |||
| # | |||
| # Template #1: General project. Test it using existing `platformio.ini`. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio run | |||
| # | |||
| # Template #2: The project is intended to be used as a library with examples. | |||
| # | |||
| # language: python | |||
| # python: | |||
| # - "2.7" | |||
| # | |||
| # sudo: false | |||
| # cache: | |||
| # directories: | |||
| # - "~/.platformio" | |||
| # | |||
| # env: | |||
| # - PLATFORMIO_CI_SRC=path/to/test/file.c | |||
| # - PLATFORMIO_CI_SRC=examples/file.ino | |||
| # - PLATFORMIO_CI_SRC=path/to/test/directory | |||
| # | |||
| # install: | |||
| # - pip install -U platformio | |||
| # - platformio update | |||
| # | |||
| # script: | |||
| # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N | |||
| @@ -0,0 +1,32 @@ | |||
| .. Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| How to build PlatformIO based project | |||
| ===================================== | |||
| 1. `Install PlatformIO Core <http://docs.platformio.org/page/core.html>`_ | |||
| 2. Download `development platform with examples <https://github.com/platformio/platform-teensy/archive/develop.zip>`_ | |||
| 3. Extract ZIP archive | |||
| 4. Run these commands: | |||
| .. code-block:: bash | |||
| # Change directory to example | |||
| > cd platform-teensy/examples/mbed-serial | |||
| # Build project | |||
| > platformio run | |||
| # Upload firmware | |||
| > platformio run --target upload | |||
| # Clean build files | |||
| > platformio run --target clean | |||
| @@ -0,0 +1,39 @@ | |||
| This directory is intended for project header files. | |||
| A header file is a file containing C declarations and macro definitions | |||
| to be shared between several project source files. You request the use of a | |||
| header file in your project source file (C, C++, etc) located in `src` folder | |||
| by including it, with the C preprocessing directive `#include'. | |||
| ```src/main.c | |||
| #include "header.h" | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| Including a header file produces the same results as copying the header file | |||
| into each source file that needs it. Such copying would be time-consuming | |||
| and error-prone. With a header file, the related declarations appear | |||
| in only one place. If they need to be changed, they can be changed in one | |||
| place, and programs that include the header file will automatically use the | |||
| new version when next recompiled. The header file eliminates the labor of | |||
| finding and changing all the copies as well as the risk that a failure to | |||
| find one copy will result in inconsistencies within a program. | |||
| In C, the usual convention is to give header files names that end with `.h'. | |||
| It is most portable to use only letters, digits, dashes, and underscores in | |||
| header file names, and at most one dot. | |||
| Read more about using header files in official GCC documentation: | |||
| * Include Syntax | |||
| * Include Operation | |||
| * Once-Only Headers | |||
| * Computed Includes | |||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html | |||
| @@ -0,0 +1,46 @@ | |||
| This directory is intended for project specific (private) libraries. | |||
| PlatformIO will compile them to static libraries and link into executable file. | |||
| The source code of each library should be placed in a an own separate directory | |||
| ("lib/your_library_name/[here are source files]"). | |||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | |||
| |--lib | |||
| | | | |||
| | |--Bar | |||
| | | |--docs | |||
| | | |--examples | |||
| | | |--src | |||
| | | |- Bar.c | |||
| | | |- Bar.h | |||
| | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | |||
| | | | |||
| | |--Foo | |||
| | | |- Foo.c | |||
| | | |- Foo.h | |||
| | | | |||
| | |- README --> THIS FILE | |||
| | | |||
| |- platformio.ini | |||
| |--src | |||
| |- main.c | |||
| and a contents of `src/main.c`: | |||
| ``` | |||
| #include <Foo.h> | |||
| #include <Bar.h> | |||
| int main (void) | |||
| { | |||
| ... | |||
| } | |||
| ``` | |||
| PlatformIO Library Dependency Finder will find automatically dependent | |||
| libraries scanning project source files. | |||
| More information about PlatformIO Library Dependency Finder | |||
| - https://docs.platformio.org/page/librarymanager/ldf.html | |||
| @@ -0,0 +1,13 @@ | |||
| ; PlatformIO Project Configuration File | |||
| ; | |||
| ; Build options: build flags, source filter, extra scripting | |||
| ; Upload options: custom port, speed and extra flags | |||
| ; Library options: dependencies, extra library storages | |||
| ; | |||
| ; Please visit documentation for the other options and examples | |||
| ; http://docs.platformio.org/page/projectconf.html | |||
| [env:teensy31] | |||
| platform = teensy | |||
| framework = mbed | |||
| board = teensy31 | |||
| @@ -0,0 +1,10 @@ | |||
| #include "mbed.h" | |||
| Serial pc(USBTX, USBRX); // tx, rx | |||
| int main() { | |||
| pc.printf("Hello World!\n\r"); | |||
| while(1) { | |||
| pc.putc(pc.getc() + 1); // echo input back to terminal | |||
| } | |||
| } | |||
| @@ -0,0 +1,11 @@ | |||
| This directory is intended for PIO Unit Testing and project tests. | |||
| Unit Testing is a software testing method by which individual units of | |||
| source code, sets of one or more MCU program modules together with associated | |||
| control data, usage procedures, and operating procedures, are tested to | |||
| determine whether they are fit for use. Unit testing finds problems early | |||
| in the development cycle. | |||
| More information about PIO Unit Testing: | |||
| - https://docs.platformio.org/page/plus/unit-testing.html | |||
| @@ -0,0 +1,71 @@ | |||
| { | |||
| "name": "teensy-gcc", | |||
| "title": "Teensy", | |||
| "description": "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.", | |||
| "homepage": "https://www.pjrc.com/teensy", | |||
| "license": "Apache-2.0", | |||
| "keywords": [ | |||
| "dev-platform", | |||
| "ARM", | |||
| "AVR", | |||
| "Cortex-M", | |||
| "NXP Semiconductors", | |||
| "Microchip" | |||
| ], | |||
| "engines": { | |||
| "platformio": "^5" | |||
| }, | |||
| "repository": { | |||
| "type": "git", | |||
| "url": "https://github.com/platformio/platform-teensy.git" | |||
| }, | |||
| "version": "4.17.0", | |||
| "frameworks": { | |||
| "arduino": { | |||
| "package": "framework-arduinoteensy-cxx17", | |||
| "script": "builder/frameworks/arduino.py" | |||
| }, | |||
| "mbed": { | |||
| "package": "framework-mbed", | |||
| "script": "builder/frameworks/mbed.py" | |||
| } | |||
| }, | |||
| "packages": { | |||
| "toolchain-atmelavr": { | |||
| "type": "toolchain", | |||
| "optional": false, | |||
| "owner": "platformio", | |||
| "version": "~1.50400.0" | |||
| }, | |||
| "toolchain-gcc-arm-embedded": { | |||
| "type": "toolchain", | |||
| "optional": false, | |||
| "owner": "skepto", | |||
| "version": "~0.1.0" | |||
| }, | |||
| "framework-arduinoteensy-cxx17": { | |||
| "type": "framework", | |||
| "optional": true, | |||
| "owner": "skepto", | |||
| "version": "~0.1.0" | |||
| }, | |||
| "framework-mbed": { | |||
| "type": "framework", | |||
| "optional": true, | |||
| "owner": "platformio", | |||
| "version": "~6.51506.0" | |||
| }, | |||
| "tool-teensy": { | |||
| "type": "uploader", | |||
| "optional": true, | |||
| "owner": "platformio", | |||
| "version": "<2" | |||
| }, | |||
| "tool-jlink": { | |||
| "type": "uploader", | |||
| "optional": true, | |||
| "owner": "platformio", | |||
| "version": "^1.63208.0" | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,91 @@ | |||
| # Copyright 2014-present PlatformIO <contact@platformio.org> | |||
| # | |||
| # Licensed under the Apache License, Version 2.0 (the "License"); | |||
| # you may not use this file except in compliance with the License. | |||
| # You may obtain a copy of the License at | |||
| # | |||
| # http://www.apache.org/licenses/LICENSE-2.0 | |||
| # | |||
| # Unless required by applicable law or agreed to in writing, software | |||
| # distributed under the License is distributed on an "AS IS" BASIS, | |||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| # See the License for the specific language governing permissions and | |||
| # limitations under the License. | |||
| from platform import system | |||
| from platformio.managers.platform import PlatformBase | |||
| class TeensygccPlatform(PlatformBase): | |||
| def configure_default_packages(self, variables, targets): | |||
| if variables.get("board"): | |||
| board_config = self.board_config(variables.get("board")) | |||
| del_toolchain = "toolchain-gcc-arm-embedded" | |||
| if board_config.get("build.core") != "teensy": | |||
| del_toolchain = "toolchain-atmelavr" | |||
| if del_toolchain in self.packages: | |||
| del self.packages[del_toolchain] | |||
| if "mbed" in variables.get("pioframework", []): | |||
| self.packages["toolchain-gccarmnoneeabi"][ | |||
| 'version'] = ">=1.60301.0,<1.80000.0" | |||
| # configure J-LINK tool | |||
| jlink_conds = [ | |||
| "jlink" in variables.get(option, "") | |||
| for option in ("upload_protocol", "debug_tool") | |||
| ] | |||
| if variables.get("board"): | |||
| board_config = self.board_config(variables.get("board")) | |||
| jlink_conds.extend([ | |||
| "jlink" in board_config.get(key, "") | |||
| for key in ("debug.default_tools", "upload.protocol") | |||
| ]) | |||
| jlink_pkgname = "tool-jlink" | |||
| if not any(jlink_conds) and jlink_pkgname in self.packages: | |||
| del self.packages[jlink_pkgname] | |||
| return PlatformBase.configure_default_packages( | |||
| self, variables, targets) | |||
| def get_boards(self, id_=None): | |||
| result = PlatformBase.get_boards(self, id_) | |||
| if not result: | |||
| return result | |||
| if id_: | |||
| return self._add_default_debug_tools(result) | |||
| else: | |||
| for key, value in result.items(): | |||
| result[key] = self._add_default_debug_tools(result[key]) | |||
| return result | |||
| def _add_default_debug_tools(self, board): | |||
| debug = board.manifest.get("debug", {}) | |||
| upload_protocols = board.manifest.get("upload", {}).get( | |||
| "protocols", []) | |||
| if "tools" not in debug: | |||
| debug['tools'] = {} | |||
| if "jlink" in upload_protocols and "jlink" not in debug['tools']: | |||
| assert debug.get("jlink_device"), ( | |||
| "Missed J-Link Device ID for %s" % board.id) | |||
| debug['tools']['jlink'] = { | |||
| "server": { | |||
| "package": "tool-jlink", | |||
| "arguments": [ | |||
| "-singlerun", | |||
| "-if", "SWD", | |||
| "-select", "USB", | |||
| "-device", debug.get("jlink_device"), | |||
| "-port", "2331" | |||
| ], | |||
| "executable": ("JLinkGDBServerCL.exe" | |||
| if system() == "Windows" else | |||
| "JLinkGDBServer") | |||
| } | |||
| } | |||
| board.manifest['debug'] = debug | |||
| return board | |||