Voici une partie de mon code. Je vais expliquer le problème juste après. Mon périphérique envoie des chaînes de 13 octets sur le port série. Malheureusement, seuls les deux premiers octets sont lus correctement. Peut-être cela est parce que deux premiers octets peuvent être interprétés comme des caractères ASCII, ce serait étrange parce que je mets le codage comme NULL avec la fonction g_io_channel_set_encoding(koncentrator, NULL, NULL);
GIOChannel parfois il lit parfois pas
Si je tente d'accéder les octets après deux premiers je reçois Segmentation fault
, qui est aussi étrange parce que la variable ret
après lecture contient 13
ce qui signifie qu'il avait lu 13 octets.
J'ai essayé d'utiliser g_io_channel_read_line
et g_io_channel_read_to_end
. Avec ces deux le programme bloque à boucle infinie (même quand je vérifie la condition G_IO_STATUS_EOF
).
Le dernier problème, et peut-être le plus ennuyeux est qu'il ne fonctionne pas à la première fois, j'ai besoin d'ouvrir le port série avec le terminal, comme cutecom
par exemple. Sinon, je peux envoyer les données mais il ne détecte aucun rappel. Je suis sûr de lui parce que l'appareil a des diodes pour indiquer les états RX
et TX
.
Je n'ai aucune idée de ce qui ne va pas, je serai très formidable pour me donner quelques conseils ou liens vers l'exemple approprié. Je me sens comme il n'y a rien de plus sur google que je pourrais trouver. Merci, bravo!
Merci beaucoup. Cela marche. Je voudrais aussi demander comment le rendre pernament, devrais-je l'ajouter au script boot rc pour qu'il l'exécute après chaque démarrage? – Marek
@Marek Oui, par ex. vous pouvez utiliser '/ etc/rc.local'. Une meilleure approche serait de lancer l'appel 'stty' au début de votre programme, via' g_spawn_command_line_sync() 'par exemple.La meilleure solution serait d'appeler directement les API 'termios' pour obtenir la même configuration, mais cela impliquerait beaucoup plus de travail. – fetasail