my $module = "RFID::Biblio::Reader::$reader";
eval "use $module";
die $@ if $@;
- if ( my $rfid = $module->new( device => '/dev/ttyUSB0' ) ) {
+ if ( my $rfid = $module->new ) {
push @rfid, $rfid;
warn "# added $module\n";
} else {
=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} );
+ @devices = glob '/dev/ttyUSB*';
- if ( ! $device ) {
- warn "# no device, serial port not opened\n";
- return;
- }
+ warn "# port devices ",dump(@devices);
+
+ foreach my $device ( @devices ) {
- if ( $self->{port} = Device::SerialPort->new( $settings->{device} ) ) {
- $self->{port}->$_( $settings->{$_} )
- foreach ( qw/handshake baudrate databits parity stopbits/ );
- } else {
- warn "can't open serial port: $!\n";
- $self->{port} = 0;
+ 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} );
+ }
+ warn "found ", ref($self), " $device settings ",dump $settings;
+ $self->{port} = $port;
+ $serial_device->{$device} = $port;
+ last;
+ }
}
- $self->{port};
+ warn "# serial_device ",dump($serial_device);
+
+ return $self->{port};
}
1