Commit Graph

81 Commits

Author SHA1 Message Date
Loic Coenen
011d29cb09 docs: update evaluation.md with final code review
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-10 00:21:57 +00:00
Loic Coenen
be3188bbe2 fix: keep FIFO fd open across both writes to prevent hang
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-10 00:16:03 +00:00
Loic Coenen
c592c24634 feat: add MIDI stop command and FIFO pipe integration test
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 23:56:09 +00:00
Loic Coenen
7b61384154 docs: update evaluation.md with current code analysis
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 23:55:07 +00:00
Loic Coenen
7edd95d06e fix: split main command queue into per-source SPSC queues
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 23:32:21 +00:00
Loic Coenen
de0389e144 feat: remove MIDI-driven add/remove channel commands to fix SPSC race
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 23:12:53 +00:00
Loic Coenen
bd5fd59b7b fix: add missing source files to build
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 22:51:13 +00:00
Loic Coenen
b1e330e839 refactor: remove stale cmd_add/cmd_remove declarations from channel.h
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 22:20:35 +00:00
Loic Coenen
437ac31913 feat: unify add/remove commands into queue and fix race on channel removal
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 22:03:11 +00:00
Loic Coenen
a8a9c6164b docs: update evaluation.md with detailed code review and recommendations
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 21:35:38 +00:00
Loic Coenen
392dabbc0f feat: add command queue and FIFO pipe for unified input handling
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 21:31:54 +00:00
Loic Coenen
f7f18f9fa7 style: fix formatting and include order in source files 2026-05-09 21:31:52 +00:00
Loic Coenen
72839a9e5f Merge remote-tracking branch 'origin/multichannel' 2026-05-09 19:55:36 +00:00
Loic Coenen
d6336970bf Merge branch 'multichannel' 2026-05-09 19:54:08 +00:00
Loic Coenen
8c061f93cd delete main.c 2026-05-09 19:52:10 +00:00
2b4531f3f3 Merge pull request '1-multichannel' (#1) from 1-multichannel into multichannel
Reviewed-on: #1
2026-05-09 15:47:08 -04:00
Loic Coenen
b4a65a5788 chore: add git hooks 2026-05-09 14:47:04 +00:00
Loic Coenen
20c0820910 refactor: use explicit pointer casts to clarify type conversions
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 14:46:09 +00:00
Loic Coenen
934843e9b1 fix: move cppcheck suppression comment to same line as assignment
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 13:23:32 +00:00
Loic Coenen
2fa1d159e7 refactor: remove global cppcheck suppressions and move usleep suppression locally
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 13:20:37 +00:00
Loic Coenen
982dd4dc02 refactor: replace usleep with safe_usleep in integration tests 2026-05-09 13:20:36 +00:00
Loic Coenen
b02c45e7ab fix: suppress cppcheck warnings for missing includes and usleep
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 13:19:08 +00:00
Loic Coenen
aa0b191b46 makefile
```makefile
<<<<<<< SEARCH
check:
	cppcheck --enable=all --error-exitcode=1 --suppress=missingIncludeSystem --suppress=usleepCalled --suppress=unreadVariable --suppress=normalCheckLevelMaxBranches src/*.c --library=posix .
=======
check:
	cppcheck --enable=all --error-exitcode=1 --suppress=unreadVariable src/*.c --library=posix .
>>>>>>> REPLACE
```

src/channel.c
```c
<<<<<<< SEARCH
#include "channel.h"
#include <jack/jack.h>
#include <stdatomic.h>
#include <stdio.h>
#include <string.h>
=======
// cppcheck-suppress missingIncludeSystem
#include "channel.h"
#include <jack/jack.h>
#include <stdatomic.h>
#include <stdio.h>
#include <string.h>
>>>>>>> REPLACE
```

src/channel.h
```c
<<<<<<< SEARCH
#include <jack/jack.h>
#include <stdatomic.h>
=======
// cppcheck-suppress missingIncludeSystem
#include <jack/jack.h>
#include <stdatomic.h>
>>>>>>> REPLACE
```

src/looper.c
```c
<<<<<<< SEARCH
#include "looper.h"
#include "channel.h"
#include "midi.h"
#include <jack/jack.h>
#include <jack/midiport.h>
#include <math.h>
#include <stdatomic.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
=======
// cppcheck-suppress missingIncludeSystem
#include "looper.h"
#include "channel.h"
#include "midi.h"
#include <jack/jack.h>
#include <jack/midiport.h>
#include <math.h>
#include <stdatomic.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
>>>>>>> REPLACE
```

src/looper.h
```c
<<<<<<< SEARCH
#include <jack/jack.h>
=======
// cppcheck-suppress missingIncludeSystem
#include <jack/jack.h>
>>>>>>> REPLACE
```

src/main.c
```c
<<<<<<< SEARCH
#include "looper.h"
#include <jack/jack.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
=======
// cppcheck-suppress missingIncludeSystem
#include "looper.h"
#include <jack/jack.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
>>>>>>> REPLACE
```

src/midi.c
```c
<<<<<<< SEARCH
#include "midi.h"
#include "channel.h"
#include <jack/jack.h>
#include <jack/midiport.h>
#include <stdatomic.h>
=======
// cppcheck-suppress missingIncludeSystem
#include "midi.h"
#include "channel.h"
#include <jack/jack.h>
#include <jack/midiport.h>
#include <stdatomic.h>
>>>>>>> REPLACE
```

src/midi.h
```c
<<<<<<< SEARCH
#include <jack/types.h>
=======
// cppcheck-suppress missingIncludeSystem
#include <jack/types.h>
>>>>>>> REPLACE
```

tests/integration.c
```c
<<<<<<< SEARCH
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <string.h>
#include <stdarg.h>
#include <fcntl.h>
#include <jack/jack.h>
#include <jack/midiport.h>
#include <math.h>
#include <time.h>
=======
// cppcheck-suppress missingIncludeSystem
// cppcheck-suppress usleepCalled
// cppcheck-suppress normalCheckLevelMaxBranches
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <string.h>
#include <stdarg.h>
#include <fcntl.h>
#include <jack/jack.h>
#include <jack/midiport.h>
#include <math.h>
#include <time.h>
>>>>>>> REPLACE
```

Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 12:46:50 +00:00
Loic Coenen
c2df024350 style: reformat code and update cppcheck suppressions 2026-05-09 12:46:31 +00:00
Loic Coenen
d2e39f3451 chore: add install-hooks target and update cppcheck library flag 2026-05-09 12:38:35 +00:00
Loic Coenen
7e9224cdc7 fix: replace usleep with nanosleep and fix const correctness
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 12:11:57 +00:00
Loic Coenen
1db9735e1b style: reformat code and reorder includes in looper.c and main.c 2026-05-09 12:11:55 +00:00
Loic Coenen
e8d679c1af fix: replace usleep with safe_usleep in integration tests
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 11:45:32 +00:00
Loic Coenen
e7761c4b53 fix: replace usleep with nanosleep and fix const correctness in tests
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 11:44:06 +00:00
Loic Coenen
5532b8cd50 chore: Add pre-push hooks 2026-05-09 11:36:38 +00:00
Loic Coenen
60a8bdcfe8 feat: add unbind command (note 63) to reset bind_channel to 0
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 11:14:52 +00:00
Loic Coenen
ac9ce26e9a docs: add multi-channel and bind feature documentation
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 10:28:26 +00:00
Loic Coenen
4ad16824f1 docs: add multichannel documentation 2026-05-09 10:28:25 +00:00
Loic Coenen
4bacab68c6 feat: implement bind feature for associating channels with MIDI notes
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 10:22:33 +00:00
Loic Coenen
740ebaa969 test: add integration tests for control-key modifier and channel removal
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 10:09:51 +00:00
Loic Coenen
b0dda3d8ed fix: defer port unregistration to avoid race condition in channel removal
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 10:00:33 +00:00
Loic Coenen
c0a0a6e968 fix: add null-checks for MIDI ports and use atomic access for channel active flag
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-09 09:57:36 +00:00
Loic Coenen
74a190c70c #1: multichannel 2026-05-08 21:11:22 +00:00
Loic Coenen
d10aeebd13 fix: update segfault evaluation to reflect null pointer fixes
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-08 21:09:13 +00:00
Loic Coenen
b73719e8bc fix: guard against NULL audio ports and defer channel activation until port registration succeeds
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-08 21:08:37 +00:00
Loic Coenen
96295fdb4c refactor: split monolithic main.c into modular source files
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-08 21:03:10 +00:00
Loic Coenen
f1a92f1e95 fix: increase sleep duration in dynamic channel test to allow processing
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-08 20:56:56 +00:00
Loic Coenen
9eb264aab8 feat: implement control key (note 64) and trigger looper command (note 62)
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-08 20:51:34 +00:00
Loic Coenen
6b6f2dee3c refactor: restructure looper into multi-channel architecture
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-08 20:38:37 +00:00
Loic Coenen
07962c2a09 feat: add test evaluation section to evaluation.md
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-08 20:31:04 +00:00
Loic Coenen
a7106f55d5 docs: add evaluation documentation 2026-05-08 20:31:02 +00:00
Loic Coenen
e824f6df73 feat: add test for dynamic channel creation via MIDI command
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
2026-05-08 20:03:49 +00:00
Loic Coenen
0e567e1829 remove signal handling 2026-05-08 09:14:40 +00:00
Loic Coenen
3bb5936d02 fix: move prev_state update after MIDI clock handler to fix race condition
Co-authored-by: aider (deepseek/deepseek-chat) <aider@aider.chat>
2026-05-07 22:51:28 +00:00
Loic Coenen
829010a5d0 tests pass 2026-05-07 22:33:19 +00:00