diff options
Diffstat (limited to 'irmp/irmp-main-sharedlib.c')
-rw-r--r-- | irmp/irmp-main-sharedlib.c | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/irmp/irmp-main-sharedlib.c b/irmp/irmp-main-sharedlib.c new file mode 100644 index 0000000..824a05a --- /dev/null +++ b/irmp/irmp-main-sharedlib.c @@ -0,0 +1,105 @@ +/*--------------------------------------------------------------------------------------------------------------------------------------------------- + * irmpharedLib.h + * + * Copyright (c) 2009-2019 Frank Meyer - frank(at)fli4l.de + * Copyright (c) 2009-2019 René Staffen - r.staffen(at)gmx.de + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + *--------------------------------------------------------------------------------------------------------------------------------------------------- + */ + + +#include "irmp.h" +#include "irmp.c" + + +#ifndef IRMP_DLLEXPORT + +#if defined WIN32 && defined _MSC_VER +# define IRMP_DLLEXPORT __declspec(dllexport) +#else +# define IRMP_DLLEXPORT +#endif +#endif // !IRMP_DLLEXPORT + +#include "irmp-main-sharedlib.h" + + + +static uint32_t s_endSample = 0; + +uint32_t IRMP_GetSampleRate(void) { + return F_INTERRUPTS; +} + + +void IRMP_Reset(void) { + IRMP_PIN = 0xff; + IRMP_DATA data; + int i; + for (i = 0; i < (int)(( F_INTERRUPTS )); i++) // long pause of 1s + { + (void)irmp_ISR(); + } + (void)irmp_get_data(&data); + time_counter = 0; + s_startBitSample = 0; + s_curSample = 0; + s_endSample = 0; +} + + +uint32_t IRMP_AddSample(const uint8_t i_sample) { + IRMP_PIN = i_sample; + uint_fast8_t r = irmp_ISR(); + if (r) { + s_endSample = s_curSample; + return 1; + } + s_curSample++; + return 0; +} + + +uint32_t IRMP_GetData(IRMP_DataExt* o_data) { + + IRMP_DATA d; + if (irmp_get_data(&d)) + { + o_data->address = d.address; + o_data->command = d.command; + o_data->protocol = d.protocol; + o_data->protocolName = IRMP_GetProtocolName(d.protocol); + o_data->flags = d.flags; + o_data->startSample = s_startBitSample; + o_data->endSample = s_endSample; + return TRUE; + } + return FALSE; +} + + +IRMP_DataExt IRMP_Detect(const uint8_t* i_buff, uint32_t i_len) { + IRMP_DataExt ret = { 0 }; + while (s_curSample < i_len) { + if (IRMP_AddSample(i_buff[s_curSample])) { + IRMP_GetData(&ret); + return ret; + } + } + return ret; +} + + +const char* IRMP_GetProtocolName(uint32_t i_protocol) { + if (i_protocol < IRMP_N_PROTOCOLS) { + return irmp_protocol_names[i_protocol]; + } + else { + return "unknown"; + } +} + |