Распечатка 5.5 Настройка termios

Предыдущая  Содержание  Следующая V*D*V

Распечатка 5.5.

 

static void

my_uart_set_termios(struct uart_port *port,

                    struct termios *termios, struct termios *old)

{

  unsigned int c_cflag = termios->c_cflag;

  unsigned int baud=9600, stop_bits=1, parity=0, data_bits=8;

  unsigned long flags;

 

  /* Считаем число битов данных */

  switch (c_cflag & CSIZE) {

    case CS5: data_bits = 5; break;

    case CS6: data_bits = 6; break;

    case CS7: data_bits = 7; break;

    case CS8: data_bits = 8; break;

    default: data_bits = 8;

  }

 

  if(c_cflag & CSTOPB) stop_bits = 2;

 

  if(c_cflag & PARENB) parity = 1;

  if(c_cflag & PARODD) parity = 2;

 

  /*

   * Мы поддерживаем только 2 скорости, 9600 и 19200. Создаём

   * настройки termios для одной из них

   */

  baud = uart_get_baud_rate(port, termios, old_termios, 9600,

                                                       19200)

 

  spin_lock_irqsave(&port->lock, flags);

  SET_SPEED(baud);

  SET_STOP_BITS(stop_bits);

  SET_PARITY(parity);

  SET_BITS(data_bits);

 

  port->read_status_mask = OVERRUN_ERROR;

 

  if(termios->c_iflag & INPCK)

    port->read_status_mask |= PARITY_ERROR | FRAME_ERROR;

  port->ignore_status_mask = 0;

 

  if(termios->c_iflag & IGNPAR)

    port->ignore_status_mask |= PARITY_ERROR | FRAME_ERROR;

 

  spin_lock_irqrestore(&port->lock, flags);

}

 

Предыдущая  Содержание  Следующая