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/Makefile.defs | 8 +++++ 2003/i/buzz/src/serial/serial.cc | 60 +++++++++++++++++++++++++++++++++++ 2003/i/buzz/src/serial/serial.h | 25 +++++++++++++++ 2003/i/buzz/src/serial/test_serial.cc | 30 ++++++++++++++++++ 4 files changed, 123 insertions(+) create mode 100644 2003/i/buzz/src/serial/Makefile.defs create mode 100644 2003/i/buzz/src/serial/serial.cc create mode 100644 2003/i/buzz/src/serial/serial.h create mode 100644 2003/i/buzz/src/serial/test_serial.cc (limited to '2003/i') diff --git a/2003/i/buzz/src/serial/Makefile.defs b/2003/i/buzz/src/serial/Makefile.defs new file mode 100644 index 0000000..ddafe5c --- /dev/null +++ b/2003/i/buzz/src/serial/Makefile.defs @@ -0,0 +1,8 @@ +LIBS += serial.a +TARGETS += test_serial +test_serial_SOURCES = test_serial.cc serial.a erreur.a +serial_a_SOURCES = serial.cc + +serial.a: ${serial_a_SOURCES:%.cc=serial.a(%.o)} + +test_serial: $(test_serial_SOURCES:%.cc=%.o) 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); +} + diff --git a/2003/i/buzz/src/serial/serial.h b/2003/i/buzz/src/serial/serial.h new file mode 100644 index 0000000..439ce3f --- /dev/null +++ b/2003/i/buzz/src/serial/serial.h @@ -0,0 +1,25 @@ +#ifndef serial_h +#define serial_h +// serial.h +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet + +#include +#include + +class Serial +{ + struct termios m_old; + int m_fd; + public: + // Constructeur. + Serial (const char *name); + // Destructeur. + ~Serial (void); + // Lit un caractère, ou -1. + int getchar (void); + // Ecrit un bloc. + ssize_t write (const void *buf, size_t size); +}; + +#endif // serial_h diff --git a/2003/i/buzz/src/serial/test_serial.cc b/2003/i/buzz/src/serial/test_serial.cc new file mode 100644 index 0000000..74001a1 --- /dev/null +++ b/2003/i/buzz/src/serial/test_serial.cc @@ -0,0 +1,30 @@ +// test_serial.cc +// buzz - Programme du robot Efrei Robotique I1-I2 2003 +// Copyright (C) 2003 Nicolas Schodet +// +#include "serial.h" +#include "erreur/erreur.h" + +#include + +int +main (void) +{ + try + { + Serial s ("/dev/tty00"); + //char c; + //do + //{ + s.write ("Coucou !\n", 9); + //c = s.getchar (); + //sleep (1); + //} + //while (c != 'q'); + } + catch (Erreur &e) + { + cerr << e.what (); + return 1; + } +} -- cgit v1.2.3