diff --git a/PVE/API2/Hardware.pm b/PVE/API2/Hardware.pm index d2b8c45a..f59bfbe0 100644 --- a/PVE/API2/Hardware.pm +++ b/PVE/API2/Hardware.pm @@ -7,6 +7,7 @@ use PVE::JSONSchema qw(get_standard_option); use PVE::RESTHandler; use PVE::API2::Hardware::PCI; +use PVE::API2::Hardware::USB; use base qw(PVE::RESTHandler); @@ -15,6 +16,12 @@ __PACKAGE__->register_method ({ path => 'pci', }); +__PACKAGE__->register_method ({ + subclass => "PVE::API2::Hardware::USB", + path => 'usb', +}); + + __PACKAGE__->register_method ({ name => 'index', path => '', @@ -42,7 +49,7 @@ __PACKAGE__->register_method ({ my $res = [ { type => 'pci' }, - # TODO: move usb scan here (6.0 api change) + { type => 'usb' }, ]; return $res; diff --git a/PVE/API2/Hardware/Makefile b/PVE/API2/Hardware/Makefile index 2dc824b9..d27d2201 100644 --- a/PVE/API2/Hardware/Makefile +++ b/PVE/API2/Hardware/Makefile @@ -1,7 +1,8 @@ include ../../../defines.mk PERLSOURCE= \ - PCI.pm + PCI.pm \ + USB.pm \ all: diff --git a/PVE/API2/Hardware/USB.pm b/PVE/API2/Hardware/USB.pm new file mode 100644 index 00000000..d7cb6607 --- /dev/null +++ b/PVE/API2/Hardware/USB.pm @@ -0,0 +1,53 @@ +package PVE::API2::Hardware::USB; + +use strict; +use warnings; + +use PVE::JSONSchema qw(get_standard_option); + +use PVE::SysFSTools; + +use base qw(PVE::RESTHandler); + +__PACKAGE__->register_method({ + name => 'usbscan', + path => '', + method => 'GET', + description => "List local USB devices.", + protected => 1, + proxyto => "node", + permissions => { + check => ['perm', '/', ['Sys.Modify']], + }, + parameters => { + additionalProperties => 0, + properties => { + node => get_standard_option('pve-node'), + }, + }, + returns => { + type => 'array', + items => { + type => "object", + properties => { + busnum => { type => 'integer'}, + class => { type => 'integer'}, + devnum => { type => 'integer'}, + level => { type => 'integer'}, + manufacturer => { type => 'string', optional => 1 }, + port => { type => 'integer'}, + prodid => { type => 'string'}, + product => { type => 'string', optional => 1 }, + serial => { type => 'string', optional => 1 }, + speed => { type => 'string'}, + usbpath => { type => 'string', optional => 1}, + vendid => { type => 'string'}, + }, + }, + }, + code => sub { + my ($param) = @_; + + return PVE::SysFSTools::scan_usb(); + } +});