irda-decoder.c 934 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include "irda-decoder.h"
  2. IrDADecoder* alloc_decoder(void) {
  3. IrDADecoder* decoder = malloc(sizeof(IrDADecoder));
  4. // init decoders
  5. reset_decoder_nec(&decoder->nec);
  6. return decoder;
  7. }
  8. void free_decoder(IrDADecoder* decoder) {
  9. free(decoder);
  10. }
  11. bool process_decoder(
  12. IrDADecoder* decoder,
  13. bool start_polarity,
  14. uint32_t* timings,
  15. uint32_t timings_length,
  16. IrDADecoderOutputData* out) {
  17. bool result = false;
  18. // zero result
  19. memset(out->data, 0, out->data_length);
  20. out->protocol = IRDA_UNKNOWN;
  21. out->flags = 0;
  22. // process data
  23. for(uint32_t timings_index = 0; timings_index < timings_length; timings_index++) {
  24. if(process_decoder_nec(&decoder->nec, start_polarity, timings[timings_index], out)) {
  25. out->protocol = IRDA_NEC;
  26. result = true;
  27. break;
  28. }
  29. start_polarity = !start_polarity;
  30. }
  31. return result;
  32. }