irda_common_i.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #pragma once
  2. #include <stdint.h>
  3. #include "irda.h"
  4. #include "irda_i.h"
  5. #define MATCH_TIMING(x, v, delta) ( ((x) < (v + delta)) \
  6. && ((x) > (v - delta)))
  7. typedef struct IrdaCommonDecoder IrdaCommonDecoder;
  8. typedef struct IrdaCommonEncoder IrdaCommonEncoder;
  9. typedef IrdaStatus (*IrdaCommonDecode)(IrdaCommonDecoder*, bool, uint32_t);
  10. typedef IrdaStatus (*IrdaCommonDecodeRepeat)(IrdaCommonDecoder*);
  11. typedef bool (*IrdaCommonInterpret)(IrdaCommonDecoder*);
  12. typedef IrdaStatus (*IrdaCommonEncode)(IrdaCommonEncoder* encoder, uint32_t* out, bool* polarity);
  13. typedef struct {
  14. IrdaTimings timings;
  15. bool manchester_start_from_space;
  16. bool no_stop_bit;
  17. uint8_t databit_len[4];
  18. IrdaCommonDecode decode;
  19. IrdaCommonDecodeRepeat decode_repeat;
  20. IrdaCommonInterpret interpret;
  21. IrdaCommonEncode encode;
  22. IrdaCommonEncode encode_repeat;
  23. } IrdaCommonProtocolSpec;
  24. typedef enum {
  25. IrdaCommonDecoderStateWaitPreamble,
  26. IrdaCommonDecoderStateDecode,
  27. IrdaCommonDecoderStateProcessRepeat,
  28. } IrdaCommonStateDecoder;
  29. typedef enum {
  30. IrdaCommonEncoderStateSilence,
  31. IrdaCommonEncoderStatePreamble,
  32. IrdaCommonEncoderStateEncode,
  33. IrdaCommonEncoderStateEncodeRepeat,
  34. } IrdaCommonStateEncoder;
  35. struct IrdaCommonDecoder {
  36. const IrdaCommonProtocolSpec* protocol;
  37. void* context;
  38. uint32_t timings[6];
  39. IrdaMessage message;
  40. IrdaCommonStateDecoder state;
  41. uint8_t timings_cnt;
  42. bool switch_detect;
  43. bool level;
  44. uint16_t databit_cnt;
  45. uint8_t data[];
  46. };
  47. struct IrdaCommonEncoder {
  48. const IrdaCommonProtocolSpec* protocol;
  49. IrdaCommonStateEncoder state;
  50. bool switch_detect;
  51. uint8_t bits_to_encode;
  52. uint8_t bits_encoded;
  53. uint32_t timings_sum;
  54. uint32_t timings_encoded;
  55. void* context;
  56. uint8_t data[];
  57. };
  58. IrdaMessage* irda_common_decode(IrdaCommonDecoder *decoder, bool level, uint32_t duration);
  59. IrdaStatus irda_common_decode_pdwm(IrdaCommonDecoder* decoder, bool level, uint32_t timing);
  60. IrdaStatus irda_common_decode_manchester(IrdaCommonDecoder* decoder, bool level, uint32_t timing);
  61. void* irda_common_decoder_alloc(const IrdaCommonProtocolSpec *protocol);
  62. void irda_common_decoder_free(IrdaCommonDecoder* decoder);
  63. void irda_common_decoder_reset(IrdaCommonDecoder* decoder);
  64. IrdaMessage* irda_common_decoder_check_ready(IrdaCommonDecoder* decoder);
  65. IrdaStatus irda_common_encode(IrdaCommonEncoder* encoder, uint32_t* duration, bool* polarity);
  66. IrdaStatus irda_common_encode_pdwm(IrdaCommonEncoder* encoder, uint32_t* duration, bool* polarity);
  67. IrdaStatus irda_common_encode_manchester(IrdaCommonEncoder* encoder, uint32_t* duration, bool* polarity);
  68. void* irda_common_encoder_alloc(const IrdaCommonProtocolSpec* protocol);
  69. void irda_common_encoder_free(IrdaCommonEncoder* encoder);
  70. void irda_common_encoder_reset(IrdaCommonEncoder* encoder);