Sparkplug B C++ Library 1.0.0
Modern C++-23 implementation of Eclipse Sparkplug B 2.2 specification
Loading...
Searching...
No Matches
sparkplug_c.h
Go to the documentation of this file.
1
35// include/sparkplug/sparkplug_c.h
36#pragma once
37
38#include <stdbool.h>
39#include <stddef.h>
40#include <stdint.h>
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
47typedef struct sparkplug_publisher sparkplug_publisher_t;
48
50typedef struct sparkplug_payload sparkplug_payload_t;
51
61
96typedef void (*sparkplug_log_callback_t)(int level,
97 const char* message,
98 size_t message_len,
99 void* user_data);
100
112typedef void (*sparkplug_message_callback_t)(const char* topic,
113 const uint8_t* payload_data,
114 size_t payload_len,
115 void* user_data);
116
128typedef void (*sparkplug_command_callback_t)(const char* topic,
129 const uint8_t* payload_data,
130 size_t payload_len,
131 void* user_data);
132
133/* ============================================================================
134 * Publisher API
135 * ========================================================================= */
136
150 const char* client_id,
151 const char* group_id,
152 const char* edge_node_id);
153
160
172 const char* username,
173 const char* password);
174
205 const char* trust_store,
206 const char* key_store,
207 const char* private_key,
208 const char* private_key_password,
209 int enable_server_cert_auth);
210
211void sparkplug_publisher_set_log_callback(sparkplug_publisher_t* pub,
213 void* user_data);
214
215int sparkplug_publisher_connect(sparkplug_publisher_t* pub);
216
226
239 const uint8_t* payload_data,
240 size_t payload_len);
241
254 const uint8_t* payload_data,
255 size_t payload_len);
256
266
274
282
290
304 const char* device_id,
305 const uint8_t* payload_data,
306 size_t payload_len);
307
321 const char* device_id,
322 const uint8_t* payload_data,
323 size_t payload_len);
324
334 const char* device_id);
335
347 const char* target_edge_node_id,
348 const uint8_t* payload_data,
349 size_t payload_len);
350
363 const char* target_edge_node_id,
364 const char* target_device_id,
365 const uint8_t* payload_data,
366 size_t payload_len);
367
368/* ============================================================================
369 * Host Application API
370 * ========================================================================= */
371
373typedef struct sparkplug_host_application sparkplug_host_application_t;
374
393 const char* client_id,
394 const char* host_id);
395
402
414 const char* username,
415 const char* password);
416
447 const char* trust_store,
448 const char* key_store,
449 const char* private_key,
450 const char* private_key_password,
451 int enable_server_cert_auth);
452
463
474
488 uint64_t timestamp);
489
503 uint64_t timestamp);
504
517 const char* group_id,
518 const char* target_edge_node_id,
519 const uint8_t* payload_data,
520 size_t payload_len);
521
535 const char* group_id,
536 const char* target_edge_node_id,
537 const char* target_device_id,
538 const uint8_t* payload_data,
539 size_t payload_len);
540
558 void* user_data);
559
574 void* user_data);
575
592
607 const char* group_id);
608
624 const char* group_id,
625 const char* edge_node_id);
626
646 const char* group_id,
647 const char* edge_node_id,
648 const char* device_id,
649 uint64_t alias,
650 char* name_buffer,
651 size_t buffer_size);
652
653/* ============================================================================
654 * Payload Builder API
655 * ========================================================================= */
656
665
672
680
690
691/* Metric functions by name */
692
695 const char* name,
696 int8_t value);
699 const char* name,
700 int16_t value);
703 const char* name,
704 int32_t value);
707 const char* name,
708 int64_t value);
711 const char* name,
712 uint8_t value);
715 const char* name,
716 uint16_t value);
719 const char* name,
720 uint32_t value);
723 const char* name,
724 uint64_t value);
727 const char* name,
728 float value);
731 const char* name,
732 double value);
735 const char* name,
736 bool value);
739 const char* name,
740 const char* value);
741
742/* Metric functions with alias */
743
746 const char* name,
747 uint64_t alias,
748 int32_t value);
751 const char* name,
752 uint64_t alias,
753 int64_t value);
756 const char* name,
757 uint64_t alias,
758 uint32_t value);
761 const char* name,
762 uint64_t alias,
763 uint64_t value);
766 const char* name,
767 uint64_t alias,
768 float value);
771 const char* name,
772 uint64_t alias,
773 double value);
776 const char* name,
777 uint64_t alias,
778 bool value);
779
780/* Metric functions with name, alias, and timestamp */
781
785 const char* name,
786 uint64_t alias,
787 int32_t value,
788 uint64_t timestamp_ms);
792 const char* name,
793 uint64_t alias,
794 int64_t value,
795 uint64_t timestamp_ms);
799 const char* name,
800 uint64_t alias,
801 uint32_t value,
802 uint64_t timestamp_ms);
806 const char* name,
807 uint64_t alias,
808 uint64_t value,
809 uint64_t timestamp_ms);
814 const char* name,
815 uint64_t alias,
816 float value,
817 uint64_t timestamp_ms);
822 const char* name,
823 uint64_t alias,
824 double value,
825 uint64_t timestamp_ms);
830 const char* name,
831 uint64_t alias,
832 bool value,
833 uint64_t timestamp_ms);
834
835/* Metric functions by alias only */
836
839 uint64_t alias,
840 int32_t value);
843 uint64_t alias,
844 int64_t value);
847 uint64_t alias,
848 uint32_t value);
851 uint64_t alias,
852 uint64_t value);
855 uint64_t alias,
856 float value);
859 uint64_t alias,
860 double value);
863 uint64_t alias,
864 bool value);
865
878 uint8_t* buffer,
879 size_t buffer_size);
880
881/* ============================================================================
882 * Payload Parsing and Reading API
883 * ========================================================================= */
884
896sparkplug_payload_t* sparkplug_payload_parse(const uint8_t* data, size_t data_len);
897
907 uint64_t* out_timestamp);
908
917bool sparkplug_payload_get_seq(const sparkplug_payload_t* payload, uint64_t* out_seq);
918
928
937
941typedef enum {
942 SPARKPLUG_DATA_TYPE_UNKNOWN = 0,
943 SPARKPLUG_DATA_TYPE_INT8 = 1,
944 SPARKPLUG_DATA_TYPE_INT16 = 2,
945 SPARKPLUG_DATA_TYPE_INT32 = 3,
946 SPARKPLUG_DATA_TYPE_INT64 = 4,
947 SPARKPLUG_DATA_TYPE_UINT8 = 5,
948 SPARKPLUG_DATA_TYPE_UINT16 = 6,
949 SPARKPLUG_DATA_TYPE_UINT32 = 7,
950 SPARKPLUG_DATA_TYPE_UINT64 = 8,
951 SPARKPLUG_DATA_TYPE_FLOAT = 9,
952 SPARKPLUG_DATA_TYPE_DOUBLE = 10,
953 SPARKPLUG_DATA_TYPE_BOOLEAN = 11,
954 SPARKPLUG_DATA_TYPE_STRING = 12,
955 SPARKPLUG_DATA_TYPE_DATETIME = 13,
956 SPARKPLUG_DATA_TYPE_TEXT = 14,
958
964typedef union {
965 int8_t int8_value;
966 int16_t int16_value;
967 int32_t int32_value;
968 int64_t int64_value;
969 uint8_t uint8_value;
970 uint16_t uint16_value;
971 uint32_t uint32_value;
972 uint64_t uint64_value;
973 float float_value;
974 double double_value;
975 bool boolean_value;
976 const char*
977 string_value;
980
998
1030 size_t index,
1031 sparkplug_metric_t* out_metric);
1032
1033#ifdef __cplusplus
1034}
1035#endif
sparkplug_log_level_t
Log severity levels for library diagnostics.
Definition sparkplug_c.h:55
@ SPARKPLUG_LOG_ERROR
Error messages (serious problems)
Definition sparkplug_c.h:59
@ SPARKPLUG_LOG_INFO
Informational messages.
Definition sparkplug_c.h:57
@ SPARKPLUG_LOG_DEBUG
Detailed debugging information.
Definition sparkplug_c.h:56
@ SPARKPLUG_LOG_WARN
Warning messages (potential issues)
Definition sparkplug_c.h:58
void sparkplug_payload_set_timestamp(sparkplug_payload_t *payload, uint64_t ts)
Sets the payload-level timestamp.
size_t sparkplug_payload_serialize(const sparkplug_payload_t *payload, uint8_t *buffer, size_t buffer_size)
Serializes the payload to a binary Protocol Buffers format.
void sparkplug_payload_add_float_by_alias(sparkplug_payload_t *payload, uint64_t alias, float value)
Adds a float metric by alias only (for NDATA).
void sparkplug_payload_add_uint32_with_alias(sparkplug_payload_t *payload, const char *name, uint64_t alias, uint32_t value)
Adds a uint32_t metric with both name and alias (for NBIRTH).
void sparkplug_host_application_destroy(sparkplug_host_application_t *host)
Destroys a Host Application and frees all resources.
void sparkplug_payload_add_int64_with_alias_timestamp(sparkplug_payload_t *payload, const char *name, uint64_t alias, int64_t value, uint64_t timestamp_ms)
Adds an int64_t metric with name, alias, and timestamp (for NBIRTH with historical data).
int sparkplug_publisher_publish_device_death(sparkplug_publisher_t *pub, const char *device_id)
Publishes a DDEATH (Device Death) message for a device.
uint64_t sparkplug_publisher_get_seq(const sparkplug_publisher_t *pub)
Gets the current message sequence number.
uint64_t sparkplug_publisher_get_bd_seq(const sparkplug_publisher_t *pub)
Gets the current birth/death sequence number.
void sparkplug_payload_add_int8(sparkplug_payload_t *payload, const char *name, int8_t value)
Adds an int8_t metric by name.
struct sparkplug_payload sparkplug_payload_t
Opaque handle to a Sparkplug payload builder.
Definition sparkplug_c.h:50
int sparkplug_host_application_get_metric_name(sparkplug_host_application_t *host, const char *group_id, const char *edge_node_id, const char *device_id, uint64_t alias, char *name_buffer, size_t buffer_size)
Resolves a metric alias to its name for a specific node or device.
void sparkplug_payload_add_float_with_alias_timestamp(sparkplug_payload_t *payload, const char *name, uint64_t alias, float value, uint64_t timestamp_ms)
Adds a float metric with name, alias, and timestamp (for NBIRTH with historical data).
void sparkplug_payload_add_int16(sparkplug_payload_t *payload, const char *name, int16_t value)
Adds an int16_t metric by name.
const char * sparkplug_payload_get_uuid(const sparkplug_payload_t *payload)
Gets the payload UUID.
int sparkplug_publisher_publish_data(sparkplug_publisher_t *pub, const uint8_t *payload_data, size_t payload_len)
Publishes an NDATA (Node Data) message.
int sparkplug_publisher_publish_node_command(sparkplug_publisher_t *pub, const char *target_edge_node_id, const uint8_t *payload_data, size_t payload_len)
Publishes an NCMD (Node Command) message to another edge node.
void sparkplug_payload_add_bool_with_alias_timestamp(sparkplug_payload_t *payload, const char *name, uint64_t alias, bool value, uint64_t timestamp_ms)
Adds a boolean metric with name, alias, and timestamp (for NBIRTH with historical data).
bool sparkplug_payload_get_timestamp(const sparkplug_payload_t *payload, uint64_t *out_timestamp)
Gets the payload-level timestamp.
void sparkplug_payload_set_seq(sparkplug_payload_t *payload, uint64_t seq)
Sets the sequence number manually.
void sparkplug_payload_add_uint32(sparkplug_payload_t *payload, const char *name, uint32_t value)
Adds a uint32_t metric by name.
void sparkplug_payload_add_double_with_alias(sparkplug_payload_t *payload, const char *name, uint64_t alias, double value)
Adds a double metric with both name and alias (for NBIRTH).
int sparkplug_host_application_publish_state_birth(sparkplug_host_application_t *host, uint64_t timestamp)
Publishes a STATE birth message to indicate Host Application is online.
void sparkplug_payload_add_uint64_with_alias(sparkplug_payload_t *payload, const char *name, uint64_t alias, uint64_t value)
Adds a uint64_t metric with both name and alias (for NBIRTH).
int sparkplug_host_application_set_credentials(sparkplug_host_application_t *host, const char *username, const char *password)
Sets MQTT username and password for authentication.
void sparkplug_payload_add_float(sparkplug_payload_t *payload, const char *name, float value)
Adds a float metric by name.
int sparkplug_host_application_publish_state_death(sparkplug_host_application_t *host, uint64_t timestamp)
Publishes a STATE death message to indicate Host Application is offline.
void sparkplug_payload_add_string(sparkplug_payload_t *payload, const char *name, const char *value)
Adds a string metric by name.
void sparkplug_payload_add_uint64_by_alias(sparkplug_payload_t *payload, uint64_t alias, uint64_t value)
Adds a uint64_t metric by alias only (for NDATA).
sparkplug_payload_t * sparkplug_payload_parse(const uint8_t *data, size_t data_len)
Parses a Sparkplug payload from binary protobuf format.
int sparkplug_host_application_subscribe_node(sparkplug_host_application_t *host, const char *group_id, const char *edge_node_id)
Subscribes to messages from a specific edge node.
void(* sparkplug_message_callback_t)(const char *topic, const uint8_t *payload_data, size_t payload_len, void *user_data)
Callback function type for receiving Sparkplug messages.
int sparkplug_publisher_publish_birth(sparkplug_publisher_t *pub, const uint8_t *payload_data, size_t payload_len)
Publishes an NBIRTH (Node Birth) message.
int sparkplug_host_application_publish_device_command(sparkplug_host_application_t *host, const char *group_id, const char *target_edge_node_id, const char *target_device_id, const uint8_t *payload_data, size_t payload_len)
Publishes a DCMD (Device Command) message to a device on an Edge Node.
struct sparkplug_publisher sparkplug_publisher_t
Opaque handle to a Sparkplug publisher.
Definition sparkplug_c.h:47
void sparkplug_payload_add_float_with_alias(sparkplug_payload_t *payload, const char *name, uint64_t alias, float value)
Adds a float metric with both name and alias (for NBIRTH).
size_t sparkplug_payload_get_metric_count(const sparkplug_payload_t *payload)
Gets the number of metrics in the payload.
void sparkplug_payload_add_uint32_by_alias(sparkplug_payload_t *payload, uint64_t alias, uint32_t value)
Adds a uint32_t metric by alias only (for NDATA).
int sparkplug_publisher_publish_death(sparkplug_publisher_t *pub)
Publishes an NDEATH (Node Death) message.
int sparkplug_host_application_set_message_callback(sparkplug_host_application_t *host, sparkplug_message_callback_t callback, void *user_data)
Sets a message callback for receiving Sparkplug messages.
void(* sparkplug_log_callback_t)(int level, const char *message, size_t message_len, void *user_data)
Callback function type for receiving log messages from the library.
Definition sparkplug_c.h:96
void sparkplug_payload_add_int32(sparkplug_payload_t *payload, const char *name, int32_t value)
Adds an int32_t metric by name.
void sparkplug_payload_add_int64(sparkplug_payload_t *payload, const char *name, int64_t value)
Adds an int64_t metric by name.
bool sparkplug_payload_get_seq(const sparkplug_payload_t *payload, uint64_t *out_seq)
Gets the payload-level sequence number.
void sparkplug_payload_add_int64_by_alias(sparkplug_payload_t *payload, uint64_t alias, int64_t value)
Adds an int64_t metric by alias only (for NDATA).
sparkplug_host_application_t * sparkplug_host_application_create(const char *broker_url, const char *client_id, const char *host_id)
Creates a new Sparkplug Host Application.
void sparkplug_payload_add_uint64(sparkplug_payload_t *payload, const char *name, uint64_t value)
Adds a uint64_t metric by name.
void sparkplug_publisher_destroy(sparkplug_publisher_t *pub)
Destroys a publisher and frees all resources.
void sparkplug_payload_destroy(sparkplug_payload_t *payload)
Destroys a payload builder and frees all resources.
sparkplug_publisher_t * sparkplug_publisher_create(const char *broker_url, const char *client_id, const char *group_id, const char *edge_node_id)
Creates a new Sparkplug publisher.
void sparkplug_payload_add_uint32_with_alias_timestamp(sparkplug_payload_t *payload, const char *name, uint64_t alias, uint32_t value, uint64_t timestamp_ms)
Adds a uint32_t metric with name, alias, and timestamp (for NBIRTH with historical data).
void sparkplug_payload_add_double_with_alias_timestamp(sparkplug_payload_t *payload, const char *name, uint64_t alias, double value, uint64_t timestamp_ms)
Adds a double metric with name, alias, and timestamp (for NBIRTH with historical data).
int sparkplug_publisher_rebirth(sparkplug_publisher_t *pub)
Triggers a rebirth (publishes new NBIRTH with incremented bdSeq).
void sparkplug_payload_add_bool(sparkplug_payload_t *payload, const char *name, bool value)
Adds a boolean metric by name.
int sparkplug_host_application_disconnect(sparkplug_host_application_t *host)
Disconnects the Host Application from the MQTT broker.
int sparkplug_host_application_set_tls(sparkplug_host_application_t *host, const char *trust_store, const char *key_store, const char *private_key, const char *private_key_password, int enable_server_cert_auth)
Configures TLS/SSL for secure MQTT connections.
struct sparkplug_host_application sparkplug_host_application_t
Opaque handle to a Sparkplug Host Application.
void sparkplug_payload_add_uint64_with_alias_timestamp(sparkplug_payload_t *payload, const char *name, uint64_t alias, uint64_t value, uint64_t timestamp_ms)
Adds a uint64_t metric with name, alias, and timestamp (for NBIRTH with historical data).
void sparkplug_payload_add_int64_with_alias(sparkplug_payload_t *payload, const char *name, uint64_t alias, int64_t value)
Adds an int64_t metric with both name and alias (for NBIRTH).
void sparkplug_payload_add_double_by_alias(sparkplug_payload_t *payload, uint64_t alias, double value)
Adds a double metric by alias only (for NDATA).
void sparkplug_payload_add_uint8(sparkplug_payload_t *payload, const char *name, uint8_t value)
Adds a uint8_t metric by name.
int sparkplug_publisher_set_credentials(sparkplug_publisher_t *pub, const char *username, const char *password)
Sets MQTT username and password for authentication.
int sparkplug_publisher_publish_device_data(sparkplug_publisher_t *pub, const char *device_id, const uint8_t *payload_data, size_t payload_len)
Publishes a DDATA (Device Data) message for a device.
sparkplug_payload_t * sparkplug_payload_create(void)
Creates a new payload builder.
int sparkplug_publisher_publish_device_birth(sparkplug_publisher_t *pub, const char *device_id, const uint8_t *payload_data, size_t payload_len)
Publishes a DBIRTH (Device Birth) message for a device.
void sparkplug_host_application_set_log_callback(sparkplug_host_application_t *host, sparkplug_log_callback_t callback, void *user_data)
Sets a log callback for receiving library log messages including MQTT errors.
void sparkplug_payload_add_bool_by_alias(sparkplug_payload_t *payload, uint64_t alias, bool value)
Adds a boolean metric by alias only (for NDATA).
int sparkplug_host_application_publish_node_command(sparkplug_host_application_t *host, const char *group_id, const char *target_edge_node_id, const uint8_t *payload_data, size_t payload_len)
Publishes an NCMD (Node Command) message to an Edge Node.
void(* sparkplug_command_callback_t)(const char *topic, const uint8_t *payload_data, size_t payload_len, void *user_data)
Callback function type for Sparkplug command messages (NCMD/DCMD).
int sparkplug_host_application_connect(sparkplug_host_application_t *host)
Connects the Host Application to the MQTT broker.
void sparkplug_payload_add_int32_by_alias(sparkplug_payload_t *payload, uint64_t alias, int32_t value)
Adds an int32_t metric by alias only (for NDATA).
int sparkplug_publisher_set_tls(sparkplug_publisher_t *pub, const char *trust_store, const char *key_store, const char *private_key, const char *private_key_password, int enable_server_cert_auth)
Configures TLS/SSL for secure MQTT connections.
void sparkplug_payload_add_int32_with_alias_timestamp(sparkplug_payload_t *payload, const char *name, uint64_t alias, int32_t value, uint64_t timestamp_ms)
Adds an int32_t metric with name, alias, and timestamp (for NBIRTH with historical data).
void sparkplug_payload_add_int32_with_alias(sparkplug_payload_t *payload, const char *name, uint64_t alias, int32_t value)
Adds an int32_t metric with both name and alias (for NBIRTH).
bool sparkplug_payload_get_metric_at(const sparkplug_payload_t *payload, size_t index, sparkplug_metric_t *out_metric)
Gets information about a metric at a specific index.
int sparkplug_host_application_subscribe_group(sparkplug_host_application_t *host, const char *group_id)
Subscribes to messages from a specific group.
int sparkplug_host_application_subscribe_all(sparkplug_host_application_t *host)
Subscribes to all Sparkplug messages across all groups.
int sparkplug_publisher_publish_device_command(sparkplug_publisher_t *pub, const char *target_edge_node_id, const char *target_device_id, const uint8_t *payload_data, size_t payload_len)
Publishes a DCMD (Device Command) message to a device on another edge node.
sparkplug_data_type_t
Sparkplug data types enum.
void sparkplug_payload_add_uint16(sparkplug_payload_t *payload, const char *name, uint16_t value)
Adds a uint16_t metric by name.
void sparkplug_payload_add_double(sparkplug_payload_t *payload, const char *name, double value)
Adds a double metric by name.
void sparkplug_payload_add_bool_with_alias(sparkplug_payload_t *payload, const char *name, uint64_t alias, bool value)
Adds a boolean metric with both name and alias (for NBIRTH).
int sparkplug_publisher_disconnect(sparkplug_publisher_t *pub)
Disconnects the publisher from the MQTT broker.
Metric information struct.
uint64_t alias
Metric name, or NULL if not present.
bool has_alias
True if name is present.
sparkplug_data_type_t datatype
Metric timestamp.
uint64_t timestamp
Metric alias.
bool is_null
True if timestamp is present.
sparkplug_metric_value_t value
True if value is explicitly null.
bool has_timestamp
True if alias is present.
bool has_name
Data type.
Metric value union.