The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Распечатка 5.3 Функции передачи

Распечатка 5.3 Функции передачи

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

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

 

static void my_uart_char_tx(struct uart_port *port)

{

  struct circ_buf *xmit = &port->info->xmit;

 

  /*

   * Если должен быть передан символ XON/XOFF, ядром

   * последовательного порта устанавливается поле x_char

   * данного порта

   */

  if(port->x_char)

  {

    SEND_CHAR(port->x_char);

    port->x_char = 0; /* Reset the field */

    return;

  }

 

  if(uart_tx_stopped(port) || uart_circ_empty(xmit))

  {

    my_uart_stop_tx(port, 0);

    return;

  }

 

  SEND_CHAR(xmit->buf[xmit->tail]);

 

  /*

   * UART_XMIT_SIZE определено include/linux/serial_core.h

   */

  xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE – 1);

 

  /*

   * Теперь проверяем, есть ли ещё символы для передачи

   * и есть ли достаточно места в буфере передачи, которое

   * определено макросом WAKEUP_CHARS в файле

   * include/linux/serial_core.h как 256. Предоставляемая ядром

   * последовательного порта функция uart_write_wakeup в конце

   * концов заканчивается функцией обработчика пробуждения TTY,

   * которая в свою очередь информирует дисциплину линии, что

   * низкоуровневый драйвер готов к приёму других данных.

   */

  if(uart_circ_chars_pending(xmit) < WAKEUP_CHARS)

    uart_write_wakeup(port);

  if(uart_circ_empty(xmit))

    my_uart_stop_tx(port, 0);

}

 

static void

my_uart_stop_tx(struct uart_port *port, unsigned int c)

{

  STOP_TX();

}

 

static void

my_uart_start_tx(struct uart_port *port, unsigned int start)

{

  START_TX();

  my_uart_char_tx(port);

}

 

/* Возвращает 0, если не пусто */

static unsigned int my_uart_tx_empty(struct uart_port *port)

{

  return (TX_EMPTY()? TIOCSER_TEMT : 0);

}

 

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