Browse Source

initial commit from heck_daisy_template

main
heck 9 months ago
commit
72f9ff79b4
  1. 42
      .clang-format
  2. 37
      .clang-tidy
  3. 4
      .gitignore
  4. 13
      Makefile
  5. 35
      Makefile.conf
  6. 151
      README.md
  7. 12
      build.conf.example
  8. 19
      src/Makefile
  9. 16
      src/main_blink.cc
  10. 51
      src/main_testtone.cc
  11. 19
      src/types.hh

42
.clang-format

@ -0,0 +1,42 @@
BasedOnStyle: LLVM
ReflowComments: false
MacroBlockBegin: "^BEGIN_OPERATOR"
MacroBlockEnd: "^END_OPERATOR"
Language: Cpp
DerivePointerAlignment: true
SortIncludes: Never
PointerAlignment: Left
AlignAfterOpenBracket: AlwaysBreak
AlignOperands: AlignAfterOperator
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortEnumsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
BinPackArguments: false
BinPackParameters: false
ExperimentalAutoDetectBinPacking: true
BreakBeforeBraces: Custom
BraceWrapping:
AfterFunction: true
ColumnLimit: 100
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
PenaltyBreakBeforeFirstCallParameter: 0
PenaltyReturnTypeOnItsOwnLine: 1000000
PenaltyBreakAssignment: 1000000
PenaltyExcessCharacter: 10
IndentCaseLabels: true
IndentWidth: 4
MaxEmptyLinesToKeep: 2
NamespaceIndentation: All
SpaceAfterTemplateKeyword: false
AccessModifierOffset: -4
AllowShortBlocksOnASingleLine: Always
IndentPPDirectives: BeforeHash
IndentExternBlock: Indent
Cpp11BracedListStyle: false

37
.clang-tidy

@ -0,0 +1,37 @@
Checks: >
-*,
-abseil-*,
-altera-*,
-android-*,
boost-*,
bugprone-*,
-bugprone-infinite-loop,
cert-*,
-clang-analyzer-*,
concurrency-*,
cppcoreguidelines-*,
-cppcoreguidelines-pro-bounds-array-to-pointer-decay,
-cppcoreguidelines-avoid-non-const-global-variables,
-cppcoreguidelines-non-private-member-variables-in-classes,
darwin-*,
-fuchsia-*,
-google-*,
-hicpp-*,
-linuxkernel-*,
-llvm-*,
-llvmlibc-*,
misc-*,
-misc-non-private-member-variables-in-classes,
modernize-*,
-modernize-use-auto,
-modernize-use-trailing-return-type,
-modernize-use-nodiscard,
-mpi-*,
-objc-*,
-openmp-*,
performance-*,
portability-*,
readability-*,
-readability-function-cognitive-complexity,
-readability-implicit-bool-conversion,a
-zircon-*,

4
.gitignore

@ -0,0 +1,4 @@
/.idea
/build.conf
build/

13
Makefile

@ -0,0 +1,13 @@
.PHONY: all flash clean
all: compile flash
compile:
$(MAKE) -C src
flash:
$(MAKE) -C src program
clean:
$(MAKE) -C src clean

35
Makefile.conf

@ -0,0 +1,35 @@
HERE:=$(dir $(lastword $(MAKEFILE_LIST)))
# Project Name
TARGET?=perkons
# Configure for debugging
# common configurations:
# use DEBUG = 1 and OPT = -Og for debugging
# or DEBUG = 0 and OPT = -O3 for performance
DEBUG=0
OPT=-O3
# (optional) Includes FatFS source files within project.
#USE_FATFS = 1
# Relative to dir 'src'
LIBDAISY_DIR=../../heck_libDaisyWrong
DAISYSP_DIR=../../heck_DaisySPWrong
CXXFLAGS+=-Wall -Wno-unused -Wno-reorder-ctor
######### Overrides from build.conf #########
-include $(HERE)build.conf
ifneq (,$(findstring g++,$(CXX)))
CXXFLAGS+=-fdiagnostics-color=always
else ifneq (,$(findstring clang,$(CXX)))
CXXFLAGS+=-fcolor-diagnostics
endif
ifeq ($(DEBUG),1)
CXXFLAGS+=-g -O0
else
CXXFLAGS+=-DNDEBUG=1 -O3
endif

