/* This function is the callback function of hub's int endpoint, it is invoked when data comes. */
static void rt_usbh_hub_irq(void *context)
/* This function is the callback function of hub's int endpoint, it is invoked when data comes. */
static void rt_usbh_hub_irq(void *context)
{
    upipe_t pipe;
    uhub_t hub;
    int timeout = USB_TIMEOUT_BASIC;
    RT_ASSERT(context != RT_NULL);
    pipe = (upipe_t)context;
    hub = (uhub_t)pipe->user_data;
    if(pipe->status != UPIPE_STATUS_OK)
    {
        LOG_D("hub irq error");
        return;
    }
    rt_usbh_hub_port_change(hub);
    LOG_D("hub int xfer...");
     RT_ASSERT(pipe->inst->hcd != RT_NULL);
    rt_usb_hcd_pipe_xfer(hub->self->hcd, pipe, hub->buffer, pipe->ep.wMaxPacketSize, timeout);
}