41 lines
934 B
C
41 lines
934 B
C
|
#include "irda-decoder.h"
|
||
|
|
||
|
IrDADecoder* alloc_decoder(void) {
|
||
|
IrDADecoder* decoder = malloc(sizeof(IrDADecoder));
|
||
|
|
||
|
// init decoders
|
||
|
reset_decoder_nec(&decoder->nec);
|
||
|
|
||
|
return decoder;
|
||
|
}
|
||
|
|
||
|
void free_decoder(IrDADecoder* decoder) {
|
||
|
free(decoder);
|
||
|
}
|
||
|
|
||
|
bool process_decoder(
|
||
|
IrDADecoder* decoder,
|
||
|
bool start_polarity,
|
||
|
uint32_t* timings,
|
||
|
uint32_t timings_length,
|
||
|
IrDADecoderOutputData* out) {
|
||
|
bool result = false;
|
||
|
|
||
|
// zero result
|
||
|
memset(out->data, 0, out->data_length);
|
||
|
out->protocol = IRDA_UNKNOWN;
|
||
|
out->flags = 0;
|
||
|
|
||
|
// process data
|
||
|
for(uint32_t timings_index = 0; timings_index < timings_length; timings_index++) {
|
||
|
if(process_decoder_nec(&decoder->nec, start_polarity, timings[timings_index], out)) {
|
||
|
out->protocol = IRDA_NEC;
|
||
|
result = true;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
start_polarity = !start_polarity;
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
}
|