MIDI DESIGNER
The only MIDI controller for iPad, iPhone, and Mac


Talk to other MIDI Designer users about MIDI Designer, iOS MIDI and related topics. Or share layouts, pages, and ideas.

Check out our Facebook Group.

Of course, if you want to send us an email, feel free.

Open problem reports

Summary of user requests

Add support for Roland five byte device codes in check sums

+1 vote
asked Feb 21 in Suggestions (Implemented) by jkhiser (19,870 points)
recategorized May 9 by admin
This is shocking but... ok. We'll implement. Thanks for this and the SB workaround below!
going to beta now.

1 Answer

+2 votes
MIDI Target Manufacturer(s): Roland

We have our first board that needs this fix - Roland SPDX-Pro.

Here is a StreamByter output rule that fixes the checksum for this device.  I don't have a five byte device to test against, but this returned correct checksums for my test matrix.

In the MD control SysEx format, select one of the current Roland checksum formats to ensure the message has a checksum.  Doesn't matter which as this does a complete checksum recalc.  We just need the CS position to exist in the message.

Update - original incorrectly had 12 in ID position five - correct value for SPDX Pro is 16

Paste from line below to bottom in StreamByter output rules

# Temporary fix for Roland five byte device ID checksums
# Red Heron Music
# March 8, 2024

# SPDX Pro sample two byte data message
# F0 41 10 00 00 00 00 16 12 20 00 00 41 V1 V0 Cs F7
#  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F 10 (ML = 11)

# Checksum calculation starts at position M0A, goes to ML - 3, checksum in position ML - 2

# i0 - CheckSum
# i1 - Loop variable 
# i2 - Last position

If Load
    Alias i0 ChkSum
    Alias i1 Loop
    Alias i2 Last
End

If M0 == F0 41 10 00 # Roland Device
    If M4 == 00 00 00 16 # SPDX Pro, replace 16 for other Roland five byte devices

        Ass ChkSum = 0
        Ass Loop = 9
        Mat Last = ML - 2 # Checksum position

        While Loop < Last # we get ML - 3 by using < in test
            Mat ChkSum = ChkSum + Mi1 # Loop - alias not allowed on indirect
            Mat Loop = Loop + 1
        End

        Mat ChkSum = ChkSum % 80
        Mat ChkSum = 80 - ChkSum
        Mat ChkSum = ChkSum % 80

        Ass Mi2 = ChkSum # Last - Alias not allowed on indirect
    End
End

answered Mar 8 by jkhiser (19,870 points)
edited Mar 8 by jkhiser
...