31#ifndef PROTOCORE_HISLIP_H
32#define PROTOCORE_HISLIP_H
42#define PC_HISLIP_PORT 4880
45#define PC_HISLIP_HEADER_LEN 16
49#define PC_HISLIP_VERSION_1_0 0x0100
50#define PC_HISLIP_VERSION_1_1 0x0101
51#define PC_HISLIP_VERSION_2_0 0x0200
55#define PC_HISLIP_MESSAGE_ID_INIT 0xFFFFFF00u
58#define PC_HISLIP_INITRESP_OVERLAP 0x01
59#define PC_HISLIP_INITRESP_ENC_MANDATORY 0x02
60#define PC_HISLIP_INITRESP_ENC_INITIAL 0x04
62#define PC_HISLIP_DATA_RMT_DELIVERED 0x01
65enum class HislipMsg : uint8_t
68 INITIALIZE_RESPONSE = 1,
72 ASYNC_LOCK_RESPONSE = 5,
75 DEVICE_CLEAR_COMPLETE = 8,
76 DEVICE_CLEAR_ACKNOWLEDGE = 9,
77 ASYNC_REMOTE_LOCAL_CONTROL = 10,
78 ASYNC_REMOTE_LOCAL_RESPONSE = 11,
81 ASYNC_INTERRUPTED = 14,
82 ASYNC_MAX_MSG_SIZE = 15,
83 ASYNC_MAX_MSG_SIZE_RESPONSE = 16,
84 ASYNC_INITIALIZE = 17,
85 ASYNC_INITIALIZE_RESPONSE = 18,
86 ASYNC_DEVICE_CLEAR = 19,
87 ASYNC_SERVICE_REQUEST = 20,
88 ASYNC_STATUS_QUERY = 21,
89 ASYNC_STATUS_RESPONSE = 22,
90 ASYNC_DEVICE_CLEAR_ACKNOWLEDGE = 23,
92 ASYNC_LOCK_INFO_RESPONSE = 25,
94 GET_DESCRIPTORS_RESPONSE = 27,
97 ASYNC_START_TLS_RESPONSE = 30,
100 ASYNC_END_TLS_RESPONSE = 33,
101 GET_SASL_MECHANISM_LIST = 34,
102 GET_SASL_MECHANISM_LIST_RESPONSE = 35,
103 AUTHENTICATION_START = 36,
104 AUTHENTICATION_EXCHANGE = 37,
105 AUTHENTICATION_RESULT = 38,
114 uint64_t payload_len;
121size_t pc_hislip_build_header(uint8_t *buf,
size_t cap, HislipMsg type, uint8_t control, uint32_t parameter,
122 uint64_t payload_len);
129bool pc_hislip_parse_header(
const uint8_t *buf,
size_t len, HislipHeader *out);
138size_t pc_hislip_build_initialize(uint8_t *buf,
size_t cap, uint16_t protocol_version, uint16_t vendor_id,
139 const char *sub_address);
146size_t pc_hislip_build_initialize_response(uint8_t *buf,
size_t cap, uint8_t control, uint16_t protocol_version,
147 uint16_t session_id);
153size_t pc_hislip_build_async_initialize(uint8_t *buf,
size_t cap, uint16_t session_id);
159size_t pc_hislip_build_async_initialize_response(uint8_t *buf,
size_t cap, uint8_t control, uint16_t server_vendor_id);
167size_t pc_hislip_build_data(uint8_t *buf,
size_t cap,
bool is_end, uint8_t control, uint32_t message_id,
168 const uint8_t *payload,
size_t payload_len);
171uint32_t pc_hislip_next_message_id(uint32_t
id);
176struct HislipInitialize
178 uint16_t protocol_version;
180 const char *sub_address;
181 size_t sub_address_len;
188bool pc_hislip_parse_initialize(
const uint8_t *buf,
size_t len, HislipInitialize *out);
191struct HislipInitializeResponse
193 uint16_t protocol_version;
196 bool encryption_mandatory;
203bool pc_hislip_parse_initialize_response(
const uint8_t *buf,
size_t len, HislipInitializeResponse *out);
User-facing configuration for ProtoCore.