Description
https://github.com/firmata/ConfigurableFirmata/blob/master/src/Encoder7Bit.cpp
Instead of creating an entire class for encoding and decoding, perhaps we could use a different encoding style that has a limited length, but can be statically encoded and decoded.
The private function FirmataMarshaller::transformByteStreamToMessageBytes
could work more or less as it does now, except it would insert two bytes at the beginning of the stream to indicate the length [0-16383] (also I would rename it to (wish I had originally named it) FirmataMarshaller::encodeByteStream
). Then you would be able to make an analogous FirmataParser::decodeByteStream
that would be able to in-place reconstruct the original message, knowing exactly how many bytes it should evaluate to.
16kB (14bits) seems like plenty for a max sysex message length, whereas 128B is simply not enough (doesn't even cover the capability query for an Uno). I'm not sure how MAX_DATA_BYTES
(64) fits into this equation, but I feel like it could be handled outside the marshaller and parser.
@soundanalogous I would love to hear your thoughts. This could be implemented rather quickly given the components already in place, and may alleviate any overhead (size and perf) associated with a dedicated class.
SIDE NOTE: This is the way strings used to be implemented (maybe still are) in RPGLE on the IBM iSeries (AS/400).