151
README.md

@ -0,0 +1,151 @@
# Heck Daisy Template
Daisy project template featuring:
* toolchain setup
* dependencies setup
*
* build scripts
* upload (DFU and JTAG)
* debug
* clang-format
* clang-tidy
## git started
to use git, either die or use hecks git-ui.
heck-git-ui: https://gitea.heck.live/heck/HeckBashSetup/src/branch/master/bash_profile.d/git.sh
Alternatively, you can avoid using git... TODO
## Toolchain Setup
### Compiler
compiler used is gcc for arm:
Options:
* install version specified by electro-smith: https://developer.arm.com/downloads/-/gnu-rm
* install the latest version: https://developer.arm.com/Tools%20and%20Software/GNU%20Toolchain
**IMPORTANT:** Do NOT use any OTHER gcc-arm toolchain than these ones!!!
There is a pitfall that is quite hard to debug. I used the gcc-arm from macports.
There is NO libc-nano shipped with it, because its not GPL.
BUT the daisy build scripts specify the use of libc-nano.
### Programmer / Debugger
on macos:
`port install dfu-util openocd`
`dfu-util` is the program that is invoked by the Makefiles to program the thing via DFU.
`openocd` is the program that is invoked by the Makefiles to program the thing via JTAG.
`openocd` also is the debugger we use.
## Flashing
Can be flashed via:
* DFU: all you need is a micro-usb-cable
* JTAG: any JTAG programmer will work, but the STLink v3 is the fastest.
### DFU
No magic, you just need a program called `dfu-util`.
TODO...
### JTAG
no magic, you just need a programm called `openocd`
TODO:
The JTAG method is heavily recommended since JTAG is faster than DFU, and if you use the (product ad ahead warning, sorry)
STLink v3 its even faster. Its the fastest method i know of.
### Benchmark DFU vs. JTAG
**DFU: 15.725s**
**JTAG: 1.850s**
JTAG is at least **8.5 times** faster (since there is constant time overhead)
``` shell
[heck@YOOROOX::~/src/DaisyExamples/seed/Blink] (master ?M) $ time m program-dfu;
dfu-util -a 0 -s 0x08000000:leave -D build/Blink.bin -d ,0483:df11
blabla...
...
real 0m15.725s
```
``` shell
[heck@YOOROOX::~/src/DaisyExamples/seed/Blink] (master ?M) $ time m program;
openocd -s /opt/local/bin/openocd/ -f interface/stlink.cfg -f target/stm32h7x.cfg -c "program ./build/Blink.elf verify reset exit"
blabla...
...
real 0m1.850s
```
## Debugging
TODO:
## Daisy Coding
* C++ bare metal like any STM32 - needlessly brutal
* C++ and libDaisy - libDaisy is the electro-smith hardware abstraction
* Pure-Data patch compiler
* JUCE
* FAUST for DSP algo
* Max-msp gen~ (proprietary $hit)
### C++ Bare Metal
Just code like for any STM32 - needlessly brutal
TODO: add hecks STM32 project
### C++ and libDaisy
libDaisy is the electro-smith hardware abstraction and is basically what makes the daisy be the daisy.
TODO:
### Pure-Data Patch Compiler
this here: https://github.com/electro-smith/pd2dsy
TODO: Marc? anyone?
### JUCE
TODO: anyone?
e.g. https://github.com/electro-smith/Daisy-Juce-Example
### FAUST
This here: https://faust.grame.fr/
stahl has workflow/project
### Max-Msp gen~
max is the proprietary version of pure-data, but dont want to exclude them just for that.
gen~ alone will cost you extra $$$ after even you paid for max. just so you know, hu?
## Daisy-Hardware
TODO: PLEASE everyone share their hardware HERE!
## Various
Stahl and Marcs fire synthesizer. Now with sausage mode: https://wiki.sgmk-ssam.ch/wiki/F%C3%BC%C3%BCr_Synthie_mit_Daisy_Seed

