From 4358c740117d35d9fb0725c50464032d5ee9eb87 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Mon, 21 Sep 2020 13:37:32 +0200 Subject: [PATCH 1/1] display length, correctly unpack multi-values (e.g. ip+port) --- unpack.pl | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/unpack.pl b/unpack.pl index 2b93800..66f4c33 100755 --- a/unpack.pl +++ b/unpack.pl @@ -82,6 +82,7 @@ while ( $data ) { my $pack_fmt = $protocol->{$data_id}->{pack_fmt} || die "can't find pack_fmt for data_id $data_id"; my $data_range; + my $data_len; if ( $data_id == 0x00 ) { # sequence number @@ -98,7 +99,7 @@ while ( $data ) { } elsif ( $up_down eq 'up' && ( $function_code == 0x07 || $function_code == 0x08 || $function_code == 0x03 ) ) { # type B - my $data_len = unpack('C', substr($data,1,1)); + $data_len = unpack('C', substr($data,1,1)); $data_range = substr($data,2, $data_len); $data = substr($data,2 + $data_len); @@ -106,7 +107,7 @@ while ( $data ) { } elsif ( $up_down eq 'down' && $function_code == 0x06 ) { # type B - my $data_len = unpack('C', substr($data,1,1)); + $data_len = unpack('C', substr($data,1,1)); $data_range = substr($data,2, $data_len); $data = substr($data,2 + $data_len); @@ -123,7 +124,9 @@ while ( $data ) { warn "ERROR unknown function_code = $function_code"; } - my $v = unpack($pack_fmt, $data_range); + my @v = unpack($pack_fmt, $data_range); + + my $v = join(' ', @v); if ( $data_id == 0x0c ) { $v = $v / 100; @@ -132,7 +135,7 @@ while ( $data ) { } my $description = $protocol->{$data_id}->{description} || die "can't find description for data_id $data_id"; - print "$up_down | $data_id | $description | v=$v | hex:", unpack('H*', $data_range), " fmt:$pack_fmt | range:",$protocol->{$data_id}->{range}, " | remark:", $protocol->{$data_id}->{remark},"\n"; + print "$up_down | $data_id 0x",unpack('H*', chr($data_id))," $data_len | $description | v=$v | hex:", unpack('H*', $data_range), " fmt:$pack_fmt | range:",$protocol->{$data_id}->{range}, " | remark:", $protocol->{$data_id}->{remark},"\n"; } -- 2.20.1