25#ifndef PROTOCORE_BACNET_H
26#define PROTOCORE_BACNET_H
35#define BVLC_TYPE_BIP 0x81
36#define BVLC_HEADER_SIZE 4
39#define BVLC_FUNC_RESULT 0x00
40#define BVLC_FUNC_WRITE_BDT 0x01
41#define BVLC_FUNC_FORWARDED_NPDU 0x04
42#define BVLC_FUNC_REGISTER_FD 0x05
43#define BVLC_FUNC_ORIGINAL_UNICAST 0x0A
44#define BVLC_FUNC_ORIGINAL_BROADCAST 0x0B
46#define NPDU_VERSION 0x01
49#define NPCI_NETWORK_MSG 0x80
50#define NPCI_DEST_PRESENT 0x20
51#define NPCI_SRC_PRESENT 0x08
52#define NPCI_EXPECTING_REPLY 0x04
53#define NPCI_PRIORITY_MASK 0x03
56#define NPDU_PRIO_NORMAL 0x00
57#define NPDU_PRIO_URGENT 0x01
58#define NPDU_PRIO_CRITICAL 0x02
59#define NPDU_PRIO_LIFE_SAFETY 0x03
64size_t pc_bvlc_build(uint8_t *buf,
size_t cap, uint8_t function,
const uint8_t *npdu,
size_t pc_npdu_len);
67bool pc_bvlc_parse(
const uint8_t *buf,
size_t len, uint8_t *function,
const uint8_t **npdu,
size_t *pc_npdu_len);
76size_t pc_npdu_build(uint8_t *buf,
size_t cap,
bool expecting_reply, uint8_t priority,
bool has_dest, uint16_t dnet,
77 const uint8_t *dadr, uint8_t dadr_len, uint8_t hop_count,
const uint8_t *apdu,
size_t apdu_len);
94bool pc_npdu_parse(
const uint8_t *buf,
size_t len, NpduInfo *out);
99#define BACNET_PDU_CONFIRMED_REQUEST 0
100#define BACNET_PDU_UNCONFIRMED_REQUEST 1
101#define BACNET_PDU_SIMPLE_ACK 2
102#define BACNET_PDU_COMPLEX_ACK 3
103#define BACNET_PDU_SEGMENT_ACK 4
104#define BACNET_PDU_ERROR 5
105#define BACNET_PDU_REJECT 6
106#define BACNET_PDU_ABORT 7
109#define BACNET_APDU_SEG 0x08
110#define BACNET_APDU_MOR 0x04
111#define BACNET_APDU_SA 0x02
114#define BACNET_SVC_UN_I_AM 0
115#define BACNET_SVC_UN_WHO_IS 8
118#define BACNET_SVC_CONF_READ_PROPERTY 12
120#define BACNET_MAX_INSTANCE 0x3FFFFFu
123#define BACNET_OBJ_ANALOG_INPUT 0
124#define BACNET_OBJ_ANALOG_OUTPUT 1
125#define BACNET_OBJ_ANALOG_VALUE 2
126#define BACNET_OBJ_BINARY_INPUT 3
127#define BACNET_OBJ_BINARY_OUTPUT 4
128#define BACNET_OBJ_BINARY_VALUE 5
129#define BACNET_OBJ_DEVICE 8
132#define BACNET_PROP_OBJECT_NAME 77
133#define BACNET_PROP_PRESENT_VALUE 85
143 uint8_t service_choice;
144 const uint8_t *service_data;
145 size_t service_data_len;
154bool pc_apdu_parse(
const uint8_t *apdu,
size_t len, BacnetApdu *out);
162size_t pc_apdu_build_who_is(uint8_t *buf,
size_t cap, uint32_t low_limit, uint32_t high_limit,
bool has_limits);
170size_t pc_apdu_build_i_am(uint8_t *buf,
size_t cap, uint32_t device_instance, uint32_t max_apdu, uint8_t segmentation,
182size_t pc_apdu_build_read_property(uint8_t *buf,
size_t cap, uint8_t invoke_id, uint8_t max_resp, uint16_t object_type,
183 uint32_t object_instance, uint32_t property_id);
User-facing configuration for ProtoCore.