From 105698a1cc5bbfebe10b5219105b836a343b3c61 Mon Sep 17 00:00:00 2001 From: schodet Date: Sat, 17 Apr 2004 07:46:47 +0000 Subject: Préparation du terrain pour stdin/stdout. --- 2004/i/nono/src/serial/serial.cc | 10 +++++++--- 2004/i/nono/src/serial/serial.h | 4 ++-- 2004/i/nono/src/serial/serial_base.cc | 8 ++++---- 2004/i/nono/src/serial/serial_base.h | 3 ++- 2004/i/nono/src/serial/serial_dev.cc | 20 +++++++++++--------- 5 files changed, 26 insertions(+), 19 deletions(-) diff --git a/2004/i/nono/src/serial/serial.cc b/2004/i/nono/src/serial/serial.cc index 9091425..c5f671e 100644 --- a/2004/i/nono/src/serial/serial.cc +++ b/2004/i/nono/src/serial/serial.cc @@ -38,13 +38,17 @@ Serial::~Serial (void) } /// Ouvre et paramètre le port série. \a ttyname peut être un device -/// ("/dev/tty00", voir SerialDev) ou un programme précédé d'un tube -/// ("|simul_asserv", voir SerialPipe). +/// ("/dev/tty00", voir SerialDev), un programme précédé d'un tube +/// ("|simul_asserv", voir SerialPipe) ou l'entrée/sortie standard ("-"). void Serial::open (const char *ttyname, int speed/*0*/) { close (); - if (ttyname[0] == '|') + if (ttyname[0] == '-' && ttyname[1] == '\0') + { + // TODO + } + else if (ttyname[0] == '|') { // TODO } diff --git a/2004/i/nono/src/serial/serial.h b/2004/i/nono/src/serial/serial.h index e3b03de..fafb77b 100644 --- a/2004/i/nono/src/serial/serial.h +++ b/2004/i/nono/src/serial/serial.h @@ -38,8 +38,8 @@ class Serial /// Destructeur. ~Serial (void); /// Ouvre et paramètre le port série. \a ttyname peut être un device - /// ("/dev/tty00", voir SerialDev) ou un programme précédé d'un tube - /// ("|simul_asserv", voir SerialPipe). + /// ("/dev/tty00", voir SerialDev), un programme précédé d'un tube + /// ("|simul_asserv", voir SerialPipe) ou l'entrée/sortie standard ("-"). void open (const char *ttyname, int speed = 0); /// Ferme le port série, appellé automatiquement dans le destructeur. void close (void); diff --git a/2004/i/nono/src/serial/serial_base.cc b/2004/i/nono/src/serial/serial_base.cc index c43bb59..48690c8 100644 --- a/2004/i/nono/src/serial/serial_base.cc +++ b/2004/i/nono/src/serial/serial_base.cc @@ -30,7 +30,7 @@ /// Constructeur. SerialBase::SerialBase (void) - : fd_ (-1) + : fdIn_ (-1), fdOut_ (-1) { } @@ -45,7 +45,7 @@ SerialBase::~SerialBase (void) ssize_t SerialBase::read (void *buf, size_t size) { - return ::read (fd_, buf, size); + return ::read (fdIn_, buf, size); } /// Lit un caractère, ou -1 en cas d'erreur ou si aucun caractère n'est @@ -64,7 +64,7 @@ SerialBase::getchar (void) void SerialBase::write (const void *buf, size_t size) { - ::write (fd_, buf, size); + ::write (fdOut_, buf, size); } /// Ecrit un caractère. @@ -83,7 +83,7 @@ SerialBase::wait (int timeout/*-1*/) int r; // Setup fd_set. FD_ZERO (&fds); - FD_SET (fd_, &fds); + FD_SET (fdIn_, &fds); if (timeout == -1) { // Without timeout. diff --git a/2004/i/nono/src/serial/serial_base.h b/2004/i/nono/src/serial/serial_base.h index 2c092b3..97fd975 100644 --- a/2004/i/nono/src/serial/serial_base.h +++ b/2004/i/nono/src/serial/serial_base.h @@ -32,7 +32,8 @@ class SerialBase { protected: /// Descripteur de fichier utilisé par getchar et write. - int fd_; + int fdIn_; + int fdOut_; public: /// Constructeur. SerialBase (void); diff --git a/2004/i/nono/src/serial/serial_dev.cc b/2004/i/nono/src/serial/serial_dev.cc index 47d7461..7baa9d8 100644 --- a/2004/i/nono/src/serial/serial_dev.cc +++ b/2004/i/nono/src/serial/serial_dev.cc @@ -45,13 +45,13 @@ SerialDev::open (const char *ttyname, int speed/*0*/) { struct termios tios; // Ouvre le port série. - fd_ = ::open (ttyname, O_RDWR | O_NOCTTY | O_NONBLOCK); - if (fd_ < 0) + fdIn_ = ::open (ttyname, O_RDWR | O_NOCTTY | O_NONBLOCK); + if (fdIn_ < 0) throw ErreurFatale ("Erreur d'ouverture du port série.\n"); // Rendre le port série asynchrone. //fcntl (fd_, F_SETFL, FASYNC); // Sauver la configuration courante du port série. - tcgetattr (fd_, &old_); + tcgetattr (fdIn_, &old_); // Paramètrer les options du port série. tios.c_cflag = CS8 | CLOCAL | CREAD /*| BAUDRATE*/; tios.c_iflag = IGNBRK | IGNPAR; @@ -88,8 +88,9 @@ SerialDev::open (const char *ttyname, int speed/*0*/) throw ErreurFatale ("Vitesse de port série non supportée\n"); } // Vider et configurer le port série. - tcflush (fd_, TCIFLUSH); - tcsetattr (fd_, TCSANOW, &tios); + tcflush (fdIn_, TCIFLUSH); + tcsetattr (fdIn_, TCSANOW, &tios); + fdOut_ = fdIn_; } /// Ferme le port série, appellé automatiquement dans le destructeur de la @@ -97,11 +98,12 @@ SerialDev::open (const char *ttyname, int speed/*0*/) void SerialDev::close (void) { - if (fd_ != -1) + if (fdIn_ != -1) { - tcsetattr (fd_, TCSANOW, &old_); - ::close (fd_); - fd_ = -1; + tcsetattr (fdIn_, TCSANOW, &old_); + ::close (fdIn_); + fdIn_ = -1; + fdOut_ = -1; } } -- cgit v1.2.3