
commit
72f9ff79b4
11 changed files with 399 additions and 0 deletions
@ -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 |
@ -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-*, |
@ -0,0 +1,4 @@ |
|||
/.idea |
|||
/build.conf |
|||
|
|||
build/ |
@ -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 |
|||
|
@ -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 |
@ -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 |
|||
|
|||
|
|||
|
|||
|
|||
|
@ -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 |
@ -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 |
@ -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); |
|||
} |
|||
} |
@ -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 (;;) {} |
|||
} |
@ -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…
Reference in new issue