I am developing a patch librarian for a synthesizer. Because the communication happens with Midi sysex and timing is not relevant I chose RawMIDI interface and not the alsa sequencer. The problem I have encountered is that writing to the midi port with snd_rawmidi_write() seems to broken. The function accepts any size of data block and claims to have sent everything. In reality only a part of the message is sent. For a large block size I can see the activity light blinking for fraction of a second. This happens both in blocking and non-blocking mode. I would expect the snd_rawmidi_write() to accept only a part of the message.
Can't help with rawmidi, but I can at least report that my experience using the sequencer interface has been that it is rather straightforward to use, even if just using it to send and transmit sysex data, even when the data is longer than 300 bytes.
If the data is larger than the RawMIDI buffer size (4096 bytes), the sequencer does not wait (like snd_rawmidi_write() would do), but just drops data.
This is just my question. You say snd_rawmidi_write() SHOULD cause a wait, but in my case it does not. Do you have any idea why this happens and how I could further diagnose the problem, possibly finding a fix?
Taneli