• C++ 66.6%
  • Java 14.4%
  • C 11.6%
  • Shell 1.7%
  • CMake 1.7%
  • Other 3.9%
Find a file
Justus Scheil b8bb168763
Merge pull request #5357 from nonlinear-labs-dev/mc-targets-mc-edit-info
mc target list + mc info + edit mc info
2026-10-22 17:37:18 +02:00
.claude/skills/pr-review sharpen review skill 2026-08-12 11:00:08 +02:00
.github Merge pull request #5263 from nonlinear-labs-dev/hall-keybed-scanner-bandaid 2026-09-22 10:20:44 -04:00
build-environment Add libusb and nlohmann-json 3.12.0 to the EPC build pod 2026-09-30 16:12:59 +02:00
cmake Keep the c16 config.txt unchanged 2026-10-21 11:01:37 +02:00
configuration Expose the raw name and comment of macro controls via sync 2026-10-20 17:49:40 +02:00
doc updated doc once more 2024-06-11 15:46:26 +02:00
hooks format hook: keep unstaged changes out of the commit, fix container build 2026-10-13 16:35:48 +02:00
os Fix the EPC update rootfs pod and add libusb to it 2026-09-30 16:48:52 +02:00
package Merge pull request #5357 from nonlinear-labs-dev/mc-targets-mc-edit-info 2026-10-22 17:37:18 +02:00
tools tools: inject c16 buttons over the hwui websocket 2026-09-16 08:08:35 +02:00
update Leave the phase22 plugin out of the audiobox image 2026-10-21 10:54:33 +02:00
.clang-format fix midi timing 2019-03-07 18:57:10 +01:00
.gitattributes finish STM integration for hall-keybed-scanner 2026-03-11 12:01:17 +01:00
.gitignore ci: build a c25 update on demand 2026-09-16 08:08:35 +02:00
.gitmodules rework spectrum analyzer: streaming filter bank, single-clock data flow, semitone grid 2026-07-09 23:48:02 +02:00
AGENTS.md AGENTS.md: parameter passing, const and aggregate init 2026-09-16 13:45:11 +02:00
CMakeLists.txt change include catch2 to submodule instead of FetchContent 2025-12-09 13:39:56 +01:00
CMakePresets.json Skip the c16 UX prototype bridge in the test preset 2026-10-06 17:34:43 +02:00
COPYING.md incorporate review comments 2024-07-05 08:51:50 +02:00
dos2unix_all.bat CRLF-->LF conversion stuff 2020-06-10 19:17:56 +02:00
README.md bump reactive and update (ubuntu) package documentation 2026-07-04 15:45:51 +02:00
reformat-all.sh fix reformat-all.sh 2023-04-05 11:10:47 +02:00

Run Unit Tests

nl Firmware

prepare environment

On Ubuntu, install the packages needed to configure and build the project:

sudo apt-get update
sudo apt-get install -y \
  bindfs ccache cmake fuse-overlayfs jq make podman pkg-config \
  build-essential \
  gcc-arm-none-eabi \
  libasound2-dev libboost-all-dev libflac-dev libfreetype6-dev \
  libglibmm-2.4-dev libgtkmm-3.0-dev libpng-dev libpng++-dev \
  libsdl2-dev libsoup2.4-dev libusb-1.0-0-dev \
  libyaml-cpp-dev nlohmann-json3-dev \
  uuid-dev
  • libyaml-cpp-dev and nlohmann-json3-dev are required by compose-lvgl (via pkg-config)
  • gcc-arm-none-eabi is only needed when building STM firmware targets
  • lcov is only needed for coverage builds (see Build Tests with coverage)

Additional setup:

  • edit /etc/fuse.conf: uncomment (or add) user_allow_other
  • for podman rootless builds with fuse-overlayfs, set the storage mount program: echo 'mount_program="/usr/bin/fuse-overlayfs"' | sudo tee /etc/containers/storage.conf

Prepare build directory

  • git clone git@github.com:nonlinear-labs-dev/C15.git C15
  • git submodule update --init --recursive
  • cd C15
  • cmake --preset dev-debug
    • the dev-debug preset already contains default binary and install directories
      • if desired, provide a custom binary directory (-B), e.g. outside the repository folder by adding -B ../build
      • if desired, provide a custom install directory (CMAKE_INSTALL_PREFIX), e.g. outside the repository folder by adding -DCMAKE_INSTALL_PREFIX=../nl-rootfs
    • for building yocto-based updates it is recommended to provide a cache folder by adding -DYOCTO_SHARED_CACHE_DIR="<desired_yocto_cache_dir>"
    • if desired, choose another cmake preset, e.g. dev-release

Build binaries for local development PC

  • cmake --build --preset dev-debug --target install

Build Update for C15

  • cmake --build --preset dev-debug --target update-c15

Build Tests with coverage

  • install lcov
  • configure cmake with -DENABLE_COVERAGE=On
  • build <target>-coverage and inspect results in build-dir/package/<target>/<target>-coverage

For developing the meteor package

  • start either c16-playground or c15-playground
  • make meteor-dev-environment-base
  • wait until settled
  • open with your ide: ...build-folder/package/meteor/ide
  • open in browser: http://localhost:3000/index.html?page=[c16 | c16Debug |nonmaps | nonmapsPresetSearch]
  • if needed for developing NonMaps: see For developing NonMaps

Debugging a remote meteor UI

  • start ssh-tunnel to target ssh -L 9222:localhost:9222 sscl@raspi-ip
  • open chrome on the developer-pc and navigate to chrome://inspect/#devices
  • navigate to Devices and select inspect for the c16 URL below the Remote Target #LOCALHOST heading (this might take a few seconds to show up)

For developing NonMaps

  1. Once: configure using cmake --preset dev-nonmaps --fresh
  2. After every commit:
  3. run cmake --build --preset dev-nonmaps
  4. start the c15-playground
  5. Enable gwt compile as documented here. In short:
  • navigate to package/nonmaps/
  • run mvn gwt:devmode (once install maven if not done yet)
  1. Then, open localhost:8080 in the browser

Useful: Save the following bookmarks to your browser:

  • "nonmaps: enable dev mode": javascript:%7B window.__gwt_bookmarklet_params %3D %7B'server_url'%3A'http%3A%2F%2Flocalhost%3A9876%2F'%7D%3B var s %3D document.createElement('script')%3B s.src %3D 'http%3A%2F%2Flocalhost%3A9876%2Fdev_mode_on.js'%3B void(document.getElementsByTagName('head')%5B0%5D.appendChild(s))%3B%7D
  • "nonmaps: compile": javascript:%7B window.__gwt_bookmarklet_params %3D %7Bserver_url%3A'http%3A%2F%2Flocalhost%3A9876%2F'%2Cmodule_name%3A'nonmaps'%7D%3B var s %3D document.createElement('script')%3B s.src %3D 'http%3A%2F%2Flocalhost%3A9876%2Fdev_mode_on.js'%3B void(document.getElementsByTagName('head')%5B0%5D.appendChild(s))%3B%7D

Show the developer options, if needed:

  1. in the Web UI, enable Setup > GUI Settings > Show Developer Options
  2. scroll to the north where the "Developer Options" box should be shown now