Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd7b796f

Browse files
committed
Add BOS descriptor support
Based on earlier work done on this by Maya Erez <merez@codeaurora.org>,Nathan Hjelm <hjelmn@me.com> and Pete Batard <pete@akeo.ie>.Signed-off-by: Hans de Goede <hdegoede@redhat.com>
1 parentef698c6 commitd7b796f

File tree

5 files changed

+631
-2
lines changed

5 files changed

+631
-2
lines changed

‎examples/xusb.c‎

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,16 @@ static void display_buffer_hex(unsigned char *buffer, unsigned size)
165165
printf("\n" );
166166
}
167167

168+
staticchar*uuid_to_string(constuint8_t*uuid)
169+
{
170+
staticcharuuid_string[40];
171+
if (uuid==NULL)returnNULL;
172+
sprintf(uuid_string,"{%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
173+
uuid[0],uuid[1],uuid[2],uuid[3],uuid[4],uuid[5],uuid[6],uuid[7],
174+
uuid[8],uuid[9],uuid[10],uuid[11],uuid[12],uuid[13],uuid[14],uuid[15]);
175+
returnuuid_string;
176+
}
177+
168178
// The PS3 Controller is really a HID device that got its HID Report Descriptors
169179
// removed by Sony
170180
staticintdisplay_ps3_status(libusb_device_handle*handle)
@@ -726,11 +736,51 @@ static void read_ms_winsub_feature_descriptors(libusb_device_handle *handle, uin
726736
}
727737
}
728738

739+
staticvoidprint_device_cap(structlibusb_bos_dev_capability_descriptor*dev_cap)
740+
{
741+
switch(dev_cap->bDevCapabilityType) {
742+
caseLIBUSB_BT_USB_2_0_EXTENSION: {
743+
structlibusb_usb_2_0_extension_descriptor*usb_2_0_ext=NULL;
744+
libusb_get_usb_2_0_extension_descriptor(NULL,dev_cap,&usb_2_0_ext);
745+
if (usb_2_0_ext) {
746+
printf(" USB 2.0 extension:\n");
747+
printf(" attributes : %02X\n",usb_2_0_ext->bmAttributes);
748+
libusb_free_usb_2_0_extension_descriptor(usb_2_0_ext);
749+
}
750+
break;
751+
}
752+
caseLIBUSB_BT_SS_USB_DEVICE_CAPABILITY: {
753+
structlibusb_ss_usb_device_capability_descriptor*ss_usb_device_cap=NULL;
754+
libusb_get_ss_usb_device_capability_descriptor(NULL,dev_cap,&ss_usb_device_cap);
755+
if (ss_usb_device_cap) {
756+
printf(" USB 3.0 capabilities:\n");
757+
printf(" attributes : %02X\n",ss_usb_device_cap->bmAttributes);
758+
printf(" supported speeds : %04X\n",ss_usb_device_cap->wSpeedSupported);
759+
printf(" supported functionality: %02X\n",ss_usb_device_cap->bFunctionalitySupport);
760+
libusb_free_ss_usb_device_capability_descriptor(ss_usb_device_cap);
761+
}
762+
break;
763+
}
764+
caseLIBUSB_BT_CONTAINER_ID: {
765+
structlibusb_container_id_descriptor*container_id=NULL;
766+
libusb_get_container_id_descriptor(NULL,dev_cap,&container_id);
767+
if (container_id) {
768+
printf(" Container ID:\n %s\n",uuid_to_string(container_id->ContainerID));
769+
libusb_free_container_id_descriptor(container_id);
770+
}
771+
break;
772+
}
773+
default:
774+
printf(" Unknown BOS device capability %02x:\n",dev_cap->bDevCapabilityType);
775+
}
776+
}
777+
729778
staticinttest_device(uint16_tvid,uint16_tpid)
730779
{
731780
libusb_device_handle*handle;
732781
libusb_device*dev;
733782
uint8_tbus,port_path[8];
783+
structlibusb_bos_descriptor*bos_desc;
734784
structlibusb_config_descriptor*conf_desc;
735785
conststructlibusb_endpoint_descriptor*endpoint;
736786
inti,j,k,r;
@@ -784,7 +834,17 @@ static int test_device(uint16_t vid, uint16_t pid)
784834
string_index[1]=dev_desc.iProduct;
785835
string_index[2]=dev_desc.iSerialNumber;
786836

787-
printf("\nReading configuration descriptors:\n");
837+
printf("\nReading BOS descriptor: ");
838+
if (libusb_get_bos_descriptor(handle,&bos_desc)==LIBUSB_SUCCESS) {
839+
printf("%d caps\n",bos_desc->bNumDeviceCaps);
840+
for (i=0;i<bos_desc->bNumDeviceCaps;i++)
841+
print_device_cap(bos_desc->dev_capability[i]);
842+
libusb_free_bos_descriptor(bos_desc);
843+
}else {
844+
printf("no descriptor\n");
845+
}
846+
847+
printf("\nReading first configuration descriptor:\n");
788848
CALL_CHECK(libusb_get_config_descriptor(dev,0,&conf_desc));
789849
nb_ifaces=conf_desc->bNumInterfaces;
790850
printf(" nb interfaces: %d\n",nb_ifaces);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp