protocol.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. #include <stdint.h>
  3. #include <stddef.h>
  4. #include <stdbool.h>
  5. #include <lib/toolbox/level_duration.h>
  6. #include <mlib/m-string.h>
  7. typedef void* (*ProtocolAlloc)(void);
  8. typedef void (*ProtocolFree)(void* protocol);
  9. typedef uint8_t* (*ProtocolGetData)(void* protocol);
  10. typedef void (*ProtocolDecoderStart)(void* protocol);
  11. typedef bool (*ProtocolDecoderFeed)(void* protocol, bool level, uint32_t duration);
  12. typedef bool (*ProtocolEncoderStart)(void* protocol);
  13. typedef LevelDuration (*ProtocolEncoderYield)(void* protocol);
  14. typedef void (*ProtocolRenderData)(void* protocol, string_t result);
  15. typedef bool (*ProtocolWriteData)(void* protocol, void* data);
  16. typedef struct {
  17. ProtocolDecoderStart start;
  18. ProtocolDecoderFeed feed;
  19. } ProtocolDecoder;
  20. typedef struct {
  21. ProtocolEncoderStart start;
  22. ProtocolEncoderYield yield;
  23. } ProtocolEncoder;
  24. typedef struct {
  25. const size_t data_size;
  26. const char* name;
  27. const char* manufacturer;
  28. const uint32_t features;
  29. const uint8_t validate_count;
  30. ProtocolAlloc alloc;
  31. ProtocolFree free;
  32. ProtocolGetData get_data;
  33. ProtocolDecoder decoder;
  34. ProtocolEncoder encoder;
  35. ProtocolRenderData render_data;
  36. ProtocolRenderData render_brief_data;
  37. ProtocolWriteData write_data;
  38. } ProtocolBase;