[ECOS] cyg_io_read

grahamlab graham.labdon@cranems.co.uk
Mon Apr 20 12:01:00 GMT 2009

Hello all
I am having trouble understanding the operation of the cyg_io_read
I have a simple programto read the /dev/ser1 device on my stm3120e dev
If i set blocking on read then my cyg_io_read call only returns when the
specified number of bytes has been received -

char msg[10]
cyg_uint32 msglen=10;
res = cyg_io_read(handle,msg,&msglen); // returns when 10 bytes have been

However, I want to read bytes as they arrive. With this in mind I set the
device to operate in non blocking mode -
block = 0;
len = sizeof(cyg_uint32);

I set up my code to ignore EAGAIN errors on the read -
    	char msg[10];
    	cyg_uint32 msglen=10;

    	res = cyg_io_read(handle,msg,&msglen);
    	if (res != -EAGAIN)
    		diag_printf ("read %d %d\n",res,msglen);
    		for (cyg_uint32 x = 0; x < msglen; ++x)

With this in place I expected to receive all bytes sent by the sending
program , BUT NO
I only receive the first 2 or three. If I send single characters I get these
but if I send anything more I dont get what I sent.

I would be grateful if someone could explain this behavior.

Thanks Graham

View this message in context: http://www.nabble.com/cyg_io_read-tp23134401p23134401.html
Sent from the Sourceware - ecos-discuss mailing list archive at Nabble.com.

Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss

More information about the Ecos-discuss mailing list