You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
2.8 KiB

  1. #
  2. # This file is part of usb_protocol.
  3. #
  4. """ Convenience emitters for USB Audio Class 2 descriptors. """
  5. from contextlib import contextmanager
  6. from .. import emitter_for_format
  7. from ...types.descriptors.uac2 import *
  8. from ...emitters.descriptor import ComplexDescriptorEmitter
  9. # Create our emitters.
  10. InterfaceAssociationDescriptorEmitter = emitter_for_format(InterfaceAssociationDescriptor)
  11. StandardAudioControlInterfaceDescriptorEmitter = emitter_for_format(StandardAudioControlInterfaceDescriptor)
  12. class ClassSpecificAudioControlInterfaceDescriptorEmitter(ComplexDescriptorEmitter):
  13. DESCRIPTOR_FORMAT = ClassSpecificAudioControlInterfaceDescriptor
  14. def _pre_emit(self):
  15. # Figure out the total length of our descriptor, including subordinates.
  16. subordinate_length = sum(len(sub) for sub in self._subordinates)
  17. self.wTotalLength = subordinate_length + self.DESCRIPTOR_FORMAT.sizeof()
  18. ClockSourceDescriptorEmitter = emitter_for_format(ClockSourceDescriptor)
  19. InputTerminalDescriptorEmitter = emitter_for_format(InputTerminalDescriptor)
  20. OutputTerminalDescriptorEmitter = emitter_for_format(OutputTerminalDescriptor)
  21. AudioStreamingInterfaceDescriptorEmitter = emitter_for_format(AudioStreamingInterfaceDescriptor)
  22. ClassSpecificAudioStreamingInterfaceDescriptorEmitter = emitter_for_format(ClassSpecificAudioStreamingInterfaceDescriptor)
  23. TypeIFormatTypeDescriptorEmitter = emitter_for_format(TypeIFormatTypeDescriptor)
  24. ExtendedTypeIFormatTypeDescriptorEmitter = emitter_for_format(ExtendedTypeIFormatTypeDescriptor)
  25. TypeIIFormatTypeDescriptorEmitter = emitter_for_format(TypeIIFormatTypeDescriptor)
  26. ExtendedTypeIIFormatTypeDescriptorEmitter = emitter_for_format(ExtendedTypeIIFormatTypeDescriptor)
  27. TypeIIIFormatTypeDescriptorEmitter = emitter_for_format(TypeIIIFormatTypeDescriptor)
  28. ExtendedTypeIIIFormatTypeDescriptorEmitter = emitter_for_format(ExtendedTypeIIIFormatTypeDescriptor)
  29. ClassSpecificAudioStreamingIsochronousAudioDataEndpointDescriptorEmitter = emitter_for_format(ClassSpecificAudioStreamingIsochronousAudioDataEndpointDescriptor)
  30. AudioControlInterruptEndpointDescriptorEmitter = emitter_for_format(AudioControlInterruptEndpointDescriptor)
  31. AudioStreamingIsochronousEndpointDescriptorEmitter = emitter_for_format(AudioStreamingIsochronousEndpointDescriptor)
  32. AudioStreamingIsochronousFeedbackEndpointDescriptorEmitter = emitter_for_format(AudioStreamingIsochronousFeedbackEndpointDescriptor)