--- 3m-810.pl 2008/10/02 22:53:57 16 +++ 3m-810.pl 2008/10/03 08:53:57 17 @@ -256,8 +256,12 @@ warn "## checksum ",dump( $bytes, $xor, $checksum ) if $debug; my $len = ord(substr($bytes,2,1)); - my $len_real = length($bytes); - print "length wrong: $len_real != $len\n" if $len_real != $len; + my $len_real = length($bytes) - 1; + + if ( $len_real != $len ) { + print "length wrong: $len_real != $len\n"; + $bytes = substr($bytes,0,2) . chr($len_real) . substr($bytes,4); + } if ( defined $checksum && $xor ne $checksum ) { print "checksum doesn't match: ", as_hex($xor), " != ", as_hex($checksum), " data: ", as_hex($bytes), "\n"; @@ -297,10 +301,9 @@ sub str2bytes { my $str = shift || confess "no str?"; my $b = $str; - $b =~ s/\s+(\S\S)(\S\S)+\s*/ $1 $2/; # fix checksum - $b =~ s/\s+$//; - $b =~ s/\s+/\\x/g; - $b = '"\x' . $b . '"'; + $b =~ s/\s+//g; + $b =~ s/(..)/\\x$1/g; + $b = "\"$b\""; my $bytes = eval $b; die $@ if $@; warn "## str2bytes( $str ) => $b => ",as_hex($bytes) if $debug;