|
|
@@ -0,0 +1,45 @@ |
|
|
|
#!/usr/bin/env python3 |
|
|
|
# |
|
|
|
# This file is part of usb-protocol. |
|
|
|
# |
|
|
|
""" Example that builds a device-worth of descriptors using a collection object. """ |
|
|
|
|
|
|
|
from usb_protocol.emitters.descriptors import DeviceDescriptorCollection |
|
|
|
|
|
|
|
collection = DeviceDescriptorCollection() |
|
|
|
|
|
|
|
# Create our device descriptor, and populate it with some fields. |
|
|
|
# Many fields have sane/common defaults; and thus can be omitted. |
|
|
|
with collection.DeviceDescriptor() as d: |
|
|
|
d.idVendor = 0xc001 |
|
|
|
d.idProduct = 0xc0de |
|
|
|
d.bNumConfigurations = 1 |
|
|
|
|
|
|
|
d.iManufacturer = "usb-tools" |
|
|
|
d.iProduct = "Illegitimate USB Device" |
|
|
|
d.iSerialNumber = "123456" |
|
|
|
|
|
|
|
|
|
|
|
# Create our configuration descriptor, and its subordinates. |
|
|
|
with collection.ConfigurationDescriptor() as c: |
|
|
|
# Here, this is our first configuration, and is automatically assigned number '1'. |
|
|
|
|
|
|
|
# We'll create a simple interface with a couple of endpoints. |
|
|
|
with c.InterfaceDescriptor() as i: |
|
|
|
i.bInterfaceNumber = 0 |
|
|
|
|
|
|
|
# Our endpoints default to bulk; with mostly-sane defaults. |
|
|
|
with i.EndpointDescriptor() as e: |
|
|
|
e.bEndpointAddress = 0x01 |
|
|
|
e.wMaxPacketSize = 512 |
|
|
|
|
|
|
|
with i.EndpointDescriptor() as e: |
|
|
|
e.bEndpointAddress = 0x81 |
|
|
|
e.wMaxPacketSize = 512 |
|
|
|
|
|
|
|
|
|
|
|
print("This device's descriptors would look like:") |
|
|
|
|
|
|
|
# Iterate over all of our descriptors. |
|
|
|
for value, index, raw in collection: |
|
|
|
print(f" type {value} (index {index}) = {raw}") |