le bar est ouvert

This commit is contained in:
tth 2018-12-14 18:52:06 +01:00
parent aba734c095
commit c391b6b079
3 changed files with 52 additions and 1 deletions

View File

@ -6,10 +6,22 @@ de contrôle du phytotron.
Ayant déja pratiqué ce genre de chose (recevoir des données par rs232) Ayant déja pratiqué ce genre de chose (recevoir des données par rs232)
pour un déja ancien 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, 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. 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.

View File

@ -170,3 +170,40 @@ switch (retval) {
return byte; 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;
}
/* -------------------------------------------------------------------- */

View File

@ -12,4 +12,6 @@ int getbyte(int fd);
/* timeout is exprimed in milliseconds. */ /* timeout is exprimed in milliseconds. */
int getbyte_to (int fd, int to_ms); int getbyte_to (int fd, int to_ms);
int getline_to(int fd, char *where, int szm, int to_ms);