1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-08-08 22:36:48 +02:00

add interface_association section

This commit is contained in:
Kelly Brazil
2021-10-05 16:47:23 -07:00
parent eb788fca6e
commit ed6997e3ff
2 changed files with 170 additions and 34 deletions

View File

@ -119,6 +119,7 @@ def parse(data, raw=False, quiet=False):
section = ''
device_descriptor_list = []
configuration_descriptor_list = []
interface_association_list = []
interface_descriptor_list = []
cdc_header_list = []
cdc_call_management_list = []
@ -147,6 +148,7 @@ def parse(data, raw=False, quiet=False):
output_line = {}
device_descriptor_list = []
configuration_descriptor_list = []
interface_association_list = []
interface_descriptor_list = []
cdc_header_list = []
cdc_call_management_list = []
@ -168,6 +170,7 @@ def parse(data, raw=False, quiet=False):
output_line = {}
device_descriptor_list = []
configuration_descriptor_list = []
interface_association_list = []
interface_descriptor_list = []
cdc_header_list = []
cdc_call_management_list = []
@ -195,6 +198,7 @@ def parse(data, raw=False, quiet=False):
section = 'device_descriptor'
device_descriptor_list = []
configuration_descriptor_list = []
interface_association_list = []
interface_descriptor_list = []
cdc_header_list = []
cdc_call_management_list = []
@ -213,6 +217,11 @@ def parse(data, raw=False, quiet=False):
interface_descriptor_list = []
continue
if line.startswith(' Interface Association:'):
section = 'interface_association'
interface_association_list = []
continue
if line.startswith(' Interface Descriptor:'):
section = 'interface_descriptor'
@ -319,35 +328,23 @@ def parse(data, raw=False, quiet=False):
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 section == 'interface_association' and line.startswith(' '):
interface_association_list.append(_add_attributes(line))
if 'interface_association' not in output_line['device_descriptor']['configuration_descriptor']:
output_line['device_descriptor']['configuration_descriptor']['interface_association'] = {}
output_line['device_descriptor']['configuration_descriptor']['interface_association']['attributes'] = interface_association_list
continue
if cdc_header_list:
interface_descriptor_list.append({'cdc_header': cdc_header_list})
if section == 'report_descriptors' and line.startswith(' '):
report_descriptors_list.append(_add_attributes(line))
continue
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 = []
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 == 'cdc_header' and line.startswith(' '):
@ -374,16 +371,34 @@ def parse(data, raw=False, quiet=False):
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})
if section == 'interface_descriptor' and line.startswith(' '):
interface_descriptor_list.append(_add_attributes(line))
report_descriptors_list = []
hid_device_descriptor_list.append(_add_attributes(line))
continue
if cdc_header_list:
interface_descriptor_list.append({'cdc_header': cdc_header_list})
if section == 'report_descriptors' and line.startswith(' '):
report_descriptors_list.append(_add_attributes(line))
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 == 'hub_descriptor' and line.startswith(' '):
@ -398,6 +413,27 @@ def parse(data, raw=False, quiet=False):
output_line['hub_descriptor']['hub_port_status'] = hub_port_status_list
continue
# get final list entries
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)
if output_line:
raw_output.append(output_line)

View File

@ -0,0 +1,100 @@
Bus 003 Device 090: ID 1915:521a Nordic Semiconductor ASA nRF52 USB CDC BLE Demo
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x1915 Nordic Semiconductor ASA
idProduct 0x521a
bcdDevice 1.00
iManufacturer 1 Nordic Semiconductor
iProduct 2 nRF52 USB CDC BLE Demo
iSerial 3 F42DE60BE261
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x004b
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 4
bmAttributes 0xc0
Self Powered
MaxPower 100mA
Interface Association:
bLength 8
bDescriptorType 11
bFirstInterface 0
bInterfaceCount 2
bFunctionClass 2 Communications
bFunctionSubClass 2 Abstract (modem)
bFunctionProtocol 1 AT-commands (v.25ter)
iFunction 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 2 Communications
bInterfaceSubClass 2 Abstract (modem)
bInterfaceProtocol 1 AT-commands (v.25ter)
iInterface 0
CDC Header:
bcdCDC 1.10
CDC Call Management:
bmCapabilities 0x03
call management
use DataInterface
bDataInterface 1
CDC ACM:
bmCapabilities 0x02
line coding and serial state
CDC Union:
bMasterInterface 0
bSlaveInterface 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 16
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 10 CDC Data
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
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 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0