feat: add unified SET protocol v2
This commit is contained in:
73
c/set-protocol/include/set_telemetry.h
Normal file
73
c/set-protocol/include/set_telemetry.h
Normal file
@@ -0,0 +1,73 @@
|
||||
#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 */
|
||||
Reference in New Issue
Block a user