Wie kann ich asynchron über Änderungen der DTR und DSR Leitungen auf der seriellen Schnittstelle benachrichtigt werden. Bisher hab ich nur einen Weg gefunden den Status direkt abzufragen, das würde aber auf Pollen hinauslaufen. Klar kann man das Pollen in einen extra Thread auslagern, echte asynchrone Mitteilung wäre aber besser.
#include <unistd.h>
#include <termios.h>
void function()
{
int fd;
int status;
ioctl(fd, TIOCMGET, &status);
if (serial & TIOCM_DTR)
{
}
}
Nur so nebenbei: Das sieht sehr nach Java-Code aus. Wie bekommt man Java-Programmierer dazu, unter C++ nicht alles über Zeiger auf den Heap zu legen? Lege ich eine Instanz im Konstruktor an und lösche sie im Destruktor wieder, dann brauche ich sie nicht als Heap-Objekt anzulegen.
meine Güte, gibst denn nicht auf? Hier wird dir keiner helfen, Rootkit-Schreiben zu lernen.
Der 2-6.x Kernel hat einen speziellen Schutz des Bereichs, wo die Syscall-table sich befindet, damit sowas nicht geht. Findet dich damit aus.
mase schrieb:
So hat's funktioniert:
sprintf(modify_command, "%s \"%s\"", "modify-mp3.sh", ices_config.pm.get_next ());
Danke!
Das war doch genau Dein ursprünglicher Ansatz. Nur dass Du aus - mir unverständlichen Gründen - oben noch Leerzeichen dazwischengepackt hast.
Naja, Hauptsache, die Sache ist erledigt, hatte Deine Frage irgendwie falsch verstanden.
+fricky schrieb:
_________ schrieb:
Besonders schlecht scheint er aber auch nicht zu sein.
Sein Buch "C++ von A bis Z" hat bei Amazon 11 x 5 Sterne und 1 mal 4 Sterne.
sein ähnlich klingendes machwerk 'c von a bis z' wurde im hiesigen c-forum regelmässig zerrissen, wegen der viele fehler, die da drin sind.
es gibt das Gerücht, das buch soll aber angeblich die vielen Fehler der online Ausgabe beseitigt haben. Ob das stimmt, weiß ich nicht. Als wir uns vor langer Zeit beim Online-Ausgabe-Forum über die Fehler beschwert haben, hat ein Mod den Thread dicht gemacht.
also wenn du das mit select() machst dann wird das signalisiert und das kannst du abfangen - ich glaube es wird -1 oder 0 zurückgegeben. schau dir einfach mal die man-page von select() an.
blan
Hi,
der Parameter "| O_NDELAY" sorgt dafür, das der Aufruf sofort beendet wird,
wenn kein Zeichen vorhanden ist. Lasse diesen Parameter mal weg.
Schau mal hier, das könnte Dir helfen. Leider kämpfe ich derzeit auch mit einer RS232 Verbindung. Hier jedoch mit einem Handshake, wo mir Zeichen verloren gehen.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-240887.html
Deine Routine sollte damit aber zu bedienen sein.
Verwende die Init und tty_read() .
Gruss
Hallo Zusammen,
hat jemand Erfahrungen mit der Programmierung
einem seriellen USB Wandler (RS232->USB).
Bei mir gehen Zeichen verloren ...
Ursache sind die Termios Flag.
Derzeit fehlt mir nur noch das Steuerzeichen STX (0x2).
Dies wird derzeit nicht gesendet. Hier scheinen einige im Internet den Begriff der Raw Datenübertragung falsch zu verstehen. Raw bedeutet auch 0 und andere Steuerzeichen.
Hier meine derzeitige Termios Configuration:
/* save old flags */
old_flags = term_attr.c_lflag;
cfsetispeed(&term_attr, TERM_SPEED);
cfsetospeed(&term_attr, TERM_SPEED);
cfmakeraw(&term_attr);
term_attr.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON | IUCLC | INLCR| IXANY );
/* output modes - clear giving: no post processing such as NL to CR+NL */
term_attr.c_oflag &= ~(OPOST|OLCUC|ONLCR|OCRNL|ONLRET|OFDEL);
/* control modes - set 8 bit chars */
term_attr.c_cflag |= (CS8);
/* local modes - clear giving: echoing off, canonical off (no erase with
backspace, ^U,...), no extended functions, no signal chars (^Z,^C) */
term_attr.c_lflag &= ~(ECHO | ECHOE | ICANON | IEXTEN | ISIG);
term_attr.c_cflag |= CRTSCTS; // using flow control via CTS/RTS
Mit dieser Konfiguration werden keine Steuerzeichen, wie STX oder DLE mehr gefiltert. Hierbei wurde dem Programm immer eine 0 als Zeichen gegeben.
Der Aufruf cfmakeraw(&term_attr); ist nicht richtig. Habe mir aber nicht die
Mühe gemacht, welche Definition hinzugefügt werden müsste und habe alle laut Doc. welche mir in die Suppe spucken könnten in die Konfiguration aufgenommen.
Gruss