2012-10-22 20:23:08 +04:00
#!/usr/bin/perl
use strict ;
use warnings ;
2012-11-09 17:29:10 +04:00
sub usb_vendor {
2012-11-09 17:53:55 +04:00
my $ vendor ;
open ( IN , "<" , "usb.ids" ) ;
open ( OUT , ">" , "20-usb-vendor-product.hwdb" ) ;
print ( OUT "# This file is part of systemd.\n" .
"#\n" .
"# Data imported and updated from: http://www.linux-usb.org/usb.ids\n" ) ;
while ( my $ line = <IN> ) {
$ line =~ s/\s+$// ;
$ line =~ m/^([0-9a-f]{4})\s*(.*)$/ ;
if ( defined $ 1 ) {
$ vendor = uc $ 1 ;
my $ text = $ 2 ;
print ( OUT "\n" ) ;
print ( OUT "usb:v" . $ vendor . "*\n" ) ;
print ( OUT " ID_VENDOR_FROM_DATABASE=" . $ text . "\n" ) ;
next ;
}
$ line =~ m/^\t([0-9a-f]{4})\s*(.*)$/ ;
if ( defined $ 1 ) {
my $ product = uc $ 1 ;
my $ text = $ 2 ;
print ( OUT "\n" ) ;
print ( OUT "usb:v" . $ vendor . "p" . $ product . "*\n" ) ;
print ( OUT " ID_PRODUCT_FROM_DATABASE=" . $ text . "\n" ) ;
}
}
close ( INP ) ;
close ( OUTP ) ;
}
sub usb_classes {
my $ class ;
my $ subclass ;
my $ protocol ;
open ( IN , "<" , "usb.ids" ) ;
open ( OUT , ">" , "20-usb-classes.hwdb" ) ;
print ( OUT "# This file is part of systemd.\n" .
"#\n" .
"# Data imported and updated from: http://www.linux-usb.org/usb.ids\n" ) ;
while ( my $ line = <IN> ) {
$ line =~ s/\s+$// ;
$ line =~ m/^C\ ([0-9a-f]{2})\s*(.*)$/ ;
if ( defined $ 1 ) {
$ class = uc $ 1 ;
2012-11-09 18:23:41 +04:00
if ( $ class =~ m/^00$/ ) {
2012-11-09 17:53:55 +04:00
next ;
}
2012-11-09 18:23:41 +04:00
my $ text = $ 2 ;
2012-11-09 17:53:55 +04:00
print ( OUT "\n" ) ;
print ( OUT "usb:v*p*d*dc" . $ class . "*\n" ) ;
print ( OUT " ID_USB_CLASS_FROM_DATABASE=" . $ text . "\n" ) ;
next ;
}
if ( not defined $ class ) {
next ;
} elsif ( $ line =~ m/^$/ ) {
last ;
}
$ line =~ m/^\t([0-9a-f]{2})\s*(.*)$/ ;
if ( defined $ 1 ) {
$ subclass = uc $ 1 ;
2012-11-09 18:23:41 +04:00
if ( $ subclass =~ m/^00$/ ) {
next ;
}
2012-11-09 17:53:55 +04:00
my $ text = $ 2 ;
if ( $ text =~ m/^(\?|None|Unused)$/ ) {
next ;
}
print ( OUT "\n" ) ;
print ( OUT "usb:v*p*d*dc" . $ class . "dsc" . $ subclass . "*\n" ) ;
print ( OUT " ID_USB_SUBCLASS_FROM_DATABASE=" . $ text . "\n" ) ;
next ;
}
$ line =~ m/^\t\t([0-9a-f]{2})\s*(.*)$/ ;
if ( defined $ 1 ) {
$ protocol = uc $ 1 ;
my $ text = $ 2 ;
if ( $ text =~ m/^(\?|None|Unused)$/ ) {
next ;
}
print ( OUT "\n" ) ;
print ( OUT "usb:v*p*d*dc" . $ class . "dsc" . $ subclass . "dp" . $ protocol . "*\n" ) ;
print ( OUT " ID_USB_PROTOCOL_FROM_DATABASE=" . $ text . "\n" ) ;
}
}
close ( INP ) ;
close ( OUTP ) ;
2012-11-09 17:29:10 +04:00
}
sub pci_vendor {
2012-11-09 17:53:55 +04:00
my $ vendor ;
my $ device ;
open ( IN , "<" , "usb.ids" ) ;
open ( IN , "<" , "pci.ids" ) ;
open ( OUT , ">" , "20-pci-vendor-product.hwdb" ) ;
print ( OUT "# This file is part of systemd.\n" .
"#\n" .
2012-11-09 18:35:11 +04:00
"# Data imported and updated from: http://pci-ids.ucw.cz/v2.2/pci.ids\n" ) ;
2012-11-09 17:53:55 +04:00
while ( my $ line = <IN> ) {
$ line =~ s/\s+$// ;
$ line =~ m/^([0-9a-f]{4})\s*(.*)$/ ;
if ( defined $ 1 ) {
$ vendor = uc $ 1 ;
my $ text = $ 2 ;
print ( OUT "\n" ) ;
print ( OUT "pci:v0000" . $ vendor . "*\n" ) ;
print ( OUT " ID_VENDOR_FROM_DATABASE=" . $ text . "\n" ) ;
next ;
}
$ line =~ m/^\t([0-9a-f]{4})\s*(.*)$/ ;
if ( defined $ 1 ) {
$ device = uc $ 1 ;
my $ text = $ 2 ;
print ( OUT "\n" ) ;
print ( OUT "pci:v0000" . $ vendor . "d0000" . $ device . "*\n" ) ;
print ( OUT " ID_PRODUCT_FROM_DATABASE=" . $ text . "\n" ) ;
next ;
}
$ line =~ m/^\t\t([0-9a-f]{4})\s*([0-9a-f]{4})\s*(.*)$/ ;
if ( defined $ 1 ) {
my $ sub_vendor = uc $ 1 ;
my $ sub_device = uc $ 2 ;
my $ text = $ 3 ;
print ( OUT "\n" ) ;
print ( OUT "pci:v0000" . $ vendor . "d0000" . $ device . "sv0000" . $ sub_vendor . "sd0000" . $ sub_device . "*\n" ) ;
print ( OUT " ID_PRODUCT_FROM_DATABASE=" . $ text . "\n" ) ;
}
}
close ( INP ) ;
close ( OUTP ) ;
2012-10-22 20:23:08 +04:00
}
2012-11-09 17:29:10 +04:00
sub pci_classes {
2012-11-09 17:53:55 +04:00
my $ class ;
my $ subclass ;
my $ interface ;
open ( IN , "<" , "pci.ids" ) ;
open ( OUT , ">" , "20-pci-classes.hwdb" ) ;
print ( OUT "# This file is part of systemd.\n" .
"#\n" .
2012-11-09 18:35:11 +04:00
"# Data imported and updated from: http://pci-ids.ucw.cz/v2.2/pci.ids\n" ) ;
2012-11-09 17:53:55 +04:00
while ( my $ line = <IN> ) {
$ line =~ s/\s+$// ;
$ line =~ m/^C\ ([0-9a-f]{2})\s*(.*)$/ ;
if ( defined $ 1 ) {
$ class = uc $ 1 ;
my $ text = $ 2 ;
print ( OUT "\n" ) ;
print ( OUT "pci:v*d*sv*sd*bc" . $ class . "*\n" ) ;
print ( OUT " ID_PCI_CLASS_FROM_DATABASE=" . $ text . "\n" ) ;
next ;
}
if ( not defined $ class ) {
next ;
} elsif ( $ line =~ m/^$/ ) {
last ;
}
$ line =~ m/^\t([0-9a-f]{2})\s*(.*)$/ ;
if ( defined $ 1 ) {
$ subclass = uc $ 1 ;
my $ text = $ 2 ;
print ( OUT "\n" ) ;
print ( OUT "pci:v*d*sv*sd*bc" . $ class . "sc" . $ subclass . "*\n" ) ;
print ( OUT " ID_PCI_SUBCLASS_FROM_DATABASE=" . $ text . "\n" ) ;
next ;
}
$ line =~ m/^\t\t([0-9a-f]{2})\s*(.*)$/ ;
if ( defined $ 1 ) {
$ interface = uc $ 1 ;
my $ text = $ 2 ;
print ( OUT "\n" ) ;
print ( OUT "pci:v*d*sv*sd*bc" . $ class . "sc" . $ subclass . "i" . $ interface . "*\n" ) ;
print ( OUT " ID_PCI_INTERFACE_FROM_DATABASE=" . $ text . "\n" ) ;
}
}
close ( INP ) ;
close ( OUTP ) ;
2012-10-22 20:23:08 +04:00
}
2012-11-09 17:29:10 +04:00
sub oui {
2012-11-09 17:53:55 +04:00
open ( IN , "<" , "oui.txt" ) ;
open ( OUT , ">" , "20-OUI.hwdb" ) ;
print ( OUT "# This file is part of systemd.\n" .
"#\n" .
"# Data imported and updated from: http://standards.ieee.org/develop/regauth/oui/oui.txt\n" ) ;
while ( my $ line = <IN> ) {
$ line =~ s/\s+$// ;
$ line =~ m/^([0-9A-F]{6})\s*\(base 16\)\s*(.*)$/ ;
if ( defined $ 1 ) {
my $ vendor = uc $ 1 ;
my $ text = $ 2 ;
print ( OUT "\n" ) ;
print ( OUT "OUI:" . $ vendor . "\n" ) ;
print ( OUT " ID_OUI_FROM_DATABASE=" . $ text . "\n" ) ;
}
}
close ( INP ) ;
close ( OUTP ) ;
2012-11-07 17:05:21 +04:00
}
2012-11-09 17:29:10 +04:00
usb_vendor ( ) ;
2012-11-09 17:53:55 +04:00
usb_classes ( ) ;
2012-11-09 17:29:10 +04:00
pci_vendor ( ) ;
pci_classes ( ) ;
2012-11-09 17:53:55 +04:00
2012-11-09 17:29:10 +04:00
oui ( ) ;