Nur ist es egal ob ich an com1 oder com2 messe ich bekomme keine Pegeländerung auf den Pins
Ich habe auch mal mir auf dem allgemein kursierenden Schaltplan der Nokia geschaut
Dort sind z.B vom MPC823 PC4,PC15,PC16,PC17,PC18,PC19,PC22,PC23,PA9,PA8,PA7 zum Modemport verdrahtet. Also müsste die Hardware alle Signale einer Schnittstelle zur verfügung stellen
DCD,RXD,TXD,DTR,GND,DSR,RTS,CTS,RI
Sind die Treiber dafür ausgelegt weiss das jemand ?
Was mir auch noch aufgefallen ist das die Beschreibung des Modemports im Wiki falsch ist.
http://wiki.tuxbox-cvs.sourceforge.net/ ... re#Nokia_2
so sollte es eigentlich sein
19 17 15 13 11 10 9 7 5 3 1
* * * * * * * * * *
---> dbox Frontblende
* * * * * * * * * *
20 18 16 14 12 10 8 6 4 2
laut schaltplan ist an PIN 14 +5Volt und an 1 und 19 GND das macht dann die Sache eindeutig
rs232test
Code: Alles auswählen
#include <fcntl.h>
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <termios.h>
#include <errno.h>
// ----------------------------------------------------------------------------
int main (int argc, char** argv) {
int fd,result;
/* Parameterprüfung: Das zu verwendende Device muss */
/* als erster Parameter angegeben werden. */
if(argc != 2)
{
printf("error: Ungültige Parameter-Anzahl.\n");
printf("call: %s <device>\n",argv[0]);
printf("examble ---> %s /dev/tty/0\n",argv[0]);
return 1;
}
printf("\n\n\nstarting RS232 test\n");
// open com port
// if((fd=open("/dev/ttyUSB0",O_RDWR | O_NOCTTY|O_NONBLOCK )) <= 0) {
if((fd=open(argv[1],O_RDWR | O_NOCTTY|O_NONBLOCK )) <= 0) {
int err = errno;
printf("ERROR: open rs232 port: %s\n", strerror(err));
return(-1);
}
// ausgaenge steuern:
ioctl( fd, TIOCSBRK, NULL ); // TXD = high
ioctl( fd, TIOCCBRK, NULL ); // TXD = low
int j;
j = 0;
j |= TIOCM_RTS; // RTS = high
j |= TIOCM_DTR; // DTR = high
ioctl( fd, TIOCMBIS, &j );
usleep(300000);
j = 0;
j |= TIOCM_RTS; // RTS = low
j |= TIOCM_DTR; // DTR = low
ioctl( fd, TIOCMBIC, &j );
int abfrage;
do{
// Auswahlmenü
printf("<1> RTS on\n");
printf("<2> RTS off\n");
printf("<3> DTR on\n");
printf("<4> DTR off\n");
printf("<5> read inputs\n");
printf("<0> Ende\n\n");
printf("your choice please : ");
scanf("%d",&abfrage);
fflush(stdin);
printf ("\33[2J");/*löscht den Bildschirm*/
switch(abfrage)
{
case 1 :
{
j = 0;
j |= TIOCM_RTS; // RTS = high
ioctl( fd, TIOCMBIS, &j );
break;
}
case 2 :
{
j = 0;
j |= TIOCM_RTS; // RTS = low1
ioctl( fd, TIOCMBIC, &j );
break;
}
case 3 :
{
j = 0;
j |= TIOCM_DTR; // DTR = high
ioctl( fd, TIOCMBIS, &j );
break;
}
case 4 :
{
j = 0;
j |= TIOCM_DTR; // DTR = low
ioctl( fd, TIOCMBIC, &j );
break;
}
case 5 :
{
// eingaenge lesen:
printf("\n****************\n");
printf("reading inputs\n");
//int i;
ioctl( fd, TIOCMGET, &j );
if ( (j&TIOCM_CD )==TIOCM_CD ) // wenn CD = high
printf("CD = high\n");
else
printf("CD = low\n");
if ( (j&TIOCM_DSR)==TIOCM_DSR ) // wenn DSR = high
printf("DSR = high\n");
else
printf("DSR = low\n");
if ( (j&TIOCM_CTS)==TIOCM_CTS ) // wenn CTS = high
printf("CTS = high\n");
else
printf("CTS = low\n");
if ( (j&TIOCM_RI )==TIOCM_RI ) // wenn RI = high
printf("RI = high\n");
else
printf("RI = low\n");
printf("****************\n\n\n\n\n");
break;
}
default :
if (abfrage == 0)
printf("Bye !!!\n");
else
printf("wrong input !!!\n\n\n\n");
}
}while(abfrage != 0);
close( fd );
return(0);
}
Also irgendwas stimmt da nicht.
Vielleicht hat jemand ja eine Idee
Martin