b09875fed9ded810c4291e8380c1afb69e4048c9
[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 && return $self;
27 }
28
29
30 =head2 port
31
32 Tries to open usb serial ports C</dev/ttyUSB*>
33
34   my $serial_obj = $self->port;
35
36 To try just one device use C<RFID_DEVICE=/dev/ttyUSB1> enviroment variable
37
38 =cut
39
40 our $serial_device;
41
42 sub port {
43         my $self = shift;
44
45         return $self->{port} if defined $self->{port};
46
47         my $settings = $self->serial_settings;
48         my @devices  = $ENV{RFID_DEVICE} ? ( $ENV{RFID_DEVICE} ) : glob '/dev/ttyUSB*';
49         warn "# port devices ",dump(@devices);
50
51         foreach my $device ( @devices ) {
52
53                 next if $serial_device->{$device};
54
55                 if ( my $port = Device::SerialPort->new($device) ) {
56
57                         foreach my $opt ( qw/handshake baudrate databits parity stopbits/ ) {
58                                 $port->$opt( $settings->{$opt} );
59                         }
60
61                         $self->{port} = $port;
62
63                         warn "# probe by init $device ",ref($self);
64                         if ( $self->init ) {
65                                 warn "init OK ", ref($self), " $device settings ",dump $settings;
66                                 $serial_device->{$device} = $port;
67                                 last;
68                         } else {
69                                 $self->{port} = 0;
70                         }
71                 }
72         }
73
74         warn "# serial_device ",dump($serial_device);
75
76         return $self->{port};
77 }
78
79 1
80 __END__
81
82 =head1 SEE ALSO
83
84 L<RFID::Biblio::Reader::3M810>
85
86 L<RFID::Biblio::Reader::CPRM01>
87
88 L<RFID::Biblio::Reader::API>
89