Open reconbot opened 11 years ago
I'm sure Firmata has strayed from the midi format over the years as no one has been enforcing it.
Regarding version report
, you don't need to support it since SysEx REPORT_FIRMWARE (0x79) command can be used instead. I think version report
only exists now for backwards compatibility (but I could be wrong). I wasn't involved with Firmata when the initial decisions were made.
I think 0x79
is firmware version vs 0xF9
firmata version. I'd love to propose a midi compliant SysEx response for the next protocol version.
This is tricky because Firmata Version (0xF9) may be used by some Firmata client libraries as the signal that the board is ready after a serial port connection has been made (this is what happens when a non-standard message has been in use for several years). I don't know off hand how many libraries this would effect and how many users there are relying on any of those implementations. Therefore 0xF9 may need to remain an exception to the System Realtime Message format.
If you feel like doing some research, take a look at a bunch of client firmata libraries and see if they are looking for a response 0xF9 on startup vs the REPORT_FIRMWARE
command of a SysEx message. Basically anyone using 0xF9 in an active Firmata client library will need to change to their implementation to use REPORT_FIRMWARE if this moves forward.
I'll take a look when I get back to firmata-pi
and midi-parser
work later in the week. I think we shouldn't change it for 2.3 but instead change the behavior or message format in later versions.
This ends up being a problem for web bluetooth.
@monteslu This would be a place to address the issues you encountered in WebMidi and where we could brainstorm some potential work arounds.
We might have to add a SYSEX method to REPORT_FIRMWARE. WebMidi doesn't seem like single byte commands: https://chromium.googlesource.com/experimental/chromium/blink/+/refs/wip/bajones/webvr/LayoutTests/webmidi/send-messages-expected.txt#12
@monteslu looking over that test output, it doesn't look like 0xF4
(set pin mode) and0xF5
(set digital pin value) will work either. It appears the WebMidi parser rejects any reserved system messages (0xF4, 0xF5, 0xF9, 0xFD) regardless of message length.
However I think the following would work if the correct number of data bytes is used:
0xF1 : 1 data byte 0xF2 : 2 data bytes 0xF3 : 1 data byte 0xF6 : 0 data bytes
I believe any of the following would work as a single byte as well: 0xF8 0xFA 0xFB 0xFC 0xFE
One possibility may be to use one of the above single byte sysex messages for the REPORT_VERSION query and use 0xF2 for the 2 data byte REPORT_VERSION reply.
Over the past few days I've been implementing a node.js midi parser with the idea that it would serve as the firmata/midi parsing guts of another project I'm working on. I've noticed that the
protocol version request
is a system realtime command. Which is great, however, it seems theversion report
is the same command except with 2 data bytes?This only concerns me because it seems none of the other midi realtime commands have any data bytes and that parsers will have to special case this on the host side. (We're calling the two sides, host and device, right?)
I'm aware
0xF9
is undefined in the midi spec so it can technically can do anything we want.I just want to make sure my assumptions are correct.
Thanks!