]> mj.ucw.cz Git - pciids.git/blob - PciIds/Address/Toplevel.pm
New item -> notification
[pciids.git] / PciIds / Address / Toplevel.pm
1 package PciIds::Address::Toplevel;
2 use strict;
3 use warnings;
4 use base 'PciIds::Address::Base';
5
6 sub new( $ ) {
7         my( $value ) = @_;
8         if( $value =~ /^P[CD]\/?/ ) {
9                 return bless PciIds::Address::Base::new( $value );
10         } else {
11                 return undef;
12         }
13 }
14
15 sub pretty( $ ) {
16         my $self = shift;
17         if( $self->{'value'} =~ /^PC/ ) {
18                 return 'PCI Devices';
19         } else {
20                 return 'PCI Device Classes';
21         }
22 }
23
24 sub fullPretty( $ ) {
25         return pretty( shift );
26 }
27
28 sub restrictRex( $$ ) {
29         my( $self, $restrict ) = @_;
30         return PciIds::Address::new( $self->get().'/0000' )->restrictRex( $restrict );#Nasty trick, get the right address of any subnode and try it there
31 }
32
33 sub leaf( $ ) {
34         return 0;
35 }
36
37 sub append( $$ ) {
38         my( $self, $suffix ) = @_;
39         $suffix = lc $suffix;
40         if( $self->{'value'} =~ /^PC/ ) {#PCI
41                 return ( undef, "Invalid ID syntax" ) unless ( $suffix =~ /^[0-9a-f]{4,4}$/ );
42         } else {#PCI Device Class
43                 return ( undef, "Invalid ID syntax" ) unless ( $suffix =~ /^[0-9a-f]{2,2}$/ );
44         }
45         return ( PciIds::Address::new( $self->{'value'} . ( ( $self->{'value'} =~ /\/$/ ) ? '' : '/' ) . $suffix ), undef );
46 }
47
48 sub canDiscuss( $ ) { return 0; }
49
50 sub defaultRestrict( $ ) {
51         my( $self ) = @_;
52         if( $self->get() =~ /^PC/ ) {
53                 return "0";
54         } else {
55                 return "";
56         }
57 }
58
59 sub defaultRestrictList( $ ) {
60         my( $self ) = @_;
61         if( $self->get() =~ /^PC/ ) {
62                 my @result;
63                 for(my $i = '0'; $i < '10'; ++ $i ) {
64                         push @result, $i;
65                 }
66                 push @result, ( 'a', 'b', 'c', 'd', 'e', 'f' );
67                 my @final;
68                 push @final, [ $_, $_ ] foreach( @result );
69                 push @final, [ "", "all" ];
70                 return \@final;
71         } else {
72                 return [];
73         }
74 }
75
76 sub parent( $ ) {
77         return undef;
78 }
79
80 sub helpName( $ ) {
81         my( $self ) = @_;
82         if( $self->{'value'} =~ /^PC/ ) {
83                 return 'pci';
84         } else {
85                 return 'pci_class';
86         }
87 }
88
89 sub subName( $ ) {
90         my( $self ) = @_;
91         if( $self->get() =~ /^PC/ ) {
92                 return 'Vendors';
93         } else {
94                 return 'Device classes';
95         }
96 }
97
98 sub subIdSize( $ ) {
99         my( $self ) = @_;
100         if( $self->get() =~ /^PC/ ) {
101                 return 4;
102         } else {
103                 return 2;
104         }
105 }
106
107 1;