I have a few questions about the XID protocol that I couldn't answer from the documentation.
First, it appears that the parameter argument is sometimes ASCII and sometimes binary, but it isn't completely clear when. For example, in the c1X command, X can be 0, 1, 2, or 3, but is that binary (00000000, 00000001, ...) or ASCII ('0', '1',...)? There are many commands where the parameter ranges from 0 to a small integer, 1-5; are all of these ASCII? All binary? (A few commands are clearly binary, like all the b commands.) I believe that the responses to the _d2-_d5 commands are always ASCII.
Second, there are several multi-byte commands, such as e2/_e2 and the response to e3. In this case, what is the order of the bytes? 0123, 3210, or something else?
Third, there is an ASCII full product name string. How is this string terminated? Is it a constant length, NUL-terminated, terminated with a newline?
Finally, how is an XID box supposed to respond to a protocol error, such as an unknown command sequence (like "E1", "zx", "a7", or "d4"), an unsupported or meaningless inquiry (like "_f1" or "_ar"), a parameter out of range (like "c19"), or an incomplete command (like "a1" followed by a long delay)? There doesn't appear to be an error response, or in fact, any kind of specific error detection. I suppose it could throw away everything in the erroneous packet and hope to get back in sync again somehow.