summaryrefslogtreecommitdiffstats
path: root/testsuite/termios/test_termios_driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/termios/test_termios_driver.c')
-rw-r--r--testsuite/termios/test_termios_driver.c136
1 files changed, 136 insertions, 0 deletions
diff --git a/testsuite/termios/test_termios_driver.c b/testsuite/termios/test_termios_driver.c
new file mode 100644
index 00000000..35637b99
--- /dev/null
+++ b/testsuite/termios/test_termios_driver.c
@@ -0,0 +1,136 @@
+/*
+ * 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.org/license/LICENSE.
+ */
+
+#include <machine/rtems-bsd-kernel-space.h>
+#include <sys/types.h>
+#include <sys/conf.h>
+#include <sys/tty.h>
+#include <sys/serial.h>
+#include <assert.h>
+#include <rtems/seterr.h>
+
+#include "../termios/test_termios_driver.h"
+
+static tsw_open_t test_termios_open;
+static tsw_close_t test_termios_close;
+static tsw_ioctl_t test_termios_ioctl;
+static tsw_modem_t test_termios_modem;
+static tsw_param_t test_termios_param;
+static tsw_outwakeup_t test_termios_outwakeup;
+static tsw_inwakeup_t test_termios_inwakeup;
+static tsw_free_t test_termios_free;
+
+static struct ttydevsw test_termios_class = {
+ .tsw_flags = TF_INITLOCK | TF_CALLOUT,
+ .tsw_open = test_termios_open,
+ .tsw_close = test_termios_close,
+ .tsw_outwakeup = test_termios_outwakeup,
+ .tsw_inwakeup = test_termios_inwakeup,
+ .tsw_ioctl = test_termios_ioctl,
+ .tsw_param = test_termios_param,
+ .tsw_modem = test_termios_modem,
+ .tsw_free = test_termios_free,
+};
+
+struct test_termios_softc tt_softc;
+
+static int
+test_termios_open(struct tty *tp)
+{
+ return (0);
+}
+
+static void
+test_termios_close(struct tty *tp)
+{
+}
+
+static void
+test_termios_outwakeup(struct tty *tp)
+{
+}
+
+static void
+test_termios_inwakeup(struct tty *tp)
+{
+}
+
+static int
+test_termios_ioctl(struct tty *tp, u_long cmd, caddr_t data, struct thread *td)
+{
+ return (ENOIOCTL);
+}
+
+static int
+test_termios_param(struct tty *tp, struct termios *t)
+{
+ return (0);
+}
+
+static int
+test_termios_modem(struct tty *tp, int sigon, int sigoff)
+{
+ struct test_termios_softc *sc = tty_softc(tp);
+
+ if ((sigon == 0) && (sigoff == 0)) {
+ if (sc->sc_mcr & SER_DTR) {
+ sigon |= SER_DTR;
+ }
+ if (sc->sc_mcr & SER_RTS) {
+ sigon |= SER_RTS;
+ }
+ if (sc->sc_msr & SER_CTS) {
+ sigon |= SER_CTS;
+ }
+ if (sc->sc_msr & SER_DCD) {
+ sigon |= SER_DCD;
+ }
+ if (sc->sc_msr & SER_DSR) {
+ sigon |= SER_DSR;
+ }
+ if (sc->sc_msr & SER_RI) {
+ sigon |= SER_RI;
+ }
+ return (sigon);
+ }
+ if (sigon & SER_DTR) {
+ sc->sc_mcr |= SER_DTR;
+ }
+ if (sigoff & SER_DTR) {
+ sc->sc_mcr &= ~SER_DTR;
+ }
+ if (sigon & SER_RTS) {
+ sc->sc_mcr |= SER_RTS;
+ }
+ if (sigoff & SER_RTS) {
+ sc->sc_mcr &= ~SER_RTS;
+ }
+ return (0);
+}
+
+static void
+test_termios_free(void *xsc)
+{
+}
+
+void
+test_termios_make_dev(void)
+{
+ struct tty *tp = NULL;
+
+ memset( &tt_softc, 0, sizeof( tt_softc ));
+ tt_softc.sc_msr = SER_DCD | SER_CTS | SER_DSR;
+
+ tp = tty_alloc_mutex(&test_termios_class, &tt_softc, NULL);
+ assert(tp != NULL);
+ tt_softc.tp = tp;
+
+ tty_makedev( tp, NULL, "%s", TERMIOS_TEST_DRIVER_TTY_PREFIX TERMIOS_TEST_DRIVER_TTY_UNIT);
+ assert(tp != NULL);
+} \ No newline at end of file