void usb_periodic()
{
// call ever registered driver
- usb_driver *drv;
- element *iterator = core.drivers->head;
+ struct usb_driver *drv;
+ struct element *iterator = core.drivers->head;
while (iterator != NULL) {
- drv = (usb_driver *) iterator->data;
+ drv = (struct usb_driver *) iterator->data;
drv->check();
iterator = iterator->next;
}
* for the core. usb_add_device expected that
* the device answers to address zero.
*/
-usb_device *usb_add_device()
+struct usb_device *usb_add_device()
{
- usb_device *dev = (usb_device *) malloc(sizeof(usb_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;
s8 ret;
memset(buf, 0, sizeof(buf));
- ret = usb_get_dev_desc_simple(dev, buf, sizeof(buf));
+ ret = usb_get_desc_dev_simple(dev, buf, sizeof(buf));
#ifdef _DU_CORE_ADD
- printf("=============\nbuf: 0x%08X\nafter usb_get_dev_desc_simple(ret: %d):\n", buf, ret);
+ printf("=============\nafter usb_get_dev_desc_simple(ret: %d):\n", ret);
hexdump(buf, sizeof(buf));
#endif
if(ret < 0) {
#endif
memset(buf, 0, sizeof(buf));
- ret = usb_get_dev_desc(dev, buf, sizeof(buf));
+ ret = usb_get_desc_dev(dev, buf, sizeof(buf));
#ifdef _DU_CORE_ADD
- printf("=============\nbuf: 0x%08X\nafter usb_get_dev_desc(ret: %d):\n", buf, ret);
+ printf("=============\nafter usb_get_dev_desc(ret: %d):\n", ret);
hexdump(buf, sizeof(buf));
#endif
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));
} else {
man = (char*) malloc(11);
memset(man, '\0', sizeof(man));
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);
+ ret = usb_get_desc_configuration(dev, 0, buf, sizeof(buf));
+ printf("=============\nafter usb_get_desc_configuration(ret: %d):\n", ret);
+ hexdump(buf, sizeof(buf));
+
+ memset(buf, 0, sizeof(buf));
+ ret = usb_get_descriptor(dev, CONFIGURATION, 0, buf, dev->conf->wTotalLength);
+ printf("=============\nafter usb_get_HACK(ret: %d):\n", ret);
hexdump(buf, sizeof(buf));
+ /* 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));
+ }
+ */
+
+
/*
usb_get_descriptor(dev, DEVICE, 0, buf, 8);
* Find currently detached device and remove
* data structures
*/
-u8 usb_remove_device(usb_device * dev)
+u8 usb_remove_device(struct usb_device * dev)
{
// FIXME!!!! dieser quatsch ist nur temporaer
free(core.devices->head);
/**
* Register new driver at usb stack.
*/
-u8 usb_register_driver(usb_driver * dev)
+u8 usb_register_driver(struct usb_driver * dev)
{
/* add driver to driver list */
- element *tmp = (element *) malloc(sizeof(element));
+ struct element *tmp = (struct element *) malloc(sizeof(struct element));
tmp->data = (void *) dev;
tmp->next = NULL;
list_add_tail(core.drivers, tmp);
void usb_probe_driver()
{
// call ever registered driver
- usb_driver *drv;
- element *iterator = core.drivers->head;
+ struct usb_driver *drv;
+ struct element *iterator = core.drivers->head;
while (iterator != NULL) {
- drv = (usb_driver *) iterator->data;
+ drv = (struct usb_driver *) iterator->data;
drv->probe();
iterator = iterator->next;
}
/**
* Not implemented.
*/
-usb_irp *usb_get_irp()
+struct usb_irp *usb_get_irp()
{
return 0;
}
/**
* Not implemented.
*/
-u8 usb_remove_irp(usb_irp * irp)
+u8 usb_remove_irp(struct usb_irp *irp)
{
return 1;
* In the usbstack they are transported with the
* usb_transfer_descriptor data structure.
*/
-u16 usb_submit_irp(usb_irp *irp)
+u16 usb_submit_irp(struct usb_irp *irp)
{
- usb_transfer_descriptor *td;
+ struct usb_transfer_descriptor *td;
u8 runloop = 1;
u16 restlength = irp->len;
u8 *td_buf_ptr = irp->buffer;
/**
* Create a transfer descriptor with an parent irp.
*/
-usb_transfer_descriptor *usb_create_transfer_descriptor(usb_irp * irp)
+struct usb_transfer_descriptor *usb_create_transfer_descriptor(struct usb_irp * irp)
{
- usb_transfer_descriptor *td =
- (usb_transfer_descriptor *) malloc(sizeof(usb_transfer_descriptor));
+ struct usb_transfer_descriptor *td =
+ (struct usb_transfer_descriptor *) malloc(sizeof(struct usb_transfer_descriptor));
td->devaddress = irp->dev->address;
td->endpoint = irp->endpoint;