From d641aa12c3293355d74d62478045897337f81be8 Mon Sep 17 00:00:00 2001
From: Bernhard Heinloth <heinloth@cs.fau.de>
Date: Mon, 11 Nov 2019 15:05:12 +0100
Subject: [PATCH] Firmware: Renamed, improved doc, added CI

---
 .gitlab-ci.yml                                | 28 ++++++++++++
 .gitmodules                                   |  2 +-
 CODE_CUBE.md                                  | 30 -------------
 INSTALL.md                                    | 45 +++++++++++++++++++
 README.md                                     |  5 +--
 {timecube => firmware}/CMakeLists.txt         |  0
 {timecube => firmware}/components/arduino     |  0
 {timecube => firmware}/config.example.h       |  0
 {timecube => firmware}/main/CMakeLists.txt    |  0
 {timecube => firmware}/main/accelerometer.cpp |  0
 {timecube => firmware}/main/accelerometer.h   |  0
 {timecube => firmware}/main/timecube.cpp      |  0
 {timecube => firmware}/main/timelog.h         |  0
 {timecube => firmware}/sdkconfig              |  0
 14 files changed, 76 insertions(+), 34 deletions(-)
 create mode 100644 .gitlab-ci.yml
 delete mode 100644 CODE_CUBE.md
 create mode 100644 INSTALL.md
 rename {timecube => firmware}/CMakeLists.txt (100%)
 rename {timecube => firmware}/components/arduino (100%)
 rename {timecube => firmware}/config.example.h (100%)
 rename {timecube => firmware}/main/CMakeLists.txt (100%)
 rename {timecube => firmware}/main/accelerometer.cpp (100%)
 rename {timecube => firmware}/main/accelerometer.h (100%)
 rename {timecube => firmware}/main/timecube.cpp (100%)
 rename {timecube => firmware}/main/timelog.h (100%)
 rename {timecube => firmware}/sdkconfig (100%)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..18810cb
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,28 @@
+variables:
+  GIT_SUBMODULE_STRATEGY: recursive
+
+firmware:
+  image: debian:stable
+  before_script:
+    - ln -fs /usr/share/zoneinfo/Europe/Berlin /etc/localtime
+    - export DEBIAN_FRONTEND=noninteractive
+    - apt-get update -qq && apt-get install -y -qq make git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-click python-cryptography python-future python-pyparsing python-pyelftools cmake ninja-build ccache
+    - git submodule update --init --recursive
+    - git clone --depth=1 --recursive --branch v3.3 https://github.com/espressif/esp-idf.git
+    - export IDF_PATH="$(readlink -f esp-idf)"
+    - wget -qO- https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz | tar xvz
+    - export PATH="$PATH:$(readlink -f xtensa-esp32-elf/bin)"
+  script:
+    - mkdir -p firmware/build
+    - cp firmware/config.example.h firmware/config.h 
+    - cd firmware/build
+    - cmake ..
+    - make
+    - make flash || true
+  artifacts:
+    paths:
+      - firmware/build/bootloader/bootloader.bin
+      - firmware/build/partition_table/partition-table.bin
+      - firmware/build/timecube.bin
+      - firmware/components/arduino/tools/esptool.py
+
diff --git a/.gitmodules b/.gitmodules
index e41ad31..c3fee68 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -14,5 +14,5 @@
 	path = server/www/assets/apexcharts.js
 	url = https://github.com/apexcharts/apexcharts.js.git
 [submodule "sketch_timecube/arduino"]
-	path = timecube/components/arduino
+	path = firmware/components/arduino
 	url = https://github.com/espressif/arduino-esp32.git
