Frage

Ich spiele mit einem XBEE Radio, ich bin mit Linux (Ubuntu 9.10) und der XBEE erscheint nicht NULL-Werte über die serielle Schnittstelle zu senden, wenn MY-Code. Als ich das XCTU Programm (Aktien Begriff Emulator, der auf einem separaten Fenster Box mit dem XBEE kommt) verwenden, sehe ich diese Ausgabe über die serielle Schnittstelle, wenn ein neues XBEE dem Netzwerk beitritt:

7E 00 20 95 00 13 A2 00 40 3B

etc ... perfekt. Aber, meinen Code, wenn ein neues XBEE das Netzwerk beitritt Ich sehe dies:

7E 20 95 13 A2 40 3B

Hier ist, wie ich die serielle Schnittstelle Öffnen

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);

Ich habe meine Theorien darüber, was dieser Code tut, aber meine Theorien sind offensichtlich falsch. Ich versuche, den Port mit 9600, 8N1, keine Flusssteuerung zu öffnen. Sie können sehen, ich bin auch die Serien-> USB-Treiber verwenden, aber da ich scheine Daten Ich bin ziemlich sicher zu bekommen, dass ein Teil funktioniert.

Meine Vermutung ist, wenn ich bzero Optionen, ich bin 0x00 ein Steuer char machen? Ich bin mir nicht sicher. Wenn ich bzero Optionen nicht, kann ich lesen nur 5 Byte zu einem Zeitpunkt, und ich Daten verloren gehen. Es fühlt sich an wie ich bin eine Flusssteuerung oder ein Baudrate Problem mit, so dass ich bzero () und jetzt ich nicht NULL-Werte erhalten.

Ich habe auch nur verwendet Minicom auf meinem Linux-System und die Ausgabe erfaßt. Ich erhalte die gleichen Informationen, keine NULL-Werte (das wirklich mit dem Protokoll nicht vertraut diejenigen vermasselt Paketgrößen für). Könnte mein Code die serielle Schnittstelle in einen Zustand haben festgelegt, dass Minicom ist nicht zu ändern? Ich bin verloren.

Danke für die Hilfe!

War es hilfreich?

Lösung

Die Initialisierung des c_cflags falsch aussieht, durch bitweise Negation verwenden Sie im Grunde gesetzt alle die Bits neben CRTSCTS:

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

Sie sollten nur auslassen CRTSCTS wenn das Flag nicht gesetzt sein sollte.

Andere Tipps

Digi wurde veröffentlicht xbee_ansic_library , eine Open Source (MPL 2.0) Bibliothek von ANSI-C-Code für die Kommunikation mit XBee-Module im API-Modus. Es unterstützt POSIX (Linux, BSD, Mac OS X, Cygwin), Windows (MinGW / MSYS), DOS (OpenWatcom) und einige Embedded-Plattformen.

Es könnte von Interesse sein, wenn Sie immer noch C-Code in Ubuntu zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top