diff options
Diffstat (limited to 'ACE/examples/IPC_SAP/DEV_SAP')
-rw-r--r-- | ACE/examples/IPC_SAP/DEV_SAP/Makefile.am | 14 | ||||
-rw-r--r-- | ACE/examples/IPC_SAP/DEV_SAP/README | 23 | ||||
-rw-r--r-- | ACE/examples/IPC_SAP/DEV_SAP/reader/Makefile.am | 39 | ||||
-rw-r--r-- | ACE/examples/IPC_SAP/DEV_SAP/reader/dev_sap_reader.mpc | 11 | ||||
-rw-r--r-- | ACE/examples/IPC_SAP/DEV_SAP/reader/reader.cpp | 72 | ||||
-rw-r--r-- | ACE/examples/IPC_SAP/DEV_SAP/writer/Makefile.am | 39 | ||||
-rw-r--r-- | ACE/examples/IPC_SAP/DEV_SAP/writer/dev_sap_writer.mpc | 11 | ||||
-rw-r--r-- | ACE/examples/IPC_SAP/DEV_SAP/writer/writer.cpp | 77 |
8 files changed, 286 insertions, 0 deletions
diff --git a/ACE/examples/IPC_SAP/DEV_SAP/Makefile.am b/ACE/examples/IPC_SAP/DEV_SAP/Makefile.am new file mode 100644 index 00000000000..ecc65507d22 --- /dev/null +++ b/ACE/examples/IPC_SAP/DEV_SAP/Makefile.am @@ -0,0 +1,14 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +SUBDIRS = \ + reader \ + writer + diff --git a/ACE/examples/IPC_SAP/DEV_SAP/README b/ACE/examples/IPC_SAP/DEV_SAP/README new file mode 100644 index 00000000000..8e47d8c5cec --- /dev/null +++ b/ACE/examples/IPC_SAP/DEV_SAP/README @@ -0,0 +1,23 @@ +This directory contains a test example for the DEV_SAP +class category. It implements a class TTY_IO that is +derived from ACE_DEV_IO and adds a control method +with specific features for a serial line connection +(e.g. /dev/ttya and /dev/ttyb on UNIX systems). + +The reader/reader executable initializes its +device-special file (given as command-line parameter), +reads characters from it (until it recognizes character 'q') +ands sends the characters read to stdout. + +The writer/writer executable also initializes its +device-special file (given as command-line parameter), +reads characters from stdin (until'q') and sends them +to the device. + +To run the tests I connect /dev/ttya and /dev/ttyb (with a +zero modem cable) and start the reader with "reader /dev/ttya" +and the writer (in a different window) with "writer /dev/ttyb". + +Characters typed in the writer window should now appear as output +in the reader window. Note that characters are buffered till EOL. + diff --git a/ACE/examples/IPC_SAP/DEV_SAP/reader/Makefile.am b/ACE/examples/IPC_SAP/DEV_SAP/reader/Makefile.am new file mode 100644 index 00000000000..ebd4eb798b8 --- /dev/null +++ b/ACE/examples/IPC_SAP/DEV_SAP/reader/Makefile.am @@ -0,0 +1,39 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.dev_sap_reader.am + +if !BUILD_ACE_FOR_TAO + +noinst_PROGRAMS = reader + +reader_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) + +reader_SOURCES = \ + reader.cpp + +reader_LDADD = \ + $(ACE_BUILDDIR)/ace/libACE.la + +endif !BUILD_ACE_FOR_TAO + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/examples/IPC_SAP/DEV_SAP/reader/dev_sap_reader.mpc b/ACE/examples/IPC_SAP/DEV_SAP/reader/dev_sap_reader.mpc new file mode 100644 index 00000000000..a6535c82e82 --- /dev/null +++ b/ACE/examples/IPC_SAP/DEV_SAP/reader/dev_sap_reader.mpc @@ -0,0 +1,11 @@ +// -*- MPC -*- +// $Id$ + +project : aceexe { + avoids += ace_for_tao + exename = reader + Source_Files { + reader.cpp + } +} + diff --git a/ACE/examples/IPC_SAP/DEV_SAP/reader/reader.cpp b/ACE/examples/IPC_SAP/DEV_SAP/reader/reader.cpp new file mode 100644 index 00000000000..60bfa446c2f --- /dev/null +++ b/ACE/examples/IPC_SAP/DEV_SAP/reader/reader.cpp @@ -0,0 +1,72 @@ +// $Id$ + +#include "ace/DEV_Addr.h" +#include "ace/DEV_Connector.h" +#include "ace/TTY_IO.h" + +ACE_RCSID(reader, reader, "$Id$") + +int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) +{ + if (argc < 2) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("usage: %s device-filename\n"), + argv[0]), + 1); + + ACE_TTY_IO read_dev; + ACE_DEV_Connector con; + + if (con.connect (read_dev, + ACE_DEV_Addr (argv[1])) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + argv[1]), + 1); + + ACE_TTY_IO::Serial_Params myparams; + myparams.baudrate = 19200; + myparams.xonlim = 0; + myparams.xofflim = 0; + myparams.readmincharacters = 0; + myparams.readtimeoutmsec = 10*1000; // 10 seconds + myparams.paritymode = "EVEN"; + myparams.ctsenb = false; + myparams.rtsenb = 0; + myparams.xinenb = false; + myparams.xoutenb = false; + myparams.modem = false; + myparams.rcvenb = true; + myparams.dsrenb = false; + myparams.dtrdisable = false; + myparams.databits = 8; + myparams.stopbits = 1; + + if (read_dev.control (ACE_TTY_IO::SETPARAMS, + &myparams) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p control\n"), + argv[1]), + 1); + + // Read till character 'q'. + for (char readback = 'x'; readback != 'q'; ) + { + ssize_t bytes_read = + read_dev.recv ((void *) &readback, 1); + + if (bytes_read == 1) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("read: %c\n"), + readback)); + else if (bytes_read == 0) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("timeout!\n"))); + else if (bytes_read == -1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p recv\n"), + argv[1]), 1); + } + + return 0; +} diff --git a/ACE/examples/IPC_SAP/DEV_SAP/writer/Makefile.am b/ACE/examples/IPC_SAP/DEV_SAP/writer/Makefile.am new file mode 100644 index 00000000000..b660839e482 --- /dev/null +++ b/ACE/examples/IPC_SAP/DEV_SAP/writer/Makefile.am @@ -0,0 +1,39 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ./bin/mwc.pl -type automake -noreldefs ACE.mwc + +ACE_BUILDDIR = $(top_builddir) +ACE_ROOT = $(top_srcdir) + + +## Makefile.dev_sap_writer.am + +if !BUILD_ACE_FOR_TAO + +noinst_PROGRAMS = writer + +writer_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) + +writer_SOURCES = \ + writer.cpp + +writer_LDADD = \ + $(ACE_BUILDDIR)/ace/libACE.la + +endif !BUILD_ACE_FOR_TAO + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/ACE/examples/IPC_SAP/DEV_SAP/writer/dev_sap_writer.mpc b/ACE/examples/IPC_SAP/DEV_SAP/writer/dev_sap_writer.mpc new file mode 100644 index 00000000000..75486584b6d --- /dev/null +++ b/ACE/examples/IPC_SAP/DEV_SAP/writer/dev_sap_writer.mpc @@ -0,0 +1,11 @@ +// -*- MPC -*- +// $Id$ + +project : aceexe { + avoids += ace_for_tao + exename = writer + Source_Files { + writer.cpp + } +} + diff --git a/ACE/examples/IPC_SAP/DEV_SAP/writer/writer.cpp b/ACE/examples/IPC_SAP/DEV_SAP/writer/writer.cpp new file mode 100644 index 00000000000..a61b8ca2b8d --- /dev/null +++ b/ACE/examples/IPC_SAP/DEV_SAP/writer/writer.cpp @@ -0,0 +1,77 @@ +// $Id$ + +#include "ace/DEV_Connector.h" +#include "ace/TTY_IO.h" +#include "ace/OS_NS_unistd.h" + +ACE_RCSID(writer, writer, "$Id$") + +int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) +{ + if (argc < 2) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("usage: %s device-filename\n"), + argv[0]), 1); + + ACE_TTY_IO write_dev; + ACE_DEV_Connector con; + + if (con.connect (write_dev, + ACE_DEV_Addr (argv[1])) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + argv[1]), + 1); + + ACE_TTY_IO::Serial_Params myparams; + myparams.baudrate = 19200; + myparams.xonlim = 0; + myparams.xofflim = 0; + myparams.readmincharacters = 0; + myparams.readtimeoutmsec = 10000; + myparams.paritymode = "EVEN"; + myparams.ctsenb = false; + myparams.rtsenb = 0; + myparams.xinenb = false; + myparams.xoutenb = false; + myparams.modem = false; + myparams.rcvenb = true; + myparams.dsrenb = false; + myparams.dtrdisable = false; + myparams.databits = 8; + myparams.stopbits = 1; + + if (write_dev.control (ACE_TTY_IO::SETPARAMS, + &myparams) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("control")), + 1); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("enter character to send, q terminates :\n"))); + + for (char writeto; + ACE_OS::read (ACE_STDIN, &writeto, 1) != -1; + ) + { + ssize_t bytes_written = + write_dev.send_n ((void *) &writeto, + 1); + + if (bytes_written != 1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("send")), + 1); + if (writeto == 'q') + break; + } + + if (write_dev.close () == -1) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("%p\n"), + ACE_TEXT ("close")), + 1); + return 0; +} |