diff --git a/CODE_CUBE.md b/CODE_CUBE.md
deleted file mode 100644
index 9670f9e..0000000
--- a/CODE_CUBE.md
+++ /dev/null
@@ -1,30 +0,0 @@
-Bauen und Flashen der Würfelsoftware
-====================================
-
-Voraussetzungen
----------------
-
-Auf dem Rechner müssen folgende Komponenten installiert sein:
-
- * xtensa-esp32-Toolchain, siehe https://docs.espressif.com/projects/esp-idf/en/latest/get-started/linux-setup.html
- * das ESP IDF *in Version 3.3* (die verwendeten Arduino-Erweiterungen kommen aktuell mit neuen Versionen nicht zurecht): https://github.com/espressif/esp-idf
-
-
-Bauen der Software
-------------------
-
-```
-mkdir build
-cd build
-cmake ..
-make
-make flash
-```
-
-Flashen des Würfels
--------------------
-
-Mittels `make flash` kann die Software dann auf den Würfel geflasht werden.
-Hat man mehr als einen ESP32 angeschlossen, dann kann/muss man mittel Umgebungsvariable `ESPPORT` angeben, welcher Chip geflasht werden soll:
-`ESPPORT=/dev/ttyUSB5 make flash`
-
diff --git a/INSTALL.md b/INSTALL.md
new file mode 100644
index 0000000..32eb05a
--- /dev/null
+++ b/INSTALL.md
@@ -0,0 +1,45 @@
+Installation der Firmware
+-------------------------
+
+### Voraussetzungen
+
+Folgende Komponenten werden benötigt:
+
+  * [xtensa-esp32-Toolchain](https://docs.espressif.com/projects/esp-idf/en/release-v3.3/get-started/linux-setup.html)
+  * [ESP IDF *in Version 3.3*](https://github.com/espressif/esp-idf) (die verwendeten Arduino-Erweiterungen kommen aktuell mit neuen Versionen nicht zurecht)
+
+
+### Vorbereitung
+
+Auf einem debianoiden Linux mit aktueller Version können die benötigten Komponenten wie folgt installiert werden:
+
+    # Dieses Repo für Firmware rekursiv auschecken
+    git clone https://gitlab.cs.fau.de/heinloth/timecube.git
+    cd timecube
+    git submodule update --init --recursive
+    # Benötigte Pakete installeiren
+    sudo apt-get install make git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-click python-cryptography python-future python-pyparsing python-pyelftools cmake ninja-build ccache
+    # ESP IDF Version 3.3 rekursiv auschecken
+    git clone --depth=1 --recursive --branch v3.3 https://github.com/espressif/esp-idf.git
+    export IDF_PATH="$(readlink -f esp-idf)"
+    # xtensa-esp32-Toolchain laden (URL von der linux-setup Webseite)
+    wget -qO- https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz | tar xvz
+    export PATH="$PATH:$(readlink -f xtensa-esp32-elf/bin)"
+
+
+### Bauen der Firmware
+
+Nach der Vorbereitung im `timecube`-Verzeichnis folgende Schritte ausführen:
+
+    mkdir build
+    cd build
+    cmake ..
+    make
+
+
+### Flashen des Würfels
+
+Mittels `make flash` kann die Software dann auf den Würfel geflasht werden.
+Hat man mehr als einen ESP32 angeschlossen, dann kann/muss man mittel Umgebungsvariable `ESPPORT` angeben, welcher Chip geflasht werden soll:
+`ESPPORT=/dev/ttyUSB5 make flash`
+
diff --git a/README.md b/README.md
index caddd95..79c9d33 100644
--- a/README.md
+++ b/README.md
@@ -24,9 +24,8 @@ Die Zeiterfassung soll dabei helfen das Verhältnis der verschiedenen Tätigkeit
 Anleitung
 ---------
 
-[Detaillierte und bebilderte Montageanleitung](MONTAGE.md)
-
-[Anleitung zum Bauen der Würfelsoftware](CODE_CUBE.md)
+  * [Detaillierte und bebilderte Montageanleitung](MONTAGE.md)
+  * [Anleitung zum Bauen der Firmware für den Würfel](INSTALL.md)
 
 
 Grundüberlegungen
diff --git a/timecube/CMakeLists.txt b/firmware/CMakeLists.txt
similarity index 100%
rename from timecube/CMakeLists.txt
rename to firmware/CMakeLists.txt
diff --git a/timecube/components/arduino b/firmware/components/arduino
similarity index 100%
rename from timecube/components/arduino
rename to firmware/components/arduino
diff --git a/timecube/config.example.h b/firmware/config.example.h
similarity index 100%
rename from timecube/config.example.h
rename to firmware/config.example.h
diff --git a/timecube/main/CMakeLists.txt b/firmware/main/CMakeLists.txt
similarity index 100%
rename from timecube/main/CMakeLists.txt
rename to firmware/main/CMakeLists.txt
diff --git a/timecube/main/accelerometer.cpp b/firmware/main/accelerometer.cpp
similarity index 100%
rename from timecube/main/accelerometer.cpp
rename to firmware/main/accelerometer.cpp
diff --git a/timecube/main/accelerometer.h b/firmware/main/accelerometer.h
similarity index 100%
rename from timecube/main/accelerometer.h
rename to firmware/main/accelerometer.h
diff --git a/timecube/main/timecube.cpp b/firmware/main/timecube.cpp
similarity index 100%
rename from timecube/main/timecube.cpp
rename to firmware/main/timecube.cpp
diff --git a/timecube/main/timelog.h b/firmware/main/timelog.h
similarity index 100%
rename from timecube/main/timelog.h
rename to firmware/main/timelog.h
diff --git a/timecube/sdkconfig b/firmware/sdkconfig
similarity index 100%
rename from timecube/sdkconfig
rename to firmware/sdkconfig
-- 
GitLab