Gave up on using bitfields

This commit is contained in:
Don Gagne
2014-08-27 21:39:55 -07:00
parent 0eea110f6f
commit fce0a3b728
2 changed files with 15 additions and 8 deletions
+6
View File
@@ -122,6 +122,9 @@ MavlinkFTP::_worker(Request *req)
// check request CRC to make sure this is one of ours
messageCRC = hdr->crc32;
hdr->crc32 = 0;
hdr->padding[0] = 0;
hdr->padding[1] = 0;
hdr->padding[2] = 0;
if (crc32(req->rawData(), req->dataSize()) != messageCRC) {
errorCode = kErrNoRequest;
goto out;
@@ -203,6 +206,9 @@ MavlinkFTP::_reply(Request *req)
// message is assumed to be already constructed in the request buffer, so generate the CRC
hdr->crc32 = 0;
hdr->padding[0] = 0;
hdr->padding[1] = 0;
hdr->padding[2] = 0;
hdr->crc32 = crc32(req->rawData(), req->dataSize());
// then pack and send the reply back to the request source
+9 -8
View File
@@ -71,16 +71,17 @@ private:
static MavlinkFTP *_server;
/// @brief This structure is sent in the payload portion of the file transfer protocol mavlink message.
/// This structure is layed out such that it should not require any special compiler packing to not consume extra space.
/// @brief Trying to pack structures across differing compilers is questionable for Clients, so we pad the
/// structure ourselves to 32 bit alignment which should get us what we want.
struct RequestHeader
{
uint16_t seqNumber; ///< sequence number for message
unsigned int session:4; ///< Session id for read and write commands
unsigned int opcode:4; ///< Command opcode
uint8_t size; ///< Size of data
uint32_t crc32; ///< CRC for entire Request structure, with crc32 set to 0
uint32_t offset; ///< Offsets for List and Read commands
uint16_t seqNumber; ///< sequence number for message
uint8_t session; ///< Session id for read and write commands
uint8_t opcode; ///< Command opcode
uint8_t size; ///< Size of data
uint8_t padding[3];
uint32_t crc32; ///< CRC for entire Request structure, with crc32 and padding set to 0
uint32_t offset; ///< Offsets for List and Read commands
uint8_t data[];
};