so what would happen if i request to read amount of data that is
larger that the endpoint max-size?thanks for your help

On 4/23/07, Alan Stern <[EMAIL PROTECTED]> wrote:
> On Mon, 23 Apr 2007, nesta wrote:
>
> > hi all,
> > i have 2 questions:
> >
> > 1) i make simple while loop,at the host side, in which i m receiving the
> data
> > using the read function of usb-skeleton module,it is as follows:
> >
> ***************************************************************************
> > do
> >     {
> >             insize =read (fd,(char*)inbuff, sizeof (inbuff) );
> >             printf("insize is %d\n",insize);
> >             printf(" %s\n",inbuff);
> >     }while (strcmp(inbuff,"end"));
> >
> ****************************************************************************
> > my aim is : when the gadget has something to send to the host this while
> loop
> > will print what the hosts receives from the gadget.
> >
> > but this does not happen when i use the skel_read function,it is in
> > usb-skeleton.c,as when the gadget does not have anything to send to the
> host,i
> > found that the read function is non-blocking and it prints the following
> > forever:
> > insize is -1
> > black line //i think this is because inbuff is empty
>
> The read function _is_ blocking, but it times out after 10 seconds.
>
> > anyway i found that there is a function in skel_read function, named by
> > usb_bulk_msg and the last argument of it, is the timeout and if i set this
> > timeout to zero it will stop printing insize is -1 and thus it becomes a
> > blocking function.
>
> Because you removed the timeout.
>
> > so now if the gadget is not sending anything to the host, the while loop
> stops
> > printing
> > insize is -1
> > bu when the gadget really sends a word like "hello host" for example, the
> host
> > really receives it but still printing the phrase of insize is 64 i.e the
> output
> > is as follows:
> >
> > insize is 64
> > hello host
> > insize is 64
> > insize is 64 and it prints this phrase forever
> > so why it just receives 64B while i was really sending 2KB buffer?
>
> You are contradicting yourself.  Above you said the gadget sends the words
> "hello host", which is 10 bytes, but now you say the gadget sends a
> 2048-byte buffer.  Which is it?
>
> > actually what i want exactly is when the gadget sends "hello host" the
> while
> > looop output is :
> >
> > insize is 2048 // 2KB=2048
> > hello host
>
> Why do you want your program to print that insize is 2048 when it received
> only 10 bytes from the gadget?
>
> Any funny behavior you encounter is probably caused by the gadget.  If you
> know what it is really sending, then you should also know why the host
> behaves the way it does.
>
> > and doesnt print anything else?
> >
> > 2) can i make the following steps in reading instead of usb_bulk_msg:
> > 1.urb = usb_alloc_urb(0, GFP_KERNEL);
> > 2.buf = usb_buffer_alloc(dev->udev, writesize, GFP_KERNEL,
> &urb->transfer_dma);
>
> If buf is for reading, shouldn't you use readsize instead of writesize?
>
> > 3.copy_to_user(buf, user_buffer, readsize
> > 4.usb_fill_bulk_urb( urb, dev->udev,
> >                   usb_rcvctrlpipe(dev->udev, dev->bulk_in_endpointAddr),
> >                  buf, readsize, skel_read_bulk_callback, dev);
> > 5.urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
> > 6.usb_submit_urb
> >
> > the location of copy_to_user is correct?or it should be put after
> > usb_submit_urb?
>
> It definitely should go after usb_submit_urb.  In fact, it shouldn't
> execute until after the URB has completed.  Otherwise the data you hand
> back to the user won't be the data coming from the gadget; it will be
> whatever old data was sitting in buf.
>
> > this is the same algorithm for skel_write.so can i make the same algorithm
> with
> > skel_read?or not?
>
> Of course not.  Reads are different from writes.  A write takes data from
> the user and then sends it to the device.  A read takes data from the
> device and then sends it to the user.
>
> Alan Stern
>
>

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to