X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=irmp%2Firmp-main-sharedlib.c;fp=irmp%2Firmp-main-sharedlib.c;h=824a05aed0dabdbd2876eea76b958c4d88ab627b;hb=53eb681dd5611931b6af949a8c50c22fc65661ac;hp=0000000000000000000000000000000000000000;hpb=7f8ea39e26770753a389ce1c7bac48c036a5e2e2;p=libsigrokdecode.git 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"; + } +} +