80 lines
2.6 KiB
C
80 lines
2.6 KiB
C
/*
|
||
* Сообщения подписки и телеметрии 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 */
|