This is a breaking release which may require updates to your usage of Facedancer API's.
Changed
- Dropped support for Python 3.8 and 3.9. The minimum supported Python version is now Python 3.10.
- The descriptor API has been changed and expanded to handle more complex device definitions:
- New USBDescriptor property:
include_in_config
, which specifies whether the descriptor should be included in a
GET_CONFIGURATION response. - Descriptors attached to endpoints are now instantiated (replaces #139)
- The
instantiate_subordinates
function is redesigned to avoid silent dropping of subordinates with duplicate
identifiers. - Orderings of declaration/insertion of subordinates are preserved, allowing control of ordering in binary
configurations. - Fixes to convert some fields to the right types in
from_binary_descriptor
methods. - A dictionary of known strings and their indexes may be passed to
from_binary_descriptor
methods. - The
number
field ofUSBDescriptor
is made optional, as it is not required for descriptors attached in a
configuration. - The
type_number
field will now be inferred from theraw
bytes if not otherwise specified. - Add
@include_in_config
and@requestable(number=N)
decorators for use on declared descriptor classes. - Add docstrings for all
USBDescriptor
fields. - More information: #126 #141
- New USBDescriptor property:
Fixed
- USBProxy errors after changes for alternate interface settings.
Added
- Round-trip support for creating Facedancer devices, configurations, interfaces, endpoints and descriptors from
binary data to objects, to code, to objects and back to binary data. - New backend method:
validate_configuration
for rejecting USB device configurations that are not supported by a
given backend.