convert ir-ctl -r output into sigrok file for pulseview
[mqtt-homehub] / ir / ir-ctl2sr.pl
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4
5 my @pulses = @ARGV || die "usage: $0 *.pulses";
6
7 my $khz = 50; # ir-ctl --features | grep Resolution
8 # 1 ms = 1000 Hz = 1 kHz
9
10 mkdir 'new';
11 open(my $metadata, '>', 'new/metadata');
12
13 print $metadata qq{
14 [global]
15 sigrok version=0.5.1
16
17 [device 1]
18 capturefile=logic-1
19 total probes=8
20 total analog=0
21 unitsize=1
22 samplerate=$khz kHz
23 probe1=IR
24 };
25
26 =for later
27 foreach my $ch ( 1 .. scalar($#pulses) ) {
28         my $name = $pulses[ $ch - 1 ];
29         print $metadata qq{probe$ch=$name\n};
30 }
31 =cut
32
33 open(my $logic, '>', 'new/logic-1-1');
34
35 my $bits_left = 0;
36 my $state_left = 0;
37
38 sub write_logic {
39         my ($t,$s) = @_;
40
41         $t = $t / $khz; # convert time to bits
42
43         my $patt = $s ? "\x01" : "\x00";
44         print $logic ( $patt x $t );
45 };
46
47
48 while(<>) {
49         if (/^pulse\s(\d+)/ ) {
50                 write_logic( $1, 1 );
51         } elsif ( /^space\s(\d+)/ ) {
52                 write_logic( $1, 0 );
53         } elsif ( /^timeout\s(\d+)/ ) {
54                 write_logic( $1, 0 );
55         } else {
56                 warn "IGNORE: $_\n";
57         }
58 }
59
60 close($metadata);
61 close($logic);
62
63 open(my $version, '>', 'new/version');
64 print $version '2';
65 close($version);
66
67 system "cd new ; zip ../new.sr *";