Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merging Phazerville-Relabi with Main Phazerville #82

Open
wants to merge 430 commits into
base: production
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
430 commits
Select commit Hold shift + click to select a range
548926b
Long-press left encoder starts/stops internal clock
djphazer Mar 6, 2023
9a674b2
New Applet: Calibr8 - pitch CV fine-tuning tool
djphazer Mar 3, 2023
eed4ca0
New App: Calibr8or - 4-channel pitch CV fine-tuning app
djphazer Mar 6, 2023
617dd46
Add Piqued app from stock O_C
djphazer Mar 14, 2023
4756ffc
Build config updates
djphazer Mar 14, 2023
a2c42fa
LoFi Echo: smaller buffer again
djphazer Mar 15, 2023
73e44fe
DualTM: fix Trig output, fix transpose
djphazer Mar 14, 2023
56186b9
Shorter timeout for button long-press
djphazer Mar 16, 2023
caed891
Fix compile errors when disabling Hemisphere
djphazer Mar 16, 2023
828fc27
Set default applets: DualTM + EuclidX
djphazer Mar 17, 2023
2e84656
EbbAndLfo: Stop clock on startup from setting freq
qiemem Mar 15, 2023
ed0ec32
Re-fix quantizer transpose bug
djphazer Mar 18, 2023
e4f7294
Calibr8or: requantize when switching settings
djphazer Mar 18, 2023
5e20948
Internal Clock can trigger all 4 digital inputs
djphazer Mar 19, 2023
051d47c
Calibr8or: preset switcher; Long-press DOWN button to access
djphazer Mar 19, 2023
e0566a2
UI: Long-press fires while button is held
djphazer Mar 21, 2023
00f4078
New UI event type for BUTTON_DOWN
djphazer Mar 18, 2023
57a68dd
Calibr8or: Add Clock Setup, UP+DOWN buttons to access
djphazer Mar 23, 2023
e8c48bf
Calibr8or: Add Screensaver
djphazer Mar 24, 2023
84e08d8
UI event tweaks/fixes (button PRESS vs button DOWN)
djphazer Mar 27, 2023
ed3eba1
Cursor behavior locked to "modal w/ wraparound"
djphazer Mar 25, 2023
92b94ea
Calibr8or: sync to external MIDI Start/Stop/Clock
djphazer Mar 26, 2023
b0e3662
better FLIP_180 calibration fix
djphazer Mar 27, 2023
5ceb009
ClockSetup: internal trigger flashers
djphazer Mar 27, 2023
4cc6ab0
Build config updates
djphazer Mar 27, 2023
9d847c4
Quadraturia: fix freqency display
djphazer Mar 27, 2023
14da3e7
MIDI updates, using latest usbMIDI spec for Teensy
djphazer Mar 27, 2023
820a77e
Send MIDI Start/Stop when Toggling Clock by long-press
djphazer Mar 27, 2023
e11f1b8
Documentation!
djphazer Mar 26, 2023
809c4bc
Version bump; v1.5.1
djphazer Mar 26, 2023
d3e2a60
Update README.md
djphazer Mar 28, 2023
23ee44d
cleanup
djphazer Mar 28, 2023
156874e
update TODO
djphazer Mar 28, 2023
39ad87a
Ignore button release when canceling screensaver
djphazer Mar 28, 2023
5816fb9
TODO: frequency display is broken in autotuner code
djphazer Apr 9, 2023
3facfa2
Build option for flipped +stock
djphazer Mar 31, 2023
7bc2862
ClockSetup: detect multiple taps on the Tempo parameter
djphazer Apr 5, 2023
0116124
EuclidX: allow hits to be 0; expand storage
djphazer Apr 8, 2023
e747c2b
DualTM: save/restore Slew
djphazer Apr 13, 2023
da848cb
Config + Presets for Hemisphere
djphazer Apr 8, 2023
b999c3d
Restore remaining fullsize O_C apps (via edcrouch)
edcrouch Mar 24, 2023
25f2c03
Restore GameOfLife applet
djphazer Apr 14, 2023
d0a2639
Add Harmonizer applet (via kfirmanty)
kfirmanty May 5, 2019
4aaa22d
Update build config
djphazer Apr 14, 2023
0fbf1da
Version bump v1.6 beta
djphazer Apr 14, 2023
93d0563
Config Menu cancels Help Screen
djphazer Apr 17, 2023
e49f5c8
DualTM: sanity check when loading; rework transpose
djphazer Apr 17, 2023
b18c188
Remove Harmonizer - Squanch does the same thing
djphazer Apr 17, 2023
765f742
Squanch: add Root Note; fix quantizer slippage; rework UI
djphazer Apr 17, 2023
fc56144
Internal Clock: Paused state == Clock Sync Start
djphazer Apr 17, 2023
e40a6ef
cleanup
djphazer Apr 27, 2023
e320abc
Clock sync-start tweaks
djphazer Apr 27, 2023
4eccb7b
Calibr8or: Clock Pause icon; fix preset Save vulnerability
djphazer Apr 27, 2023
c314432
ClockSetup: Fix tap tempo detection
djphazer Apr 30, 2023
30bdebd
DualTM: fix pitch regression
djphazer Apr 30, 2023
da99577
Update TODO
djphazer May 2, 2023
f2f404d
Code comments for EEPROM storage size of each App
djphazer May 3, 2023
f188333
Version 1.6
djphazer May 5, 2023
872ec73
VOR/flipped build config permutations
djphazer May 10, 2023
77a97b8
Preset A will auto-save
djphazer May 10, 2023
420e2e4
TB-3PO: Store pattern length
djphazer May 17, 2023
568fbe8
DualTM: combo pitch blend/xfade refactor
djphazer May 20, 2023
754c0bf
Fix applet help screen / select mode bug
djphazer May 22, 2023
a35c76e
Build config updates, adapted from pld's dev/build branch
djphazer May 26, 2023
d522734
Alternate DrumMap patterns from KittenVillage
KittenVillage Jan 2, 2022
35b076b
VOR calibration fixes; Hemisphere adjustments
djphazer May 16, 2023
5841824
HEM Applets: Treat CV input range independent of Vbias
djphazer May 28, 2023
a442a87
Button handler fixes
djphazer May 28, 2023
f45dcb5
Shorter timing for dual-press Clock Setup gesture via jtomasrl
djphazer May 28, 2023
b89293f
re-fix compiler fix
djphazer May 29, 2023
9249248
ENVGEN: Automatic full-range scaling
djphazer May 29, 2023
4e79090
Non-VOR build still initializes Vbias to ASYM range
djphazer May 29, 2023
218a5ff
VOR: UP button on App Menu for Vbias menu
djphazer May 29, 2023
cb06389
Inverted encoder config for flipped build
djphazer Jun 3, 2023
eb6d1f1
Update README.md
djphazer Jun 9, 2023
ecc8f87
Fix for unwanted triggers on startup
djphazer Jun 18, 2023
6b45537
EbbAndLfo: fix Gate High/Low outputs, update Help text
djphazer Jun 19, 2023
db5d279
Fixes to mitigate VOR calibration offset (~10mV)
djphazer Jun 18, 2023
bba9873
VOR: Re-implement Vbias auto-config
djphazer Jun 19, 2023
8440e19
Add OCP hardware schematics from Plum Audio / Shay Shezifi
djphazer Jun 20, 2023
d816d35
import ResetClock applet from pkyme
djphazer Jun 17, 2023
4413548
ResetClock: UI tweaks
djphazer Jun 19, 2023
4f13bde
import FPART app (4-part chord sequencer) from jddinneen
djphazer Jun 18, 2023
6f3c94a
4 global shared quantizers for the HS namespace
djphazer May 31, 2023
5ef04c8
TB3PO: use MIDIQuantizer instead of braids for display
djphazer Jun 20, 2023
71210de
Slight optimization for applet help text
djphazer Jun 20, 2023
3e60d97
Drop Low-rents from +stock1 build
djphazer Jun 20, 2023
5278d10
Tuner: small FLIP_180 fix for help text
djphazer Jun 20, 2023
e17e0e4
Handle dual-encoder-press for VOR menu
djphazer Jun 20, 2023
33ba03e
Better dual-press action for Clock Setup
djphazer Jun 20, 2023
2224121
Version 1.6.2
djphazer Jun 18, 2023
dd7a55a
Revert "Inverted encoder config for flipped build"
djphazer Jun 22, 2023
41bee18
Update README.md
djphazer Aug 12, 2023
d9ba7be
Shoutout to SynthDad!
djphazer Aug 12, 2023
a048d0f
ignore .vscode dir
djphazer Aug 4, 2023
c1e085c
Icon updates from ph.xyz
ph1-xyz Jul 9, 2023
00cb6f5
Revert a few icons, DualTM UI tweaks
djphazer Aug 14, 2023
1529648
Begin TB-3PO cleanup (WIP)
djphazer Jul 17, 2023
dec775b
TB-3PO: Simplify
djphazer Jul 17, 2023
6204402
DMA Patch from upstream v1.3.7-alpha
djphazer Aug 3, 2023
21d84d8
Clock: Send MIDI Start when TR1 starts the clock
djphazer Aug 4, 2023
d55aa72
ENVGEN: Output stage tweaks
djphazer Jul 7, 2023
4573310
POLYLFO: Store/Recall Vbias setting
djphazer Aug 4, 2023
55611fa
PEW PEW PEW! - Phazer's choice build config
djphazer Aug 14, 2023
0a860c4
LoFi Echo: off-by-one fix
djphazer Aug 14, 2023
b8ab3d0
New Applet API method, Modulate()
djphazer Aug 14, 2023
66cd766
EbbAndLFO: use +/-5V for bipolar on VOR
djphazer Aug 15, 2023
303f5d0
Calculate: Normalize channel 1 trigger to channel 2 for Rnd
djphazer Aug 15, 2023
1efa8f3
Version bump v1.6.3
djphazer Jul 17, 2023
6f0b417
Update README.md
djphazer Aug 15, 2023
eb003f9
DualTM: UI cursor tweaks
djphazer Aug 15, 2023
6900fe0
ADSREG: separate envelope settings, via ghostils
djphazer Aug 20, 2023
78081b1
AttenOff: Allow +/- 200% ; Use TR2 for Mix gate
djphazer Aug 27, 2023
af4f9d2
Switch to Teensy CLI uploader
djphazer Aug 30, 2023
b794a13
Refactoring Applet I/O (CV and MIDI) to a struct
djphazer Mar 25, 2023
cbbc5af
MIDI In: Fix Pitch Bend scaling (+/-3V)
djphazer Aug 31, 2023
6955abe
ASR applet: fixes and simplification
djphazer Aug 22, 2023
1a6fb2d
ClockSetup: remove hardcoded TR4 reset
djphazer Sep 18, 2023
389790d
Revert button dual-press detection method for Clock Setup in HEM
djphazer Sep 21, 2023
516d04f
Remove Calibr8 applet; it was mainly a POC for Calibr8or
djphazer Sep 24, 2023
cc32d68
New App: Scenes
djphazer Sep 20, 2023
787580c
General unified BaseScreensaver()
djphazer Sep 22, 2023
479646a
Refactoring HSApplication base class to use HSIOFrame
djphazer Sep 24, 2023
6d9f04d
Fix shared quantizer bug in Calibr8or
djphazer Sep 24, 2023
a02c68e
Refactoring apps to use global quantizer instances
djphazer Sep 24, 2023
6442f48
Extract utility functions to HSUtils.h
djphazer Sep 24, 2023
2593f70
VectorLFO: frequency modulation fix; tweaks
djphazer Sep 24, 2023
1852f03
Build config updates
djphazer Sep 22, 2023
2cc3ca0
Version bump v1.6.4
djphazer Aug 30, 2023
416ee88
Fix calibration I/O bug (#26)
djphazer Sep 26, 2023
4d212cf
Fix dual-press button action more properly
djphazer Sep 26, 2023
a55c6f0
VectorLFO: lower limit of 0.08Hz
djphazer Sep 26, 2023
b6e71f1
SCENES: CV2 bipolar offset; fix encoder accel; cleanup
djphazer Sep 26, 2023
96f5bf4
Version v1.6.5
djphazer Sep 26, 2023
fec0101
C++17 compatibility
PaulStoffregen Oct 8, 2023
10977a7
Support DSP instructions on Cortex M4 & M7
PaulStoffregen Oct 8, 2023
734dad8
ifdef drivers for Teensy 3.2 vs 4.1 (placeholders only)
PaulStoffregen Oct 8, 2023
7862c8a
Merge pull request #28 from PaulStoffregen/phazerville
djphazer Oct 9, 2023
2590059
DAC and display driver for Teensy 4.x - work in progress
PaulStoffregen Oct 10, 2023
e8aa84d
Don't init display too quickly with Teensy 4.1
PaulStoffregen Oct 11, 2023
f281fd7
Fix SH1106_data_start_seq byte order on Teensy 4.1
PaulStoffregen Oct 11, 2023
55485e3
Merge pull request #29 from PaulStoffregen/phazerville
djphazer Oct 11, 2023
8a1b13e
build config for Teensy 4.0
djphazer Oct 11, 2023
a3f644f
Fix inverted DAC on T4.x
djphazer Oct 12, 2023
f117bd1
Add ADC driver for Teensy 4.x (via Paul Stoffregen)
PaulStoffregen Oct 15, 2023
a6bbf52
Custom eeprom.h for Teensy 4.0 (2048 bytes)
djphazer Oct 16, 2023
3703cbf
build configs for Teensy 4.x
djphazer Oct 15, 2023
cf77943
Show Teensy version on Setup / About screen
djphazer Oct 16, 2023
138e1fd
ProbMeloD: use standard CV modulation of params
djphazer Oct 16, 2023
aae7bbf
ProbDiv: use standard CV modulation of loop length
djphazer Oct 17, 2023
97a2767
Combine MIDI inputs with CV rather than override
djphazer Sep 29, 2023
b69cf80
SCENES: keep MIDI Clock out ticking
djphazer Oct 9, 2023
95335d6
SCENES: CV3 modulates Slew/Smoothing amount
djphazer Oct 19, 2023
9618dd9
SCENES: TrigSum mode on output D, long-press left enc to toggle
djphazer Oct 21, 2023
f3fbbe2
DualTM: default Slew to 0; tweaks & refactoring
djphazer Oct 9, 2023
b24b2d2
DualTM: add Root Note; rearrange UI
djphazer Oct 24, 2023
6ef5c02
TB-3PO: fixes for Root note & Transpose
djphazer Oct 19, 2023
57c85cf
LoFiPCM: invert waveform display
djphazer Oct 21, 2023
b89e2ea
smol cursor tweak
djphazer Oct 23, 2023
625d8ab
Calibr8or: auto-save to EEPROM when storing Preset; UI tweaks
djphazer Oct 23, 2023
39636a2
SequenceX: Trigger at CV2 randomizes all steps
djphazer Oct 24, 2023
417f593
ResetClk: CV1 modulates Offset (for re-sequencing steps!)
djphazer Oct 24, 2023
b708bbe
Version bump v1.6.6; disable LORENZ in +main build
djphazer Oct 22, 2023
64297f8
HemisphereApplet: more Quantizer API functions
djphazer Oct 19, 2023
1b563c0
Utilize new Quantizer API in applets
djphazer Oct 23, 2023
0786072
New Applet: Pigeons
djphazer Oct 19, 2023
1829dd4
Update README.md
djphazer Oct 24, 2023
71036dc
bump T4.0 eeprom up to 3071 bytes
djphazer Oct 24, 2023
b226595
Version bump v1.6.666 / New build defaults
djphazer Oct 17, 2023
21e4104
Update TODO.md
djphazer Nov 4, 2023
8f845f3
Merge tag 'PSv1.6.666' into phazerville
djphazer Nov 11, 2023
14d90c1
Quantizer API; DualTM refactoring
djphazer Oct 24, 2023
a45c146
Fix EEPROM app data allocation for Teensy 4.x
djphazer Nov 8, 2023
1fdebcd
Restore References app
djphazer Oct 29, 2023
ff1b0f9
REFS: fix button handler; fix printf for float
djphazer Oct 29, 2023
9efdb8e
REFS/Autotuner fixes
djphazer Nov 4, 2023
00d4d58
Calibr8or: Show channel auto-calibration status
djphazer Nov 4, 2023
f59f901
Middle button cycles Clock in Hemisphere
djphazer Nov 5, 2023
db88195
Applet header extracted to base class
djphazer Nov 6, 2023
fa7a428
Trigger input remapping (replaces Clock Forwarding)
djphazer Nov 7, 2023
5d9a08a
Gate input follows Trigger input mapping
djphazer Nov 11, 2023
0ed221e
better quantizer initialization in Hemisphere
djphazer Nov 9, 2023
69a96dd
Decouple Autotuner from REFS; add to Calibr8or
djphazer Nov 9, 2023
10677a7
Calibr8or/Autotuner fixes
djphazer Nov 9, 2023
6f1b027
Autotuner: wait for user after Baseline 0V step
djphazer Nov 10, 2023
c1cb32d
Autotuner: fixes/refactoring; succeed when ceiling reached
djphazer Nov 10, 2023
b0f4ce0
Shuffle: continuously update values
djphazer Nov 3, 2023
a648989
ProbMeloD: alternate melody on second output
djphazer Nov 9, 2023
fbe9744
ProbDiv/ProbMeloD tweaks; separate triggers when linked
djphazer Nov 9, 2023
30fe60b
Pigeons: Link with ProbDiv for triggers
djphazer Nov 10, 2023
a8282e4
Update API-Notes / TODO
djphazer Nov 6, 2023
eee2e84
Version bump v1.6.777 / new build defaults
djphazer Nov 10, 2023
62e3dd9
UI tweaks: screensaver; applet headers; clock screen
djphazer Nov 15, 2023
0e30ba2
ResetClk: fix bug when changing offset via encoder
djphazer Nov 17, 2023
56bd24f
Configurable pins on Teensy 4
PaulStoffregen Nov 19, 2023
e60cfad
Opps, fix TR3 input on Teensy 4.x
PaulStoffregen Nov 20, 2023
37b3759
Read PCB ID voltage (pin A17) on Teensy 4.1
PaulStoffregen Nov 20, 2023
ba88103
Fixes for Teensy 4.0; custom pin config only for 4.1
djphazer Nov 24, 2023
fa7584c
Github action for PlatformIO CI (via pld)
djphazer Dec 14, 2023
a133fe6
Update README.md; Add workflow status badge
djphazer Dec 16, 2023
0f2fa44
Custom Build workflow / GitHub Action
djphazer Dec 17, 2023
5044baf
How could I forget Pong?!
djphazer Dec 17, 2023
370a401
Custom Build: handle VOR and FLIP_180
djphazer Dec 17, 2023
136f49b
ResetClk: use dynamic clock pulse lengths
djphazer Nov 18, 2023
0e7c735
Hemisphere Trig Length in milliseconds (approx)
djphazer Nov 18, 2023
58d7743
New Screensavers in Hem Config: blank, Meters, Zaps, Stars
djphazer Nov 24, 2023
4e216ff
Alt screensavers: Zips (T3) vs Stars (T4)
djphazer Nov 28, 2023
b89f4c1
properly restore modal_edit_mode from Clock Data
djphazer Nov 24, 2023
191f72d
[MultiScale] add new Quantizer with multiple CV-selecable scales, def…
zerbian Mar 4, 2023
03576a8
[MultiScale] fix scale page selection
zerbian May 1, 2023
a1e6b92
MultiScale: tweaks, cleanup; adapt to new Quantizer API
djphazer Nov 26, 2023
a734052
Passencore, a functional harmony-based chord sequencer.
sixolet May 31, 2021
85f684a
copyright I guess
sixolet Jun 18, 2021
c294b3c
Move new scales from Passencore to the end
djphazer Dec 9, 2023
5734d30
Enable Passencore (with some fixes)
djphazer Nov 28, 2023
6b3fd00
Passencore: scale mask editor; allow all scales
djphazer Dec 11, 2023
d6dd1e3
Fix quantizer note index handling
qiemem Dec 2, 2023
f2e287a
Hemisphere: EEPROM Auto-save
djphazer Dec 4, 2023
935d298
MIDI ProgChange 0-3 loads Hemisphere Preset
djphazer Dec 7, 2023
1168c6b
Draw save message during auto-save
djphazer Dec 7, 2023
8912b14
Brancher: show CV modulated value
djphazer Dec 10, 2023
1abcc3b
Set default Trig Length to 10ms
djphazer Dec 10, 2023
dd5e444
Clock off-by-one for divisions; fixes resets
djphazer Dec 10, 2023
1061705
Reset on load for sequencers
djphazer Dec 10, 2023
2e1619d
Don't load Tempo if Clock is running
djphazer Dec 11, 2023
05e15c9
Clock: allow 1 BPM; cleanup
djphazer Dec 11, 2023
95eef1d
Add global shuffle to Clock
djphazer Dec 13, 2023
eb55a5a
Average two clock intervals for sync
djphazer Dec 14, 2023
f7db64f
Save space, move functions from inline to cpp
patrickdowling Apr 8, 2020
b9eebd5
Save space, compile-time calculation of circle positions
patrickdowling Apr 8, 2020
d733edb
Calibr8or: autotune overrides scale_factor
djphazer Dec 14, 2023
378996e
Calibr8or: reset digital ins after autotuner
djphazer Dec 18, 2023
dbced87
Run CI Workflow on all branches, only for code changes
djphazer Dec 18, 2023
d036798
Version bump v1.6.999
djphazer Dec 14, 2023
4920367
workflow tweaks/cleanup for Custom Build
djphazer Dec 20, 2023
e3a4fef
Fully functional linkable relabi app with four channel LFO output.
TricksterSam Jan 10, 2024
868169a
Reactivated building for all different platforms.
TricksterSam Jan 10, 2024
5b561cf
Reallowed building for all platforms.
TricksterSam Jan 11, 2024
6910670
Update README.md
TricksterSam Jan 11, 2024
68f1364
Custom hemisphere_config.h for preferred
TricksterSam Jan 11, 2024
6a79780
Relabi app updated.
TricksterSam Jan 12, 2024
34b043e
Relabi App updated to have better cross-modulation
TricksterSam Jan 15, 2024
20b105b
In progress fixes to Relabi.
TricksterSam Jan 17, 2024
0da4ff7
Changed underlying functions for LFO scaling and
TricksterSam Jan 17, 2024
5a2ec96
Personal platformio.ini updated to compile to
TricksterSam Jan 17, 2024
9c96c47
Fixed a bug in Relabi app that added controls for
TricksterSam Jan 18, 2024
801f3eb
Modified HEM_RunglBook to allow selecting a bitdepth parameter.
TricksterSam Apr 19, 2024
678fc36
Added bit1 output to HEM_RunglBook while removing ALT output.
TricksterSam Apr 19, 2024
8592af4
Relabi App MAJOR UPDATE.
TricksterSam Dec 23, 2024
3dd41f9
MAJOR UPDATE to Relabi App.
TricksterSam Dec 23, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions .github/workflows/custom.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Custom Build

on:
discussion_comment:
types: [created]

jobs:
build:
name: Build Custom Firmware
if: contains(github.event.comment.body, '/buildthis')
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
with:
ref: phazerville

- name: Setup env
env:
GH_COMMENT: ${{ github.event.comment.body }}
run: |
echo "OC_ARTIFACT_TAG=custom_${GITHUB_ACTOR}-$(software/o_c_REV/resources/oc_build_tag.sh)" | tr '/' '_' >> $GITHUB_ENV
echo "CUSTOM_BUILD_FLAGS=$(python software/o_c_REV/resources/parse_build_request.py)" >> $GITHUB_ENV

- name: Cache PlatformIO
uses: actions/cache@v3
with:
path: ~/.platformio
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}

- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.x'
cache: 'pip'
cache-dependency-path: '**/requirements.txt'

- run: |
pip3 install --upgrade pip
pip3 install -r .github/workflows/requirements.txt

- name: Build firmware
working-directory: software/o_c_REV/
run: |
pio run -e custom

- name: Copy artifact
uses: actions/upload-artifact@v3
with:
name: o_C-${{env.OC_ARTIFACT_TAG}}
path: software/o_c_REV/.pio/build/*/*.hex

# TODO: this will only work with Issues or Pull Requests...
# - name: Add follow-up comment to discussion
# uses: actions/github-script@v6
# if: always()
# with:
# script: |
# const name = '${{ github.workflow }}';
# const url = '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}';
# const success = '${{ job.status }}' === 'success';
# const body = `${name}: ${success ? 'succeeded ✅' : 'failed ❌'}\n${url}`;
#
# await github.rest.issues.createComment({
# issue_number: context.issue.number,
# owner: context.repo.owner,
# repo: context.repo.repo,
# body: body
# })
45 changes: 45 additions & 0 deletions .github/workflows/firmware.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: PlatformIO CI

on:
push:
paths:
- 'software/o_c_REV/**'

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Setup env
run: |
echo "OC_ARTIFACT_TAG=${GITHUB_REF_NAME}-$(software/o_c_REV/resources/oc_build_tag.sh)" | tr '/' '_' >> $GITHUB_ENV

- name: Cache PlatformIO
uses: actions/cache@v3
with:
path: ~/.platformio
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}

- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.x'
cache: 'pip'
cache-dependency-path: '**/requirements.txt'

