74 lines
2.2 KiB
C
74 lines
2.2 KiB
C
#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 */
|