PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ncurses mit ser. E/A ?



C-64
21-08-2003, 11:49
Hallo! Hier sind die nCurses-Profis angesprochen:

Ich habe im Moment zwei Applikationen,
die eine ist meine Textoberfläche, programmiert mit der ncurses-Bibl.,
die andere ist ein Datenhandler der zwei serielle Ports, und zwar STDIN und das ser. UART Gerät periodisch prüft und abfragt.

Wie kann ich ncurses mit meinem Code für die ser. Kommunikation laufen lassen? (ncurses handhabt die Schnittstellen implizit.) Kann ncurses dementsprechend parametriert werden?

Danke!
Ralf

C-64
21-08-2003, 13:13
Nachtrag ...

Wenn ich die Kontrolle über ein ser. Device übernehme, hängt sich das Terminal auf wenn ncurses dabei im Spiel ist.
...
/* Open device for read and write operations but without control capability */
fd_uart = open(pStringSerialDevice, O_RDWR | O_NOCTTY | O_NONBLOCK);
...
/* control flags */
/* baudrate, output hardware flow control, 8n1 (8 bits, no parity, */
/* 1 stopbit ), local connection, enable reciving characters */
termio1new.c_cflag = B19200 | CRTSCTS | CS8 | CLOCAL | CREAD;
/* input flags */
/* ignore bytes with parity error, map CR to NL hence CR terminate the IN */
termio1new.c_iflag = IGNPAR | ICRNL;
/* output flags */
/* raw output */
termio1new.c_oflag = 0;
/* local mode flags */
/* non-canonical and no echo */
termio1new.c_lflag = 0;
/* control characters */
/* timeout value for the satisfaction of the character read */
termio1new.c_cc[VTIME] = 0;
/* characters numbers before the blocking read is finished */
termio1new.c_cc[VMIN] = 1;

/* clean the buffer and activate the port settings */
tcflush(fd_uart, TCIFLUSH);
tcsetattr(fd_uart, TCSANOW, &termio1new);
...

Vielleicht kennt wer eine Lösung wie ich mit ncurses die Tastatur und die UART abfragen kann, ohne dabei zu blockieren (Bsp.: getch() etc.)
Denn mit ...
do {
arbeit();
halfdelay(1); /* wait a tenths of a second and return ERR if there is no user input */
}
while(getch() != KEY_ESCAPE);
...
blockiert die Tastatur-Abfrage mind. 1/10 sec (Nach diesem Countdown wird ERR eingelesen). Bei halfdelay(0) blockiert getch() bis eine Taste gedrückt wurde.

Ich bin für jede Antwort dankbar!
Ralf

C-64
21-08-2003, 15:35
Hi!

Die richtige Funktion ist nodelay(), die bewirkt das Bsp. getch() nicht blockiert (auch wenn keine Taste gedrückt wird kehrt die Funktion sofort zurück)

->
Wie kann ich unter ncurses die ser. Schnittstelle (ptty0) auf die gleiche Weise konfigurieren und anschließend abfragen? Im HOWTO steht von ser.IO rein gar nichts ...

Thx!
Ralf

arthur
22-08-2003, 15:52
Wie kann ich unter ncurses die ser. Schnittstelle (ptty0) auf die gleiche Weise konfigurieren und anschließend abfragen? Im HOWTO steht von ser.IO rein gar nichts ...

ncurses hat nichts mit der ser. schnittstelle zu tun:

The Curses library forms a wrapper over working with raw terminal codes, and provides highly flexible and efficient API (Application Programming Interface). It provides functions to move the cursor, create windows, produce colors, play with mouse etc.

gruss
Arthur

C-64
22-08-2003, 19:18
hi,

du meinst ncurses initialisiert nicht die serielle Schnittstelle des Systems? Daraus folgt dass ich die ser. Schn. parallel zu ncurses verwenden kann?

Seltsam dass der Versuch bei mir gescheitert ist ...

Danke!
Ralf