Files
bacnet_stack/src/bacnet/secure_connect.h
T
Steve Karg cf77abac9b Feature/bacnet secure connect hub (#818)
* Added BACnet Secure Connect datalink.

* Added BACnet/SC hub application
---------

Co-authored-by: Kirill Neznamov <kirill.neznamov@dsr-corporation.com>
Co-authored-by: Mikhail Antropov <michail.antropov@dsr-corporation.com>
Co-authored-by: Ondřej Hruška <ondra@ondrovo.com>
Co-authored-by: Patrick Grimm <patrick@lunatiki.de>
2024-11-04 07:05:26 -06:00

176 lines
5.3 KiB
C

/**
* @file
* @brief BACnet Secure Connect encode and decode functions.
* @author Mikhail Antropov <michail.antropov@dsr-corporation.com>
* @date 2023
* @copyright SPDX-License-Identifier: MIT
*/
#ifndef BACNET_SECURE_CONNECT_H
#define BACNET_SECURE_CONNECT_H
#include <stdbool.h>
#include <stdint.h>
/* BACnet Stack defines - first */
#include "bacnet/bacdef.h"
/* BACnet Stack API */
#include "bacnet/datetime.h"
#include "bacnet/datalink/bsc/bsc-conf.h"
#include "bacnet/datalink/bsc/bvlc-sc.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Support
- SC_Hub_Function_Connection_Status
- SC_Direct_Connect_Connection_Status
- SC_FailedConnectionRequests
*/
typedef struct BACnetUUID_T_ {
union {
struct guid {
uint32_t time_low;
uint16_t time_mid;
uint16_t time_hi_and_version;
uint8_t clock_seq_and_node[8];
} guid;
uint8_t uuid128[16];
} uuid;
} BACNET_UUID;
#define BACNET_ERROR_STRING_LENGTH BSC_CONF_WEBSOCKET_ERR_DESC_STR_MAX_LEN
#define BACNET_URI_LENGTH BSC_CONF_WSURL_MAX_LEN
#define BACNET_PEER_VMAC_LENGTH BVLC_SC_VMAC_SIZE
enum BACNET_HOST_N_PORT_TYPE {
BACNET_HOST_N_PORT_IP = 1,
BACNET_HOST_N_PORT_HOST = 2
};
typedef struct BACnetHostNPort_data_T {
uint8_t type;
char host[BACNET_URI_LENGTH];
uint16_t port;
} BACNET_HOST_N_PORT_DATA;
typedef struct BACnetSCHubConnectionStatus_T {
BACNET_SC_CONNECTION_STATE State; /*index = 0 */
BACNET_DATE_TIME Connect_Timestamp; /*index = 1 */
BACNET_DATE_TIME Disconnect_Timestamp; /*index = 2 */
/* optionals - use ERROR_CODE_DEFAULT for default value */
BACNET_ERROR_CODE Error; /* index = 3 */
char Error_Details[BACNET_ERROR_STRING_LENGTH]; /* index = 4 */
} BACNET_SC_HUB_CONNECTION_STATUS;
typedef struct BACnetSCHubFunctionConnectionStatus_T {
BACNET_SC_CONNECTION_STATE State;
BACNET_DATE_TIME Connect_Timestamp;
BACNET_DATE_TIME Disconnect_Timestamp;
BACNET_HOST_N_PORT_DATA Peer_Address;
uint8_t Peer_VMAC[BACNET_PEER_VMAC_LENGTH];
BACNET_UUID Peer_UUID;
BACNET_ERROR_CODE Error;
char Error_Details[BACNET_ERROR_STRING_LENGTH];
} BACNET_SC_HUB_FUNCTION_CONNECTION_STATUS;
typedef struct BACnetSCFailedConnectionRequest_T {
BACNET_DATE_TIME Timestamp;
BACNET_HOST_N_PORT_DATA Peer_Address;
uint8_t Peer_VMAC[BACNET_PEER_VMAC_LENGTH];
BACNET_UUID Peer_UUID;
BACNET_ERROR_CODE Error;
char Error_Details[BACNET_ERROR_STRING_LENGTH];
} BACNET_SC_FAILED_CONNECTION_REQUEST;
typedef enum BACnetRouterStatus {
BACNET_ROUTER_STATUS_AVAILABLE = 0,
BACNET_ROUTER_STATUS_BUSY = 1,
BACNET_ROUTER_STATUS_DISCONNECTED = 2,
BACNET_ROUTER_STATUS_MAX = 2
} BACNET_ROUTER_STATUS;
typedef struct BACnetRouterEntry_T {
uint16_t Network_Number;
uint8_t Mac_Address[6];
BACNET_ROUTER_STATUS Status;
uint8_t Performance_Index;
} BACNET_ROUTER_ENTRY;
typedef struct BACnetSCDirectConnectionStatus_T {
char URI[BACNET_URI_LENGTH];
BACNET_SC_CONNECTION_STATE State;
BACNET_DATE_TIME Connect_Timestamp;
BACNET_DATE_TIME Disconnect_Timestamp;
BACNET_HOST_N_PORT_DATA Peer_Address;
uint8_t Peer_VMAC[BACNET_PEER_VMAC_LENGTH];
BACNET_UUID Peer_UUID;
BACNET_ERROR_CODE Error;
char Error_Details[BACNET_ERROR_STRING_LENGTH];
} BACNET_SC_DIRECT_CONNECTION_STATUS;
/* */
/* Encode / decode */
/* */
BACNET_STACK_EXPORT
int bacapp_encode_SCHubConnection(
uint8_t *apdu, const BACNET_SC_HUB_CONNECTION_STATUS *value);
BACNET_STACK_EXPORT
int bacapp_decode_SCHubConnection(
const uint8_t *apdu,
size_t apdu_size,
BACNET_SC_HUB_CONNECTION_STATUS *value);
BACNET_STACK_EXPORT
int bacapp_encode_SCHubFunctionConnection(
uint8_t *apdu, const BACNET_SC_HUB_FUNCTION_CONNECTION_STATUS *value);
BACNET_STACK_EXPORT
int bacapp_decode_SCHubFunctionConnection(
const uint8_t *apdu,
size_t apdu_size,
BACNET_SC_HUB_FUNCTION_CONNECTION_STATUS *value);
BACNET_STACK_EXPORT
int bacapp_encode_SCFailedConnectionRequest(
uint8_t *apdu, const BACNET_SC_FAILED_CONNECTION_REQUEST *value);
BACNET_STACK_EXPORT
int bacapp_decode_SCFailedConnectionRequest(
const uint8_t *apdu,
size_t apdu_size,
BACNET_SC_FAILED_CONNECTION_REQUEST *value);
BACNET_STACK_EXPORT
int bacapp_encode_RouterEntry(uint8_t *apdu, const BACNET_ROUTER_ENTRY *value);
BACNET_STACK_EXPORT
int bacapp_decode_RouterEntry(
const uint8_t *apdu, size_t apdu_size, BACNET_ROUTER_ENTRY *value);
BACNET_STACK_EXPORT
int bacapp_encode_SCDirectConnection(
uint8_t *apdu, const BACNET_SC_DIRECT_CONNECTION_STATUS *value);
BACNET_STACK_EXPORT
int bacapp_decode_SCDirectConnection(
const uint8_t *apdu,
size_t apdu_size,
BACNET_SC_DIRECT_CONNECTION_STATUS *value);
BACNET_STACK_EXPORT
int bacapp_snprintf_SCFailedConnectionRequest(
char *str, size_t str_len, const BACNET_SC_FAILED_CONNECTION_REQUEST *req);
BACNET_STACK_EXPORT
int bacapp_snprintf_SCHubFunctionConnection(
char *str,
size_t str_len,
const BACNET_SC_HUB_FUNCTION_CONNECTION_STATUS *st);
BACNET_STACK_EXPORT
int bacapp_snprintf_SCDirectConnection(
char *str, size_t str_len, const BACNET_SC_DIRECT_CONNECTION_STATUS *st);
BACNET_STACK_EXPORT
int bacapp_snprintf_SCHubConnection(
char *str, size_t str_len, const BACNET_SC_HUB_CONNECTION_STATUS *st);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif