# 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