diff --git a/serial/README.md b/serial/README.md index defd657..f7486ff 100644 --- a/serial/README.md +++ b/serial/README.md @@ -6,10 +6,22 @@ de contrôle du phytotron. Ayant déja pratiqué ce genre de chose (recevoir des données par rs232) pour un déja ancien -[projet](http://art.dinorama.fr/bdf/) +[projet artsitique](http://art.dinorama.fr/bdf/) conçu par et avec _MadPhoenix_, je me propose de reprendre quelques parties de ce code, de le remettre au gout du jour et de le tester dès que possible. +## principe général + +Pour écouter plusieurs lignes simultanément, chaque port sera traité +par un _thread_ séparé, et les diverses données reçues seront pré-traitées +par celui-ci. Les flux de données seront alors agrégées par +le célèbre *synthétiseur d'évènement* mis au point il y a très longtemps +par le professeur Cispeo. + + + + + diff --git a/serial/serial.c b/serial/serial.c index f086c13..1c04a8a 100644 --- a/serial/serial.c +++ b/serial/serial.c @@ -170,3 +170,40 @@ switch (retval) { return byte; } /* -------------------------------------------------------------------- */ +/* timeout is in milliseconds */ + +int getline_to(int fd, char *where, int szm, int to_ms) +{ +int curpos, byte, retval; + +curpos = 0; +retval = -7; /* magic number powa */ +where[0] = '\0'; /* erase all the bs */ + +for(;;) { + byte = getbyte_to (fd, to_ms); + + if (byte < 0) { + fprintf(stderr, "%s : somthing is wrong %d\n", + __func__, byte); + retval = byte; + break; + } + + if ('\n' == byte) { /* got an EOL ? */ + where[curpos] = '\0'; + retval = curpos; + } + + + + + } + +fprintf(stderr, "%s -> '%s'\n", __func__, where); + + +return -666; +} +/* -------------------------------------------------------------------- */ + diff --git a/serial/serial.h b/serial/serial.h index 2bd7cb5..9da35b3 100644 --- a/serial/serial.h +++ b/serial/serial.h @@ -12,4 +12,6 @@ int getbyte(int fd); /* timeout is exprimed in milliseconds. */ int getbyte_to (int fd, int to_ms); +int getline_to(int fd, char *where, int szm, int to_ms); +