irda_common_i.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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*);
  10. typedef bool (*IrdaCommonInterpret)(IrdaCommonDecoder*);
  11. typedef IrdaStatus (*IrdaCommonEncode)(IrdaCommonEncoder* encoder, uint32_t* out, bool* polarity);
  12. typedef struct {
  13. IrdaTimings timings;
  14. bool manchester_start_from_space;
  15. bool no_stop_bit;
  16. uint32_t databit_len;
  17. IrdaCommonDecode decode;
  18. IrdaCommonDecode decode_repeat;
  19. IrdaCommonInterpret interpret;
  20. IrdaCommonEncode encode;
  21. IrdaCommonEncode encode_repeat;
  22. } IrdaCommonProtocolSpec;
  23. typedef enum {
  24. IrdaCommonDecoderStateWaitPreamble,
  25. IrdaCommonDecoderStateDecode,
  26. IrdaCommonDecoderStateProcessRepeat,
  27. } IrdaCommonStateDecoder;
  28. typedef enum {
  29. IrdaCommonEncoderStateSilence,
  30. IrdaCommonEncoderStatePreamble,
  31. IrdaCommonEncoderStateEncode,
  32. IrdaCommonEncoderStateEncodeRepeat,
  33. } IrdaCommonStateEncoder;
  34. struct IrdaCommonDecoder {
  35. const IrdaCommonProtocolSpec* protocol;
  36. void* context;
  37. uint32_t timings[6];
  38. IrdaMessage message;
  39. IrdaCommonStateDecoder state;
  40. uint8_t timings_cnt;
  41. bool switch_detect;
  42. bool level;
  43. uint16_t databit_cnt;
  44. uint8_t data[];
  45. };
  46. struct IrdaCommonEncoder {
  47. const IrdaCommonProtocolSpec* protocol;
  48. IrdaCommonStateEncoder state;
  49. bool switch_detect;
  50. uint32_t bits_encoded;
  51. uint32_t timings_sum;
  52. uint32_t timings_encoded;
  53. void* context;
  54. uint8_t data[];
  55. };
  56. IrdaMessage* irda_common_decode(IrdaCommonDecoder *decoder, bool level, uint32_t duration);
  57. IrdaStatus irda_common_decode_pdm(IrdaCommonDecoder* decoder);
  58. IrdaStatus irda_common_decode_pwm(IrdaCommonDecoder* decoder);
  59. IrdaStatus irda_common_decode_manchester(IrdaCommonDecoder* decoder);
  60. void* irda_common_decoder_alloc(const IrdaCommonProtocolSpec *protocol);
  61. void irda_common_decoder_free(IrdaCommonDecoder* decoder);
  62. void irda_common_decoder_reset(IrdaCommonDecoder* decoder);
  63. IrdaStatus irda_common_encode(IrdaCommonEncoder* encoder, uint32_t* duration, bool* polarity);
  64. IrdaStatus irda_common_encode_pdwm(IrdaCommonEncoder* encoder, uint32_t* duration, bool* polarity);
  65. IrdaStatus irda_common_encode_manchester(IrdaCommonEncoder* encoder, uint32_t* duration, bool* polarity);
  66. void* irda_common_encoder_alloc(const IrdaCommonProtocolSpec* protocol);
  67. void irda_common_encoder_free(IrdaCommonEncoder* encoder);
  68. void irda_common_encoder_reset(IrdaCommonEncoder* encoder);