int ep1_send(char *buf, int len, usb_callback_t callback) { int i=0; int flags; if (usb_debug) printf( "\npxa_usb_send: " "data len=%d state=%d blen=%d\n", len, usbd_info.state, ep1_len); if (usbd_info.state != USB_STATE_CONFIGURED) { printf("state %d -ENODEV\n", usbd_info.state); return -ENODEV; } if (ep1_len) { ep1_retries++; if (ep1_retries >3) { printf("ep1_len %d -EBUSY\n", ep1_len); ep1_retries = 0; return -EBUSY; } } ep1_retries = 0; memcpy(ep1_buf, buf, len); ep1_len = len; ep1_callback = callback; ep1_remain = len; ep1_start(); return 0; }
void ep1_int_hndlr(struct usb_request *usb_req) { ep1_remain = ep1_len - usb_req->length; if (usb_debug) printf("%s send finisned buf %x len %d remain %d\n", __func__, usb_req->buf, usb_req->length, ep1_remain); if (ep1_remain != 0) { /* more data to go */ ep1_start(); } else { ep1_done(0); } }
int sa1100_usb_recv(char *buf, int len, usb_callback_t callback) { int flags; if (ep1_len) return -EBUSY; local_irq_save(flags); //ep1_buf = buf; ep1_len = len; ep1_callback = callback; ep1_remain = len; ep1_curdmabuf = buf; ep1_curdmalen = 0; ep1_start(); local_irq_restore(flags); return 0; }