diff --git a/src/robomaster.h b/src/robomaster.h index 2089dd4..bf5ad1c 100644 --- a/src/robomaster.h +++ b/src/robomaster.h @@ -12,7 +12,11 @@ uint16_t crc16(const void *block, size_t length); #define PACKED __attribute__((__packed__)) struct PACKED Header { + + // The preamble marks the start of a message and is always 0x55 uint8_t preamble; + + // The length of the message includes the preamble and CRC16 at the end union { uint16_t length; struct { @@ -20,9 +24,20 @@ struct PACKED Header { uint8_t length_h; }; }; + + // This is a CRC8 checksum for the preamble and length together uint8_t crc; + + // hostbyte of the message sender uint8_t sender; + + // hostbyte of the message receiver uint8_t receiver; + + // Each message has a sequence ID + // The Robomaster will respond with the same ID for each request + // The value of the sequence ID doesn't matter to the Robomaster + // Repeating sequence IDs are acceptable union { int16_t seq_id; struct { @@ -30,6 +45,9 @@ struct PACKED Header { uint8_t seq_id_h; }; }; + + // The message attribute flags designate if a response is needed or if the + // message is a response. union { uint8_t attribute; struct { @@ -38,8 +56,11 @@ struct PACKED Header { bool is_ack : 1; }; }; + + // Each command has a cmdset and cmdid that together make a cmd key uint8_t cmdset; uint8_t cmdid; + }; struct PACKED Message {