pichenettes / shruthi-1 Goto Github PK
View Code? Open in Web Editor NEWFirmware and hardware description files for the Shruthi-1, an hybrid monosynth
Home Page: https://mutable-instruments.net/archive/shruthi/build/
Firmware and hardware description files for the Shruthi-1, an hybrid monosynth
Home Page: https://mutable-instruments.net/archive/shruthi/build/
Compiler issue? Firmware works however menu choices are garbled in some cases, flashing the syx link on the attic page works fine
The link to https://mutable-instruments.net/shruthi1/build/ shown under About when clicking on the Code tab of the repo, no longer works.
Possibly, it should now link to https://mutable-instruments.net/archive/shruthi/build/ instead.
Hello, I'm trying to compile this on Ubuntu 19.04:
I've installed the AVR tools/libraries:
sudo apt install binutils gcc-avr avr-libc avrdude
And have these versions of avr-g++ and make:
~/code/shruthi-1> /usr/bin/avr-g++ --version
avr-g++ (GCC) 5.4.0
~/code/shruthi-1> make --version
GNU Make 4.2.1
I also updated avrlib to use the correct path:
~/code/shruthi-1/avrlib> which avr-g++
/usr/bin/avr-g++
~/code/shruthi-1/avrlib> git diff
diff --git a/makefile.mk b/makefile.mk
index 3c1f5be..7a84990 100644
--- a/makefile.mk
+++ b/makefile.mk
@@ -13,7 +13,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-AVRLIB_TOOLS_PATH ?= /usr/local/CrossPack-AVR/bin/
+AVRLIB_TOOLS_PATH ?= /usr/bin/
BUILD_ROOT = build/
BUILD_DIR = $(BUILD_ROOT)$(TARGET)/
PROGRAMMER ?= avrispmkII
Then I run make and get this error:
~/code/shruthi-1> make
/usr/bin/avr-g++ -c -mmcu=atmega644p -I. -g -Os -w -Wall -DF_CPU=20000000 -D__PROG_TYPES_COMPAT__ -fdata-sections -ffunction-sections -fshort-enums -fno-move-loop-invariants -DDISABLE_DEFAULT_UART_RX_ISR -DATMEGA644P -DSERIAL_RX_0 -mcall-prologues -fno-exceptions shruthi/part.cc -o build/shruthi1/part.o
shruthi/part.cc: In substitution of ‘template<class T> static void avrlib::ResourcesManager<ResourceId, Tables>::Load(const T*, uint8_t*, uint16_t) [with T = <missing>]’:
shruthi/part.cc:221:48: required from here
shruthi/part.cc:221:48: internal compiler error: in type_hash_canon, at tree.c:6953
ResourcesManager::Load(init_patch, 0, &patch_);
^
shruthi/part.cc:221:48: internal compiler error: Segmentation fault
avr-g++: internal compiler error: Segmentation fault (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
make: *** [avrlib/makefile.mk:95: build/shruthi1/part.o] Error 4
It seems to be an issue with patch_ being defined here: https://github.com/pichenettes/shruthi-1/blob/master/shruthi/part.h#L216
Any ideas what could be wrong?
diff --git a/shruthi/storage.cc b/shruthi/storage.cc
index f834b26f06bc95f63535cb47a6b8e307b0ee44d6..669045f998ea1bc92bb250c1a244e3a42d7012be 100755
--- a/shruthi/storage.cc
+++ b/shruthi/storage.cc
@@ -195,38 +195,38 @@ void Storage::SysExParseCommand() {
case 0x01: // Patch transfer
sysex_rx_expected_size_ = StorageConfiguration<Patch>::size;
break;
-
+
case 0x02: // Sequence transfer
sysex_rx_expected_size_ = \
StorageConfiguration<SequencerSettings>::size;
break;
-
+
case 0x03: // Wavetable dump
sysex_rx_destination_ = user_wavetable;
sysex_rx_expected_size_ = kUserWavetableSize;
break;
-
+
case 0x04: // System settings transfer
sysex_rx_expected_size_ = sizeof(SystemSettings);
break;
-
+
case 0x05: // Step sequencer transfer
sysex_rx_expected_size_ = 2;
break;
-
+
case 0x06: // Patch name transfer
sysex_rx_expected_size_ = kPatchNameSize;
break;
-
+
case 0x07: // Full sequencer state transfer
sysex_rx_expected_size_ = sizeof(SequencerSettings);
break;
-
+
case 0x08: // Set pattern length
case 0x09: // Set pattern rotation
sysex_rx_expected_size_ = 0;
break;
-
+
case 0x11: // Patch request
case 0x12: // Sequence request
case 0x14: // System settings request
@@ -235,26 +235,26 @@ void Storage::SysExParseCommand() {
case 0x17: // Full sequencer state request
sysex_rx_expected_size_ = 0;
break;
-
+
case 0x21: // Patch write request
case 0x22: // Sequence write request
sysex_rx_expected_size_ = 2;
break;
-
+
case 0x31: // Patch randomize
case 0x32: // Sequence randomize
sysex_rx_expected_size_ = 0;
break;
-
+
case 0x40: // Bulk transfer
case 0x41:
case 0x42:
case 0x43:
sysex_rx_expected_size_ = kSysExBulkDumpBlockSize;
break;
-
+
case 0x50: // Bulk transfer requests
- sysex_rx_state_ = 0;
+ sysex_rx_expected_size_ = 0;
break;
default:
@@ -266,30 +266,30 @@ void Storage::SysExParseCommand() {
/* static */
void Storage::SysExAcceptBuffer() {
uint8_t success = 0;
-
+
// Add a delay for Request commands
- if ((sysex_rx_command_[0] & 0xf0) == 0x10 ||
+ if ((sysex_rx_command_[0] & 0xf0) == 0x10 ||
(sysex_rx_command_[0] & 0xf0) == 0x50) {
Delay(100);
success = 1;
}
-
+
switch (sysex_rx_command_[0]) {
case 0x01: // Patch transfer
success = AcceptData(engine.mutable_patch(), sysex_rx_buffer_);
break;
-
+
case 0x02: // Sequence transfer
success = AcceptData(
engine.mutable_sequencer_settings(),
sysex_rx_buffer_);
engine.TouchSequence();
break;
-
+
case 0x03:
success = 1;
break;
-
+
case 0x04:
memcpy(
(uint8_t*) engine.mutable_system_settings(),
@@ -298,7 +298,7 @@ void Storage::SysExAcceptBuffer() {
engine.mutable_system_settings()->EepromSave();
success = 1;
break;
-
+
case 0x05:
{
uint8_t step_index = sysex_rx_command_[1] & 0x0f;
@@ -308,11 +308,11 @@ void Storage::SysExAcceptBuffer() {
sysex_rx_buffer_[1]);
}
break;
-
+
case 0x06:
engine.SetName(sysex_rx_buffer_);
break;
-
+
case 0x07:
memcpy(
(uint8_t*) engine.mutable_sequencer_settings(),
@@ -321,17 +321,17 @@ void Storage::SysExAcceptBuffer() {
engine.mutable_sequencer_settings()->Update();
success = 1;
break;
-
+
case 0x08:
engine.SetPatternLength(sysex_rx_command_[1] & 0x0f);
success = 1;
break;
-
+
case 0x09:
engine.SetPatternRotation(sysex_rx_command_[1] & 0x0f);
success = 1;
break;
-
+
case 0x11:
Storage::SysExDump(engine.mutable_patch());
break;
@@ -339,7 +339,7 @@ void Storage::SysExAcceptBuffer() {
case 0x12:
Storage::SysExDump(engine.mutable_sequencer_settings());
break;
-
+
case 0x14:
Storage::SysExDumpBuffer(
(uint8_t*) engine.mutable_system_settings(),
@@ -347,7 +347,7 @@ void Storage::SysExAcceptBuffer() {
0,
sizeof(SystemSettings));
break;
-
+
case 0x15:
{
uint8_t step_index = sysex_rx_command_[1] & 0x0f;
@@ -359,7 +359,7 @@ void Storage::SysExAcceptBuffer() {
2);
}
break;
-
+
case 0x16:
Storage::SysExDumpBuffer(
(uint8_t*) engine.mutable_patch()->name,
@@ -367,7 +367,7 @@ void Storage::SysExAcceptBuffer() {
0,
kPatchNameSize);
break;
-
+
case 0x17:
Storage::SysExDumpBuffer(
(uint8_t*) engine.mutable_sequencer_settings(),
@@ -375,7 +375,7 @@ void Storage::SysExAcceptBuffer() {
0,
sizeof(SequencerSettings));
break;
-
+
case 0x21:
WritePatch((sysex_rx_buffer_[0] << 8) | (sysex_rx_buffer_[1]));
success = 1;
@@ -385,7 +385,7 @@ void Storage::SysExAcceptBuffer() {
WriteSequence((sysex_rx_buffer_[0] << 8) | (sysex_rx_buffer_[1]));
success = 1;
break;
-
+
case 0x31:
editor.RandomizePatch();
success = 1;
@@ -395,7 +395,7 @@ void Storage::SysExAcceptBuffer() {
editor.RandomizeSequence();
success = 1;
break;
-
+
case 0x40: // Raw data dump
case 0x41:
case 0x42:
@@ -425,9 +425,10 @@ void Storage::SysExAcceptBuffer() {
}
}
break;
-
+
case 0x50:
SysExBulkDump();
+ success = 1;
break;
}
sysex_rx_state_ = success ? RECEPTION_OK : RECEPTION_ERROR;
Hello,
I have this pcb, and I would like to know if there is a problem with this pcb, why it says "Do not build"?
It seems like the SSM2044 Filter PCB and Schematic (http://mutable-instruments.net/shruthi1/build/ssm2044) was actually never published in the Git Repository.
Are you planing to add those?
Thanks
Datanoise
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.