|  |  |  | @ -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; | 
		
	
	
		
			
				
					|  |  |  | 
 |