dev/tts/1

Sklaventreiber
felixka
Interessierter
Interessierter
Beiträge: 26
Registriert: Sonntag 5. Januar 2003, 00:47

dev/tts/1

Beitrag von felixka »

Fange gerade an mich mit c zu beschäftigen und habe ein kleines Testprog geschrieben :oops: , das mir das MSR Register der UART_1 auslesen und anzeigen soll.
Kompilieren funktionierte und das binary läuft auch.
Aber in der Ausgabe erscheint immer "CTS, DSR, CAR, RI inaktiv", obwohl ich die entsprechenden Eingänge wechselweise auf hi..low lege.

Jemand ne Idee, wo der Fehler liegt?

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <sys/socket.h>
#include <unistd.h>
#include <termios.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#define _POSIX_SOURCE 1 /* POSIX compliant source */
#define FALSE 0
#define TRUE 1
		
int main()
{
int port;
int i;

//open device tts/1
port = open("/dev/tts/1", O_RDWR | O_NOCTTY );
if (port <0) {printf("error open dev/tts/1\n"); exit(-1); }

// CTS AUSLESEN
//*****************	

ioctl( port, TIOCMGET, &i );
if (i & TIOCM_CTS) // Pin CTS
{
  fprintf(stderr, "read CTS active...\n");
}
else
{
    fprintf(stderr, "read CTS inactive...\n");
}

// CAR AUSLESEN
//*****************	

//ioctl( port, TIOCMGET, &i );


if (i & TIOCM_CAR) // Pin CAR
{
 
 fprintf(stderr, "read CAR active...\n");
}
else
{
    fprintf(stderr, "read CAR inactive...\n");
}

// DSR AUSLESEN
//*****************	

//ioctl( port, TIOCMGET, &i );
if (i & TIOCM_DSR) // Pin DSR
{
  fprintf(stderr, "read DSR active...\n");
}
else
{
    fprintf(stderr, "read DSR inactive...\n");
}

// RI AUSLESEN
//*****************	

//ioctl( port, TIOCMGET, &i );


if (i & TIOCM_RNG) // Pin RI
{
 
 fprintf(stderr, "read RI active...\n");
}
else
{
    fprintf(stderr, "read RI inactive...\n");
}


fprintf(stderr, "fertig...bye...\n");

//close devices
 
close(port);	
return 0;
 
}
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: dev/tts/1

Beitrag von seife »

auf welcher Hardwareplattform und mit welchem System?

Wenn du "gerade anfängst, dich mit C zu beschäftigen" würde ich nicht unbedingt mit relativ Hardwarenahen Sachen anfangen :-)
felixka
Interessierter
Interessierter
Beiträge: 26
Registriert: Sonntag 5. Januar 2003, 00:47

Re: dev/tts/1

Beitrag von felixka »

seife hat geschrieben:auf welcher Hardwareplattform und mit welchem System?

Wenn du "gerade anfängst, dich mit C zu beschäftigen" würde ich nicht unbedingt mit relativ Hardwarenahen Sachen anfangen :-)
Nokia Dbox2 mit Neutrino
Deine Empfehlung ist schon richtig, aber ich komme von der Hardware Seite und hab deshalb auch an diesen Hardwarenahen Sache besonders Interesse.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: dev/tts/1

Beitrag von rhabarber1848 »

felixka hat geschrieben:Nokia Dbox2 mit Neutrino
Kernel 2.4 oder 2.6?
felixka
Interessierter
Interessierter
Beiträge: 26
Registriert: Sonntag 5. Januar 2003, 00:47

Re: dev/tts/1

Beitrag von felixka »

2.4
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: dev/tts/1

Beitrag von seife »

Dann würde ich zuerst mal den Rückgabewert vom ioctl() überprüfen. Wenn da irgendwas < 0 zurückkommt, dann hat das weitermachen schon keinen Sinn mehr.
In diesem Fall musst du im Kernel-Code mal nachschauen, wie dein Fehler auftreten kann und dann überlegen, wie du das abstellen kannst.
felixka
Interessierter
Interessierter
Beiträge: 26
Registriert: Sonntag 5. Januar 2003, 00:47

Re: dev/tts/1

Beitrag von felixka »

gut, danke, dann probier ich das mal. Im Kernel Code nachschauen wird aber nichts bei meinen Kenntnissen :oops:

Kann sein dass ich als device ttyS1 nehmen muß?
felixka
Interessierter
Interessierter
Beiträge: 26
Registriert: Sonntag 5. Januar 2003, 00:47

Re: dev/tts/1

Beitrag von felixka »

seife hat geschrieben:Dann würde ich zuerst mal den Rückgabewert vom ioctl() überprüfen. Wenn da irgendwas < 0 zurückkommt, dann hat das weitermachen schon keinen Sinn mehr.

Code: Alles auswählen

flags = ioctl( port, TIOCMGET, &i );
if (flags <0) {printf("error ioctl\n"); exit(-1); }
Der Rückgabewert vom ioctl() ist in Ordnung...
Ich frag mich, wie das org Modem mit den Handshakes umgegangen ist.

dev/ttyS1 war natürlich Käse....
felixka
Interessierter
Interessierter
Beiträge: 26
Registriert: Sonntag 5. Januar 2003, 00:47

Re: dev/tts/1

Beitrag von felixka »

So, ich hab noch nicht aufgegeben und nun /dev/tts/0 getestet (DB9 Con auf der Rückseite).
Da kommt man besser dran und weiß genau, wo die Signale liegen.
Leider das gleiche Spiel:
In der Ausgabe erscheint immer "CTS, DSR, CAR, RI inaktiv", obwohl ich die entsprechenden Eingänge wechselweise auf hi..low lege.

