-package RFID::Biblio::Reader::Serial;
+package Biblio::RFID::Reader::Serial;
use warnings;
use strict;
=head1 NAME
-RFID::Biblio::Reader::Serial - base class for serial RFID readers
+Biblio::RFID::Reader::Serial - base class for serial RFID readers
=head1 METHODS
my $self = {@_};
bless $self, $class;
- $self->port;
-
- $self->init && return $self;
+ $self->port && return $self;
}
=head2 port
+Tries to open usb serial ports C</dev/ttyUSB*>
+
my $serial_obj = $self->port;
+To try just one device use C<RFID_DEVICE=/dev/ttyUSB1> enviroment variable
+
=cut
+our $serial_device;
+
sub port {
my $self = shift;
return $self->{port} if defined $self->{port};
my $settings = $self->serial_settings;
- my $device = $settings->{device} ||= $ENV{RFID_DEVICE};
- warn "# settings ",dump $settings;
+ my @devices = $ENV{RFID_DEVICE} ? ( $ENV{RFID_DEVICE} ) : glob '/dev/ttyUSB*';
+ warn "# port devices ",dump(@devices);
- if ( ! $device ) {
- warn "# no device, serial port not opened\n";
- return;
- }
+ foreach my $device ( @devices ) {
- $self->{port} = Device::SerialPort->new( $settings->{device} )
- || die "can't open serial port: $!\n";
+ next if $serial_device->{$device};
+
+ if ( my $port = Device::SerialPort->new($device) ) {
+
+ foreach my $opt ( qw/handshake baudrate databits parity stopbits/ ) {
+ $port->$opt( $settings->{$opt} );
+ }
+
+ $self->{port} = $port;
+
+ warn "# probe by init $device ",ref($self);
+ if ( $self->init ) {
+ warn "init OK ", ref($self), " $device settings ",dump $settings;
+ $serial_device->{$device} = $port;
+ last;
+ } else {
+ $self->{port} = 0;
+ }
+ }
+ }
- $self->{port}->$_( $settings->{$_} )
- foreach ( qw/handshake baudrate databits parity stopbits/ );
+ warn "# serial_device ",dump($serial_device);
+ return $self->{port};
}
1
=head1 SEE ALSO
-L<RFID::Biblio::Reader::3M810>
+L<Biblio::RFID::Reader::3M810>
-L<RFID::Biblio::Reader::CPRM01>
+L<Biblio::RFID::Reader::CPRM01>
-L<RFID::Biblio::Reader::API>
+L<Biblio::RFID::Reader::API>