Question

Je joue avec une radio XBee, je suis sous Linux (Ubuntu 9.10) et le XBEE ne semble pas envoyer des valeurs NULL via le port série lorsque vous utilisez 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:

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 fait, mais mes théories sont évidemment faux. Je suis en train d'ouvrir le port 9600, 8N1, sans contrôle de flux. Vous pouvez voir que je suis aussi en utilisant le Série-> pilote USB, mais comme je ne semble obtenir des données, je suis sûr qu'une partie fonctionne.

Je suppose que je BZERO options, je fais un contrôle 0x00 omble chevalier? Je ne suis pas sûr. Quand je ne BZERO options que je ne peux lire 5 octets à la fois et je perdre des données. Il se sent comme je vais avoir un contrôle de flux ou d'un problème de vitesse de transmission, donc je BZERO () et maintenant je ne reçois pas les valeurs NULL.

J'ai aussi juste utilisé Minicom sur mon système Linux et capturé la sortie. Je reçois les mêmes informations, pas NULLs (ce salit vraiment la taille des paquets pour ceux qui ne connaissent pas le protocole). Mon code pourrait avoir mis le port série dans un état qui Minicom ne change pas? Je suis perdu.

Merci pour l'aide!

Était-ce utile?

La solution

L'initialisation du c_cflags semble erroné, en utilisant la négation vous définissez essentiellement binaire tous les bits à côté CRTSCTS:

options.c_cflag = ... | ~CRTSCTS | ...;

Vous devez juste laisser de côté CRTSCTS si ce drapeau ne doit pas être réglé.

Autres conseils

Digi a publié xbee_ansic_library , un Open Source (MPL 2.0) d'un code ANSI C pour communiquer avec XBee modules en mode API. Il prend en charge POSIX (Linux, BSD, Mac OS X, Cygwin), Windows (MinGW / MSYS), DOS (OpenWatcom) et certaines plates-formes embarquées.

Il pourrait être intéressant si vous écrivez encore du code C dans Ubuntu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top