mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-06-19 00:17:51 +02:00
somewhat working lsusb parser. needs a lot more TLC
This commit is contained in:
@ -85,6 +85,7 @@ parsers = [
|
|||||||
'lsblk',
|
'lsblk',
|
||||||
'lsmod',
|
'lsmod',
|
||||||
'lsof',
|
'lsof',
|
||||||
|
'lsusb',
|
||||||
'mount',
|
'mount',
|
||||||
'netstat',
|
'netstat',
|
||||||
'ntpq',
|
'ntpq',
|
||||||
|
404
jc/parsers/lsusb.py
Normal file
404
jc/parsers/lsusb.py
Normal file
@ -0,0 +1,404 @@
|
|||||||
|
"""jc - JSON CLI output utility `lsusb` command output parser
|
||||||
|
|
||||||
|
<<Short lsusb description and caveats>>
|
||||||
|
|
||||||
|
Usage (cli):
|
||||||
|
|
||||||
|
$ lsusb -v | jc --lsusb
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
$ jc lsusb -v
|
||||||
|
|
||||||
|
Usage (module):
|
||||||
|
|
||||||
|
import jc.parsers.lsusb
|
||||||
|
result = jc.parsers.lsusb.parse(lsusb_command_output)
|
||||||
|
|
||||||
|
Schema:
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"lsusb": string,
|
||||||
|
"bar": boolean,
|
||||||
|
"baz": integer
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
$ lsusb | jc --lsusb -p
|
||||||
|
[]
|
||||||
|
|
||||||
|
$ lsusb | jc --lsusb -p -r
|
||||||
|
[]
|
||||||
|
"""
|
||||||
|
import jc.utils
|
||||||
|
from jc.parsers.universal import sparse_table_parse
|
||||||
|
|
||||||
|
|
||||||
|
class info():
|
||||||
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.0'
|
||||||
|
description = '`lsusb` command parser'
|
||||||
|
author = 'Kelly Brazil'
|
||||||
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
|
# details = 'enter any other details here'
|
||||||
|
|
||||||
|
# compatible options: linux, darwin, cygwin, win32, aix, freebsd
|
||||||
|
compatible = ['linux']
|
||||||
|
magic_commands = ['lsusb']
|
||||||
|
|
||||||
|
|
||||||
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
|
def _process(proc_data):
|
||||||
|
"""
|
||||||
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
proc_data: (List of Dictionaries) raw structured data to process
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
List of Dictionaries. Structured to conform to the schema.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# process the data here
|
||||||
|
# rebuild output for added semantic information
|
||||||
|
# use helper functions in jc.utils for int, float, bool conversions and timestamps
|
||||||
|
|
||||||
|
return proc_data
|
||||||
|
|
||||||
|
|
||||||
|
def _count_indent(line):
|
||||||
|
indent = 0
|
||||||
|
for char in line:
|
||||||
|
if char == ' ':
|
||||||
|
indent += 1
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
return indent
|
||||||
|
|
||||||
|
|
||||||
|
def _add_attributes(line):
|
||||||
|
indent = _count_indent(line)
|
||||||
|
# section header is formatted with the correct spacing to be used with jc.parsers.universal.sparse_table_parse()
|
||||||
|
# pad end of string to be at least len of 25
|
||||||
|
section_header = 'key val description'
|
||||||
|
|
||||||
|
line_obj = [section_header, line.strip() + (' ' * 25)]
|
||||||
|
line_obj = sparse_table_parse(line_obj)
|
||||||
|
line_obj[0].update({'indent': indent})
|
||||||
|
|
||||||
|
return line_obj[0]
|
||||||
|
|
||||||
|
|
||||||
|
def parse(data, raw=False, quiet=False):
|
||||||
|
"""
|
||||||
|
Main text parsing function
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
data: (string) text data to parse
|
||||||
|
raw: (boolean) output preprocessed JSON if True
|
||||||
|
quiet: (boolean) suppress warning messages if True
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
List of Dictionaries. Raw or processed structured data.
|
||||||
|
"""
|
||||||
|
if not quiet:
|
||||||
|
jc.utils.compatibility(__name__, info.compatible)
|
||||||
|
|
||||||
|
raw_output = []
|
||||||
|
output_line = {}
|
||||||
|
section = ''
|
||||||
|
device_descriptor_list = []
|
||||||
|
configuration_descriptor_list = []
|
||||||
|
interface_descriptor_list = []
|
||||||
|
cdc_header_list = []
|
||||||
|
cdc_call_management_list = []
|
||||||
|
cdc_acm_list = []
|
||||||
|
cdc_union_list = []
|
||||||
|
endpoint_descriptor_list = []
|
||||||
|
hid_device_descriptor_list = []
|
||||||
|
report_descriptors_list = []
|
||||||
|
hub_descriptor_list = []
|
||||||
|
hub_port_status_list = []
|
||||||
|
|
||||||
|
if jc.utils.has_data(data):
|
||||||
|
|
||||||
|
for line in data.splitlines():
|
||||||
|
# blank line: new object
|
||||||
|
if not line:
|
||||||
|
if endpoint_descriptor_list:
|
||||||
|
interface_descriptor_list.append({'endpoint_descriptor': endpoint_descriptor_list})
|
||||||
|
|
||||||
|
if report_descriptors_list:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if output_line:
|
||||||
|
raw_output.append(output_line)
|
||||||
|
|
||||||
|
output_line = {}
|
||||||
|
device_descriptor_list = []
|
||||||
|
configuration_descriptor_list = []
|
||||||
|
interface_descriptor_list = []
|
||||||
|
cdc_header_list = []
|
||||||
|
cdc_call_management_list = []
|
||||||
|
cdc_acm_list = []
|
||||||
|
cdc_union_list = []
|
||||||
|
endpoint_descriptor_list = []
|
||||||
|
hid_device_descriptor_list = []
|
||||||
|
report_descriptors_list = []
|
||||||
|
hub_descriptor_list = []
|
||||||
|
hub_port_status_list = []
|
||||||
|
section = ''
|
||||||
|
continue
|
||||||
|
|
||||||
|
# sections
|
||||||
|
if line.startswith('Bus '):
|
||||||
|
if output_line:
|
||||||
|
raw_output.append(output_line)
|
||||||
|
|
||||||
|
output_line = {}
|
||||||
|
device_descriptor_list = []
|
||||||
|
configuration_descriptor_list = []
|
||||||
|
interface_descriptor_list = []
|
||||||
|
cdc_header_list = []
|
||||||
|
cdc_call_management_list = []
|
||||||
|
cdc_acm_list = []
|
||||||
|
cdc_union_list = []
|
||||||
|
endpoint_descriptor_list = []
|
||||||
|
hid_device_descriptor_list = []
|
||||||
|
report_descriptors_list = []
|
||||||
|
hub_descriptor_list = []
|
||||||
|
hub_port_status_list = []
|
||||||
|
section = 'bus'
|
||||||
|
|
||||||
|
line_split = line.strip().split(maxsplit=6)
|
||||||
|
output_line.update(
|
||||||
|
{
|
||||||
|
'bus': line_split[1],
|
||||||
|
'device': line_split[3][:-1],
|
||||||
|
'id': line_split[5],
|
||||||
|
'description': (line_split[6:7] or [None])[0] # way to get a list item or None
|
||||||
|
}
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith('Device Descriptor:'):
|
||||||
|
section = 'device_descriptor'
|
||||||
|
device_descriptor_list = []
|
||||||
|
configuration_descriptor_list = []
|
||||||
|
interface_descriptor_list = []
|
||||||
|
cdc_header_list = []
|
||||||
|
cdc_call_management_list = []
|
||||||
|
cdc_acm_list = []
|
||||||
|
cdc_union_list = []
|
||||||
|
endpoint_descriptor_list = []
|
||||||
|
hid_device_descriptor_list = []
|
||||||
|
report_descriptors_list = []
|
||||||
|
hub_descriptor_list = []
|
||||||
|
hub_port_status_list = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith(' Configuration Descriptor:'):
|
||||||
|
section = 'configuration_descriptor'
|
||||||
|
configuration_descriptor_list = []
|
||||||
|
interface_descriptor_list = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith(' Interface Descriptor:'):
|
||||||
|
section = 'interface_descriptor'
|
||||||
|
|
||||||
|
if cdc_header_list:
|
||||||
|
interface_descriptor_list.append({'cdc_header': cdc_header_list})
|
||||||
|
|
||||||
|
if cdc_call_management_list:
|
||||||
|
interface_descriptor_list.append({'cdc_call_management': cdc_call_management_list})
|
||||||
|
|
||||||
|
if cdc_acm_list:
|
||||||
|
interface_descriptor_list.append({'cdc_acm': cdc_acm_list})
|
||||||
|
|
||||||
|
if cdc_union_list:
|
||||||
|
interface_descriptor_list.append({'cdc_union': cdc_union_list})
|
||||||
|
|
||||||
|
if endpoint_descriptor_list:
|
||||||
|
interface_descriptor_list.append({'endpoint_descriptor': endpoint_descriptor_list})
|
||||||
|
|
||||||
|
if interface_descriptor_list:
|
||||||
|
if 'interface_descriptor' not in output_line['device_descriptor']['configuration_descriptor']:
|
||||||
|
output_line['device_descriptor']['configuration_descriptor']['interface_descriptor'] = []
|
||||||
|
output_line['device_descriptor']['configuration_descriptor']['interface_descriptor'].append(interface_descriptor_list)
|
||||||
|
|
||||||
|
cdc_header_list = []
|
||||||
|
cdc_call_management_list = []
|
||||||
|
cdc_acm_list = []
|
||||||
|
cdc_union_list = []
|
||||||
|
endpoint_descriptor_list = []
|
||||||
|
interface_descriptor_list = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith(' CDC Header:'):
|
||||||
|
section = 'cdc_header'
|
||||||
|
cdc_header_list = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith(' CDC Call Management:'):
|
||||||
|
section = 'cdc_call_management'
|
||||||
|
cdc_call_management_list = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith(' CDC ACM:'):
|
||||||
|
section = 'cdc_acm'
|
||||||
|
cdc_acm_list = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith(' CDC Union:'):
|
||||||
|
section = 'cdc_union'
|
||||||
|
cdc_union_list = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith(' Endpoint Descriptor:'):
|
||||||
|
section = 'endpoint_descriptor'
|
||||||
|
if endpoint_descriptor_list:
|
||||||
|
interface_descriptor_list.append({'endpoint_descriptor': endpoint_descriptor_list})
|
||||||
|
endpoint_descriptor_list = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith(' HID Device Descriptor:'):
|
||||||
|
section = 'hid_device_descriptor'
|
||||||
|
hid_device_descriptor_list = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith(' Report Descriptors:'):
|
||||||
|
section = 'report_descriptors'
|
||||||
|
report_descriptors_list = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith('Hub Descriptor:'):
|
||||||
|
section = 'hub_descriptor'
|
||||||
|
hub_descriptor_list = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith(' Hub Port Status:'):
|
||||||
|
section = 'hub_port_status'
|
||||||
|
hub_port_status_list = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if line.startswith('Device Status:'):
|
||||||
|
section = 'device_status'
|
||||||
|
line_split = line.strip().split(':', maxsplit=1)
|
||||||
|
output_line.update(
|
||||||
|
{
|
||||||
|
'device_status':
|
||||||
|
{
|
||||||
|
'value': line_split[1].strip()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# create section lists and schema
|
||||||
|
if section == 'device_descriptor' and line.startswith(' '):
|
||||||
|
device_descriptor_list.append(_add_attributes(line))
|
||||||
|
if 'device_descriptor' not in output_line:
|
||||||
|
output_line['device_descriptor'] = {}
|
||||||
|
output_line['device_descriptor']['attributes'] = device_descriptor_list
|
||||||
|
continue
|
||||||
|
|
||||||
|
if section == 'configuration_descriptor' and line.startswith(' '):
|
||||||
|
configuration_descriptor_list.append(_add_attributes(line))
|
||||||
|
if 'configuration_descriptor' not in output_line['device_descriptor']:
|
||||||
|
output_line['device_descriptor']['configuration_descriptor'] = {}
|
||||||
|
output_line['device_descriptor']['configuration_descriptor']['attributes'] = configuration_descriptor_list
|
||||||
|
continue
|
||||||
|
|
||||||
|
if section == 'interface_descriptor' and line.startswith(' '):
|
||||||
|
interface_descriptor_list.append(_add_attributes(line))
|
||||||
|
|
||||||
|
if cdc_header_list:
|
||||||
|
interface_descriptor_list.append({'cdc_header': cdc_header_list})
|
||||||
|
|
||||||
|
if cdc_call_management_list:
|
||||||
|
interface_descriptor_list.append({'cdc_call_management': cdc_call_management_list})
|
||||||
|
|
||||||
|
if cdc_acm_list:
|
||||||
|
interface_descriptor_list.append({'cdc_acm': cdc_acm_list})
|
||||||
|
|
||||||
|
if cdc_union_list:
|
||||||
|
interface_descriptor_list.append({'cdc_union': cdc_union_list})
|
||||||
|
|
||||||
|
if endpoint_descriptor_list:
|
||||||
|
interface_descriptor_list.append({'endpoint_descriptor': endpoint_descriptor_list})
|
||||||
|
|
||||||
|
if interface_descriptor_list:
|
||||||
|
if 'interface_descriptor_list' not in output_line['device_descriptor']['configuration_descriptor']:
|
||||||
|
output_line['device_descriptor']['configuration_descriptor']['interface_descriptor'] = []
|
||||||
|
output_line['device_descriptor']['configuration_descriptor']['interface_descriptor'].append(interface_descriptor_list)
|
||||||
|
|
||||||
|
cdc_header_list = []
|
||||||
|
cdc_call_management_list = []
|
||||||
|
cdc_acm_list = []
|
||||||
|
cdc_union_list = []
|
||||||
|
endpoint_descriptor_list = []
|
||||||
|
|
||||||
|
continue
|
||||||
|
|
||||||
|
if section == 'cdc_header' and line.startswith(' '):
|
||||||
|
cdc_header_list.append(_add_attributes(line))
|
||||||
|
continue
|
||||||
|
|
||||||
|
if section == 'cdc_call_management' and line.startswith(' '):
|
||||||
|
cdc_call_management_list.append(_add_attributes(line))
|
||||||
|
continue
|
||||||
|
|
||||||
|
if section == 'cdc_acm' and line.startswith(' '):
|
||||||
|
cdc_acm_list.append(_add_attributes(line))
|
||||||
|
continue
|
||||||
|
|
||||||
|
if section == 'cdc_union' and line.startswith(' '):
|
||||||
|
cdc_union_list.append(_add_attributes(line))
|
||||||
|
continue
|
||||||
|
|
||||||
|
if section == 'endpoint_descriptor' and line.startswith(' '):
|
||||||
|
if hid_device_descriptor_list:
|
||||||
|
endpoint_descriptor_list.append({'hid_device_descriptor': hid_device_descriptor_list})
|
||||||
|
|
||||||
|
hid_device_descriptor_list = []
|
||||||
|
endpoint_descriptor_list.append(_add_attributes(line))
|
||||||
|
continue
|
||||||
|
|
||||||
|
if section == 'hid_device_descriptor' and line.startswith(' '):
|
||||||
|
if report_descriptors_list:
|
||||||
|
hid_device_descriptor_list.append({'report_descriptors': report_descriptors_list})
|
||||||
|
|
||||||
|
report_descriptors_list = []
|
||||||
|
hid_device_descriptor_list.append(_add_attributes(line))
|
||||||
|
continue
|
||||||
|
|
||||||
|
if section == 'report_descriptors' and line.startswith(' '):
|
||||||
|
report_descriptors_list.append(_add_attributes(line))
|
||||||
|
continue
|
||||||
|
|
||||||
|
if section == 'hub_descriptor' and line.startswith(' '):
|
||||||
|
hub_descriptor_list.append(_add_attributes(line))
|
||||||
|
if 'hub_descriptor' not in output_line:
|
||||||
|
output_line['hub_descriptor'] = {}
|
||||||
|
output_line['hub_descriptor']['attributes'] = hub_descriptor_list
|
||||||
|
continue
|
||||||
|
|
||||||
|
if section == 'hub_port_status' and line.startswith(' '):
|
||||||
|
hub_port_status_list.append(_add_attributes(line))
|
||||||
|
output_line['hub_descriptor']['hub_port_status'] = hub_port_status_list
|
||||||
|
continue
|
||||||
|
|
||||||
|
if output_line:
|
||||||
|
raw_output.append(output_line)
|
||||||
|
|
||||||
|
return raw_output if raw else _process(raw_output)
|
509
tests/fixtures/centos-7.7/lsusb-v.out
vendored
Normal file
509
tests/fixtures/centos-7.7/lsusb-v.out
vendored
Normal file
@ -0,0 +1,509 @@
|
|||||||
|
|
||||||
|
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||||
|
Device Descriptor:
|
||||||
|
bLength 18
|
||||||
|
bDescriptorType 1
|
||||||
|
bcdUSB 2.00
|
||||||
|
bDeviceClass 9 Hub
|
||||||
|
bDeviceSubClass 0 Unused
|
||||||
|
bDeviceProtocol 0 Full speed (or root) hub
|
||||||
|
bMaxPacketSize0 64
|
||||||
|
idVendor 0x1d6b Linux Foundation
|
||||||
|
idProduct 0x0002 2.0 root hub
|
||||||
|
bcdDevice 3.10
|
||||||
|
iManufacturer 3 Linux 3.10.0-1062.1.2.el7.x86_64 ehci_hcd
|
||||||
|
iProduct 2 EHCI Host Controller
|
||||||
|
iSerial 1 0000:02:02.0
|
||||||
|
bNumConfigurations 1
|
||||||
|
Configuration Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 2
|
||||||
|
wTotalLength 25
|
||||||
|
bNumInterfaces 1
|
||||||
|
bConfigurationValue 1
|
||||||
|
iConfiguration 0
|
||||||
|
bmAttributes 0xe0
|
||||||
|
Self Powered
|
||||||
|
Remote Wakeup
|
||||||
|
MaxPower 0mA
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 0
|
||||||
|
bAlternateSetting 0
|
||||||
|
bNumEndpoints 1
|
||||||
|
bInterfaceClass 9 Hub
|
||||||
|
bInterfaceSubClass 0 Unused
|
||||||
|
bInterfaceProtocol 0 Full speed (or root) hub
|
||||||
|
iInterface 0
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x81 EP 1 IN
|
||||||
|
bmAttributes 3
|
||||||
|
Transfer Type Interrupt
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0004 1x 4 bytes
|
||||||
|
bInterval 12
|
||||||
|
Hub Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 41
|
||||||
|
nNbrPorts 6
|
||||||
|
wHubCharacteristic 0x000a
|
||||||
|
No power switching (usb 1.0)
|
||||||
|
Per-port overcurrent protection
|
||||||
|
bPwrOn2PwrGood 10 * 2 milli seconds
|
||||||
|
bHubContrCurrent 0 milli Ampere
|
||||||
|
DeviceRemovable 0x00
|
||||||
|
PortPwrCtrlMask 0xff
|
||||||
|
Hub Port Status:
|
||||||
|
Port 1: 0000.0100 power
|
||||||
|
Port 2: 0000.0100 power
|
||||||
|
Port 3: 0000.0100 power
|
||||||
|
Port 4: 0000.0100 power
|
||||||
|
Port 5: 0000.0100 power
|
||||||
|
Port 6: 0000.0100 power
|
||||||
|
Device Status: 0x0001
|
||||||
|
Self Powered
|
||||||
|
|
||||||
|
Bus 002 Device 004: ID 0e0f:0008 VMware, Inc.
|
||||||
|
Device Descriptor:
|
||||||
|
bLength 18
|
||||||
|
bDescriptorType 1
|
||||||
|
bcdUSB 2.00
|
||||||
|
bDeviceClass 224 Wireless
|
||||||
|
bDeviceSubClass 1 Radio Frequency
|
||||||
|
bDeviceProtocol 1 Bluetooth
|
||||||
|
bMaxPacketSize0 64
|
||||||
|
idVendor 0x0e0f VMware, Inc.
|
||||||
|
idProduct 0x0008
|
||||||
|
bcdDevice 1.00
|
||||||
|
iManufacturer 1 VMware
|
||||||
|
iProduct 2 Virtual Bluetooth Adapter
|
||||||
|
iSerial 3 000650268328
|
||||||
|
bNumConfigurations 1
|
||||||
|
Configuration Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 2
|
||||||
|
wTotalLength 177
|
||||||
|
bNumInterfaces 2
|
||||||
|
bConfigurationValue 1
|
||||||
|
iConfiguration 0
|
||||||
|
bmAttributes 0xc0
|
||||||
|
Self Powered
|
||||||
|
MaxPower 0mA
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 0
|
||||||
|
bAlternateSetting 0
|
||||||
|
bNumEndpoints 3
|
||||||
|
bInterfaceClass 224 Wireless
|
||||||
|
bInterfaceSubClass 1 Radio Frequency
|
||||||
|
bInterfaceProtocol 1 Bluetooth
|
||||||
|
iInterface 0
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x81 EP 1 IN
|
||||||
|
bmAttributes 3
|
||||||
|
Transfer Type Interrupt
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0010 1x 16 bytes
|
||||||
|
bInterval 1
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x02 EP 2 OUT
|
||||||
|
bmAttributes 2
|
||||||
|
Transfer Type Bulk
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0040 1x 64 bytes
|
||||||
|
bInterval 0
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x82 EP 2 IN
|
||||||
|
bmAttributes 2
|
||||||
|
Transfer Type Bulk
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0040 1x 64 bytes
|
||||||
|
bInterval 0
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 1
|
||||||
|
bAlternateSetting 0
|
||||||
|
bNumEndpoints 2
|
||||||
|
bInterfaceClass 224 Wireless
|
||||||
|
bInterfaceSubClass 1 Radio Frequency
|
||||||
|
bInterfaceProtocol 1 Bluetooth
|
||||||
|
iInterface 0
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x03 EP 3 OUT
|
||||||
|
bmAttributes 1
|
||||||
|
Transfer Type Isochronous
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0000 1x 0 bytes
|
||||||
|
bInterval 1
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x83 EP 3 IN
|
||||||
|
bmAttributes 1
|
||||||
|
Transfer Type Isochronous
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0000 1x 0 bytes
|
||||||
|
bInterval 1
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 1
|
||||||
|
bAlternateSetting 1
|
||||||
|
bNumEndpoints 2
|
||||||
|
bInterfaceClass 224 Wireless
|
||||||
|
bInterfaceSubClass 1 Radio Frequency
|
||||||
|
bInterfaceProtocol 1 Bluetooth
|
||||||
|
iInterface 0
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x03 EP 3 OUT
|
||||||
|
bmAttributes 1
|
||||||
|
Transfer Type Isochronous
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0009 1x 9 bytes
|
||||||
|
bInterval 1
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x83 EP 3 IN
|
||||||
|
bmAttributes 1
|
||||||
|
Transfer Type Isochronous
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0009 1x 9 bytes
|
||||||
|
bInterval 1
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 1
|
||||||
|
bAlternateSetting 2
|
||||||
|
bNumEndpoints 2
|
||||||
|
bInterfaceClass 224 Wireless
|
||||||
|
bInterfaceSubClass 1 Radio Frequency
|
||||||
|
bInterfaceProtocol 1 Bluetooth
|
||||||
|
iInterface 0
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x03 EP 3 OUT
|
||||||
|
bmAttributes 1
|
||||||
|
Transfer Type Isochronous
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0011 1x 17 bytes
|
||||||
|
bInterval 1
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x83 EP 3 IN
|
||||||
|
bmAttributes 1
|
||||||
|
Transfer Type Isochronous
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0011 1x 17 bytes
|
||||||
|
bInterval 1
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 1
|
||||||
|
bAlternateSetting 3
|
||||||
|
bNumEndpoints 2
|
||||||
|
bInterfaceClass 224 Wireless
|
||||||
|
bInterfaceSubClass 1 Radio Frequency
|
||||||
|
bInterfaceProtocol 1 Bluetooth
|
||||||
|
iInterface 0
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x03 EP 3 OUT
|
||||||
|
bmAttributes 1
|
||||||
|
Transfer Type Isochronous
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0019 1x 25 bytes
|
||||||
|
bInterval 1
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x83 EP 3 IN
|
||||||
|
bmAttributes 1
|
||||||
|
Transfer Type Isochronous
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0019 1x 25 bytes
|
||||||
|
bInterval 1
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 1
|
||||||
|
bAlternateSetting 4
|
||||||
|
bNumEndpoints 2
|
||||||
|
bInterfaceClass 224 Wireless
|
||||||
|
bInterfaceSubClass 1 Radio Frequency
|
||||||
|
bInterfaceProtocol 1 Bluetooth
|
||||||
|
iInterface 0
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x03 EP 3 OUT
|
||||||
|
bmAttributes 1
|
||||||
|
Transfer Type Isochronous
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0021 1x 33 bytes
|
||||||
|
bInterval 1
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x83 EP 3 IN
|
||||||
|
bmAttributes 1
|
||||||
|
Transfer Type Isochronous
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0021 1x 33 bytes
|
||||||
|
bInterval 1
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 1
|
||||||
|
bAlternateSetting 5
|
||||||
|
bNumEndpoints 2
|
||||||
|
bInterfaceClass 224 Wireless
|
||||||
|
bInterfaceSubClass 1 Radio Frequency
|
||||||
|
bInterfaceProtocol 1 Bluetooth
|
||||||
|
iInterface 0
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x03 EP 3 OUT
|
||||||
|
bmAttributes 1
|
||||||
|
Transfer Type Isochronous
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0031 1x 49 bytes
|
||||||
|
bInterval 1
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x83 EP 3 IN
|
||||||
|
bmAttributes 1
|
||||||
|
Transfer Type Isochronous
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0031 1x 49 bytes
|
||||||
|
bInterval 1
|
||||||
|
Device Status: 0x0001
|
||||||
|
Self Powered
|
||||||
|
|
||||||
|
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
|
||||||
|
Device Descriptor:
|
||||||
|
bLength 18
|
||||||
|
bDescriptorType 1
|
||||||
|
bcdUSB 1.10
|
||||||
|
bDeviceClass 9 Hub
|
||||||
|
bDeviceSubClass 0 Unused
|
||||||
|
bDeviceProtocol 0 Full speed (or root) hub
|
||||||
|
bMaxPacketSize0 8
|
||||||
|
idVendor 0x0e0f VMware, Inc.
|
||||||
|
idProduct 0x0002 Virtual USB Hub
|
||||||
|
bcdDevice 1.00
|
||||||
|
iManufacturer 1 VMware, Inc.
|
||||||
|
iProduct 2 VMware Virtual USB Hub
|
||||||
|
iSerial 0
|
||||||
|
bNumConfigurations 1
|
||||||
|
Configuration Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 2
|
||||||
|
wTotalLength 25
|
||||||
|
bNumInterfaces 1
|
||||||
|
bConfigurationValue 1
|
||||||
|
iConfiguration 1 VMware, Inc.
|
||||||
|
bmAttributes 0xe0
|
||||||
|
Self Powered
|
||||||
|
Remote Wakeup
|
||||||
|
MaxPower 0mA
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 0
|
||||||
|
bAlternateSetting 0
|
||||||
|
bNumEndpoints 1
|
||||||
|
bInterfaceClass 9 Hub
|
||||||
|
bInterfaceSubClass 0 Unused
|
||||||
|
bInterfaceProtocol 0 Full speed (or root) hub
|
||||||
|
iInterface 1 VMware, Inc.
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x81 EP 1 IN
|
||||||
|
bmAttributes 3
|
||||||
|
Transfer Type Interrupt
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0001 1x 1 bytes
|
||||||
|
bInterval 255
|
||||||
|
Hub Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 41
|
||||||
|
nNbrPorts 7
|
||||||
|
wHubCharacteristic 0x0009
|
||||||
|
Per-port power switching
|
||||||
|
Per-port overcurrent protection
|
||||||
|
bPwrOn2PwrGood 50 * 2 milli seconds
|
||||||
|
bHubContrCurrent 100 milli Ampere
|
||||||
|
DeviceRemovable 0x00
|
||||||
|
PortPwrCtrlMask 0xfe
|
||||||
|
Hub Port Status:
|
||||||
|
Port 1: 0000.0103 power enable connect
|
||||||
|
Port 2: 0000.0100 power
|
||||||
|
Port 3: 0000.0100 power
|
||||||
|
Port 4: 0000.0100 power
|
||||||
|
Port 5: 0000.0100 power
|
||||||
|
Port 6: 0000.0100 power
|
||||||
|
Port 7: 0000.0100 power
|
||||||
|
Device Status: 0x2909
|
||||||
|
Self Powered
|
||||||
|
|
||||||
|
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
|
||||||
|
Device Descriptor:
|
||||||
|
bLength 18
|
||||||
|
bDescriptorType 1
|
||||||
|
bcdUSB 1.10
|
||||||
|
bDeviceClass 0 (Defined at Interface level)
|
||||||
|
bDeviceSubClass 0
|
||||||
|
bDeviceProtocol 0
|
||||||
|
bMaxPacketSize0 8
|
||||||
|
idVendor 0x0e0f VMware, Inc.
|
||||||
|
idProduct 0x0003 Virtual Mouse
|
||||||
|
bcdDevice 1.03
|
||||||
|
iManufacturer 1 VMware
|
||||||
|
iProduct 2 VMware Virtual USB Mouse
|
||||||
|
iSerial 0
|
||||||
|
bNumConfigurations 1
|
||||||
|
Configuration Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 2
|
||||||
|
wTotalLength 34
|
||||||
|
bNumInterfaces 1
|
||||||
|
bConfigurationValue 1
|
||||||
|
iConfiguration 1 VMware
|
||||||
|
bmAttributes 0xc0
|
||||||
|
Self Powered
|
||||||
|
MaxPower 0mA
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 0
|
||||||
|
bAlternateSetting 0
|
||||||
|
bNumEndpoints 1
|
||||||
|
bInterfaceClass 3 Human Interface Device
|
||||||
|
bInterfaceSubClass 1 Boot Interface Subclass
|
||||||
|
bInterfaceProtocol 2 Mouse
|
||||||
|
iInterface 1 VMware
|
||||||
|
HID Device Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 33
|
||||||
|
bcdHID 1.10
|
||||||
|
bCountryCode 0 Not supported
|
||||||
|
bNumDescriptors 1
|
||||||
|
bDescriptorType 34 Report
|
||||||
|
wDescriptorLength 46
|
||||||
|
Report Descriptors:
|
||||||
|
** UNAVAILABLE **
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x81 EP 1 IN
|
||||||
|
bmAttributes 3
|
||||||
|
Transfer Type Interrupt
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0008 1x 8 bytes
|
||||||
|
bInterval 1
|
||||||
|
Device Status: 0x0001
|
||||||
|
Self Powered
|
||||||
|
|
||||||
|
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
|
||||||
|
Device Descriptor:
|
||||||
|
bLength 18
|
||||||
|
bDescriptorType 1
|
||||||
|
bcdUSB 1.10
|
||||||
|
bDeviceClass 9 Hub
|
||||||
|
bDeviceSubClass 0 Unused
|
||||||
|
bDeviceProtocol 0 Full speed (or root) hub
|
||||||
|
bMaxPacketSize0 64
|
||||||
|
idVendor 0x1d6b Linux Foundation
|
||||||
|
idProduct 0x0001 1.1 root hub
|
||||||
|
bcdDevice 3.10
|
||||||
|
iManufacturer 3 Linux 3.10.0-1062.1.2.el7.x86_64 uhci_hcd
|
||||||
|
iProduct 2 UHCI Host Controller
|
||||||
|
iSerial 1 0000:02:00.0
|
||||||
|
bNumConfigurations 1
|
||||||
|
Configuration Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 2
|
||||||
|
wTotalLength 25
|
||||||
|
bNumInterfaces 1
|
||||||
|
bConfigurationValue 1
|
||||||
|
iConfiguration 0
|
||||||
|
bmAttributes 0xe0
|
||||||
|
Self Powered
|
||||||
|
Remote Wakeup
|
||||||
|
MaxPower 0mA
|
||||||
|
Interface Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 4
|
||||||
|
bInterfaceNumber 0
|
||||||
|
bAlternateSetting 0
|
||||||
|
bNumEndpoints 1
|
||||||
|
bInterfaceClass 9 Hub
|
||||||
|
bInterfaceSubClass 0 Unused
|
||||||
|
bInterfaceProtocol 0 Full speed (or root) hub
|
||||||
|
iInterface 0
|
||||||
|
Endpoint Descriptor:
|
||||||
|
bLength 7
|
||||||
|
bDescriptorType 5
|
||||||
|
bEndpointAddress 0x81 EP 1 IN
|
||||||
|
bmAttributes 3
|
||||||
|
Transfer Type Interrupt
|
||||||
|
Synch Type None
|
||||||
|
Usage Type Data
|
||||||
|
wMaxPacketSize 0x0002 1x 2 bytes
|
||||||
|
bInterval 255
|
||||||
|
Hub Descriptor:
|
||||||
|
bLength 9
|
||||||
|
bDescriptorType 41
|
||||||
|
nNbrPorts 2
|
||||||
|
wHubCharacteristic 0x000a
|
||||||
|
No power switching (usb 1.0)
|
||||||
|
Per-port overcurrent protection
|
||||||
|
bPwrOn2PwrGood 1 * 2 milli seconds
|
||||||
|
bHubContrCurrent 0 milli Ampere
|
||||||
|
DeviceRemovable 0x00
|
||||||
|
PortPwrCtrlMask 0xff
|
||||||
|
Hub Port Status:
|
||||||
|
Port 1: 0000.0103 power enable connect
|
||||||
|
Port 2: 0000.0103 power enable connect
|
||||||
|
Device Status: 0x0001
|
||||||
|
Self Powered
|
5
tests/fixtures/centos-7.7/lsusb.out
vendored
Normal file
5
tests/fixtures/centos-7.7/lsusb.out
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||||
|
Bus 002 Device 004: ID 0e0f:0008 VMware, Inc.
|
||||||
|
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
|
||||||
|
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
|
||||||
|
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
|
Reference in New Issue
Block a user