+ s8 ret;
+ u8 dev_desc_size;
+ memset(buf, 0, sizeof(buf));
+ ret = usb_get_dev_desc_simple(dev, buf, sizeof(buf));
+ printf("=============\nbuf: 0x%08X\nafter usb control msg(ret: %d):\n", buf, ret);
+ hexdump(buf, sizeof(buf));
+
+ /* set MaxPacketSize */
+ dev->bMaxPacketSize0 = (u8) buf[7];
+ if(!(u8)buf[7]) {
+ printf("FU\n");
+ return (void*)1;
+ }
+ /* save device descriptor size */
+ dev_desc_size = buf[0];
+
+ u8 address = usb_next_address();
+ ret = usb_set_address(dev, address);
+ dev->address = address;
+ printf("set address to %d\n", dev->address);
+
+ memset(buf, 0, sizeof(buf));
+ ret = usb_get_dev_desc(dev, buf, sizeof(buf), dev_desc_size);
+ printf("=============\nbuf: 0x%08X\nafter usb control msg(ret: %d):\n", buf, ret);
+ hexdump(buf, sizeof(buf));
+
+ dev->bDeviceClass = (u8) buf[4];
+ dev->bDeviceSubClass = (u8) buf[5];
+ dev->bDeviceProtocoll = (u8) buf[6];
+ dev->idVendor = (u16) (buf[9] << 8) | (buf[8]);
+ dev->idProduct = (u16) (buf[11] << 8) | (buf[10]);
+ dev->bcdDevice = (u16) (buf[13] << 8) | (buf[12]);
+
+ printf( "bDeviceClass 0x%02X\n"
+ "bDeviceSubClass 0x%02X\n"
+ "bDeviceProtocoll 0x%02X\n"
+ "idVendor 0x%04X\n"
+ "idProduct 0x%04X\n"
+ "bcdDevice 0x%04X\n", dev->bDeviceClass,
+ dev->bDeviceSubClass, dev->bDeviceProtocoll,
+ dev->idVendor, dev->idProduct, dev->bcdDevice);