协议
一 SACP(Snapmaker Advanced Communication Protocol)是Snapmaker设备的数据通信协议,用于 控制器(Controller)、PC 端(Host)、HMI(人机界面) 之间的数据传输。
- 可靠性:数据包头部 CRC8 校验 + Checksum 数据完整性验证
 - 灵活性:支持 请求/应答机制(SACP_ATTR_REQ / SACP_ATTR_ACK)
 - 模块化:封装 数据包结构,可扩展 不同指令集
 - 高效性:固定长度头部 + 变长数据部分,节省通信开销
 
1 ifndef PROTOCOL_ASCP_H 2 #define PROTOCOL_ASCP_H 3 4 #include "../J1/common_type.h" 5 #include <functional> 6 // protocol relative macros 7 #define SACP_PDU_SOF_H 0xAA 8 #define SACP_PDU_SOF_L 0x55 9 #define SACP_VERSION 0x01 10 #define SACP_HEADER_LEN (15) // frame_length - length_paylod 11 12 #define SACP_ID_PC 0 13 #define SACP_ID_CONTROLLER 1 14 #define SACP_ID_HMI 2 15 16 #define PACK_PARSE_MAX_SIZE 512 17 #define PACK_PACKET_MAX_SIZE 1024 18 19 #define SACP_ATTR_REQ 0 20 #define SACP_ATTR_ACK 1 21 22 #pragma pack(1) 23 typedef struct { 24 uint8_t sof_h; 25 uint8_t sof_l; 26 uint16_t length; 27 uint8_t version; // 0x01 28 uint8_t recever_id; 29 uint8_t crc8; 30 uint8_t sender_id; 31 uint8_t attr; 32 uint16_t sequence; 33 uint8_t command_set; 34 uint8_t command_id; 35 uint8_t data[0]; 36 } SACP_struct_t; 37 38 typedef struct { 39 uint8_t recever_id; 40 uint8_t attribute; 41 uint16_t sequence; 42 uint8_t command_set; 43 uint8_t command_id; 44 } SACP_head_base_t; 45 46 typedef struct { 47 uint16_t lenght; // The total length of data 48 union { 49 uint8_t buff[PACK_PARSE_MAX_SIZE]; 50 SACP_struct_t sacp; 51 }; 52 } SACP_param_t; 53 #pragma pack() 54 55 class ProtocolSACP { 56 public: 57 ErrCode parse(uint8_t *data, uint16_t len, SACP_param_t &out); 58 // Package the incoming data 59 uint16_t package(SACP_head_base_t head, uint8_t *in_data, uint16_t length, uint8_t *out_data); 60 uint16_t sequence_pop() {return sequence++;} 61 private: 62 uint32_t sequence = 0; 63 }; 64 65 extern ProtocolSACP protocol_sacp; 66 #endif
                    
                
                
            
        
浙公网安备 33010602011771号