NAME

Device::Firmata::Protocol - Firmata protocol implementation

DESCRIPTION

Implementation of the Firmata 2.5 protocol specification.

Because we're dealing with a permutation of the MIDI protocol, certain commands are one byte, others 2 or even 3. We do this part to figure out how many bytes we're actually looking at

One of the first things to know is that while MIDI is packet based, the bytes have specialized construction (where the top-most bit has been reserved to differentiate if it's a command or a data bit)

So any byte being transferred in a MIDI stream will look like the following

BIT# | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
DATA | X | ? | ? | ? | ? | ? | ? | ? |

If X is a "1" this byte is considered a command byte If X is a "0" this byte is considered a data bte

We figure out how many bytes a packet is by looking at the command byte and of that byte, only the high nibble. This nibble tells us the requisite information via a lookup table...

See: http://www.midi.org/techspecs/midimessages.php And http://www.ccarh.org/courses/253/handout/midiprotocol/ For more information

Basically, however:

command nibble bytes 8 2 9 2 A 2 B 2 C 1 D 1 E 2 F 0 or variable

METHODS

message_data_receive

Receive a string of data. Normally, only one byte is passed due to the code, but you can also pass as many bytes in a string as you'd like.

sysex_parse

Takes the sysex data buffer and parses it into something useful

message_prepare

Using the midi protocol, create a binary packet that can be transmitted to the serial output

packet_sysex

create a binary packet containing a sysex-message

packet_sysex_command

create a binary packet containing a sysex-command

packet_query_version

Craft a firmware version query packet to be sent

packet_query_firmware

Craft a firmware variant query packet to be sent

get_max_compatible_protocol_version

Search list of implemented protocols for identical or next lower version.