[haiku-commits] haiku: hrev48751 - src/bin

  • From: pulkomandy@xxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 30 Jan 2015 21:13:49 +0100 (CET)

hrev48751 adds 1 changeset to branch 'master'
old head: 3df82f281333e7a24c739adc5f1dc4cc7eb32ab6
new head: 39a1cc8ec3a8e1567431391e489ddc5acb009b41
overview: 
http://cgit.haiku-os.org/haiku/log/?qt=range&q=39a1cc8ec3a8+%5E3df82f281333

----------------------------------------------------------------------------

39a1cc8ec3a8: listusb: dump MIDI endpoint descriptors.
  
  * These would be completely skipped before because of a bug in the USB
  audio dumping code.
  * Now they are decoded in human readable format
  * Also fix a typo (Ttype instead of Type) in audio endpoints formatting.

                                 [ Adrien Destugues <pulkomandy@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev48751
Commit:      39a1cc8ec3a8e1567431391e489ddc5acb009b41
URL:         http://cgit.haiku-os.org/haiku/commit/?id=39a1cc8ec3a8
Author:      Adrien Destugues <pulkomandy@xxxxxxxxx>
Date:        Fri Jan 30 20:13:35 2015 UTC

----------------------------------------------------------------------------

1 file changed, 140 insertions(+), 1 deletion(-)
src/bin/listusb.cpp | 141 +++++++++++++++++++++++++++++++++++++++++++++++-

----------------------------------------------------------------------------

diff --git a/src/bin/listusb.cpp b/src/bin/listusb.cpp
index 57ec225..f0d20b6 100644
--- a/src/bin/listusb.cpp
+++ b/src/bin/listusb.cpp
@@ -14,6 +14,7 @@
 #include <USBKit.h>
 #include <stdio.h>
 #include <usb/USB_audio.h>
+#include <usb/USB_midi.h>
 
 #include "usbspec_private.h"
 #include "usb-utils.h"
@@ -729,7 +730,7 @@ void
 DumpAudioStreamCSEndpointDescriptor(
        const usb_audio_streaming_endpoint_descriptor* descriptor)
 {
-       printf("                    Ttype ............. 0x%02x (CS_ENDPOINT)\n",
+       printf("                    Type .............. 0x%02x (CS_ENDPOINT)\n",
                descriptor->descriptor_type);
        printf("                    Subtype ........... 0x%02x (EP_GENERAL)\n",
                descriptor->descriptor_subtype);
@@ -769,6 +770,127 @@ DumpAudioStreamCSEndpointDescriptor(
 
 
 void
+DumpMidiInterfaceHeaderDescriptor(
+       const usb_midi_interface_header_descriptor* descriptor)
+{
+       printf("                    Type .............. 0x%02x (CS_ENDPOINT)\n",
+               descriptor->descriptor_type);
+       printf("                    Subtype ........... 0x%02x (MS_HEADER)\n",
+               descriptor->descriptor_subtype);
+       printf("                    MSC Version ....... 0x%04x\n",
+               descriptor->ms_version);
+       printf("                    Length ............ 0x%04x\n",
+               descriptor->total_length);
+}
+
+
+void
+DumpMidiInJackDescriptor(
+       const usb_midi_in_jack_descriptor* descriptor)
+{
+       printf("                    Type .............. 0x%02x 
(CS_INTERFACE)\n",
+               descriptor->descriptor_type);
+       printf("                    Subtype ........... 0x%02x 
(MIDI_IN_JACK)\n",
+               descriptor->descriptor_subtype);
+       printf("                    Jack ID ........... 0x%02x\n",
+               descriptor->id);
+       // TODO can we get the string?
+       printf("                    String ............ 0x%02x\n",
+               descriptor->string_descriptor);
+
+       switch (descriptor->type) {
+               case USB_MIDI_EMBEDDED_JACK:
+                       printf("                    Jack Type ......... 
Embedded\n");
+                       break;
+               case USB_MIDI_EXTERNAL_JACK:
+                       printf("                    Jack Type ......... 
External\n");
+                       break;
+               default:
+                       printf("                    Jack Type ......... 0x%02x 
(unknown)\n",
+                               descriptor->type);
+                       break;
+       }
+}
+
+
+void
+DumpMidiOutJackDescriptor(
+       const usb_midi_out_jack_descriptor* descriptor)
+{
+       printf("                    Type .............. 0x%02x 
(CS_INTERFACE)\n",
+               descriptor->descriptor_type);
+       printf("                    Subtype ........... 0x%02x 
(MIDI_OUT_JACK)\n",
+               descriptor->descriptor_subtype);
+       printf("                    Jack ID ........... 0x%02x\n",
+               descriptor->id);
+
+       switch (descriptor->type) {
+               case USB_MIDI_EMBEDDED_JACK:
+                       printf("                    Jack Type ......... 
Embedded\n");
+                       break;
+               case USB_MIDI_EXTERNAL_JACK:
+                       printf("                    Jack Type ......... 
External\n");
+                       break;
+               default:
+                       printf("                    Jack Type ......... 0x%02x 
(unknown)\n",
+                               descriptor->type);
+                       break;
+       }
+
+       for (int i = 0; i < descriptor->inputs_count; i++) {
+               printf("                    Pin %02d ............ (%d,%d)\n", i,
+                       descriptor->input_source[i].source_id,
+                       descriptor->input_source[i].source_pin);
+       }
+}
+
+
+void
+DumpMidiStreamCSInterfaceDescriptor(const usb_generic_descriptor* descriptor)
+{
+       uint8 subtype = descriptor->data[0];
+       switch (subtype) {
+               case USB_MS_HEADER_DESCRIPTOR:
+                       DumpMidiInterfaceHeaderDescriptor(
+                               
(usb_midi_interface_header_descriptor*)descriptor);
+                       break;
+               case USB_MS_MIDI_IN_JACK_DESCRIPTOR:
+                       DumpMidiInJackDescriptor(
+                               (usb_midi_in_jack_descriptor*)descriptor);
+                       break;
+               case USB_MS_MIDI_OUT_JACK_DESCRIPTOR:
+                       DumpMidiOutJackDescriptor(
+                               (usb_midi_out_jack_descriptor*)descriptor);
+                       break;
+               case USB_MS_ELEMENT_DESCRIPTOR:
+                       // TODO
+                       DumpDescriptorData(descriptor);
+                       break;
+               default:
+                       DumpDescriptorData(descriptor);
+                       break;
+       }
+}
+
+
+void
+DumpMidiStreamCSEndpointDescriptor(
+       const usb_midi_endpoint_descriptor* descriptor)
+{
+       printf("                    Type .............. 0x%02x (CS_ENDPOINT)\n",
+               descriptor->descriptor_type);
+       printf("                    Subtype ........... 0x%02x (MS_GENERAL)\n",
+               descriptor->descriptor_subtype);
+       printf("                    Jacks ............. ");
+
+       for (int i = 0; i < descriptor->jacks_count; i++)
+               printf("%d, ", descriptor->jacks_id[i]);
+
+       printf("\n");
+}
+
+
+void
 DumpAudioStreamInterfaceDescriptor(const usb_interface_descriptor* descriptor)
 {
        printf("                    Type .............. %u (INTERFACE)\n",
@@ -822,6 +944,23 @@ DumpAudioDescriptor(const usb_generic_descriptor* 
descriptor, int subclass)
                                        break;
                        }
                        break;
+               case USB_AUDIO_INTERFACE_MIDISTREAMING_SUBCLASS:
+                       switch (descriptor->descriptor_type) {
+                               case USB_AUDIO_CS_INTERFACE:
+                                       
DumpMidiStreamCSInterfaceDescriptor(descriptor);
+                                       break;
+                               case USB_AUDIO_CS_ENDPOINT:
+                                       DumpMidiStreamCSEndpointDescriptor(
+                                               (const 
usb_midi_endpoint_descriptor*)descriptor);
+                                       break;
+                               default:
+                                       DumpDescriptorData(descriptor);
+                                       break;
+                       }
+                       break;
+               default:
+                       DumpDescriptorData(descriptor);
+                       break;
        }
 }
 


Other related posts:

  • » [haiku-commits] haiku: hrev48751 - src/bin - pulkomandy