sub crc {
my $crc = 0xffff;
foreach my $byte ( split(//, join('',@_)) ) {
- $crc = ($crc >> 8) ^ $crc_table[ ($crc ^ $byte) & 0xff ];
+ $crc = ($crc >> 8) ^ $crc_table[ ($crc ^ ord($byte)) & 0xff ];
}
return $crc ^ 0xffff;
}
$port->read_const_time(3000); # 1 s read timeout
while ( my $drain = $port->input ) {
- warn "# drain $drain\n# /drain\n";
+ warn "# drain $drain\n";
+
+ $port->write('AT$QCDMG' . "\r");
+ warn "DIAG mode: ", $port->read(2), $port->input; # OK+cr/lf
+
}
my $diag = {
warn "## using $device\n";
-#$port->write('AT$QCDMG');
-#warn "DIAG mode: ", $port->read(2), $port->input; # OK+cr/lf
-
sub as_hex {
my @out;
foreach my $str ( @_ ) {
my $crc = pack('v', crc($data) );
-# $data =~ s/\x7d/\x7d\x5d/;
-# $data =~ s/\x7e/\x7d\x5e/;
+ $data =~ s/\x7d/\x7d\x5d/gs;
+ $data =~ s/\x7e/\x7d\x5e/gs;
my $out = $data . $crc . "\x7e";
my $ret = $port->read(1);
while ( my $c = $port->input ) {
- print STDERR "<<< ",dump($ret . $c), $/;
+ print STDERR "<<< ",as_hex($ret . $c), $/;
$ret .= $c;
# last if $c =~ m/^OK\r/;
}
+ $ret =~ s/\x7d\x5d/\x7d/gs;
+ $ret =~ s/\x7d\x5e/\x7e/gs;
return $ret;
}
diag 'GET_VERSION';
-$port->close || die "can't close port $!";
+diag 'GET_SERIAL_NUMBER';
-while ( block_read() ) {
- warn "# more";
-}
+diag 'EXTENDED_BUILD_ID';
+
+$port->close || die "can't close port $!";
warn "## $device closed\n";