diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-07-01 14:35:00 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-07-01 14:35:00 +0000 |
commit | 7424c3ee866ba2a468d7959c4993f83e8667e7a0 (patch) | |
tree | c06da1c7abadce221ed963092384055d4ad3b037 /testsuites/libtests/termios05/termios_testdriver_taskdriven.c | |
parent | 2010-07-01 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff) | |
download | rtems-7424c3ee866ba2a468d7959c4993f83e8667e7a0.tar.bz2 |
2010-07-01 Joel Sherrill <joel.sherrill@oarcorp.com>
* Makefile.am, configure.ac: Add test for task driven drivers.
* termios05/.cvsignore, termios05/Makefile.am, termios05/init.c,
termios05/termios05.doc, termios05/termios05.scn,
termios05/termios_testdriver_taskdriven.c,
termios05/termios_testdriver_taskdriven.h: New files.
Diffstat (limited to '')
-rw-r--r-- | testsuites/libtests/termios05/termios_testdriver_taskdriven.c | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/testsuites/libtests/termios05/termios_testdriver_taskdriven.c b/testsuites/libtests/termios05/termios_testdriver_taskdriven.c new file mode 100644 index 0000000000..1ef0057df1 --- /dev/null +++ b/testsuites/libtests/termios05/termios_testdriver_taskdriven.c @@ -0,0 +1,171 @@ +/* + * This file contains a test fixture termios device driver + * + * COPYRIGHT (c) 1989-2010. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#include "tmacros.h" +#include <rtems/libio.h> +#include <stdlib.h> +#include <termios.h> +#include <rtems/termiostypes.h> +#include <rtems/dumpbuf.h> +#include "termios_testdriver_taskdriven.h" + +#define TX_MAX 1024 +uint8_t Tx_Buffer[TX_MAX]; +int Tx_Index = 0; + +void termios_test_driver_dump_tx(const char *c) +{ + printf( "%s %d characters\n", c, Tx_Index ); + rtems_print_buffer( Tx_Buffer, Tx_Index ); + Tx_Index = 0; +} + +const uint8_t *Rx_Buffer; +int Rx_Index; +int Rx_Length; +bool Rx_FirstTime = true; + +void termios_test_driver_set_rx( + const void *p, + size_t len +) +{ + Rx_Buffer = p; + Rx_Length = len; + Rx_Index = 0; +} + +int termios_test_driver_inbyte_nonblocking( int port ) +{ + if ( Rx_FirstTime == true ) { + Rx_FirstTime = false; + return -1; + } + if ( Rx_Index >= Rx_Length ) + return -1; + return Rx_Buffer[ Rx_Index++ ]; +} + +void termios_test_driver_outbyte_polled( + int port, + char ch +) +{ + Tx_Buffer[Tx_Index++] = (uint8_t) ch; +} + +ssize_t termios_test_driver_write_support (int minor, const char *buf, size_t len) +{ + size_t nwrite = 0; + + while (nwrite < len) { + termios_test_driver_outbyte_polled( minor, *buf++ ); + nwrite++; + } + return nwrite; +} + + +/* + * Set Attributes Handler + */ +int termios_test_driver_set_attributes( + int minor, + const struct termios *t +) +{ + return 0; +} + +/* + * Test Device Driver Entry Points + */ +rtems_device_driver termios_test_driver_initialize( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +) +{ + rtems_termios_initialize(); + + /* + * Register Device Names + */ + (void) rtems_io_register_name( TERMIOS_TEST_DRIVER_DEVICE_NAME, major, 0 ); + + return RTEMS_SUCCESSFUL; +} + +rtems_device_driver termios_test_driver_open( + rtems_device_major_number major, + rtems_device_minor_number minor, + void * arg +) +{ + rtems_status_code sc; + static const rtems_termios_callbacks Callbacks = { + NULL, /* firstOpen */ + NULL, /* lastClose */ + termios_test_driver_inbyte_nonblocking, /* pollRead */ + termios_test_driver_write_support, /* write */ + termios_test_driver_set_attributes, /* setAttributes */ + NULL, /* stopRemoteTx */ + NULL, /* startRemoteTx */ + TERMIOS_TASK_DRIVEN /* outputUsesInterrupts */ + }; + + if ( minor > 2 ) { + puts( "ERROR - Termios_testdriver - only 1 minor supported" ); + rtems_test_exit(0); + } + + sc = rtems_termios_open (major, minor, arg, &Callbacks); + + return RTEMS_SUCCESSFUL; +} + +rtems_device_driver termios_test_driver_close( + rtems_device_major_number major, + rtems_device_minor_number minor, + void * arg +) +{ + return rtems_termios_close (arg); +} + +rtems_device_driver termios_test_driver_read( + rtems_device_major_number major, + rtems_device_minor_number minor, + void * arg +) +{ + return rtems_termios_read (arg); +} + +rtems_device_driver termios_test_driver_write( + rtems_device_major_number major, + rtems_device_minor_number minor, + void * arg +) +{ + return rtems_termios_write (arg); +} + +rtems_device_driver termios_test_driver_control( + rtems_device_major_number major, + rtems_device_minor_number minor, + void * arg +) +{ + return rtems_termios_ioctl (arg); +} |