USBD return value for wrong URB submit

This commit is contained in:
Wojciech Zajac 2014-06-18 11:54:24 +02:00 committed by Lionel Sambuc
parent 5655b1f1a4
commit 7df0836d35

View file

@ -185,12 +185,16 @@ ddekit_usb_submit_urb(struct ddekit_usb_urb * d_urb)
dev = (hcd_device_state *)(d_urb->dev); dev = (hcd_device_state *)(d_urb->dev);
drv = (hcd_driver_state *)(dev->driver); drv = (hcd_driver_state *)(dev->driver);
/* Check for latest URB completion */
if (NULL == dev->urb.original_urb) {
/* Remember original URB */ /* Remember original URB */
dev->urb.original_urb = (void *)d_urb; dev->urb.original_urb = (void *)d_urb;
/* TODO: URB's should be queued somewhere if DDEKit is not changed */ /* TODO: If multiple URB's have to be queued, this code
/* Turn DDEKit URB format to one that is easier to handle by HCD, also * or DDEKit's must be altered accordingly */
* check if URB is valid */ /* Turn DDEKit URB format to one that is easier to
* handle by HCD, also check if URB is valid */
hcd_decode_urb(&(dev->urb), d_urb); hcd_decode_urb(&(dev->urb), d_urb);
/* Start handling URB event */ /* Start handling URB event */
@ -200,6 +204,10 @@ ddekit_usb_submit_urb(struct ddekit_usb_urb * d_urb)
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
/* Last URB must not have been completed */
return EXIT_FAILURE;
}
/*===========================================================================* /*===========================================================================*
* ddekit_usb_cancle_urb * * ddekit_usb_cancle_urb *
@ -286,6 +294,9 @@ hcd_completion_cb(hcd_urb * urb)
hcd_encode_urb(urb, d_urb); hcd_encode_urb(urb, d_urb);
completion_cb(d_urb->priv); completion_cb(d_urb->priv);
/* URB was handled, forget about it */
urb->original_urb = NULL;
} }