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
37// include/sparkplug/sparkplug_c.h
38#pragma once
39
40#include <stdbool.h>
41#include <stddef.h>
42#include <stdint.h>
43
44#ifdef __cplusplus
45extern "C" {
46#endif
47
49typedef struct sparkplug_publisher sparkplug_publisher_t;
50
52typedef struct sparkplug_payload sparkplug_payload_t;
53
63
98typedef void (*sparkplug_log_callback_t)(int level,
99 const char* message,
100 size_t message_len,
101 void* user_data);
102
114typedef void (*sparkplug_message_callback_t)(const char* topic,
115 const uint8_t* payload_data,
116 size_t payload_len,
117 void* user_data);
118
130typedef void (*sparkplug_command_callback_t)(const char* topic,
131 const uint8_t* payload_data,
132 size_t payload_len,
133 void* user_data);
134
135/* ============================================================================
136 * Publisher API
137 * ========================================================================= */
138
152 const char* client_id,
153 const char* group_id,
154 const char* edge_node_id);
155
162
174 const char* username,
175 const char* password);
176
207 const char* trust_store,
208 const char* key_store,
209 const char* private_key,
210 const char* private_key_password,
211 int enable_server_cert_auth);
212
213void sparkplug_publisher_set_log_callback(sparkplug_publisher_t* pub,
215 void* user_data);
216
217int sparkplug_publisher_connect(sparkplug_publisher_t* pub);
218
228
241 const uint8_t* payload_data,
242 size_t payload_len);
243
256 const uint8_t* payload_data,
257 size_t payload_len);
258
268
276
284
292
306 const char* device_id,
307 const uint8_t* payload_data,
308 size_t payload_len);
309
323 const char* device_id,
324 const uint8_t* payload_data,
325 size_t payload_len);
326
336 const char* device_id);
337
349 const char* target_edge_node_id,
350 const uint8_t* payload_data,
351 size_t payload_len);
352
365 const char* target_edge_node_id,
366 const char* target_device_id,
367 const uint8_t* payload_data,
368 size_t payload_len);
369
370/* ============================================================================
371 * Host Application API
372 * ========================================================================= */
373
375typedef struct sparkplug_host_application sparkplug_host_application_t;
376
395 const char* client_id,
396 const char* host_id);
397
404
416 const char* username,
417 const char* password);
418
449 const char* trust_store,
450 const char* key_store,
451 const char* private_key,
452 const char* private_key_password,
453 int enable_server_cert_auth);
454
465
476
490 uint64_t timestamp);
491
505 uint64_t timestamp);
506
519 const char* group_id,
520 const char* target_edge_node_id,
521 const uint8_t* payload_data,
522 size_t payload_len);
523
537 const char* group_id,
538 const char* target_edge_node_id,
539 const char* target_device_id,
540 const uint8_t* payload_data,
541 size_t payload_len);
542
560 void* user_data);
561
576 void* user_data);
577
594
609 const char* group_id);
610
626 const char* group_id,
627 const char* edge_node_id);
628
648 const char* group_id,
649 const char* edge_node_id,
650 const char* device_id,
651 uint64_t alias,
652 char* name_buffer,
653 size_t buffer_size);
654
655/* ============================================================================
656 * Payload Builder API
657 * ========================================================================= */
658
667
674
682
692
693/* Metric functions by name */
694
697 const char* name,
698 int8_t value);
701 const char* name,
702 int16_t value);
705 const char* name,
706 int32_t value);
709 const char* name,
710 int64_t value);
713 const char* name,
714 uint8_t value);
717 const char* name,
718 uint16_t value);
721 const char* name,
722 uint32_t value);
725 const char* name,
726 uint64_t value);
729 const char* name,
730 float value);
733 const char* name,
734 double value);
737 const char* name,
738 bool value);
741 const char* name,
742 const char* value);
743
744/* Metric functions with alias */
745
748 const char* name,
749 uint64_t alias,
750 int32_t value);
753 const char* name,
754 uint64_t alias,
755 int64_t value);
758 const char* name,
759 uint64_t alias,
760 uint32_t value);
763 const char* name,
764 uint64_t alias,
765 uint64_t value);
768 const char* name,
769 uint64_t alias,
770 float value);
773 const char* name,
774 uint64_t alias,
775 double value);
778 const char* name,
779 uint64_t alias,
780 bool value);
781
782/* Metric functions with name, alias, and timestamp */
783
787 const char* name,
788 uint64_t alias,
789 int32_t value,
790 uint64_t timestamp_ms);
794 const char* name,
795 uint64_t alias,
796 int64_t value,
797 uint64_t timestamp_ms);
801 const char* name,
802 uint64_t alias,
803 uint32_t value,
804 uint64_t timestamp_ms);
808 const char* name,
809 uint64_t alias,
810 uint64_t value,
811 uint64_t timestamp_ms);
816 const char* name,
817 uint64_t alias,
818 float value,
819 uint64_t timestamp_ms);
824 const char* name,
825 uint64_t alias,
826 double value,
827 uint64_t timestamp_ms);
832 const char* name,
833 uint64_t alias,
834 bool value,
835 uint64_t timestamp_ms);
836
837/* Metric functions by alias only */
838
841 uint64_t alias,
842 int32_t value);
845 uint64_t alias,
846 int64_t value);
849 uint64_t alias,
850 uint32_t value);
853 uint64_t alias,
854 uint64_t value);
857 uint64_t alias,
858 float value);
861 uint64_t alias,
862 double value);
865 uint64_t alias,
866 bool value);
867
880 uint8_t* buffer,
881 size_t buffer_size);
882
883/* ============================================================================
884 * Payload Parsing and Reading API
885 * ========================================================================= */
886
898sparkplug_payload_t* sparkplug_payload_parse(const uint8_t* data, size_t data_len);
899
909 uint64_t* out_timestamp);
910
919bool sparkplug_payload_get_seq(const sparkplug_payload_t* payload, uint64_t* out_seq);
920
930
939
943typedef enum {
944 SPARKPLUG_DATA_TYPE_UNKNOWN = 0,
945 SPARKPLUG_DATA_TYPE_INT8 = 1,
946 SPARKPLUG_DATA_TYPE_INT16 = 2,
947 SPARKPLUG_DATA_TYPE_INT32 = 3,
948 SPARKPLUG_DATA_TYPE_INT64 = 4,
949 SPARKPLUG_DATA_TYPE_UINT8 = 5,
950 SPARKPLUG_DATA_TYPE_UINT16 = 6,
951 SPARKPLUG_DATA_TYPE_UINT32 = 7,
952 SPARKPLUG_DATA_TYPE_UINT64 = 8,
953 SPARKPLUG_DATA_TYPE_FLOAT = 9,
954 SPARKPLUG_DATA_TYPE_DOUBLE = 10,
955 SPARKPLUG_DATA_TYPE_BOOLEAN = 11,
956 SPARKPLUG_DATA_TYPE_STRING = 12,
957 SPARKPLUG_DATA_TYPE_DATETIME = 13,
958 SPARKPLUG_DATA_TYPE_TEXT = 14,
960
966typedef union {
967 int8_t int8_value;
968 int16_t int16_value;
969 int32_t int32_value;
970 int64_t int64_value;
971 uint8_t uint8_value;
972 uint16_t uint16_value;
973 uint32_t uint32_value;
974 uint64_t uint64_value;
975 float float_value;
976 double double_value;
977 bool boolean_value;
978 const char*
979 string_value;
981
999
1031 size_t index,
1032 sparkplug_metric_t* out_metric);
1033
1034#ifdef __cplusplus
1035}
1036#endif
sparkplug_log_level_t
Log severity levels for library diagnostics.
Definition sparkplug_c.h:57
@ SPARKPLUG_LOG_ERROR
Error messages (serious problems)
Definition sparkplug_c.h:61
@ SPARKPLUG_LOG_INFO
Informational messages.
Definition sparkplug_c.h:59
@ SPARKPLUG_LOG_DEBUG
Detailed debugging information.
Definition sparkplug_c.h:58
@ SPARKPLUG_LOG_WARN
Warning messages (potential issues)
Definition sparkplug_c.h:60
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:52
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:49
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:98
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.