summaryrefslogtreecommitdiffstats
path: root/perl-install/harddrake/data.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/harddrake/data.pm')
-rw-r--r--perl-install/harddrake/data.pm355
1 files changed, 198 insertions, 157 deletions
diff --git a/perl-install/harddrake/data.pm b/perl-install/harddrake/data.pm
index 38ddf9d80..8d4d4de21 100644
--- a/perl-install/harddrake/data.pm
+++ b/perl-install/harddrake/data.pm
@@ -9,13 +9,22 @@ our @ISA = qw(Exporter);
our @EXPORT_OK = qw(version tree);
our ($version, $sbindir, $bindir) = ("10", "/usr/sbin", "/usr/bin");
-my @devices = detect_devices::probeall();
+my @devices = (detect_devices::probeall(), detect_devices::getSCSI());
+
+foreach my $dev (@devices) {
+ # normalize device IDs for devices that came from mouse.pm:
+ next if !defined $dev->{Synaptics};
+ foreach my $field (qw(vendor id subvendor subid)) {
+ next if !defined $dev->{$field};
+ $dev->{$field} = hex($dev->{$field});
+ }
+}
# Update me each time you handle one more devices class (aka configurator)
sub unknown() {
- grep { $_->{media_type} !~ /BRIDGE|class\|Mouse|DISPLAY|Hub|MEMORY_RAM|MULTIMEDIA_(VIDEO|AUDIO|OTHER)|NETWORK|Printer|SERIAL_(USB|SMBUS)|STORAGE_(IDE|OTHER|SCSI)|SYSTEM_OTHER|tape|UPS/
+ grep { $_->{media_type} !~ /BRIDGE|class\|Mouse|DISPLAY|Hub|MEMORY_RAM|MULTIMEDIA_(VIDEO|AUDIO|OTHER)|NETWORK|Printer|SERIAL_(USB|SMBUS)|STORAGE_(IDE|OTHER|RAID|SCSI)|SYSTEM_(OTHER|SDHCI)|tape|UPS/
&& !member($_->{driver}, qw(cpia_usb cyber2000fb forcedeth ibmcam megaraid mod_quickcam nvnet ohci1394 ov511 ov518_decomp scanner ultracam usbvideo usbvision))
- && $_->{driver} !~ /^ISDN|Mouse:USB|Removable:zip|class\|Mouse|sata|www.linmodems.org/
+ && $_->{driver} !~ /^ISDN|Mouse:USB|Removable:zip|class\|Mouse|sata|www.linmodems.org|kbd|mouse|sysrq|usbhid/
&& $_->{type} ne 'network'
&& $_->{description} !~ /Alcatel|ADSL Modem/;
} @devices;
@@ -23,7 +32,7 @@ sub unknown() {
my @alrd_dected;
sub f {
- my @devs = grep { !member(pciusb_id($_), @alrd_dected) } @_;
+ my @devs = grep { !member(pciusb_id($_), @alrd_dected) } grep { $_ } @_;
push @alrd_dected, map { pciusb_id($_) } @devs;
@devs;
}
@@ -35,29 +44,126 @@ sub f {
# FIXME: add translated items
-sub is_removable { $_[0] =~ /FLOPPY|ZIP|DVDROM|CDROM|BURNER/ }
+sub is_removable { member($_[0], qw(FLOPPY ZIP DVDROM CDROM BURNER)) }
+sub is_auto_configurable_media { !detect_devices::isKeyUsb($_[0]) }
sub set_removable_configurator {
my ($class, $device) = @_;
- return "/usr/sbin/diskdrake --removable=$device->{device}" if is_removable($class);
+ is_removable($class) ? "/usr/sbin/diskdrake --removable=$device->{device}" : undef;
}
-sub set_removable_auto_configurator {
- my ($class, $device) = @_;
- return "/usr/sbin/drakupdate_fstab --no-flag --auto --add $device->{device}" if is_removable($class);
-}
-
-sub set_removable_remover {
- my ($class, $device) = @_;
- return "/usr/sbin/drakupdate_fstab --no-flag --del $device->{device}" if is_removable($class);
-}
-
my $modules_conf = modules::any_conf->read;
# Format is (HW class ID, l18n class name, icon, config tool , is_to_be_detected_on_boot)
our @tree =
(
{
+ class => "SATA_STORAGE",
+ string => N("SATA controllers"),
+ icon => "ide_hd.png",
+ configurator => "",
+ detector => sub { f(grep { $_->{driver} !~ /^pata/ } detect_devices::probe_category('disk/sata')),
+ f(grep { $_->{description} =~ /AHCI/ } @devices) },
+ checked_on_boot => 1,
+ },
+
+ {
+ class => "RAID_STORAGE",
+ string => N("RAID controllers"),
+ icon => "ide_hd.png",
+ configurator => "",
+ detector => sub { f(detect_devices::probe_category('disk/hardware_raid')),
+ f(grep { $_->{media_type} =~ /STORAGE_RAID/ } @devices) },
+ checked_on_boot => 1,
+ },
+
+ {
+ class => "ATA_STORAGE",
+ string => N("(E)IDE/ATA controllers"),
+ icon => "ide_hd.png",
+ configurator => "",
+ detector => sub { f(detect_devices::probe_category('disk/ide')),
+ f(grep { $_->{driver} =~ /^pata/ && $_->{media_type} =~ /IDE|STORAGE_SATA/ } @devices),
+ f(grep { $_->{media_type} =~ /STORAGE_(IDE|OTHER)/ } @devices) },
+ checked_on_boot => 1,
+ },
+
+ {
+ class => "CARD_READER",
+ string => N("Card readers"),
+ icon => "ide_hd.png",
+ configurator => "",
+ detector => sub { f(detect_devices::probe_category('disk/card_reader')) },
+ checked_on_boot => 1,
+ },
+
+ {
+ class => "FIREWIRE_CONTROLLER",
+ string => N("Firewire controllers"),
+ icon => "usb.png",
+ configurator => "",
+ detector => sub { f(grep { $_->{driver} =~ /firewire_ohci|ohci1394/ } @devices) },
+ checked_on_boot => 1,
+ },
+
+ {
+ class => "PCMCIA_CONTROLLER",
+ string => N("PCMCIA controllers"),
+ icon => "hw-pcmcia.png",
+ configurator => "",
+ detector => sub { f(detect_devices::pcmcia_controller_probe()) },
+ checked_on_boot => 1,
+ },
+
+ {
+ class => "SCSI_CONTROLLER",
+ string => N("SCSI controllers"),
+ icon => "scsi.png",
+ configurator => "",
+ detector => sub { f(detect_devices::probe_category('disk/scsi'), grep { $_->{media_type} =~ /STORAGE_SCSI/ } @devices) },
+ checked_on_boot => 1,
+ },
+
+ {
+ class => "USB_CONTROLLER",
+ string => N("USB controllers"),
+ icon => "usb.png",
+ configurator => "",
+ detector => sub { f(grep { $_->{media_type} eq 'SERIAL_USB' } @devices) },
+ checked_on_boot => 1,
+ },
+
+ {
+ class => "USB_HUB",
+ string => N("USB ports"),
+ icon => "hw-usb.png",
+ configurator => "",
+ detector => sub { f(grep { $_->{media_type} =~ /Hub/ } @devices) },
+ checked_on_boot => 0,
+ },
+
+ {
+ class => "SMB_CONTROLLER",
+ string => N("SMBus controllers"),
+ icon => "hw-smbus.png",
+ configurator => "",
+ detector => sub { f(grep { $_->{media_type} =~ /SERIAL_SMBUS/ } @devices) },
+ checked_on_boot => 0,
+ },
+
+ {
+ class => "BRIDGE",
+ string => N("Bridges and system controllers"),
+ icon => "memory.png",
+ configurator => "",
+ detector => sub { f(grep { $_->{media_type} =~ /BRIDGE|MEMORY_RAM|SYSTEM_(OTHER|SDHCI)|MEMORY_OTHER|SYSTEM_PIC|COMMUNICATION_OTHER/
+ || $_->{description} =~ /Parallel Port Adapter/;
+ } @devices) },
+ checked_on_boot => 0,
+ },
+
+
+ {
class => "FLOPPY",
string => N("Floppy"),
icon => "floppy.png",
@@ -90,6 +196,16 @@ our @tree =
configurator => "$sbindir/diskdrake",
detector => sub { f(detect_devices::hds()) },
checked_on_boot => 0,
+ automatic => 1,
+ },
+
+ {
+ class => "USB_STORAGE",
+ string => N("USB Mass Storage Devices"),
+ icon => "usb.png",
+ configurator => "",
+ detector => sub { f(grep { member($_->{driver}, qw(usb_storage ub Removable:memory_card)) } @devices) },
+ checked_on_boot => 0,
},
{
@@ -97,7 +213,7 @@ our @tree =
string => N("CDROM"),
icon => "cd.png",
configurator => "",
- detector => sub { grep { !(detect_devices::isBurner($_) || detect_devices::isDvdDrive($_)) } &detect_devices::cdroms },
+ detector => sub { f(grep { !(detect_devices::isBurner($_) || detect_devices::isDvdDrive($_)) } &detect_devices::cdroms) },
checked_on_boot => 1,
automatic => 1,
},
@@ -107,7 +223,7 @@ our @tree =
string => N("CD/DVD burners"),
icon => "cd.png",
configurator => "",
- detector => \&detect_devices::burners,
+ detector => sub { f(detect_devices::burners()) },
checked_on_boot => 1,
automatic => 1,
},
@@ -117,7 +233,7 @@ our @tree =
string => N("DVD-ROM"),
icon => "cd.png",
configurator => "",
- detector => sub { grep { ! detect_devices::isBurner($_) } detect_devices::dvdroms() },
+ detector => sub { f(grep { ! detect_devices::isBurner($_) } detect_devices::dvdroms()) },
checked_on_boot => 1,
automatic => 1,
},
@@ -131,12 +247,22 @@ our @tree =
checked_on_boot => 0,
},
+ # AGP devices must be detected prior to video cards because some DRM drivers doesn't like be loaded
+ # after agpgart thus order in /etc/modprobe.preload is important (modules.pm should enforce such sorting):
+ {
+ class => "AGP",
+ string => N("AGP controllers"),
+ icon => "memory.png",
+ configurator => "",
+ detector => sub { f(detect_devices::probe_category('various/agpgart')) },
+ checked_on_boot => 1,
+ },
+
{
class => "VIDEO",
string => N("Videocard"),
icon => "video.png",
configurator => "$sbindir/XFdrake",
- configurator_auto => "$sbindir/XFdrake",
detector => sub { f(grep { $_->{driver} =~ /^(Card|Server):/ || $_->{media_type} =~ /DISPLAY_VGA/ } @devices) },
checked_on_boot => 1,
},
@@ -145,7 +271,7 @@ our @tree =
class => "DVB",
string => N("DVB card"),
icon => "tv.png",
- detector => sub { f(modules::probe_category('multimedia/dvb')) },
+ detector => sub { f(detect_devices::probe_category('multimedia/dvb')) },
checked_on_boot => 1,
},
@@ -153,8 +279,9 @@ our @tree =
class => "TV",
string => N("Tvcard"),
icon => "tv.png",
- configurator => "/usr/bin/XawTV",
- detector => sub { f(grep { $_->{media_type} =~ /MULTIMEDIA_VIDEO/ && $_->{bus} eq 'PCI' || $_->{driver} eq 'usbvision' } @devices) },
+ configurator => "/usr/sbin/drakxtv",
+ detector => sub { f(detect_devices::probe_category('multimedia/tv')),
+ f(grep { $_->{media_type} =~ /MULTIMEDIA_VIDEO/ && $_->{bus} eq 'PCI' } @devices) },
checked_on_boot => 1,
},
@@ -175,7 +302,8 @@ our @tree =
detector => sub {
require list_modules;
my @modules = list_modules::category2modules('multimedia/sound');
- f(grep { $_->{media_type} =~ /MULTIMEDIA_AUDIO/ || member($_->{driver}, @modules) } @devices);
+ f(grep { $_->{media_type} =~ /MULTIMEDIA_AUDIO|PROCESSOR_CO/ || member($_->{driver}, @modules)
+ || $_->{description} =~ /^\|?HDA |PC Speaker/ } @devices);
},
checked_on_boot => 1,
},
@@ -187,8 +315,9 @@ our @tree =
configurator => "",
detector => sub {
require list_modules;
- my @modules = list_modules::category2modules('multimedia/webcam');
- f(grep { $_->{media_type} =~ /MULTIMEDIA_VIDEO/ && $_->{bus} ne 'PCI' || member($_->{driver}, @modules) } @devices);
+ my @modules = (list_modules::category2modules('multimedia/webcam'), 'Removable:camera');
+ f(grep { $_->{media_type} =~ /MULTIMEDIA_VIDEO|Video\|Video Control|Imaging|Camera/ && $_->{bus} ne 'PCI'
+ || member($_->{driver}, @modules) || $_->{driver} =~ /^gpsca/ } @devices);
},
# managed by hotplug:
checked_on_boot => 0,
@@ -201,7 +330,7 @@ our @tree =
configurator => "",
detector => sub { detect_devices::getCPUs() },
# maybe should we install schedutils?
- checked_on_boot => 0,
+ checked_on_boot => 1,
},
{
@@ -209,7 +338,7 @@ our @tree =
string => N("ISDN adapters"),
icon => "modem.png",
configurator => "$sbindir/drakconnect",
- detector => sub { require network::isdn; my $isdn = network::isdn::detect_backend($modules_conf); if_(@$isdn, f(@$isdn)) },
+ detector => sub { require network::connection::isdn; my $isdn = network::connection::isdn::detect_backend($modules_conf); if_(@$isdn, f(@$isdn)) },
# we do not check these b/c this need user interaction (auth, ...):
checked_on_boot => 0,
},
@@ -220,7 +349,7 @@ our @tree =
string => N("USB sound devices"),
icon => "sound.png",
configurator => "",
- detector => sub { f(modules::probe_category('multimedia/usb_sound')) },
+ detector => sub { f(detect_devices::probe_category('multimedia/usb_sound')) },
checked_on_boot => 0,
},
@@ -229,7 +358,7 @@ our @tree =
string => N("Radio cards"),
icon => "tv.png",
configurator => "",
- detector => sub { f(modules::probe_category('multimedia/radio')) },
+ detector => sub { f(detect_devices::probe_category('multimedia/radio')) },
checked_on_boot => 0,
},
@@ -238,7 +367,7 @@ our @tree =
string => N("ATM network cards"),
icon => "hw_network.png",
configurator => "",
- detector => sub { f(modules::probe_category('network/atm')) },
+ detector => sub { f(detect_devices::probe_category('network/atm')) },
checked_on_boot => 0,
},
@@ -247,7 +376,7 @@ our @tree =
string => N("WAN network cards"),
icon => "hw_network.png",
configurator => "",
- detector => sub { f(modules::probe_category('network/wan')) },
+ detector => sub { f(detect_devices::probe_category('network/wan')) },
checked_on_boot => 0,
},
@@ -256,8 +385,8 @@ our @tree =
string => N("Bluetooth devices"),
icon => "hw_network.png",
configurator => "",
- detector => sub { f(modules::probe_category('bus/bluetooth')) },
- checked_on_boot => 0,
+ detector => sub { f(detect_devices::probe_category('bus/bluetooth')), f(grep { $_->{description} =~ /Bluetooth Dongle/ } @devices) },
+ checked_on_boot => 1,
},
{
@@ -271,7 +400,8 @@ our @tree =
f(grep {
$_->{media_type} && $_->{media_type} =~ /^NETWORK/
|| $_->{type} && $_->{type} eq 'network'
- || member($_->{driver}, @net_modules);
+ || member($_->{driver}, @net_modules)
+ || $_->{description} =~ /WLAN/;
} @devices);
},
checked_on_boot => 1,
@@ -282,7 +412,7 @@ our @tree =
string => N("Modem"),
icon => "modem.png",
configurator => "$sbindir/drakconnect",
- detector => sub { f(detect_devices::getModem($modules_conf)) },
+ detector => sub { f(detect_devices::getModem($modules_conf)), f(grep { $_->{description} =~ /SoftModem/ } @devices) },
# we do not check these b/c this need user interaction (auth, ...):
checked_on_boot => 0,
},
@@ -292,11 +422,9 @@ our @tree =
string => N("ADSL adapters"),
icon => "modem.png",
configurator => "$sbindir/drakconnect",
- detector => sub {
- require network::adsl;
- my $a = network::adsl::adsl_detect();
- $a ? f(map { @$_ } grep { defined($_) } values %$a) : ();
- },
+ detector => sub { f(detect_devices::get_xdsl_usb_devices()),
+ f(grep { $_->{description} =~ /Cohiba 3887 rev0/ } @devices);
+ },
# we do not check these b/c this need user interaction (auth, ...):
checked_on_boot => 0,
},
@@ -304,27 +432,18 @@ our @tree =
{
class => "MEMORY",
string => N("Memory"),
- icon => "memory.png",
+ icon => "hw-memory.png",
configurator => "",
- detector => sub { grep { member($_->{name}, 'Cache', 'Memory Module') } detect_devices::dmidecode() },
+ detector => sub { grep { member($_->{name}, 'Cache', 'Memory Module') || $_->{name} eq 'Memory Device' && $_->{Size} ne 'No Module Installed' } detect_devices::dmidecode() },
checked_on_boot => 0,
},
{
- class => "AGP",
- string => N("AGP controllers"),
- icon => "memory.png",
- configurator => "",
- detector => sub { f(modules::probe_category('various/agpgart')) },
- checked_on_boot => 1,
- },
-
- {
class => "PRINTER",
string => N("Printer"),
icon => "hw_printer.png",
configurator => "$sbindir/printerdrake",
- detector => sub { require printer::detect; printer::detect::local_detect() },
+ detector => sub {},
# we do not check these b/c this need user interaction (auth, ...):
checked_on_boot => 0,
},
@@ -338,7 +457,7 @@ our @tree =
N("Game port controllers"),
icon => "joystick.png",
configurator => "",
- detector => sub { f(modules::probe_category('multimedia/gameport')) },
+ detector => sub { f(detect_devices::probe_category('multimedia/gameport')) },
checked_on_boot => 0,
},
@@ -347,110 +466,21 @@ our @tree =
string => N("Joystick"),
icon => "joystick.png",
configurator => "",
- detector => sub { f(modules::probe_category('input/joystick')), f(grep { $_->{description} =~ /Joystick/ } @devices) },
- checked_on_boot => 0,
- },
-
-
- {
- class => "SATA_STORAGE",
- string => N("SATA controllers"),
- icon => "ide_hd.png",
- configurator => "",
- detector => sub { f(modules::probe_category('disk/sata')) },
- checked_on_boot => 1,
- },
-
- {
- class => "RAID_STORAGE",
- string => N("RAID controllers"),
- icon => "ide_hd.png",
- configurator => "",
- detector => sub { f(modules::probe_category('disk/hardware_raid')) },
- checked_on_boot => 1,
- },
-
- {
- class => "ATA_STORAGE",
- string => N("(E)IDE/ATA controllers"),
- icon => "ide_hd.png",
- configurator => "",
- detector => sub { f(grep { $_->{media_type} =~ /STORAGE_(IDE|OTHER)/ } @devices) },
- checked_on_boot => 1,
- },
-
- {
- class => "FIREWIRE_CONTROLLER",
- string => N("Firewire controllers"),
- icon => "usb.png",
- configurator => "",
- detector => sub { f(grep { $_->{driver} =~ /ohci1394/ } @devices) },
- checked_on_boot => 1,
- },
-
- {
- class => "PCMCIA_CONTROLLER",
- string => N("PCMCIA controllers"),
- icon => "scsi.png",
- configurator => "",
- detector => sub { f(detect_devices::pcmcia_controller_probe()) },
- checked_on_boot => 1,
- },
-
- {
- class => "SCSI_CONTROLLER",
- string => N("SCSI controllers"),
- icon => "scsi.png",
- configurator => "",
- detector => sub { f(grep { $_->{media_type} =~ /STORAGE_SCSI/ } @devices) },
- checked_on_boot => 1,
- },
-
- {
- class => "USB_CONTROLLER",
- string => N("USB controllers"),
- icon => "usb.png",
- configurator => "",
- detector => sub { f(grep { $_->{media_type} eq 'SERIAL_USB' } @devices) },
- checked_on_boot => 1,
- },
-
- {
- class => "USB_HUB",
- string => N("USB ports"),
- icon => "usb.png",
- configurator => "",
- detector => sub { f(grep { $_->{media_type} =~ /Hub/ } @devices) },
+ detector => sub { f(detect_devices::probe_category('input/joystick')), f(grep { $_->{description} =~ /Joystick/i } @devices) },
checked_on_boot => 0,
},
- {
- class => "SMB_CONTROLLER",
- string => N("SMBus controllers"),
- icon => "usb.png",
- configurator => "",
- detector => sub { f(grep { $_->{media_type} =~ /SERIAL_SMBUS/ } @devices) },
- checked_on_boot => 0,
- },
-
- {
- class => "BRIDGE",
- string => N("Bridges and system controllers"),
- icon => "memory.png",
- configurator => "",
- detector => sub { f(grep { $_->{media_type} =~ /BRIDGE|MEMORY_RAM|SYSTEM_OTHER/ } @devices) },
- checked_on_boot => 0,
- },
{
class => "KEYBOARD",
string => N("Keyboard"),
- icon => "usb.png",
+ icon => "hw-keyboard.png",
configurator => "$sbindir/keyboarddrake",
detector => sub {
- f(grep { $_->{description} =~ /Keyboard/i } @devices),
- # USB devices are filtered out since we already catch them through probeall():
- grep { $_->{bus} ne 'usb' && $_->{driver} eq 'kbd' && $_->{description} !~ /PC Speaker/ } detect_devices::getInputDevices();
+ f(grep { $_->{description} =~ /Keyboard/i || $_->{media_type} =~ /Keyboard/i ||
+ # USB devices are filtered out since we already catch them through probeall():
+ $_->{bus} ne 'usb' && $_->{driver} =~ /^event|kbd|^usbhid/ && $_->{description} !~ /PC Speaker/;
+ } @devices);
},
checked_on_boot => 0,
},
@@ -459,7 +489,7 @@ our @tree =
class => "MISC_INPUT",
string => N("Tablet and touchscreen"),
icon => "hw_mouse.png",
- detector => sub { f(modules::probe_category('input/tablet'), modules::probe_category('input/touchscreen')) },
+ detector => sub { f(detect_devices::probe_category('input/tablet'), detect_devices::probe_category('input/touchscreen')) },
configurator => "$sbindir/mousedrake",
checked_on_boot => 0,
},
@@ -470,15 +500,24 @@ our @tree =
icon => "hw_mouse.png",
configurator => "$sbindir/mousedrake",
detector => sub {
- f(grep { $_->{driver} =~ /^Mouse:|^Tablet:/ || $_->{media_type} =~ /class\|Mouse/ } @devices),
- # USB devices are filtered out since we already catch them through probeall():
- grep { $_->{bus} ne 'usb' && $_->{driver} =~ /mouse/ } detect_devices::getInputDevices();
+ f(grep { $_->{driver} =~ /^Mouse:|^Tablet:|^mouse/ || $_->{media_type} =~ /class\|Mouse/ ||
+ # USB devices are filtered out since we already catch them through probeall():
+ $_->{bus} ne 'usb' && $_->{Handlers}{mouse};
+ } @devices);
},
checked_on_boot => 1,
automatic => 1,
},
{
+ class => "BIOMETRIC",
+ string => N("Biometry"),
+ icon => "ups.png",
+ detector => sub { f(grep { $_->{description} =~ /fingerprint|biometric/i } @devices) },
+ checked_on_boot => 0,
+ },
+
+ {
class => "UPS",
string => N("UPS"),
icon => "ups.png",
@@ -493,7 +532,8 @@ our @tree =
icon => "scanner.png",
configurator => "$sbindir/scannerdrake",
detector => sub {
- require scanner; f(scanner::detect()) },
+ require scanner; f(map { $_->{val}{drakx_device} } f(scanner::detect()));
+ },
checked_on_boot => 0,
},
@@ -518,7 +558,9 @@ sub pciusb_id {
pci_device => 'usb_pci_device',
vendor => 'usb_vendor',
);
- join(':', map { $dev->{$alt{$_}} || $dev->{$_} } qw(bus pci_bus pci_device vendor id subvendor subid description));
+ my @fields = ('bus', if_($dev->{bus} =~ /pci/, qw(pci_bus pci_device)), qw(vendor id subvendor subid),
+ if_($dev->{bus} !~ /usb/i, 'description'));
+ join(':', map { uc($dev->{$alt{$_}} || $dev->{$_}) } @fields);
}
@@ -530,8 +572,7 @@ sub custom_id {
N("cpu # ") . $device->{processor} . ": " . $device->{'model name'} :
$device->{"Socket Designation"} ?
"$device->{name} (" . $device->{"Socket Designation"} . ")" :
- $device->{name} ? $device->{name} :
- (defined($device->{description}) ? $device->{description} : $str));
+ $device->{name} || $device->{description} || $device->{Vendor} || $str);
}
1;