From 4914e5113fbd4d6933e9d92e8ef794712dca170d Mon Sep 17 00:00:00 2001 From: tTh Date: Wed, 12 Dec 2018 14:38:32 +0100 Subject: [PATCH] getting serial code from an old project --- serial/README.md | 10 ++++- serial/serial.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++++ serial/serial.h | 6 +++ 3 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 serial/serial.c create mode 100644 serial/serial.h diff --git a/serial/README.md b/serial/README.md index bdb9934..9b62351 100644 --- a/serial/README.md +++ b/serial/README.md @@ -1,8 +1,14 @@ - # Serial Input But premier de ce module : recevoir les données fournies par l'automate -de contrôle du phytotron. +de contrôle du phytotron. Ayant déja pratiqué ce genre de chose pour un +déja ancien +[dfhdfgh](http://art.dinorama.fr/bdf/) +avec _MadPhoenix_, je me propose de reprendre quelques parties de ce code. + + + + diff --git a/serial/serial.c b/serial/serial.c new file mode 100644 index 0000000..5162508 --- /dev/null +++ b/serial/serial.c @@ -0,0 +1,98 @@ + +#include +#include +#include //Used for UART +#include //Used for UART +#include //Used for UART + +#include "serial.h" + +/* -------------------------------------------------------------------- */ +int baudrate2const(int bauds) +{ +int br; + +switch (bauds) + { + case 1200: br = B1200; break; + case 2400: br = B2400; break; + case 4800: br = B4800; break; + case 9600: br = B9600; break; + case 19200: br = B19200; break; + case 38400: br = B38400; break; + case 57600: br = B57600; break; + case 115200: br = B115200; break; + default: + fprintf(stderr, "baudrate %d invalide\n", bauds); + exit(1); + break; + } +return br; +} +/* -------------------------------------------------------------------- */ + +int prepare_UART(char *port, int baudrate) +{ +int uart0 = -1; +int baudbits; +struct termios options; + +#if DEBUG_LEVEL +fprintf(stderr, "%s ( %s %d )\n", __func__, port, baudrate); +#endif +//OPEN THE UART +//The flags (defined in fcntl.h): +// Access modes (use 1 of these): +// O_RDONLY - Open for reading only. +// O_RDWR - Open for reading and writing. +// O_WRONLY - Open for writing only. +// +// O_NDELAY / O_NONBLOCK (same function) - Enables nonblocking mode. +// When set read requests on the file can return immediately with a +// failure status +// if there is no input immediately available (instead of blocking). +// Likewise, write requests can also return +// immediately with a failure status if the output can't be written +// immediately. +// +// O_NOCTTY - When set and path identifies a terminal device, open() +// shall not cause the terminal device to become the controlling terminal +// for the process. + +uart0 = open(port, O_RDWR | O_NOCTTY); +if (uart0== -1) + { + perror("unable to open uart "); + return -1; + } + +// CONFIGURE THE UART +// The flags defined in /usr/include/termios.h - +// see http://pubs.opengroup.org/onlinepubs/007908799/xsh/termios.h.html +// Baud rate:- B1200, B2400, B4800, B9600, B19200, B38400, B57600, +// B115200, B230400, B460800, B500000, B576000, B921600, B1000000, +// B1152000, B1500000, B2000000, B2500000, B3000000, B3500000, B4000000 +// CSIZE:- CS5, CS6, CS7, CS8 +// CLOCAL - Ignore modem status lines +// CREAD - Enable receiver +// IGNPAR = Ignore characters with parity errors +// ICRNL - Map CR to NL on input (Use for ASCII comms where you want +// to auto correct end of line characters - don't use for bianry comms!) +// PARENB - Parity enable +// PARODD - Odd parity (else even) + + +baudbits = baudrate2const(baudrate); +#if DEBUG_LEVEL +fprintf(stderr, "%d -> %x\n", baudrate, baudbits); +#endif +tcgetattr(uart0, &options); +options.c_cflag = baudbits | CS8 | CLOCAL | CREAD; //