协议

一 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
protocol_sacp.h

 

posted on 2025-05-08 17:33  杰瑞鼠  阅读(34)  评论(0)    收藏  举报