29#ifndef PROTOCORE_ENIP_H
30#define PROTOCORE_ENIP_H
39#define EIP_HEADER_SIZE 24
42#define EIP_CMD_LIST_SERVICES 0x0004
43#define EIP_CMD_LIST_IDENTITY 0x0063
44#define EIP_CMD_LIST_INTERFACES 0x0064
45#define EIP_CMD_REGISTER_SESSION 0x0065
46#define EIP_CMD_UNREGISTER_SESSION 0x0066
47#define EIP_CMD_SEND_RR_DATA 0x006F
48#define EIP_CMD_SEND_UNIT_DATA 0x0070
50#define EIP_STATUS_SUCCESS 0x00000000u
53#define EIP_CPF_NULL 0x0000
54#define EIP_CPF_CONNECTED_ADDRESS 0x00A1
55#define EIP_CPF_CONNECTED_DATA 0x00B1
56#define EIP_CPF_UNCONNECTED_DATA 0x00B2
57#define EIP_CPF_LIST_IDENTITY 0x000C
64 uint32_t session_handle;
66 uint8_t sender_context[8];
71size_t pc_eip_build(uint8_t *buf,
size_t cap,
const EipHeader *h,
const uint8_t *data,
size_t data_len);
74bool pc_eip_parse(
const uint8_t *buf,
size_t len, EipHeader *out,
const uint8_t **data,
size_t *data_len);
77size_t pc_eip_build_register_session(uint8_t *buf,
size_t cap,
const uint8_t sender_context[8]);
83size_t pc_eip_build_unregister_session(uint8_t *buf,
size_t cap, uint32_t session_handle,
84 const uint8_t sender_context[8]);
90size_t pc_eip_build_send_rr_data(uint8_t *buf,
size_t cap, uint32_t session_handle,
const uint8_t sender_context[8],
91 uint16_t timeout,
const uint8_t *cip,
size_t pc_cip_len);
94bool pc_eip_parse_send_rr_data(
const uint8_t *data,
size_t data_len,
const uint8_t **cip,
size_t *pc_cip_len);
100size_t pc_eip_build_list_identity(uint8_t *buf,
size_t cap,
const uint8_t sender_context[8]);
107 uint16_t protocol_version;
109 uint16_t device_type;
110 uint16_t product_code;
111 uint8_t revision_major;
112 uint8_t revision_minor;
114 uint32_t serial_number;
115 const char *product_name;
116 uint8_t product_name_len;
125bool pc_eip_parse_list_identity(
const uint8_t *data,
size_t data_len, EipIdentity *out);
User-facing configuration for ProtoCore.