probe usb serial ports
[Biblio-RFID.git] / lib / RFID / Biblio / Reader / Serial.pm
1 package RFID::Biblio::Reader::Serial;
2
3 use warnings;
4 use strict;
5
6 use Device::SerialPort qw(:STAT);
7 use Data::Dump qw(dump);
8
9 =head1 NAME
10
11 RFID::Biblio::Reader::Serial - base class for serial RFID readers
12
13 =head1 METHODS
14
15 =head2 new
16
17 Open serial port (if needed) and init reader
18
19 =cut
20
21 sub new {
22         my $class = shift;
23         my $self = {@_};
24         bless $self, $class;
25
26         $self->port && $self->init && return $self;
27 }
28
29
30 =head2 port
31
32   my $serial_obj = $self->port;
33
34 =cut
35
36 our $serial_device;
37
38 sub port {
39         my $self = shift;
40
41         return $self->{port} if defined $self->{port};
42
43         my $settings = $self->serial_settings;
44         my @devices  = ( $ENV{RFID_DEVICE} );
45         @devices = glob '/dev/ttyUSB*';
46
47         warn "# port devices ",dump(@devices);
48
49         foreach my $device ( @devices ) {
50
51                 next if $serial_device->{$device};
52
53                 if ( my $port = Device::SerialPort->new($device) ) {
54                         foreach my $opt ( qw/handshake baudrate databits parity stopbits/ ) {
55                                 $port->$opt( $settings->{$opt} );
56                         }
57                         warn "found ", ref($self), " $device settings ",dump $settings;
58                         $self->{port} = $port;
59                         $serial_device->{$device} = $port;
60                         last;
61                 }
62         }
63
64         warn "# serial_device ",dump($serial_device);
65
66         return $self->{port};
67 }
68
69 1
70 __END__
71
72 =head1 SEE ALSO
73
74 L<RFID::Biblio::Reader::3M810>
75
76 L<RFID::Biblio::Reader::CPRM01>
77
78 L<RFID::Biblio::Reader::API>
79