X-Git-Url: http://git.rot13.org/?p=vrDialog;a=blobdiff_plain;f=dialog.pl;fp=dialog.pl;h=d259990c710439863e5256c327bfa1c63956ffb6;hp=0308a80c2aa195fe6d61a3e21f84bc9c8c9301fe;hb=87441bac0636b4b80dfe275234f67c91ec06cdb7;hpb=a51a2c621121da3e2866ba047ca314f20dcce28c diff --git a/dialog.pl b/dialog.pl index 0308a80..d259990 100755 --- a/dialog.pl +++ b/dialog.pl @@ -48,14 +48,16 @@ sub crc { $crc = $crc ^ $byte; # warn "## ", as_hex(chr($byte)), " crc = ", $crc, " ", as_hex(chr($crc)); } - if ( chr($crc) ne substr($data,-1,1) ) { + # ignore checksum errors for FF, we will calulate them! + if ( chr($crc) ne substr($data,-1,1) && substr($data,-1,1) ne "\xFF" ) { warn "CRC error for ",as_hex($data), " calulated ", as_hex(chr($crc)); } + + return substr($data,0,-1) . chr($crc); } -sub v { - my ($hex,$desc) = @_; - my $bytes = hex2bytes( $hex ); +sub v_bytes { + my ($bytes,$desc) = @_; warn "# $desc\n"; retry: warn ">> ",as_hex( $bytes ); @@ -71,14 +73,29 @@ retry: crc($data); warn "<< ",as_hex($data); + return $data; +} + +sub v { + my ($hex,$desc) = @_; + v_bytes( hex2bytes( $hex ), $desc ); } -v '07 02 00 00 00 04 C4', "hardware version"; +if ( ! @ARGV ) { + v '07 02 00 00 00 04 C4', "hardware version"; -v '07 0A 00 00 00 04 44', 'software version'; + v '07 0A 00 00 00 04 44', 'software version'; -v '07 00 01 00 06 0E EA', 'temperatures'; + v '07 00 01 00 06 0E EA', 'temperatures'; -v '07 00 00 00 26 0A A6', 'last errros'; + v '07 00 00 00 26 0A A6', 'last errros'; +} -v '07 00 00 00 26 00 AC', 'last errros (with invalid length)'; +#v '07 00 00 00 26 00 AC', 'last errros (with invalid length)'; + +foreach my $reg ( @ARGV ) { + warn "# send user $reg\n"; + v_bytes( + crc( hex2bytes( "07 00 00 00 $reg 01 FF" ) ) + ,"user: $reg"); +}