convert ir-ctl -r output into sigrok file for pulseview master
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 3 Aug 2019 16:49:06 +0000 (18:49 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 3 Aug 2019 16:49:06 +0000 (18:49 +0200)
ir/ir-ctl2sr.pl [new file with mode: 0755]

diff --git a/ir/ir-ctl2sr.pl b/ir/ir-ctl2sr.pl
new file mode 100755 (executable)
index 0000000..9e29de9
--- /dev/null
@@ -0,0 +1,67 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+my @pulses = @ARGV || die "usage: $0 *.pulses";
+
+my $khz = 50; # ir-ctl --features | grep Resolution
+# 1 ms = 1000 Hz = 1 kHz
+
+mkdir 'new';
+open(my $metadata, '>', 'new/metadata');
+
+print $metadata qq{
+[global]
+sigrok version=0.5.1
+
+[device 1]
+capturefile=logic-1
+total probes=8
+total analog=0
+unitsize=1
+samplerate=$khz kHz
+probe1=IR
+};
+
+=for later
+foreach my $ch ( 1 .. scalar($#pulses) ) {
+       my $name = $pulses[ $ch - 1 ];
+       print $metadata qq{probe$ch=$name\n};
+}
+=cut
+
+open(my $logic, '>', 'new/logic-1-1');
+
+my $bits_left = 0;
+my $state_left = 0;
+
+sub write_logic {
+       my ($t,$s) = @_;
+
+       $t = $t / $khz; # convert time to bits
+
+       my $patt = $s ? "\x01" : "\x00";
+       print $logic ( $patt x $t );
+};
+
+
+while(<>) {
+       if (/^pulse\s(\d+)/ ) {
+               write_logic( $1, 1 );
+       } elsif ( /^space\s(\d+)/ ) {
+               write_logic( $1, 0 );
+       } elsif ( /^timeout\s(\d+)/ ) {
+               write_logic( $1, 0 );
+       } else {
+               warn "IGNORE: $_\n";
+       }
+}
+
+close($metadata);
+close($logic);
+
+open(my $version, '>', 'new/version');
+print $version '2';
+close($version);
+
+system "cd new ; zip ../new.sr *";