1 package Biblio::RFID::Reader::Serial;
6 use Device::SerialPort qw(:STAT);
7 use Biblio::RFID::Reader::INET;
8 use Data::Dump qw(dump);
12 Biblio::RFID::Reader::Serial - base class for serial or serial over TCP RFID readers
18 Open serial port (if needed) and init reader
27 $self->port && return $self;
33 Tries to open usb serial ports C</dev/ttyUSB*> and serial ports C</dev/ttyS*>
35 my $serial_obj = $self->port;
37 To try just one device use C<RFID_DEVICE=/dev/ttyUSB1> environment variable
39 If you want to define serial connection over TCP socket, you have to export
40 enviroment variable C<RFID_TCP=hostname:port>.
49 warn "## port ",dump( $self->{port} );
51 return $self->{port} if defined $self->{port};
53 if ( my $tcp = $ENV{RFID_TCP} ) {
54 my $port = Biblio::RFID::Reader::INET->new(
58 warn "## TCP $tcp ", ref($port);
59 $self->{port} = $port;
64 if ( my $listen = $ENV{RFID_LISTEN} ) {
65 my $server = Biblio::RFID::Reader::INET->new(
72 die "can't setup server $listen: $!" unless $server;
74 warn "RFID: waiting for reader connection to $listen";
76 my $port = $server->accept();
79 warn "## LISTEN $listen ", ref($port);
80 $self->{port} = $port;
87 my $settings = $self->serial_settings;
88 my @devices = $ENV{RFID_DEVICE} ? ( $ENV{RFID_DEVICE} ) : glob '/dev/ttyUSB* /dev/ttyS*';
89 warn "# port devices ",dump(@devices);
91 foreach my $device ( @devices ) {
93 next if $serial_device->{$device};
95 if ( my $port = Device::SerialPort->new($device) ) {
97 foreach my $opt ( qw/handshake baudrate databits parity stopbits/ ) {
98 $port->$opt( $settings->{$opt} );
101 $self->{port} = $port;
103 warn "# probe by init $device ",ref($self);
105 warn "init OK ", ref($self), " $device settings ",dump $settings;
106 $serial_device->{$device} = $port;
114 warn "# serial_device ",dump($serial_device);
116 return $self->{port};
124 L<Biblio::RFID::Reader::3M810>
126 L<Biblio::RFID::Reader::CPRM01>
128 L<Biblio::RFID::Reader::API>