40 lines
2.9 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.uac import *
  8. from ...types.descriptors.uac2 import *
  9. from ...emitters.descriptor import ComplexDescriptorEmitter
  10. # Create our emitters.
  11. InterfaceAssociationDescriptorEmitter = emitter_for_format(InterfaceAssociationDescriptor)
  12. StandardAudioControlInterfaceDescriptorEmitter = emitter_for_format(StandardAudioControlInterfaceDescriptor)
  13. class ClassSpecificAudioControlInterfaceDescriptorEmitter(ComplexDescriptorEmitter):
  14. DESCRIPTOR_FORMAT = ClassSpecificAudioControlInterfaceDescriptor
  15. def _pre_emit(self):
  16. # Figure out the total length of our descriptor, including subordinates.
  17. subordinate_length = sum(len(sub) for sub in self._subordinates)
  18. self.wTotalLength = subordinate_length + self.DESCRIPTOR_FORMAT.sizeof()
  19. ClockSourceDescriptorEmitter = emitter_for_format(ClockSourceDescriptor)
  20. InputTerminalDescriptorEmitter = emitter_for_format(InputTerminalDescriptor)
  21. OutputTerminalDescriptorEmitter = emitter_for_format(OutputTerminalDescriptor)
  22. AudioStreamingInterfaceDescriptorEmitter = emitter_for_format(AudioStreamingInterfaceDescriptor)
  23. ClassSpecificAudioStreamingInterfaceDescriptorEmitter = emitter_for_format(ClassSpecificAudioStreamingInterfaceDescriptor)
  24. TypeIFormatTypeDescriptorEmitter = emitter_for_format(TypeIFormatTypeDescriptor)
  25. ExtendedTypeIFormatTypeDescriptorEmitter = emitter_for_format(ExtendedTypeIFormatTypeDescriptor)
  26. TypeIIFormatTypeDescriptorEmitter = emitter_for_format(TypeIIFormatTypeDescriptor)
  27. ExtendedTypeIIFormatTypeDescriptorEmitter = emitter_for_format(ExtendedTypeIIFormatTypeDescriptor)
  28. TypeIIIFormatTypeDescriptorEmitter = emitter_for_format(TypeIIIFormatTypeDescriptor)
  29. ExtendedTypeIIIFormatTypeDescriptorEmitter = emitter_for_format(ExtendedTypeIIIFormatTypeDescriptor)
  30. ClassSpecificAudioStreamingIsochronousAudioDataEndpointDescriptorEmitter = emitter_for_format(ClassSpecificAudioStreamingIsochronousAudioDataEndpointDescriptor)
  31. AudioControlInterruptEndpointDescriptorEmitter = emitter_for_format(AudioControlInterruptEndpointDescriptor)
  32. AudioStreamingIsochronousEndpointDescriptorEmitter = emitter_for_format(AudioStreamingIsochronousEndpointDescriptor)
  33. AudioStreamingIsochronousFeedbackEndpointDescriptorEmitter = emitter_for_format(AudioStreamingIsochronousFeedbackEndpointDescriptor)