Commit 85e81a84 authored by Don Gagne's avatar Don Gagne

Had to give up on bitfields

parent f12a2f74
...@@ -80,7 +80,7 @@ QGCUASFileManager::QGCUASFileManager(QObject* parent, UASInterface* uas, uint8_t ...@@ -80,7 +80,7 @@ QGCUASFileManager::QGCUASFileManager(QObject* parent, UASInterface* uas, uint8_t
_systemIdServer = _mav->getUASID(); _systemIdServer = _mav->getUASID();
// Make sure we don't have bad structure packing // Make sure we don't have bad structure packing
Q_ASSERT(sizeof(RequestHeader) == 12); Q_ASSERT(sizeof(RequestHeader) == 16);
} }
/// @brief Calculates a 32 bit CRC for the specified request. /// @brief Calculates a 32 bit CRC for the specified request.
...@@ -95,6 +95,9 @@ quint32 QGCUASFileManager::crc32(Request* request, unsigned state) ...@@ -95,6 +95,9 @@ quint32 QGCUASFileManager::crc32(Request* request, unsigned state)
// Always calculate CRC with 0 initial CRC value // Always calculate CRC with 0 initial CRC value
quint32 crcSave = request->hdr.crc32; quint32 crcSave = request->hdr.crc32;
request->hdr.crc32 = 0; request->hdr.crc32 = 0;
request->hdr.padding[0] = 0;
request->hdr.padding[1] = 0;
request->hdr.padding[2] = 0;
for (size_t i=0; i < cbData; i++) for (size_t i=0; i < cbData; i++)
state = crctab[(state ^ data[i]) & 0xff] ^ (state >> 8); state = crctab[(state ^ data[i]) & 0xff] ^ (state >> 8);
......
...@@ -75,16 +75,17 @@ public slots: ...@@ -75,16 +75,17 @@ public slots:
protected: protected:
/// @brief This is the fixed length portion of the protocol data. This structure is layed out such that it should not require /// @brief This is the fixed length portion of the protocol data. Trying to pack structures across differing compilers is
/// any special compiler packing to not consume extra space. /// questionable, so we pad the structure ourselves to 32 bit alignment which should get us what we want.
struct RequestHeader struct RequestHeader
{ {
uint16_t seqNumber; ///< sequence number for message uint16_t seqNumber; ///< sequence number for message
unsigned int session:4; ///< Session id for read and write commands uint8_t session; ///< Session id for read and write commands
unsigned int opcode:4; ///< Command opcode uint8_t opcode; ///< Command opcode
uint8_t size; ///< Size of data uint8_t size; ///< Size of data
uint32_t crc32; ///< CRC for entire Request structure, with crc32 set to 0 uint8_t padding[3];
uint32_t offset; ///< Offsets for List and Read commands uint32_t crc32; ///< CRC for entire Request structure, with crc32 and padding set to 0
uint32_t offset; ///< Offsets for List and Read commands
}; };
struct Request struct Request
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment