[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

termios raw question



Eric,

Thanks for the reply.  We are communicating with a non-ascii device, so
the code is passing characters to a custom protocol that determines when a
the entire message has been received.

Jennifer

> If your code is looking for  '\n' to terminate the read, and the
> device is actually sending a '\r' then you'll never see an 'end-of-
> line' unless ICRNL is set.
>
> i.e. if your code looks something like:
> 	for(;;) {
> 		read(fd,&c,1);
> 		if (c == '\n')
> 			break;
> 		buf[i++] = c;
> 	}
> then you must have IRCNL set.....
>
>
> On Feb 14, 2006, at 6:03 PM, Jennifer Averett wrote:
>
>> I'm trying to use termios for reading/writing a raw data stream.
>> I am using tcgetattr to get the attributes then setting:
>>
>>   termios_attr.c_iflag &= ~(IXON|IXANY|IXOFF);
>>   termios_attr.c_oflag &= ~OPOST;
>>   termios_attr.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
>>   termios_attr.c_cflag = CREAD;
>>   termios_attr.c_cflag &= ~(CSIZE|PARENB);
>>
>>   Setting Baud rate in c_cflag based upon a table value
>>   Setting bits per charachter in c_cflag based upon a table value
>>   Setting parity in c_cflag based upon a table value
>>   Setting number in c_cflag of stop bits based upon a table value
>>   Settiing flow control in c_iflag based upon a table value
>>
>> Then I use tcsetattr to set the attribute.  I found a problem where
>> 0xd
>> was being changed to a 0xa with this code and replaced the first
>> c_iflag
>> setting with:
>>
>>   termios_attr.c_iflag &= ~(IXON|IXANY|IXOFF|ICRNL);
>>
>> However this causes a queue overflow when reading the device.  Does
>> anyone
>> know if clearing ICRNL, would have the effect of hoarding input
>> characters
>> and if so how to keep this from happening?  Any other suggestions
>> would be
>> appreciated.
>>
>> Jennifer
>
> --
> Eric Norum <norume at aps.anl.gov>
> Advanced Photon Source
> Argonne National Laboratory
> (630) 252-4793
>
>
>