int usb_handle_packet(USBDevice *dev, USBPacket *p)

{

    int ret;



    if (dev == NULL) {

        return USB_RET_NODEV;

    }

    assert(dev->addr == p->devaddr);

    assert(dev->state == USB_STATE_DEFAULT);

    assert(p->state == USB_PACKET_SETUP);



    if (p->devep == 0) {

        /* control pipe */

        switch (p->pid) {

        case USB_TOKEN_SETUP:

            ret = do_token_setup(dev, p);

            break;

        case USB_TOKEN_IN:

            ret = do_token_in(dev, p);

            break;

        case USB_TOKEN_OUT:

            ret = do_token_out(dev, p);

            break;

        default:

            ret = USB_RET_STALL;

            break;

        }

    } else {

        /* data pipe */

        ret = usb_device_handle_data(dev, p);

    }



    if (ret == USB_RET_ASYNC) {

        p->ep = usb_ep_get(dev, p->pid, p->devep);

        p->state = USB_PACKET_ASYNC;

    }

    return ret;

}

int usb_handle_packet(USBDevice *dev, USBPacket *p)

{

    int ret;



    if (dev == NULL) {

        return USB_RET_NODEV;

    }

    assert(dev->addr == p->devaddr);

    assert(dev->state == USB_STATE_DEFAULT);

    assert(p->state == USB_PACKET_SETUP);



    if (p->devep == 0) {

        

        switch (p->pid) {

        case USB_TOKEN_SETUP:

            ret = do_token_setup(dev, p);

            break;

        case USB_TOKEN_IN:

            ret = do_token_in(dev, p);

            break;

        case USB_TOKEN_OUT:

            ret = do_token_out(dev, p);

            break;

        default:

            ret = USB_RET_STALL;

            break;

        }

    } else {

        

        ret = usb_device_handle_data(dev, p);

    }



    if (ret == USB_RET_ASYNC) {

        p->ep = usb_ep_get(dev, p->pid, p->devep);

        p->state = USB_PACKET_ASYNC;

    }

    return ret;

}

int FUNC_0(USBDevice *VAR_0, USBPacket *VAR_1)

{

    int VAR_2;



    if (VAR_0 == NULL) {

        return USB_RET_NODEV;

    }

    assert(VAR_0->addr == VAR_1->devaddr);

    assert(VAR_0->state == USB_STATE_DEFAULT);

    assert(VAR_1->state == USB_PACKET_SETUP);



    if (VAR_1->devep == 0) {

        

        switch (VAR_1->pid) {

        case USB_TOKEN_SETUP:

            VAR_2 = do_token_setup(VAR_0, VAR_1);

            break;

        case USB_TOKEN_IN:

            VAR_2 = do_token_in(VAR_0, VAR_1);

            break;

        case USB_TOKEN_OUT:

            VAR_2 = do_token_out(VAR_0, VAR_1);

            break;

        default:

            VAR_2 = USB_RET_STALL;

            break;

        }

    } else {

        

        VAR_2 = usb_device_handle_data(VAR_0, VAR_1);

    }



    if (VAR_2 == USB_RET_ASYNC) {

        VAR_1->ep = usb_ep_get(VAR_0, VAR_1->pid, VAR_1->devep);

        VAR_1->state = USB_PACKET_ASYNC;

    }

    return VAR_2;

}

int FUNC_0(USBDevice *VAR_0, USBPacket *VAR_1)
{ int VAR_2; if (VAR_0 == NULL) { return USB_RET_NODEV; } assert(VAR_0->addr == VAR_1->devaddr); assert(VAR_0->state == USB_STATE_DEFAULT); assert(VAR_1->state == USB_PACKET_SETUP); if (VAR_1->devep == 0) { switch (VAR_1->pid) { case USB_TOKEN_SETUP:
VAR_2 = do_token_setup(VAR_0, VAR_1); break; case USB_TOKEN_IN:
VAR_2 = do_token_in(VAR_0, VAR_1); break; case USB_TOKEN_OUT:
VAR_2 = do_token_out(VAR_0, VAR_1); break; default:
VAR_2 = USB_RET_STALL; break; } } else { VAR_2 = usb_device_handle_data(VAR_0, VAR_1); } if (VAR_2 == USB_RET_ASYNC) { VAR_1->ep = usb_ep_get(VAR_0, VAR_1->pid, VAR_1->devep); VAR_1->state = USB_PACKET_ASYNC; } return VAR_2; }