Skip to content

Commit 572be5f

Browse files
committed
refactor: reduce duplication in sending preset dump
1 parent 93a3ddf commit 572be5f

File tree

1 file changed

+8
-43
lines changed

1 file changed

+8
-43
lines changed

src/midi.c

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -701,53 +701,18 @@ static void midi_remap_channel_sysex(const u8* data, u16 length)
701701
midi_remap_channel(data[0], data[1]);
702702
}
703703

704-
static void send_preset_data(u8 type, u8 program, const FmPreset* preset)
704+
static void send_preset_dump(u8 context, u8 command, const FmPreset* preset)
705705
{
706706
u8 sysexData[4 + 2 + 4 + (MAX_FM_OPERATORS * 11)];
707707
u16 index = 0;
708708

709709
sysexData[index++] = SYSEX_MANU_EXTENDED;
710710
sysexData[index++] = SYSEX_MANU_REGION;
711711
sysexData[index++] = SYSEX_MANU_ID;
712-
sysexData[index++] = SYSEX_COMMAND_PRESET_DATA;
712+
sysexData[index++] = command;
713713

714-
sysexData[index++] = type;
715-
sysexData[index++] = program;
716-
717-
sysexData[index++] = preset->algorithm;
718-
sysexData[index++] = preset->feedback;
719-
sysexData[index++] = preset->ams;
720-
sysexData[index++] = preset->fms;
721-
722-
for (u8 i = 0; i < MAX_FM_OPERATORS; i++) {
723-
sysexData[index++] = preset->operators[i].multiple;
724-
sysexData[index++] = preset->operators[i].detune;
725-
sysexData[index++] = preset->operators[i].attackRate;
726-
sysexData[index++] = preset->operators[i].rateScaling;
727-
sysexData[index++] = preset->operators[i].decayRate;
728-
sysexData[index++] = preset->operators[i].amplitudeModulation;
729-
sysexData[index++] = preset->operators[i].sustainLevel;
730-
sysexData[index++] = preset->operators[i].sustainRate;
731-
sysexData[index++] = preset->operators[i].releaseRate;
732-
sysexData[index++] = preset->operators[i].totalLevel;
733-
sysexData[index++] = preset->operators[i].ssgEg;
734-
}
735-
736-
midi_tx_send_sysex(sysexData, index);
737-
}
738-
739-
static void send_channel_data(u8 type, u8 midiChannel, const FmPreset* preset)
740-
{
741-
u8 sysexData[4 + 2 + 4 + (MAX_FM_OPERATORS * 11)];
742-
u16 index = 0;
743-
744-
sysexData[index++] = SYSEX_MANU_EXTENDED;
745-
sysexData[index++] = SYSEX_MANU_REGION;
746-
sysexData[index++] = SYSEX_MANU_ID;
747-
sysexData[index++] = SYSEX_COMMAND_CHANNEL_DATA;
748-
749-
sysexData[index++] = type;
750-
sysexData[index++] = midiChannel;
714+
sysexData[index++] = STORE_PROGRAM_TYPE_FM;
715+
sysexData[index++] = context;
751716

752717
sysexData[index++] = preset->algorithm;
753718
sysexData[index++] = preset->feedback;
@@ -783,9 +748,9 @@ static void dump_channel_request(const u8* data, u16 length)
783748
log_warn("Ch %d: No FM channel assigned", midiChannel + 1);
784749
return;
785750
}
786-
FmPreset currentPreset;
787-
synth_extract_preset(devChan->num, &currentPreset);
788-
send_channel_data(type, midiChannel, &currentPreset);
751+
FmPreset preset;
752+
synth_extract_preset(devChan->num, &preset);
753+
send_preset_dump(midiChannel, SYSEX_COMMAND_CHANNEL_DATA, &preset);
789754
log_info("Ch %d: FM %d dumped", midiChannel + 1, devChan->num);
790755
break;
791756
}
@@ -804,7 +769,7 @@ static void dump_preset_request(const u8* data, u16 length)
804769
case STORE_PROGRAM_TYPE_FM: {
805770
const FmPreset* preset = midi_fm_get_stored_preset(program);
806771
if (preset != NULL) {
807-
send_preset_data(type, program, preset);
772+
send_preset_dump(program, SYSEX_COMMAND_PRESET_DATA, preset);
808773
log_info("Prg %d: FM preset dumped", program);
809774
} else {
810775
log_warn("Prg %d: No FM preset to dump", program);

0 commit comments

Comments
 (0)