diff -r 200d69222aed -r 6f1e9c4bee3c Quancom.pm --- a/Quancom.pm Tue Dec 09 15:58:11 2008 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -package Quancom; - -use strict; -use warnings; -use IO::Socket::INET; -use Quancom::Result; - -my $DEFAULT_PORT = 1001; - -sub new { - my $class = ref $_[0] ? ref shift : shift; - my $self = bless {} => $class; - - $self->{peer} = shift; - $self->{peer} .= ":$DEFAULT_PORT" - unless $self->{peer} =~ /:\d+$/; - - $self->{socket} = new IO::Socket::INET( - Proto => "tcp", - PeerAddr => $self->{peer} - ); - - $self->{job} = 0; - $self->{ok} = undef; - - return $self; -} - -sub last_result { $_[0]->{last_result} } - -sub cmd { - my $self = shift; - my $cmd = shift; - - $self->_tx($cmd); - $self->_rx($cmd); - - return $self->{last_result}; -} - -sub _tx { - my $self = shift; - my $cmd = shift; - - $self->{job} = ++$self->{job} % 255; # cap the job id on 255; - $cmd = "\x02" . sprintf("%02x", $self->{job}) . $cmd; # add STX and job id - $cmd .= sprintf("%02x", unpack("%8C*", $cmd)); # add checksum - - warn "sending $cmd | " . unpack("H*", $cmd) . "\n"; - $self->{socket}->print($cmd . "\r"); -} - -sub _rx { - my $self = shift; - - local $/ = "\r"; # CR is the delimiter - my $r = $self->{socket}->getline; # now it's a line - chomp($r); # we do not need the delimiter - - $self->{last_result} = new Quancom::Result; - - # decode the status - if (($self->{last_result}{error_code}) = $r =~ /^E(.)/) { - $self->{last_result}{ok} = 0; - } - elsif (my ($jobid, $data, $csum) = $r =~ /^[DO](..)(.*)(..)$/) { - $self->{last_result}{ok} = 1; - $self->{last_result}{result} = defined $data ? $data : ""; - } - else { - die "unknown response $r"; - } - - return $r; -} - - -1; - -__END__ - -=head1 NAME - -Quancom - perl module to access the usb opto quancom device - -=head1 SYNOPSIS - - use Quancom; - - my $q = new Quancom 172.16.0.22; - my $r = $q->cmd("xxxxxx") - or die $r->error_message; - -=head1 METHODS - -=over - -=item constructor B( I ) - -This method returns a new Quancom object if the connection was -successfully established. - -=item B( I ) - -Send a Quancom string to the device. The string here should be -B the leading STX and Jobid as well without the trailing CR. - -It returns TRUE on success, FALSE otherwise. - -=item B( ) - -This returns an object containing the last result. - -=back - -=head1 AUTHOR - - Maik Schueller - Heiko Schlittermann - -=cut