added socket connection to remote serial port
[vrDialog] / dialog.pl
index 006eded..2174f07 100755 (executable)
--- a/dialog.pl
+++ b/dialog.pl
@@ -3,11 +3,14 @@ use warnings;
 use strict;
 
 use Data::Dump qw(dump);
-use Device::SerialPort qw(:STAT);
-
 my $debug = $ENV{DEBUG} || 0;
 
+=for serial_port
+
+use Device::SerialPort qw(:STAT);
+
 my $port = Device::SerialPort->new('/dev/ttyUSB0');
+die "can't open serial port" unless $port;
 $port->baudrate(9600);
 $port->databits(8);
 $port->parity('none');
@@ -17,6 +20,43 @@ $port->handshake('none');
 $port->read_char_time(500);
 $port->read_const_time(1000);
 
+sub read_serial {
+       my $len = shift;
+       return $port->read( $len );
+}
+
+sub write_serial {
+       my $bytes = shift;
+       return $port->write( $bytes );
+}
+
+=cut
+
+# TODO: implement remote serial port
+# remserial -x 2 -p 23000 -s "9600 raw" /dev/ttyUSB0
+
+use IO::Socket::INET;
+
+my $sock = IO::Socket::INET->new(
+       PeerAddr => '192.168.1.148',
+       PeerPort => '23000',
+       Proto    => 'tcp'
+);
+
+sub read_serial {
+       my $len = shift;
+       my $buffer;
+       $sock->read( $buffer, $len );
+       warn "## read $len ",as_hex($buffer) if $debug;
+       return $buffer;
+}
+
+sub write_serial {
+       my $bytes = shift;
+       return $sock->print( $bytes );
+}
+
+
 sub as_hex {
        my @out;
        foreach my $str ( @_ ) {
@@ -62,14 +102,14 @@ sub v_bytes {
 retry:
        warn ">> ",as_hex( $bytes );
        crc( $bytes );
-       $port->write( $bytes );
+       write_serial( $bytes );
 
-       my $data = $port->read(1);
+       my $data = read_serial(1);
        warn "<< len: ",ord($data) if $debug;
 
        goto retry if ord($data) == 0;
 
-       $data .= $port->read(ord($data) - 1);
+       $data .= read_serial(ord($data) - 1);
        crc($data);
        warn "<< ",as_hex($data);
 
@@ -81,6 +121,12 @@ retry:
                $o += 2;
        }
 
+       while ( $o < length($data) - 1 ) {
+               my $n = unpack('c', substr($data,$o,1));
+               warn "## $o = ", $n, "\n";
+               $o += 1;
+       }
+
        return $data;
 }