12
build.conf.example

@ -0,0 +1,12 @@
# Build config
# also, infos for the build system about the dev environment
# The program to compile and flash
# the name of the main cxx file without the prefix 'main_'
TARGET=perkons
DEBUG=0
# Daisy dependencies Relative to dir 'src'
LIBDAISY_DIR=../../heck_libDaisy
DAISYSP_DIR=../../heck_DaisySP

19
src/Makefile

@ -0,0 +1,19 @@
include ../Makefile.conf
ALL_SRC=$(wildcard *.cc)
TARGET_SRC=main_$(TARGET).cc
MODULES_SRC=$(filter-out main_%,$(ALL_SRC))
CXX_SRC=$(MODULES_SRC) $(TARGET_SRC)
$(info CXXFLAGS: $(CXXFLAGS))
$(info SOURCES: $(ALL_SRC))
$(info MODULES: $(MODULES_SRC))
$(info TARGET_SRC: $(TARGET_SRC))
$(info CXX_SRC: $(CXX_SRC))
# libDaisy Makefile variables
CPPFLAGS=$(CXXFLAGS)
SYSTEM_FILES_DIR=$(LIBDAISY_DIR)/core
CPP_SOURCES=$(CXX_SRC)
include $(SYSTEM_FILES_DIR)/Makefile

16
src/main_blink.cc

@ -0,0 +1,16 @@
#include "daisy_seed.h"
using namespace daisy;
static DaisySeed hw{};
int main()
{
hw.Init();
while (true) {
hw.SetLed(true);
hw.DelayMs(100);
hw.SetLed(false);
hw.DelayMs(500);
}
}

51
src/main_testtone.cc

@ -0,0 +1,51 @@
#include "daisy_seed.h"
#include "daisysp.h"
// Use the daisy namespace to prevent having to type
// daisy:: before all libdaisy functions
using namespace daisy;
using namespace daisysp;
// Declare a DaisySeed object called hardware
DaisySeed hardware;
Oscillator osc;
void AudioCallback(
AudioHandle::InterleavingInputBuffer in,
AudioHandle::InterleavingOutputBuffer out,
size_t size)
{
float osc_out;
//Convert floating point knob to midi (0-127)
//Then convert midi to freq. in Hz
osc.SetFreq(1000);
//Fill the block with samples
for (size_t i = 0; i < size; i += 2) {
osc.SetAmp(1.0);
osc_out = osc.Process();
//Set the left and right outputs
out[i] = osc_out;
out[i + 1] = osc_out;
}
}
int main(void)
{
hardware.Configure();
hardware.Init();
hardware.SetAudioBlockSize(4);
float samplerate = hardware.AudioSampleRate();
osc.Init(samplerate);
osc.SetWaveform(osc.WAVE_SIN);
osc.SetAmp(1.f);
osc.SetFreq(1000);
hardware.StartAudio(AudioCallback);
for (;;) {}
}

19
src/types.hh

@ -0,0 +1,19 @@
#ifndef HECK_DAISY_TYPES_HH
#define HECK_DAISY_TYPES_HH
#include <cstdint>
using u8 = uint8_t;
using u16 = uint16_t;
using u32 = uint32_t;
using u64 = uint64_t;
using i8 = int8_t;
using i16 = int16_t;
using i32 = int32_t;
using i64 = int64_t;
using f32 = float;
using f64 = double;
#endif
Loading…
Cancel
Save