node {
void evaluate(Context ctx) {
if (!isInputDirty<input_RCV>(ctx)) return;
auto MIDI = getValue<input_MIDI>(ctx);
auto rx = MIDI->read();
if (rx.header != 0) {
typeof_MSG msg = {};
msg.type = rx.header << 4;
msg.channel = rx.byte1 & 0b00001111;
msg.data1 = rx.byte2;
msg.data2 = rx.byte3;
emitValue<output_MSG>(ctx, msg);
emitValue<output_DONE>(ctx, 1);
}
}
}