From f5f5710d98c4d8f60e1a39596d1c22b1dd2fd245 Mon Sep 17 00:00:00 2001 From: Erik Moqvist Date: Thu, 8 Dec 2016 22:27:38 +0100 Subject: [PATCH] Simba framework for Nano32 board. --- .travis.yml | 1 + boards/nano32.json | 3 +- builder/frameworks/simba.py | 58 +++++++++++++++++++++++++ builder/main.py | 11 +++++ examples/simba-blink/.gitignore | 3 ++ examples/simba-blink/.travis.yml | 65 +++++++++++++++++++++++++++++ examples/simba-blink/README.rst | 29 +++++++++++++ examples/simba-blink/lib/readme.txt | 38 +++++++++++++++++ examples/simba-blink/platformio.ini | 13 ++++++ examples/simba-blink/src/main.c | 43 +++++++++++++++++++ platform.json | 9 ++++ 11 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 builder/frameworks/simba.py create mode 100755 examples/simba-blink/.gitignore create mode 100755 examples/simba-blink/.travis.yml create mode 100755 examples/simba-blink/README.rst create mode 100755 examples/simba-blink/lib/readme.txt create mode 100755 examples/simba-blink/platformio.ini create mode 100755 examples/simba-blink/src/main.c diff --git a/.travis.yml b/.travis.yml index 77fc687..b242526 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ env: - PLATFORMIO_PROJECT_DIR=examples/arduino-blink - PLATFORMIO_PROJECT_DIR=examples/arduino-wifiscan - PLATFORMIO_PROJECT_DIR=examples/espidf-http-request + - PLATFORMIO_PROJECT_DIR=examples/simba-blink install: - pip install -U https://github.com/platformio/platformio/archive/develop.zip diff --git a/boards/nano32.json b/boards/nano32.json index 2988726..bed3765 100644 --- a/boards/nano32.json +++ b/boards/nano32.json @@ -11,7 +11,8 @@ }, "frameworks": [ "arduino", - "espidf" + "espidf", + "simba" ], "name": "MakerAsia Nano32", "upload": { diff --git a/builder/frameworks/simba.py b/builder/frameworks/simba.py new file mode 100644 index 0000000..2478bd2 --- /dev/null +++ b/builder/frameworks/simba.py @@ -0,0 +1,58 @@ +# Copyright 2014-present PlatformIO +# +# 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. + +"""Simba + +Simba is an RTOS and build framework. It aims to make embedded +programming easy and portable. + +http://simba-os.readthedocs.org + +""" + +from os.path import join, sep + +from SCons.Script import DefaultEnvironment, SConscript + +from platformio.builder.tools import platformio as platformio_tool + +# +# Backward compatibility with PlatformIO 2.0 +# +platformio_tool.SRC_DEFAULT_FILTER = " ".join([ + "+<*>", "-<.git%s>" % sep, "-" % sep, + "-" % sep, "-" % sep, + "-" % sep, "-" % sep +]) + + +def LookupSources(env, variant_dir, src_dir, duplicate=True, src_filter=None): + return env.CollectBuildFiles(variant_dir, src_dir, src_filter, duplicate) + + +def VariantDirWrap(env, variant_dir, src_dir, duplicate=False): + env.VariantDir(variant_dir, src_dir, duplicate) + + +env = DefaultEnvironment() + +env.AddMethod(LookupSources) +env.AddMethod(VariantDirWrap) + +env.Replace( + PLATFORMFW_DIR=env.PioPlatform().get_package_dir("framework-simba") +) + +SConscript( + [env.subst(join("$PLATFORMFW_DIR", "make", "platformio.sconscript"))]) diff --git a/builder/main.py b/builder/main.py index 7ba86e8..b07d790 100644 --- a/builder/main.py +++ b/builder/main.py @@ -87,6 +87,7 @@ env.Replace( FRAMEWORK_ARDUINOESP32_DIR=platform.get_package_dir( "framework-arduinoespressif32"), ESPIDF_DIR=platform.get_package_dir("framework-espidf"), + FRAMEWORK_SIMBA_DIR=platform.get_package_dir("framework-simba"), # # Upload @@ -128,6 +129,16 @@ if env.subst("$PIOFRAMEWORK") == "espidf": "0x10000" ] ) +if env.subst("$PIOFRAMEWORK") == "simba": + env.Append( + UPLOADERFLAGS=[ + "0x1000", join("$FRAMEWORK_SIMBA_DIR", "3pp", "esp32", + "bin", "bootloader.bin"), + "0x4000", join("$FRAMEWORK_SIMBA_DIR", "3pp", "esp32", + "bin", "partitions_singleapp.bin"), + "0x10000" + ] + ) env.Append( diff --git a/examples/simba-blink/.gitignore b/examples/simba-blink/.gitignore new file mode 100755 index 0000000..5402c18 --- /dev/null +++ b/examples/simba-blink/.gitignore @@ -0,0 +1,3 @@ +.pioenvs +.clang_complete +.gcc-flags.json diff --git a/examples/simba-blink/.travis.yml b/examples/simba-blink/.travis.yml new file mode 100755 index 0000000..72c6e43 --- /dev/null +++ b/examples/simba-blink/.travis.yml @@ -0,0 +1,65 @@ +# Continuous Integration (CI) is the practice, in software +# engineering, of merging all developer working copies with a shared mainline +# several times a day < http://docs.platformio.org/en/stable/ci/index.html > +# +# Documentation: +# +# * Travis CI Embedded Builds with PlatformIO +# < https://docs.travis-ci.com/user/integration/platformio/ > +# +# * PlatformIO integration with Travis CI +# < http://docs.platformio.org/en/stable/ci/travis.html > +# +# * User Guide for `platformio ci` command +# < http://docs.platformio.org/en/stable/userguide/cmd_ci.html > +# +# +# Please choice 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 +# +# script: +# - platformio run + + +# +# Template #2: The project is intended to by 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 +# +# script: +# - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N diff --git a/examples/simba-blink/README.rst b/examples/simba-blink/README.rst new file mode 100755 index 0000000..5ef2ab7 --- /dev/null +++ b/examples/simba-blink/README.rst @@ -0,0 +1,29 @@ +.. Copyright 2014-present PlatformIO + 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 `_ +2. Download `development platform with examples `_ +3. Extract ZIP archive +4. Run these commands: + +.. code-block:: bash + + # Change directory to example + > cd platform-espressif32/examples/simba-blink + + # Process example project + > platformio run + + # Upload firmware + > platformio run --target upload diff --git a/examples/simba-blink/lib/readme.txt b/examples/simba-blink/lib/readme.txt new file mode 100755 index 0000000..a3271c7 --- /dev/null +++ b/examples/simba-blink/lib/readme.txt @@ -0,0 +1,38 @@ + +This directory is intended for the project specific (private) libraries. +PlatformIO will compile them to static libraries and link to executable file. + +The source code of each library should be placed in separate directory, like +"lib/private_lib/[here are source files]". + +For example, see how can be organised `Foo` and `Bar` libraries: + +|--lib +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| |--Foo +| | |- Foo.c +| | |- Foo.h +| |- readme.txt --> THIS FILE +|- platformio.ini +|--src + |- main.c + +Then in `src/main.c` you should use: + +#include +#include + +// rest H/C/CPP code + +PlatformIO will find your libraries automatically, configure preprocessor's +include paths and build them. + +See additional options for PlatformIO Library Dependency Finder `lib_*`: + +http://docs.platformio.org/en/stable/projectconf.html#lib-install + diff --git a/examples/simba-blink/platformio.ini b/examples/simba-blink/platformio.ini new file mode 100755 index 0000000..25c8e94 --- /dev/null +++ b/examples/simba-blink/platformio.ini @@ -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/en/stable/projectconf.html + +[env:nano32] +platform = espressif32 +framework = simba +board = nano32 diff --git a/examples/simba-blink/src/main.c b/examples/simba-blink/src/main.c new file mode 100755 index 0000000..404ec63 --- /dev/null +++ b/examples/simba-blink/src/main.c @@ -0,0 +1,43 @@ +/** + * @file main.c + * @version 4.1.0 + * + * @section License + * Copyright (C) 2015-2016, Erik Moqvist + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * This file is part of the Simba project. + */ + +#include "simba.h" + +int main() +{ + struct pin_driver_t led; + + /* Start the system. */ + sys_start(); + + /* Initialize the LED pin as output and set its value to 1. */ + pin_init(&led, &pin_led_dev, PIN_OUTPUT); + pin_write(&led, 1); + + while (1) { + /* Wait half a second. */ + thrd_sleep_us(500000); + + /* Toggle the LED on/off. */ + pin_toggle(&led); + } + + return (0); +} diff --git a/platform.json b/platform.json index c281f35..dd783e3 100644 --- a/platform.json +++ b/platform.json @@ -27,6 +27,10 @@ "espidf": { "package": "framework-espidf", "script": "builder/frameworks/espidf.py" + }, + "simba": { + "package": "framework-simba", + "script": "builder/frameworks/simba.py" } }, "packages": { @@ -44,6 +48,11 @@ "optional": true, "version": "~1.90.0" }, + "framework-simba": { + "type": "framework", + "optional": true, + "version": ">=12.2.0" + }, "tool-esptoolpy": { "type": "uploader", "version": "~1.0.0"