- run: |
pip3 install --upgrade pip
pip3 install -r .github/workflows/requirements.txt

- name: Build firmware
working-directory: software/o_c_REV/
run: |
pio run

- name: Copy artifact
uses: actions/upload-artifact@v3
with:
name: o_C-${{env.OC_ARTIFACT_TAG}}
path: software/o_c_REV/.pio/build/*/*.hex
1 change: 1 addition & 0 deletions .github/workflows/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
platformio
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ shelved/
Hemisphere\ Suite.cpp
builds
.pio
.vscode
79 changes: 79 additions & 0 deletions API-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
API Notes
===

### Basics

The o_C firmware operates with several "concurrent" threads.
(really they interrupt each other I guess)

There is a main _loop_ as well as an _ISR_ that fires from a timer.
The _loop_ acts as a watchdog while the _ISR_ does all the work.
UI events are on a seperate _ISR_ timer.
The display driver and input polling are also on independent interrupts.
So that's at least 4? separate processes happening in a cascade
for every cycle, which is 60us (nanoseconds) or 16.666khz

That's the general idea.

Anyway, we have top-level *Apps* and then there are *Applets* as implemented
in the _Hemisphere_ *App*. An *Applet* inherits the base class _HemisphereApplet_
and gains the superpowers necessary to live on half of your module's screen.

### Base Classes

The two primary interfaces in the Hemisphere API are _HSApplication_ and _HemisphereApplet_.
They both have many similarly named methods for I/O and graphics, with
_HemisphereApplet_ taking extra considerations for offsetting both in the right side.

All of the hardware details are neatly abstracted under these two interfaces. If you
simply want to make an applet that does some stuff, these APIs are your starting point.

### Applets

There are a few different things an Applet must do:
* Controller - the main logic computed every tick (every time the ISR fires)
* View - draw the pixels on the screen (there are many helpful _gfx*_ functions)
* UI Event Handling:
* OnButtonPress - what to do when the encoder button is pressed
* OnEncoderMove - what to do when the encoder rotated
* OnDataRequest / OnDataReceive - how to save / load state

There is also a `Start()` function for initializing things at runtime,
plus some Help text. That's about it.

You can easily try it out by copying the `HEM_Boilerplate.ino.txt` file into place,
and then adding your computations to its skeleton.

### Applet Functions

Function? or Method? Either way, this is how you do the things.

#### I/O Functions
The main argument of each is the channel to operate on - each half of the
screen gets 2 channels. So _n_ is typically either 0 or 1.

**Input**:
* Clock(n) - has the digital input received a new clock pulse?
* Gate(n) - is the digital input held high?
* In(n) - Raw value of the CV input
* DetentedIn(n) - this one reads 0 until it's past a threshold ~ a quartertone

**Output**:
* ClockOut(n) - hold the output high for a pulse length
* GateOut(n, on_off) - set the output high or low
* Out(n, raw) - set the output to an explicit value

I've added a standard case function for modulating a parameter with a certain input.
* Modulate(param, n, min, max) - automatically scales the input and modifies param

#### gfx Functions
There are many strategies for drawing things on the screen, and therefore, many
graphics related functions. You can see them for yourself in `HemisphereApplet.h`
All of them typically take _x_ and _y_ coordinates for the first two arguments,
followed by _width_ and _height_, or another _x,y_ pair.
_x_ is how many pixels from the left edge of the screen.
_y_ is how many pixels from the top edge of the screen.

Some essentials: *gfxPrint*, *gfxPixel*, *gfxLine*, *gfxCursor*,
*gfxFrame*, *gfxBitmap*, *gfxInvert*

12 changes: 0 additions & 12 deletions Hemisphere_Suite.ino

This file was deleted.

45 changes: 20 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,37 @@
Welcome to Benisphere Suite
===

## An active fork expanding upon Hemisphere Suite.

To download and install the latest release, head to [releases](https://github.com/benirose/O_C-BenisphereSuite/releases).
[![PlatformIO CI](https://github.com/djphazer/O_C-BenisphereSuite/actions/workflows/firmware.yml/badge.svg)](https://github.com/djphazer/O_C-BenisphereSuite/actions/workflows/firmware.yml)

To learn more about what makes this fork different than the original Hemisphere Suite, head to [the wiki](https://github.com/benirose/O_C-BenisphereSuite/wiki).

Benisphere takes the Hemisphere Suite in a new direction, adding new applets and some enhancements to existing ones, while also removing o_C style apps to make space for these changes.
Phazerville Suite with Relabi - an active o_C firmware fork
===
[![SynthDad's video overview](http://img.youtube.com/vi/XRGlAmz3AKM/0.jpg)](http://www.youtube.com/watch?v=XRGlAmz3AKM "Phazerville; newest firmware for Ornament and Crime. Tutorial and patch ideas")

### An alternate firmware to an alternate firmware??
Watch SynthDad's **video overview** (above) or check the [**Wiki**](https://github.com/djphazer/O_C-BenisphereSuite/wiki) for more info. [Download it here](https://github.com/djphazer/O_C-BenisphereSuite/releases).

Yes! This fork was an opportunity for me add stuff I wanted to see on my o_C without having to worry about running up against any legacy issues for other Hemipshere users. When I shared some of the progress I was making in my fork, people seemed excited and interested in trying it out, so I have made it an official fork rather than just my own personal project. I try to give back any improvements I make to the [main Hemispheres repo](https://github.com/Chysn/O_C-HemisphereSuite) when possible, but 1) it is not clear if that repo is still active and 2) there is barely any room remaining on the Teensy for improvements. By deciding that this version of the suite will only contain Hemisphere applets I was able to make room for new applets and other improvements. I do accept feature request issues and pull request, but the things that will make it in to this fork are still largely up to my discression.
## An active fork expanding upon Hemisphere Suite.

### Ok, so what's changed?
This is a fork of djphazer's Phazerville Suite which is a fork of Benisphere which is a fork of Hemisphere! The code is firmware for the Ornament & Crime, a Eurorack synth module that can act as many different modules as selected by the user. This firmware ads the Relabi app that generates chaotic but deterministic control voltage. In addition, it adds a function to the HSVectorOscillator.h file and provides a controller file that allows two Relabi apps to be linked, providing four related chaotic LFOs.

As of v1.0, I have added two new applets inspired by very popular modules ([Mutable Instruments Grids](https://mutable-instruments.net/modules/grids/) and [Noise Engineering Mimetic Digitalis](https://noiseengineering.us/products/mimetic-digitalis)) as well as some minor improvements to existing apps. I've also removed all of the full-width o_C style apps to make space for these changes. To see all of the changes in detail, visit the [wiki](https://github.com/benirose/O_C-BenisphereSuite/wiki).
Read more about the suite [here](https://github.com/djphazer/O_C-Phazerville). Please, go there and read about all the people who have contributed code.

### How do I try it?
## What is Relabi.

Head over to the [releases](https://github.com/benirose/O_C-BenisphereSuite/releases) section and download the latest release. Follow the ["Method A" instructions](https://ornament-and-cri.me/firmware/#method_a) from the Ornament and Crime website, except use the hex file you downloaded from the releases section.
Relabi is an alternative method of defining musical time. While rhythm is concerned with recurring pulses, relabi always slips the pulse. You can read all about the concept in [John Berndt's essay]((https://johnberndt.org/relabi/).

Alternatively, you can follow instructions in [this video](https://www.youtube.com/watch?v=dg_acylaMZU).

Note: you can reload any other previous firmware you had installed (stock o_C or Hemisphere Suite) just as easily.

### How do I build it?

You can download this repo and build the code following the ["Method B" instruction](https://ornament-and-cri.me/firmware/#method_b) from the Ornament and Crime website. Very specific legacy versions of the Arduino IDE and Teensyduino add-on are required to build, and are not installable on 64-bit only systems, like Mac OS. You must use an older version (Mojave or before) or a VM to install these versions.
### How To Get It

### What's with the name?
Check the [Releases](https://github.com/djphazer/O_C-BenisphereSuite/releases) section for a .hex file (to be used with the Teensy loader app), or clone the repository and build it yourself! I think the beauty of this module is the fact that it's relatively easy to modify and build the source code to reprogram it. You are free to customize the firmware, similar to how you've no doubt already selected a custom set of physical modules.

Beta tester [@jroo](https://github.com/jroo) jokingly called it that, and it kind of stuck! It's supposed to be a bit tongue in cheek, so I hope it's not taken too seriously! Also it has a nicer ringer than "Hemisphere Suite BR Fork".
### How To Change It

### Credits
This firmware fork is built using Platform IO, a Python-based build toolchain, available as either a [standalone CLI](https://docs.platformio.org/en/latest/core/installation/methods/installer-script.html) or a [full-featured IDE](https://platformio.org/install/ide), as well as a plugin for VSCode and other existing IDEs.

This is a fork of [Hemisphere Suite](https://github.com/Chysn/O_C-HemisphereSuite) by Jason Justian (aka chysn). I could not have built Hemisphere Suite, so a million thanks to Jason for doing the true hard work and keeping it open source.
The project lives within the `software/o_c_REV` directory. From there, you can Build the desired configuration and Upload via USB to your module:
```
pio run -e oc_stock2_flipped -t upload
```
Have a look inside `platformio.ini` for alternative build environment configurations - VOR, Buchla, flipped screen, etc. To build all the defaults consecutively, simply use `pio run`

ornament**s** & crime**s** is a collaborative project by Patrick Dowling (aka pld), mxmxmx and Tim Churches (aka bennelong.bicyclist) (though mostly by pld and bennelong.bicyclist). it **(considerably) extends** the original firmware for the o_C / ASR eurorack module, designed by mxmxmx.
_**Pro-tip**_: If you decide to fork the project, and enable GitHub Actions on your own repo, GitHub will build the files for you... ;)

http://ornament-and-cri.me/
34 changes: 34 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
TODO
===

* Auto-tuner floor/ceiling detection (fail gracefully)
* Move calibration routines to a proper App
* Runtime filtering/hiding of Applets
* Flexible input remapping for Hemisphere
- generalize applet params for assignment
* global quantizer settings in Hemisphere Config
* applet with modal interchange (CV modulation of scale)
* Subharmonicon app/applets
* Update Boilerplates
* add swing/shuffle to internal clock
* Automatic stop for internal Clock?
* Polyphonic MIDI input tracking
* MIDI output for all apps?

[APP IDEAS]
* QUADRANTS
* Two Spheres
* Snake Game

[DONE]
* Add auto-tuner to Calibr8or
* ProbMeloD - alternate melody on 2nd output
* Fix FLIP_180 calibration
* Add Clock Setup to Calibr8or
* Calibr8or screensaver
* Pull in Automatonnetz
* Sync-Start for internal Clock
* General Config screen (long-press right button)
* better MIDI input message delegation (event listeners?)
* import alternative grids_resources patterns for DrumMap2
* Add Root Note to DualTM
Binary file added hardware/OCP/TH_O_C_MAIN0_1_0.pdf
Binary file not shown.
Binary file added hardware/OCP/TH_O_C_UI-1_0.pdf
Binary file not shown.
Loading