From 44b062ea034a817ac03192980e9e8bfc1ac0f9b8 Mon Sep 17 00:00:00 2001 From: schodet Date: Mon, 26 May 2003 08:54:31 +0000 Subject: Ajout du port serie. --- 2003/i/buzz/src/serial/serial.cc | 60 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 2003/i/buzz/src/serial/serial.cc (limited to '2003/i/buzz/src/serial/serial.cc') diff --git a/2003/i/buzz/src/serial/serial.cc b/2003/i/buzz/src/serial/serial.cc new file mode 100644 index 0000000..d603c63 --- /dev/null +++ b/2003/i/buzz/src/serial/serial.cc @@ -0,0 +1,60 @@ +// serial.cc +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet +// +#include "serial.h" +#include "erreur/erreur.h" + +#include + +// Constructeur. +Serial::Serial (const char *name) +{ + struct termios tios; + // Ouvre le port série. + m_fd = open (name, O_RDWR | O_NOCTTY | O_NONBLOCK); + if (m_fd < 0) + throw ErreurFatale ("Erreur d'ouverture du port série.\n"); + // Rendre le port série asynchrone. + //fcntl (m_fd, F_SETFL, FASYNC); + // Sauver la configuration courante du port série. + tcgetattr (m_fd, &m_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); + // Vider et configuer le port série. + tcflush (m_fd, TCIFLUSH); + tcsetattr (m_fd, TCSANOW, &tios); +} + +// Destructeur. +Serial::~Serial (void) +{ + tcsetattr (m_fd, TCSANOW, &m_old); +} + +// Lit un caractère, ou -1. +int +Serial::getchar (void) +{ + char c; + if (read (m_fd, &c, 1) == 1) + return c; + else + return -1; +} + +// Ecrit un bloc. +ssize_t +Serial::write (const void *buf, size_t size) +{ + return ::write (m_fd, buf, size); +} + -- cgit v1.2.3