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);
	}

}
Exemple #3
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;
}