Communication is done through messages, which may be split into several fragments, which are then sent as individual packets. Packets are framed as described earlier in this file.
Each packet consists of the following two-byte header:
<sequence> <ptype>
There are two sequence numbers: the message sequence number <mseq> and the fragment sequence number <fseq>. They are counted independently and start at zero. <mseq> is reset at the beginning of a session, while <fseq> is reset at the beginning of each message.
The following packet types are known:
00 Message fragment
03 Speed message from computer
04 EOT
05 ACK
06 Compatibility?
A packet with type 03 is sent once, early in the initialization for the computer to ask the camera to switch to a higher speed.
Each message ends with an EOT packet, which is then confirmed by an ACK packet.
EOT has the following format:
xx 04 xx 00 00 00 | | | indication of the message length. Known values: <mseq> 00 empty message (no fragments) 01 short message (one fragment) 03 used when uploading ff maximum length data packet, more to follow else data packet, at end (observed values: 0f, 7f)
ACK has the following format:
xx 05 xx 00 00 00 | | | error code <mseq> 00 No error, acknowledged 01 Not acknowledged FF retransmit last sequence else other values not known
A packet with type 06 is sent once, as the first packet coming from the camera. It contains a length, just like a normal message fragment, but the message structure is different.
An empty message can be used to test if the camera is still responding. If yes, it will respond with an ACK. Example:
PCCAM xx 04 00 00 00 00
CAMPC xx 05 00 00 00 00
Message fragments have the following structure:
xx 00 xx xx ... | | | | | | | fragment data | | data length, MSB | data length, LSB <fseq>
The data length is the length (in bytes) of the fragment data that follows the length. Fragment data is simply concatenated to form the complete message.