fail chain without 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 sub port {
37         my $self = shift;
38
39         return $self->{port} if defined $self->{port};
40
41         my $settings = $self->serial_settings;
42         my $device   = $settings->{device} ||= $ENV{RFID_DEVICE};
43         warn "# settings ",dump $settings;
44
45         if ( ! $device ) {
46                 warn "# no device, serial port not opened\n";
47                 return;
48         }
49
50         if ( $self->{port} = Device::SerialPort->new( $settings->{device} ) ) {
51                 $self->{port}->$_( $settings->{$_} )
52                 foreach ( qw/handshake baudrate databits parity stopbits/ );
53         } else {
54                 warn "can't open serial port: $!\n";
55                 $self->{port} = 0;
56         }
57
58         $self->{port};
59 }
60
61 1
62 __END__
63
64 =head1 SEE ALSO
65
66 L<RFID::Biblio::Reader::3M810>
67
68 L<RFID::Biblio::Reader::CPRM01>
69
70 L<RFID::Biblio::Reader::API>
71