summaryrefslogtreecommitdiff
path: root/2004/i/nono
diff options
context:
space:
mode:
authorschodet2004-04-17 07:46:47 +0000
committerschodet2004-04-17 07:46:47 +0000
commit105698a1cc5bbfebe10b5219105b836a343b3c61 (patch)
tree3b98e513de073b2c0dbba3aee329c50518b743a6 /2004/i/nono
parent0f5b4128344db510e734292770bd97fdef780fa6 (diff)
Préparation du terrain pour stdin/stdout.
Diffstat (limited to '2004/i/nono')
-rw-r--r--2004/i/nono/src/serial/serial.cc10
-rw-r--r--2004/i/nono/src/serial/serial.h4
-rw-r--r--2004/i/nono/src/serial/serial_base.cc8
-rw-r--r--2004/i/nono/src/serial/serial_base.h3
-rw-r--r--2004/i/nono/src/serial/serial_dev.cc20
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;
}
}