QUELLCODE / H
protocol.h
pico/protocol.h
1/*2 * OpenAss: nur privater, experimenteller Gebrauch; auf eigene Verantwortung.3 * Niemals Unternehmensrechner, Produktivsysteme, Industrieanlagen oder4 * sicherheitskritische Systeme anschließen oder bedienen.5 * Haftungshinweis und gesetzliche Grenzen: ../DISCLAIMER.txt.6 */7#ifndef HARDWARE_BOX_PROTOCOL_H8#define HARDWARE_BOX_PROTOCOL_H910#include <stdbool.h>11#include <stddef.h>12#include <stdint.h>1314// Length excludes the terminating LF. All storage is fixed-size.15#define HB_FRAME_MAX 159u16#define HB_RESPONSE_MAX 96u17#define HB_ARG_MAX 7u18#define HB_OP_MAX 15u1920typedef struct {21 uint32_t seq;22 char op[HB_OP_MAX + 1u];23 int32_t args[HB_ARG_MAX];24 size_t argc;25} hb_request_t;2627typedef enum { HB_PARSE_OK, HB_PARSE_FORMAT, HB_PARSE_CRC } hb_parse_status_t;2829typedef struct {30 bool valid;31 uint32_t seq;32 char frame[HB_FRAME_MAX + 1u];33 size_t frame_length;34 char response[HB_RESPONSE_MAX];35} hb_sequence_t;3637typedef enum { HB_SEQ_NEW, HB_SEQ_DUPLICATE, HB_SEQ_OLD, HB_SEQ_CONFLICT } hb_sequence_status_t;3839uint16_t hb_crc16(const char *data, size_t length);40hb_parse_status_t hb_parse(const char *line, size_t length, hb_request_t *out);41bool hb_response(char *out, size_t capacity, uint32_t seq, const char *payload);42hb_sequence_status_t hb_sequence_check(const hb_sequence_t *state,43 const hb_request_t *request,44 const char *line, size_t length,45 bool allow_hello_reset);46void hb_sequence_commit(hb_sequence_t *state, const hb_request_t *request,47 const char *line, size_t length, const char *response);4849#endif