more refactor
[ppcskel.git] / usb / core / core.c
index 1571a19cc31943377db7618454a76e527050cf06..88e6f18e6063b228c01a5ac97fc013ef9cf09cb6 100644 (file)
@@ -89,6 +89,7 @@ void usb_periodic()
 struct usb_device *usb_add_device()
 {
        struct usb_device *dev = (struct usb_device *) malloc(sizeof(struct usb_device));
+       dev->conf = (struct usb_conf *) malloc(sizeof(struct usb_conf));
        dev->address = 0;
        /* send at first time only 8 bytes */
        dev->bMaxPacketSize0 = 8;
@@ -101,17 +102,8 @@ struct usb_device *usb_add_device()
        dev->epTogl[1] = 0;
        dev->epTogl[2] = 0;
 
-#define LEN 128
-       u8 buf[LEN];
-       memset(buf, 0, sizeof(buf));
-
        s8 ret;
-       memset(buf, 0, sizeof(buf));
-       ret = usb_get_dev_desc_simple(dev, buf, sizeof(buf));
-#ifdef _DU_CORE_ADD
-       printf("=============\nbuf: 0x%08X\nafter usb_get_dev_desc_simple(ret: %d):\n", buf, ret);
-       hexdump(buf, sizeof(buf));
-#endif
+       ret = usb_get_desc_dev_simple(dev);
        if(ret < 0) {
                return (void*) -1;
        }
@@ -125,42 +117,31 @@ struct usb_device *usb_add_device()
        printf("set address to %d\n", dev->address);
 #endif
 
-       memset(buf, 0, sizeof(buf));
-       ret = usb_get_dev_desc(dev, buf, sizeof(buf));
-#ifdef _DU_CORE_ADD
-       printf("=============\nbuf: 0x%08X\nafter usb_get_dev_desc(ret: %d):\n", buf, ret);
-       hexdump(buf, sizeof(buf));
-#endif
+       ret = usb_get_desc_dev(dev);
 
        char *man, *prod, *serial;
        if(dev->iManufacturer) {
-               memset(buf, 0, sizeof(buf));
-               man = usb_get_string_simple(dev, dev->iManufacturer, buf, sizeof(buf));
-               printf("iManufacturer:\n");
-               hexdump(buf, sizeof(buf));
+               man = usb_get_string_simple(dev, dev->iManufacturer);
        } else {
                man = (char*) malloc(11);
                memset(man, '\0', sizeof(man));
                strlcpy(man, "no String", 10);
        }
        if(dev->iProduct) {
-               memset(buf, 0, sizeof(buf));
-               prod = usb_get_string_simple(dev, dev->iProduct, buf, sizeof(buf));
+               prod = usb_get_string_simple(dev, dev->iProduct);
        } else {
                prod = (char*) malloc(11);
                memset(prod, '\0', sizeof(prod));
                strlcpy(prod, "no String", 10);
        }
        if(dev->iSerialNumber) {
-               memset(buf, 0, sizeof(buf));
-               serial = usb_get_string_simple(dev, dev->iSerialNumber, buf, sizeof(buf));
+               serial = usb_get_string_simple(dev, dev->iSerialNumber);
        } else {
                serial = (char*) malloc(11);
                memset(serial, '\0', sizeof(serial));
                strlcpy(serial, "no String", 10);
        }
 
-
        printf( "bLength 0x%02X\n"
                        "bDescriptorType 0x%02X\n"
                        "bcdUSB 0x%02X\n"
@@ -181,11 +162,26 @@ struct usb_device *usb_add_device()
                        dev->iSerialNumber, serial,
                        dev->bNumConfigurations);
 
-       memset(buf, 0, sizeof(buf));
        /* in the most cases usb devices have just one configuration descriptor */
-       ret = usb_get_configuration(dev, 0, buf, sizeof(buf));
-       printf("=============\nbuf: 0x%08X\nafter usb_get_configuration(ret: %d):\n", buf, ret);
-       hexdump(buf, sizeof(buf));
+       ret = usb_get_desc_config_ext(dev, 0);
+
+       /* select configuration */
+       ret = usb_set_configuration(dev, dev->conf->bConfigurationValue);
+       printf("=============\nusb_set_configuration(ret: %d) %d\n", ret, dev->conf->bConfigurationValue);
+
+       /*
+       udelay(600000);
+
+       printf("=============\ninterfaces: %d\n", dev->conf->bNumInterfaces);
+       u8 i;
+       for(i = 1; i <= dev->conf->bNumInterfaces; i++) {
+               memset(buf, 0, sizeof(buf));
+               ret = usb_get_desc_interface(dev, 1, buf, sizeof(buf));
+               printf("=============\nafter usb_get_desc_interface_%d(ret: %d):\n", i, ret);
+               hexdump(buf, sizeof(buf));
+       }
+       */
+
 
 
        /*