J'essaie d'organiser une fonctionnalité de lecture-écriture sans blocage avec un port série sous Linux. Voici le code que j'ai : http://pastebin.com/RSPw7HAi Tout fonctionne bien, mais il y a une mise en mémoire tampon. Cela signifie que si je fais une entrée en série via le symbole console + CR, select détecte une nouvelle entrée, sinon, si je fais une entrée via le simple script de python, il met en mémoire tampon tous les symboles et attend que je lui envoie le symbole carriage return. Donc avec cette entrée (donnée ci-dessous), il met simplement en mémoire tampon les symboles quelque part. J'ai deux PC connectés via un convertisseur USB2Sériel.
#!/usr/bin/env python3
import serial
cmd1_state = b'\x3E\x01\x00\x01'
#Selecting serial port for commands to be sent --> /dev/ttyUSB0
serial_0 = serial.Serial('/dev/ttyUSB2');
print("Using serial port ", serial_0.portstr);
serial_0.write(cmd1_state)
# closing serial port
serial_0.close()
Alors, quelqu'un peut-il me dire ce qu'il faut faire ici ? Dois-je changer quelque chose dans l'ouverture du port dans mon fichier C ou cela doit-il être fait avec python script ? J'ai utilisé la méthode flush() par la suite, mais cela n'a pas non plus aidé. BTW, j'ai googlé sur l'arg F_NOCACHE à la fonction fcntl(). MAIS ! il s'agit de BSD et Darwin OS's, il n'y a pas une telle chose (F_NOACHE arg to fcntl) dans Linux, pour autant que je puisse voir.
UPD : On dirait que j'ai trouvé la solution.
/* set input mode (non-canonical, no echo,...) */
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
newtio.c_cc[VMIN] = 1; /* blocking read until 1 char received */
tcflush(fd, TCIFLUSH);
Tiré de : http://tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html