4 use Device::SerialPort;
5 use Data::Dump qw(dump);
7 my $port = '/dev/ttyUSB1';
8 $port = '/dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0';
10 my $debug = $ENV{DEBUG} || 0;
12 my $ob = new Device::SerialPort ($port)
13 || die "Can't open $port: $!\n";
15 $ob->baudrate(38400) || die "fail setting baudrate";
16 $ob->parity("none") || die "fail setting parity";
17 $ob->databits(8) || die "fail setting databits";
18 $ob->stopbits(1) || die "fail setting stopbits";
19 $ob->handshake("none") || die "fail setting handshake";
30 $ob->write( shift(@commands) . "\n" );
35 my $show_response = $debug;
38 my ($count_in, $string_in) = $ob->read($InBytes);
39 print "<< $count_in << ",dump($string_in),"\n" if $debug && $count_in > 0;
41 if ( $got =~ m/(OK|E!)\r\n/ ) {
42 warn "# got = ",dump( $got ) if $show_response;
43 $show_response = $debug;
45 foreach ( split(/[\r\n]+/,$got) ) {
46 my ($k,$v) = split(/:\s+/,$_,2);
48 warn "SKIP: [$_]\n" if $debug;
50 $new->{$k} = $v if ! defined $s->{$k} || $s->{$k} ne $v;
54 warn "# new = ",dump( $new ) if $debug;
58 if ( my $v = $s->{$n} ) {
59 $v =~ s/(\d+) (\d+)$/$1/; # strip adc
60 "$n $v" . ( exists $new->{$n} ? '*' : ' ' );
75 $ob->write( shift(@commands) . "\n" );
80 local $SIG{ALRM} = sub { die };
84 if ( length($c) == 0 ) {
90 push @commands, 'config';
99 # always emit something to keep update working
101 warn ">> ",dump($c) if $debug;
102 $ob->write( "$c\n" );