Parzystość - port szeregowy
: 16 grudnia 2011, 19:20
Witam.
Piszę program obsługujący urządzenie podłączone przez port COM. W kodzie jądra. w pliku ,,drivers/char/n_tty.c'' jest taka procedura obsługująca (mam nadzieję) błąd parzystości:
Wynika z niej, że jeśli mam ustawioną dla portu szeregowego opcję PARMRK, to INPCK nie powinna mieć znaczenia. A niestety eksperymentalnie sprawdziłem, że tak nie jest tzn. jeśli mam ustawione
To rzeczywiście bajty z błędem parzystości są poprzedzane bajtami: Natomiast, jeśli mam ustawione tylko:
to bajty z błędem parzystości są przepuszczane wszystkie, bez poprzedzenia bajtami:
Dlaczego tak się dzieje?
Pozdrawiam.
Piotr
Piszę program obsługujący urządzenie podłączone przez port COM. W kodzie jądra. w pliku ,,drivers/char/n_tty.c'' jest taka procedura obsługująca (mam nadzieję) błąd parzystości:
Kod: Zaznacz cały
static inline void n_tty_receive_parity_error(struct tty_struct *tty,
unsigned char c)
{
if (I_IGNPAR(tty))
return;
if (I_PARMRK(tty)) {
put_tty_queue('\377', tty);
put_tty_queue('\0', tty);
put_tty_queue(c, tty);
} else if (I_INPCK(tty))
put_tty_queue('\0', tty);
else
put_tty_queue(c, tty);
wake_up_interruptible(&tty->read_wait);
}
Kod: Zaznacz cały
newtio.c_iflag = IGNCR | INPCK | PARMRK ;
Kod: Zaznacz cały
\377 \0
Kod: Zaznacz cały
newtio.c_iflag = IGNCR | PARMRK ;
Kod: Zaznacz cały
\377 \0
Pozdrawiam.
Piotr