summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/serial/serial.cc
diff options
context:
space:
mode:
authorschodet2004-02-29 17:58:45 +0000
committerschodet2004-02-29 17:58:45 +0000
commitd5d826d6dc8dce514e16e6ac27d59a7fa2e2a356 (patch)
tree32c06ed29eed6c078d3e1e5c370c196c0c7e2f4b /2004/i/nono/src/serial/serial.cc
parent9bde55f8269c5f5187937144053a5ea1e9caa419 (diff)
Mod: Nouveau systeme plus modulaire pour le port série.
Diffstat (limited to '2004/i/nono/src/serial/serial.cc')
-rw-r--r--2004/i/nono/src/serial/serial.cc78
1 files changed, 23 insertions, 55 deletions
diff --git a/2004/i/nono/src/serial/serial.cc b/2004/i/nono/src/serial/serial.cc
index ab047ce..9091425 100644
--- a/2004/i/nono/src/serial/serial.cc
+++ b/2004/i/nono/src/serial/serial.cc
@@ -1,4 +1,4 @@
-// serial.cc - Contrôle du port serie.
+// serial.cc
// nono - programme du robot 2004. {{{
//
// Copyright (C) 2004 Nicolas Schodet
@@ -23,75 +23,43 @@
//
// }}}
#include "serial.h"
-#include "erreur/erreur.h"
+#include "serial_dev.h"
-#include <fcntl.h>
-
-// Constructeur.
-Serial::Serial (void)
- : fd_ (-1)
+/// Constructeur.
+Serial::Serial (bool blocking)
+ : blocking_ (blocking), sb_ (0)
{
}
-// Destructeur.
+/// Destructeur.
Serial::~Serial (void)
{
close ();
}
-// Ouvre et paramètre le port série.
+/// 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).
void
-Serial::open (const char *ttyname)
+Serial::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)
- 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_);
- // Paramètrer les options du port série.
- tios.c_cflag = CS8 | CLOCAL | CREAD /*| BAUDRATE*/;
- tios.c_iflag = IGNBRK | IGNPAR;
- tios.c_oflag = 0;
- tios.c_lflag = 0;
- // On n'attend jamais.
- tios.c_cc[VMIN] = 0;
- tios.c_cc[VTIME] = 0;
- //cfsetspeed (&tios, B115200);
- //cfsetspeed (&tios, B9600);
- cfsetspeed (&tios, B19200);
- // Vider et configuer le port série.
- tcflush (fd_, TCIFLUSH);
- tcsetattr (fd_, TCSANOW, &tios);
+ close ();
+ if (ttyname[0] == '|')
+ {
+ // TODO
+ }
+ else
+ {
+ sb_ = new SerialDev (blocking_);
+ sb_->open (ttyname, speed);
+ }
}
-// Ferme le port série, appellé dans le destructeur.
+/// Ferme le port série, appellé automatiquement dans le destructeur.
void
Serial::close (void)
{
- tcsetattr (fd_, TCSANOW, &old_);
- ::close (fd_);
- fd_ = -1;
-}
-
-// Lit un caractère, ou -1.
-int
-Serial::getchar (void)
-{
- char c;
- if (read (fd_, &c, 1) == 1)
- return c;
- else
- return -1;
-}
-
-// Ecrit un bloc.
-ssize_t
-Serial::write (const void *buf, size_t size)
-{
- return ::write (fd_, buf, size);
+ delete sb_;
+ sb_ = 0;
}