how can i make the skeleton read function blocking function?

nesta <[email protected]>
Newsgroups gmane.linux.usb.devel
Message-ID <[email protected]>
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

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.

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?

actually what i want exactly is when the gadget sends "hello host" the while 
looop output is :

insize is 2048 // 2KB=2048
hello host

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

this is the same algorithm for skel_write.so can i make the same algorithm with  
skel_read?or not?





-------------------------------------------------------------------------
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/
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.