как декодировать необработанные ИК-данные с помощью lirc на raspberry pi 3

Я пытался расшифровать мои IR необработанные данные, но всегда получал неизвестный код. я использовал

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define SHORT 600
#define LONG 300
#define MARGIN 200
#define INTRO 3500
#define INTRO2 1700
#define SEPARATOR 9880


char decode(int val1, int val2){
if (abs(val1 - INTRO) < MARGIN && abs(val2 - 
INTRO2) < MARGIN)
return '[';
if (abs(val1 - SHORT) < MARGIN && abs(val2 - 
SHORT) < MARGIN)
    return '0';
if (abs(val1 - SHORT) < MARGIN && abs(val2 - 
LONG) < MARGIN)
    return '1';
if (abs(val1 - SHORT) < MARGIN && abs(val2 - 
SEPARATOR) < MARGIN)
    return ']'; 
}

int abs(int val){
if (val < 0)
    return -val;
else
    return val;
}

int main(int argc, char** argv){
if (argc < 3){
    printf("usage = %s fileName output\n", 
argv[0]);
    exit(0);
}
int val1, val2;
char delims[] = " ";
char *result = NULL;
FILE* f = fopen(argv[1],"r");
FILE* out = fopen(argv[2],"w");
char line[256];
int index = 0;
char* nIndex = 0;
while (fgets(line, 256, f) != NULL){
    result = strtok( line, delims );
    index = 0;
    while( result != NULL ) {
        //printf( "result[%d] is \"%s\"\n", 
 index, result );
        if (index & 1){
            if (nIndex = strchr(result,'\n')){
                //printf("New line detected in result\n");
                *nIndex = '\0';
            }
            val2 = atoi(result);
            char dec = decode(val1,val2);
            fprintf(out,"%c",dec);
        }else{
            val1 = atoi(result);
        }
        result = strtok( NULL, delims );
        index++;
    }
    //printf (line);
}
fprintf(out, "]\n");
fclose(f);
fclose(out);
}

и мои необработанные данные

3596     1598      574      298      574     1166
  572      301      603      268      576      295
  573      298      600      271      610      260
  577      295      572      299      573      298
  573      299      603      268      577     1164
  574      298      574      296      573      299
  543      329      575      295      571      301
  573      298      569     1173      576     1165
  546     1197      662      184      636      261
  544     1198      600      271      573      299
  573      297      574      297      544      328
  605      266      573      299      544      326
  573      298      605      266      575      296
  576      296      543      327      575      296
  604      268      575      297      515      356
  599      272      572      298      601      271
  571      299      574      301      573      295
  576      295      573      279      561      329
  545      325      546      325      573      300
  573      297      573     1169      572     1170
  574      298      544      327      575      296
  547      325      511      359      603    76167

 3599     1625      548      322      553     1189
  552      321      523      348      550      321
  551      320      517      354      574      297
  551      320      551      321      577      293
  547      325      550      321      521     1219
  525      348      552      319      550      321
  549      322      552      320      549      322
  550      321      548     1193      551     1191
  584     1159      518      353      549      322
  580     1170      546      317      551      321
  552      319      579      292      551      320
  552      320      551      320      553      318
  549      322      579      292      547      324
  550      321      555      317      550      320
  581     1160      587      286      543     1198
  552     1190      552     1191      550      321
  551      321      581      290      547      324
  549      322      550      321      548     1193
  552     1191      550      319      583      292
  550      320      576      295      579      292
  551      320      519      353      551      319
  548      323      553     1189      522     1220
  550     1192      550     1192      551     1192
  523     1219      551     1191      451     1291
  522      350      550      321      553      318
  548      323      555      316      551      320
  553      319      552      319      554      316
  584      300      566      294      550      320
  552      319      549      322      550      321
  553      321      552      317      549      321
  550     1192      523     1219      550     1192
  558      314      549      322      552      319
  551      321      552      318      552      320
  551      320      549      322      551      320
  550     1192      548     1194      550     1192
  551      320      613      258      526      346
  554      319      549      322      522      348
  576      294      522      350      522      348
  555      317      523      348      552      319
  552      319      550      321      548      323
  552      319      580     1161      551      322
  553      318      551      320      549      322
  608      263      582      289      525     1216
  550      322      521      350      552      320
  551      320      552      319      549      322
  581      290      551      321      550      320
  552      319      555      317      523      348
  548      324      551      319      546      325
  551      321      479      391      572     1169
  551     1192      554     1188      555     1188
  551      321      549     1191      557     1187
  551

и я получил

[1�11111111111�1111111��#11#111111111111111111111111111111��11111�[1 11111111111+1111111##�11�11111111111111�1###111111##111111111 ,###+#s111111111111111111#+#111111111###1111111111111111�111111(11111111111111111�#

пожалуйста, помогите мне, спасибо!


person Michael Albertus    schedule 21.08.2018    source источник
comment
Ищу решение той же проблемы. Вы решили эту проблему?   -  person user140345    schedule 18.07.2021


Ответы (1)


Я не привык играть с ИК, но...

Если вы хотите использовать lirc, вы должны настроить его: http://lirc.org/html/configuration-guide.html.

Вам не нужно разрабатывать специальную утилиту для декодирования данных. Вы можете использовать mode2 для получения драйвера выходной формы http://www.lirc.org/html/mode2.html

mode2 --driver default --device /dev/lirc0
 Using driver default on device /dev/lirc0
 Trying device: /dev/lirc0
 Using device: /dev/lirc0
 pulse 2750
 space 800
 pulse 500
 space 350
 pulse 550
 space 350
 pulse 550

Затем lircd.conf используется для сопоставления данных с ключом http://www.lirc.org/html/lircd.conf.html и с помощью irw вы получите результат:

$ irw
    000000037ff07bef 00 KEY_VOLUMEUP Acer_Aspire_6530G_MCE
    000000037ff07bef 01 KEY_VOLUMEUP Acer_Aspire_6530G_MCE
    000000037ff07bdd 00 KEY_ENTER Acer_Aspire_6530G_MCE
    000000037ff07bdd 02 KEY_ENTER Acer_Aspire_6530G_MCE
person rantan pan    schedule 21.08.2018
comment
привет, спасибо за ответ, да, я использую lirc для приема ИК-сигнала, проблема, с которой я столкнулся сейчас, заключается в том, что мой сигнал слишком длинный и почему-то не может быть сопоставлен. любой совет? - person Michael Albertus; 22.08.2018