Cant open serial port properly ... I dont understand whats wrong ...

3 vues
Accéder directement au premier message non lu

Doublehp

non lue,
23 févr. 2004, 18:43:3923/02/2004
à
This message is related with

http://groups.google.fr/groups?dq=&hl=fr&lr=&ie=UTF-8&threadm=1076050956.639555%40excalibur.osa.com.au&prev=/groups%3Fdq%3D%26num%3D25%26hl%3Dfr%26lr%3D%26ie%3DUTF-8%26group%3Dalt.microcontrollers.8bit%26start%3D25

I received from motorola the following answer:
"This customer use Linux and have trouble to send 0x0A or 0x0D, this
is due
to his Linux I/O driver. Metrowerks CodeWarrior for HC08 is run under
Windowes OS and it
works fine on 908JB8 without any trouble on send 0x0A or 0x0D down."


can someone untar http://demaine.free.fr/monitor_68hc08/src/ read the
file rs232.c and try to find whats wrong between lines 49 to 71 ?

I really dont understand what could make opening the port in a wrong
mode ...

You dont really need to comile ... just read my last post, my logbook
p29 and my source file.

Thanks for any help

Michael Anton

non lue,
23 févr. 2004, 21:28:5423/02/2004
à
You may need to specify the translation mode as binary, as I'm not sure
what
the default translation mode under Linux is.

Mike Anton


"Doublehp" <d...@doublehp.org> wrote in message
news:71c62763.04022...@posting.google.com...

Doublehp

non lue,
24 févr. 2004, 17:49:4724/02/2004
à
d...@doublehp.org (Doublehp) wrote in message news:<71c62763.04022...@posting.google.com>...

after 2h of chat on IRC, someone said me that i forgot to enter
nonOPOST mode, so I added line 70 with the proper line as described on
http://www.easysw.mike/serial/serial.html

/* canonical raw input */
vars->serial->c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
vars->serial->c_lflag &= ~OPOST;
vars->serial->c_cflag |= (CS8); /* use 8bit data */
// term_prop->c_cflag |= (CLOCAL | CREAD);
tcsetattr(fd, TCSAFLUSH, vars->serial);

but I still had the same bug ... so that people offered that very
horrible hack:
I put

sprintf(stty,"stty -a < %s",vars->device);
system(stty);

after tcsetattr

Q: why isnt the line with ~OPOST enough ???

Brian Dean

non lue,
24 févr. 2004, 19:49:0024/02/2004
à
On Tue, Feb 24, 2004 at 02:49:47PM -0800, Doublehp wrote:

> vars->serial->c_lflag &= ~OPOST;

> but I still had the same bug ... so that people offered that very


> horrible hack:
> I put
>
> sprintf(stty,"stty -a < %s",vars->device);
> system(stty);
>
> after tcsetattr
>
> Q: why isnt the line with ~OPOST enough ???

OPOST needs to be applied to c_oflag (output modes), not c_lflag
(local modes).

Cheers,
-Brian
--
Brian Dean, b...@bdmicro.com
BDMICRO - MAVRIC & MAVRIC-II ATmega128 Based Dev Boards
http://www.bdmicro.com/

Doublehp

non lue,
25 févr. 2004, 20:03:0125/02/2004
à
Brian Dean <b...@bdmicro.com> wrote in message news:<20040225004...@vm.bdmicro.com>...

> On Tue, Feb 24, 2004 at 02:49:47PM -0800, Doublehp wrote:
>
> > vars->serial->c_lflag &= ~OPOST;
>
> > but I still had the same bug ... so that people offered that very
> > horrible hack:
> > I put
> >
> > sprintf(stty,"stty -a < %s",vars->device);
> > system(stty);
> >
> > after tcsetattr
> >
> > Q: why isnt the line with ~OPOST enough ???
>
> OPOST needs to be applied to c_oflag (output modes), not c_lflag
> (local modes).
>
> Cheers,
> -Brian

You are right. Thank you all of you for your help

Wim Lewis

non lue,
25 févr. 2004, 20:03:1125/02/2004
à
In article <f4a4c456.0402...@posting.google.com>,

Doublehp <doub...@doublehp.org> wrote:
>after 2h of chat on IRC, someone said me that i forgot to enter
>nonOPOST mode, so I added line 70 with the proper line as described on
>http://www.easysw.mike/serial/serial.html
>
>/* canonical raw input */
> vars->serial->c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

Actually, this is setting *non*canonical input (turning off ICANON).
"Canonical" input means translating the terminal's idea of CR into
Unix's idea (0x0A). By default, the serial port is configured to
talk to a terminal, so flags like that are turned on.

See "man termios" for all the gory details. Yo ucan probably get what
you want with "raw" mode: call tcgetattr(), cfmakeraw(), and then
tcsetattr() to apply the modified attributes back onto the serial device.
cfmakeraw() does almost the same thing you're doing in the code snippet
you posted, except it modifies a few more flags.

--
Wim Lewis <wi...@hhhh.org>, Seattle, WA, USA. PGP keyID 27F772C1

Répondre à tous
Répondre à l'auteur
Transférer
0 nouveau message