diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2000-08-30 08:18:56 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2000-08-30 08:18:56 +0000 |
commit | b45952659c490c7ccebba3c7e05c8f271776c2ca (patch) | |
tree | dea1ba110846cb23f6efc63e9663212802bcd616 /c/src/lib/libbsp/i386/shared/comm/uart.c | |
parent | 2000-08-26 Rosimildo da Silva <rdasilva@connecttel.com> (diff) | |
download | rtems-b45952659c490c7ccebba3c7e05c8f271776c2ca.tar.bz2 |
2000-08-26 Rosimildo da Silva <rdasilva@connecttel.com>
* shared/comm: Added "/dev/ttyS1" & "/dev/ttyS2" support for
the i386 BSPs.
* shared/comm/gdb_glue.c: New file.
* shared/comm/i386_io.c: New file.
* shared/comm/tty_drv.c: New file.
* shared/comm/tty_drv.h: New file.
* shared/comm/Makefile.am: Account for new files.
* shared/comm/uart.c: Adds support for sending characters to
another "line discipline."
Diffstat (limited to 'c/src/lib/libbsp/i386/shared/comm/uart.c')
-rw-r--r-- | c/src/lib/libbsp/i386/shared/comm/uart.c | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/c/src/lib/libbsp/i386/shared/comm/uart.c b/c/src/lib/libbsp/i386/shared/comm/uart.c index b55be1a01e..c794e922a3 100644 --- a/c/src/lib/libbsp/i386/shared/comm/uart.c +++ b/c/src/lib/libbsp/i386/shared/comm/uart.c @@ -424,6 +424,28 @@ static void* termios_ttyp_com2 = NULL; static char termios_tx_hold_com2 = 0; static volatile char termios_tx_hold_valid_com2 = 0; +static void ( *driver_input_handler_com1 )( void *, char *, int ) = 0; +static void ( *driver_input_handler_com2 )( void *, char *, int ) = 0; + +/* + * This routine sets the handler to handle the characters received + * from the serial port. + */ +void uart_set_driver_handler( int port, void ( *handler )( void *, char *, int ) ) +{ + switch( port ) + { + case BSP_UART_COM1: + driver_input_handler_com1 = handler; + break; + + case BSP_UART_COM2: + driver_input_handler_com2 = handler; + break; + } +} + + /* * Set channel parameters */ @@ -616,9 +638,15 @@ BSP_uart_termios_isr_com1(void) if(off != 0) { /* Update rx buffer */ - rtems_termios_enqueue_raw_characters(termios_ttyp_com1, - (char *)buf, - off); + if( driver_input_handler_com1 ) + { + driver_input_handler_com1( termios_ttyp_com1, (char *)buf, off ); + } + else + { + /* Update rx buffer */ + rtems_termios_enqueue_raw_characters(termios_ttyp_com1, (char *)buf, off ); + } } return; case TRANSMITTER_HODING_REGISTER_EMPTY : @@ -710,9 +738,14 @@ BSP_uart_termios_isr_com2() if(off != 0) { /* Update rx buffer */ - rtems_termios_enqueue_raw_characters(termios_ttyp_com2, - (char *)buf, - off); + if( driver_input_handler_com2 ) + { + driver_input_handler_com2( termios_ttyp_com2, (char *)buf, off ); + } + else + { + rtems_termios_enqueue_raw_characters(termios_ttyp_com2, (char *)buf, off); + } } return; case TRANSMITTER_HODING_REGISTER_EMPTY : |