Jetzt hab ich in einer Source einen Hinweis gefunden, dass man die seriellen der dbox2 nicht wie die unter standard Linux bearbeiten kann:
warum eigentlich nicht?? :gruebel:

Code: Alles auswählen

/*
#define RTYP_DB2COM1	3
#define RTYP_DB2COM2	4

#define GET_PCDAT	10
#define GET_PADAT	11
#define GET_PCDIR	12
#define SET_PCDAT	13
#define SET_PADAT	14
#define SET_PCDIR	15
  
#if defined(TUXBOX) && defined(PPC)
extern void IO_Serial_Ioctl_Lock(IO_Serial *, int);
#else
#define IO_Serial_Ioctl_Lock(a, b) {}
#endif

*/

#if defined(LINUX)

	{
		
		if (ioctl(ifd->io->fd, TIOCMGET,&modembits)<0)
		{
			return IO_ERROR;
		}
			cts=(modembits & TIOCM_CTS);	
		
	}
#endif

#if defined(TUXBOX) && defined(PPC)
	if ((ifd->io->com==RTYP_DB2COM1) || (ifd->io->com==RTYP_DB2COM2))
	{
		ushort msr=1;
		extern int fdm;
		IO_Serial_Ioctl_Lock(ifd->io, 1);
		ioctl(fdm, GET_PCDAT, &msr);
		if (ifd->io->com==RTYP_DB2COM2)
			cts=(!(msr & 1));
		else
			cts=((msr & 0x0f00) == 0x0f00);
		IO_Serial_Ioctl_Lock(ifd->io, 0);
	}
	
#endif	
Was unter standard Linux gemacht wird verstehe ich...so hab ichs ja gemacht.
Aber was unter tuxbox ppc abgeht ist mir zu hoch...da bräuchte ich Hilfe von tuxbox c-coder
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: dev/tts/1

Beitrag von Houdini »

sieht so aus als ob das CTS signal am PortC des uC anliegt.
felixka
Interessierter
Interessierter
Beiträge: 26
Registriert: Sonntag 5. Januar 2003, 00:47

Re: dev/tts/1

Beitrag von felixka »

Houdini hat geschrieben:sieht so aus als ob das CTS signal am PortC des uC anliegt.
danke für den Hinweis. Das sieht wirklich so aus...Laut Schaltplan geht cts an Ball PC10 des ppc 823. Das würde bedeuten, dass der ppc die Handshake signale der UART nicht rausgebondet hat? Oder dass sie in der SW nicht konfiguriert sind.
Wie kann ich den Port nun per c auslesen?
felixka
Interessierter
Interessierter
Beiträge: 26
Registriert: Sonntag 5. Januar 2003, 00:47

Re: dev/tts/1

Beitrag von felixka »

falls es jemand interessiert.
Die Handshakes der beiden Serials liegen wirklich auf PortC

Code: Alles auswählen

ioctl(fdm, GET_PCDAT, &msr);
cts_1 =(!(msr & 1)); //dev/tts/1
cts_0 =((msr & 0x0f00) == 0x0f00); //dev/tts/0
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Re: dev/tts/1

Beitrag von mb405 »

ahh hab den thread grad entdeckt.
bedeutet, das man mit dem unnutzen internen modemport irgendwas anfangen kann ??
felixka
Interessierter
Interessierter
Beiträge: 26
Registriert: Sonntag 5. Januar 2003, 00:47

Re: dev/tts/1

Beitrag von felixka »

mb405 hat geschrieben:ahh hab den thread grad entdeckt.
bedeutet, das man mit dem unnutzen internen modemport irgendwas anfangen kann ??
Man kann jedenfalls die Pins setzen und zurücksetzten...
flasher
Developer
Beiträge: 467
Registriert: Dienstag 15. Juli 2003, 10:58

Re: dev/tts/1

Beitrag von flasher »

Hi

Man kann da auch ein externes Modem dran hauen.
derget hatte das 2001 mal beschrieben
http://www.noernet.de/dbox2/modem/

Interessant wäre es zu wissen wie die "C64" Platine verdrahtet ist und man hat einen echten COM1 (/dev/tts/0)...
Das wäre u.a. interessant für RS232 Displays. Da braucht man nicht von draussen wieder rein oder am vorhandenen COM2 Stecker zu löten.

Gruß
Fridolin
Interessierter
Interessierter
Beiträge: 23
Registriert: Montag 7. August 2006, 02:23

Re: dev/tts/1

Beitrag von Fridolin »

flasher hat geschrieben:Man kann da auch ein externes Modem dran hauen.
derget hatte das 2001 mal beschrieben
http://www.noernet.de/dbox2/modem/

Interessant wäre es zu wissen wie die "C64" Platine verdrahtet ist und man hat einen echten COM1 (/dev/tts/0)...
Zunächst mal sollte man keinen MAX232 verwenden, wenn die Schnittstelle der dbox mit 3,3V-Pegeln arbeitet. In diesem Fall ist ein MAX3232 der richtige Wandler, und die Beschaltung beschränkt sich auf den Anschluß von 4 Kondensatoren.

Das Datenblatt gibt es hier.


Fridolin
flasher
Developer
Beiträge: 467
Registriert: Dienstag 15. Juli 2003, 10:58

Re: dev/tts/1

Beitrag von flasher »

Fridolin hat geschrieben: Zunächst mal sollte man keinen MAX232 verwenden, wenn die Schnittstelle der dbox mit 3,3V-Pegeln arbeitet. In diesem Fall ist ein MAX3232 der richtige Wandler
Das mag sein. Ich bin kein Elektroniker.
War ja auch nur ein Hinweis darauf, das man einen echten COM1 bauen könnte.
z.B. für ein zusätzliches RS232 Display oder so.

Gruß