Files
templates/c/set-protocol/include/set_telemetry.h

80 lines
2.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* Сообщения подписки и телеметрии SETProtocol v2. Период, идентификатор подписки и перечень
* адресов сериализуются отдельно от значений; получатель должен связывать поток с
* соответствующей подпиской.
*/
#ifndef SET_TELEMETRY_H
#define SET_TELEMETRY_H
#include "set_protocol.h"
#ifdef __cplusplus
extern "C" {
#endif
#define SETP_SUBSCRIBE_HEADER_SIZE 8U
#define SETP_PUBLISH_HEADER_SIZE 10U
#define SETP_PUBLISH_ITEM_HEADER_SIZE 8U
typedef enum {
SETP_VALUE_U16 = 1,
SETP_VALUE_I16 = 2,
SETP_VALUE_U32 = 3,
SETP_VALUE_I32 = 4,
SETP_VALUE_F32 = 5,
SETP_VALUE_BYTES = 6
} setp_value_encoding_t;
typedef struct {
uint8_t *output;
uint16_t capacity;
uint16_t length;
uint16_t item_count;
} setp_publish_builder_t;
typedef struct {
const uint8_t *payload;
uint16_t length;
uint16_t offset;
uint16_t remaining;
uint16_t subscription_id;
uint16_t sample_sequence;
uint32_t timestamp_ms;
} setp_publish_view_t;
typedef struct {
uint32_t address;
uint8_t encoding;
uint8_t element_count;
uint16_t data_length;
const uint8_t *data;
} setp_publish_item_t;
size_t setp_subscribe_encode(uint16_t subscription_id, uint32_t period_ms,
const uint32_t *addresses, uint16_t address_count,
uint8_t *out, size_t capacity);
bool setp_subscribe_decode_header(const uint8_t *payload, uint16_t length,
uint16_t *subscription_id, uint32_t *period_ms,
uint16_t *address_count);
bool setp_subscribe_address(const uint8_t *payload, uint16_t length,
uint16_t index, uint32_t *address);
bool setp_publish_begin(setp_publish_builder_t *builder,
uint16_t subscription_id, uint16_t sample_sequence,
uint32_t timestamp_ms, uint8_t *out, uint16_t capacity);
bool setp_publish_add(setp_publish_builder_t *builder, uint32_t address,
uint8_t encoding, uint8_t element_count,
const uint8_t *data, uint16_t data_length);
size_t setp_publish_finish(setp_publish_builder_t *builder);
bool setp_publish_view_init(setp_publish_view_t *view,
const uint8_t *payload, uint16_t length);
bool setp_publish_next(setp_publish_view_t *view, setp_publish_item_t *item);
#ifdef __cplusplus
}
#endif
#endif /* SET_TELEMETRY_H */