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