Use ifdef to pack structs differently depending on compiler

windowz
PgSocks 6 months ago
parent c0f2b11db5
commit 58cf57669d

@ -3,14 +3,20 @@
#include <stdbool.h>
#include <stdint.h>
#define PACKED __attribute__((__packed__))
#if defined(_MSC_VER) // Check if compiling with Microsoft Visual Studio
#define PACKED(__DECL__) __pragma(pack(push, 1)) __DECL__ __pragma(pack(pop))
#elif defined(__GNUC__) // Check if compiling with GCC or any compiler defining __GNUC__, including Clang
#define PACKED(__DECL__) __DECL__ __attribute__((packed))
#else
#error "Unsupported compiler"
#endif
static const uint8_t CLIENT_HOST = 9;
static const uint8_t CLIENT_INDEX = 6;
static const uint8_t PREAMBLE = 0x55;
struct PACKED Header {
PACKED( struct Header {
// The preamble marks the start of a message and is always 0x55
uint8_t preamble;
@ -53,13 +59,13 @@ struct PACKED Header {
};
};
};
});
struct PACKED Footer {
PACKED( struct Footer {
uint16_t crc;
};
});
struct PACKED SetSystemLedReq {
PACKED( struct SetSystemLedReq {
struct Header header;
@ -88,87 +94,87 @@ struct PACKED SetSystemLedReq {
struct Footer footer;
};
});
struct PACKED SetSystemLedResp {
PACKED( struct SetSystemLedResp {
struct Header header;
uint8_t retcode;
struct Footer footer;
};
});
struct PACKED SubscribeAddNodeReq
PACKED( struct SubscribeAddNodeReq
{
struct Header header;
uint8_t hostbyte;
uint32_t sub_vision; // always 0x03000000
struct Footer footer;
};
});
struct PACKED SubscribeAddNodeResp
PACKED( struct SubscribeAddNodeResp
{
struct Header header;
uint8_t retcode; // 0x00 or 0x50 are acceptable here
uint8_t hostbyte;
struct Footer footer;
};
});
struct PACKED SubNodeResetReq
PACKED( struct SubNodeResetReq
{
struct Header header;
uint8_t hostbyte;
struct Footer footer;
};
});
struct PACKED SubNodeResetResp
PACKED( struct SubNodeResetResp
{
struct Header header;
uint8_t retcode;
struct Footer footer;
};
});
struct PACKED SetRobotModeReq
PACKED( struct SetRobotModeReq
{
struct Header header;
uint8_t mode;
struct Footer footer;
};
});
struct PACKED SetRobotModeResp
PACKED( struct SetRobotModeResp
{
struct Header header;
uint8_t retcode;
struct Footer footer;
};
});
struct PACKED ChassisSpeedModeReq
PACKED( struct ChassisSpeedModeReq
{
struct Header header;
float speed[3];
struct Footer footer;
};
});
struct PACKED ChassisSpeedModeResp
PACKED( struct ChassisSpeedModeResp
{
struct Header header;
int8_t retcode;
struct Footer footer;
};
});
struct PACKED SetChassisWheelSpeedReq
PACKED( struct SetChassisWheelSpeedReq
{
struct Header header;
int8_t wheel_speed[4];
struct Footer footer;
};
});
struct PACKED SetChassisWheelSpeedResp
PACKED( struct SetChassisWheelSpeedResp
{
struct Header header;
int8_t retcode;
struct Footer footer;
};
});
struct PACKED GimbalCtrlSpeedReq
PACKED( struct GimbalCtrlSpeedReq
{
struct Header header;
// Values between -360 and 360
@ -183,53 +189,53 @@ struct PACKED GimbalCtrlSpeedReq
// Always 0xDC
uint8_t ctrl;
struct Footer footer;
};
});
struct PACKED GimbalCtrlSpeedResp
PACKED( struct GimbalCtrlSpeedResp
{
struct Header header;
int8_t retcode;
struct Footer footer;
};
});
struct PACKED SetWheelSpeedReq
PACKED( struct SetWheelSpeedReq
{
struct Header header;
int16_t wheel_speed[4];
struct Footer footer;
};
});
struct PACKED SetWheelSpeedResp
PACKED( struct SetWheelSpeedResp
{
struct Header header;
int8_t retcode;
struct Footer footer;
};
});
struct PACKED SdkHeartbeatReq {
PACKED( struct SdkHeartbeatReq {
struct Header header;
struct Footer footer;
};
});
struct PACKED SdkHeartbeatResp {
PACKED( struct SdkHeartbeatResp {
struct Header header;
uint8_t retcode;
struct Footer footer;
};
});
struct PACKED SetSdkModeReq {
PACKED( struct SetSdkModeReq {
struct Header header;
uint8_t enable;
struct Footer footer;
};
});
struct PACKED SetSdkModeResp {
PACKED( struct SetSdkModeResp {
struct Header header;
uint8_t retcode;
struct Footer footer;
};
});
struct PACKED SetSdkConnectionReq {
PACKED( struct SetSdkConnectionReq {
struct Header header;
uint8_t control;
uint8_t host;
@ -238,32 +244,32 @@ struct PACKED SetSdkConnectionReq {
uint32_t ip_address;
uint16_t port;
struct Footer footer;
};
});
struct PACKED SetSdkConnectionResp {
PACKED( struct SetSdkConnectionResp {
struct Header header;
uint8_t retcode;
uint8_t state;
uint32_t config_ip;
struct Footer footer;
};
});
struct PACKED BlasterFireReq {
PACKED( struct BlasterFireReq {
struct Header header;
struct {
uint8_t type : 4;
uint8_t times : 4;
};
struct Footer footer;
};
});
struct PACKED BlasterFireResp {
PACKED( struct BlasterFireResp {
struct Header header;
uint8_t retcode;
struct Footer footer;
};
});
struct PACKED StreamCtrlReq {
PACKED( struct StreamCtrlReq {
struct Header header;
uint8_t ctrl;
struct {
@ -272,15 +278,15 @@ struct PACKED StreamCtrlReq {
};
uint8_t resolution;
struct Footer footer;
};
});
struct PACKED StreamCtrlResp {
PACKED( struct StreamCtrlResp {
struct Header header;
uint8_t retcode;
struct Footer footer;
};
});
struct PACKED AddSubMsgReq {
PACKED( struct AddSubMsgReq {
struct Header header;
uint8_t node_id;
uint8_t msg_id;
@ -290,9 +296,9 @@ struct PACKED AddSubMsgReq {
uint64_t subject_uuid;
uint16_t freq;
struct Footer footer;
};
});
struct PACKED AddSubMsgResp {
PACKED( struct AddSubMsgResp {
struct Header header;
uint8_t retcode;
uint8_t pub_node_id;
@ -300,9 +306,9 @@ struct PACKED AddSubMsgResp {
uint8_t ack_msg_id;
uint16_t ack_err_uid_data;
struct Footer footer;
};
});
struct PACKED PushPeriodMsg {
PACKED( struct PushPeriodMsg {
struct Header header;
uint8_t sub_mode;
uint8_t msg_id;
@ -324,7 +330,7 @@ struct PACKED PushPeriodMsg {
} gimbal;
};
struct Footer footer;
};
});
union Request {
struct Header header;

Loading…
Cancel
Save