Je joue avec une radio XBEE, j'utilise Linux (Ubuntu 9.10) et le XBEE ne semble pas envoyer de valeurs NULL via le port série lors de l'utilisation de mon code. Lorsque j'utilise le programme XCTU (émulateur de stock à long terme qui vient avec la XBEE sur une boîte de fenêtres séparées), je vois cette sortie via le port série lorsqu'une nouvelle XBEE rejoint le réseau:Le port série n'envoie pas de valeurs NULL
7E 00 20 95 00 13 A2 00 40 3B
etc ... parfait . Mais, en utilisant mon code, lorsqu'une nouvelle XBEE rejoint le réseau que je vois ceci:
7E 20 95 13 A2 40 3B
Voici comment j'ouvre le port série
struct termios options;
int port;
port = open("/dev/ttyUSB0", O_RDWR | O_NONBLOCK);
tcgetattr(port, &options);
bzero(&options, sizeof(options));
options.c_cflag = B9600 | ~CRTSCTS | CS8 | CLOCAL | CREAD;
tcsetattr(port, TCSANOW, &options);
J'ai mes théories sur ce que le code ne , mais mes théories sont évidemment fausses. J'essaye d'ouvrir le port avec 9600, 8N1, aucun contrôle de flux. Vous pouvez voir que j'utilise aussi le pilote serial-> USB, mais comme j'ai l'impression d'avoir des données, je suis sûr que cette partie fonctionne.
Ma conjecture est quand je bzero options, je fais 0x00 un char de contrôle? Je ne suis pas sûr. Quand je ne bosse pas, je ne peux lire que 5 octets à la fois et je perds des données. J'ai l'impression d'avoir un contrôle de flux ou un problème de débit en bauds, donc je bzero() et maintenant je n'ai plus de NULL.
J'ai aussi simplement utilisé Minicom sur mon système Linux et capturé la sortie. Je reçois la même information, pas de valeurs NULL (cela gâche vraiment les tailles de paquets pour ceux qui ne connaissent pas le protocole). Est-ce que mon code aurait pu mettre le port série dans un état que minicom ne change pas? Je suis perdu.
Merci pour l'aide!
Avez-vous effacé le tableau 'c_cc []'? Cela peut permettre aux nulls (et autres caractères de contrôle) d'être transmis. Avez-vous un port série intégré (non USB) que vous pouvez utiliser pour détecter le problème qui ne se trouve pas dans le pilote USB? –